var iframe = $('#content-iframe'); var iframeWindow = iframe[0].contentWindow || iframe[0].contentDocument; /* *API ye gönderilecek init array ve placementScore */ var scormState = { initArray: {}, placementScore: {}, pageName: '', }; $(function () { iframe.load(function () { document.oncontextmenu = function(){return false;}; if (bfb9qc != null) { init = bfb9qc.initArray; //* API'den gelen ScormState verisi içerisindeki placementScore placementScore = bfb9qc.placementScore; } else { init = {}; init.i = 1; //Şuan ki sayfa init.page = 12; // Seviyenin sayfa sayısı init.breakPage = 8; // Seviyenin hangi sayfasında yüzdelik düşükse direk testi bitir init.level = 1; init.endLevel = 6; // Son level init.score = 0; // Sayfa skoru init.maxScore = 0; // En yüksek skor init.percent = 70; // Seviye yüzdesi - kullanılmıyor init.pageScore = 0; init.pageMaxScore = 0; init.pageStartTime = _getTimezoneOffset(); init.levelStartTime = _getTimezoneOffset(); init.vocabulary = 0; init.grammar = 0; init.meaning = 0; init.listening = 0; init.vocabularyCount = 0; init.grammarCount = 0; init.meaningCount = 0; init.listeningCount = 0; placementScore = {}; placementScore.levelsAndpercents = []; placementScore.pagesAndpercents = []; placementScore.currentPage = ''; } function _getTimezoneOffset () { var tzoffset = new Date().getTimezoneOffset() * 60000; //offset in milliseconds var localISOTime = new Date(Date.now() - tzoffset) .toISOString() .slice(0, -5); return localISOTime; } iframeWindow.player.onPageLoaded(function () { //resizer page _icplayer = iframe.contents().find('#_icplayer'); _ipW = _icplayer.width(); _ipH = _icplayer.height(); _frame = $('.assignmentCover').width(); _rate = iframe.width(_ipW).height(_ipH); $('#content-iframe').width(1030); $('#content-iframe').height(1400); var ps = iframeWindow.player.getPlayerServices(); var model = ps.getPresentation(); var scoreService = ps.getScore(); var pageIndex = ps.getCurrentPageIndex(); var page = model.getPage(pageIndex); var pageId = page.getId(); var cmd = ps.getCommands(); var cIframe, nextBtn, backBtn; cIframe = document.getElementById('content-iframe'); nextBtn = cIframe.contentDocument.getElementById('Next'); backBtn = cIframe.contentDocument.getElementById('Back'); var activeButton = nextBtn || backBtn; if (activeButton) { activeButton.addEventListener('click', function () { if (activeButton.id == 'Next') { controls('normal'); } else { controls('extra'); } }); } function getLevel (levelId, valueType) { var levels = [ { id: 1, level: 'A1', score: 70, }, { id: 2, level: 'A2', score: 70, }, { id: 3, level: 'B1', score: 80, }, { id: 4, level: 'B2', score: 100, }, { id: 5, level: 'C1', score: 100, }, { id: 6, level: 'C2', score: 100, }, ]; var result = $.grep(levels, function (e) { return e.id == levelId; }); if (valueType == 'level') return result[0].level; else return result[0].score; } function getPageTypes (level, page, valueType) { var queryType; var voc = 'Vocabulary'; var gra = 'Grammar'; var mic = 'Meaning in Context'; var lis = 'Listening'; //////////////////////////////////////////////////////////////////////// //Her seviye için; // //Sayfa numarası(page)(int), // //Soru tipi(queryType)(string) ve // //Bu sayfanın alternatif sayfası(ext)(bool) var mı? // //Seçeneklerini dolduruyoruz // //--------------------------------------------------------------------// //valueType parametresine gönderdiğimiz değere göre, // //Bize iki tip veri döndürüyor; // //1. Gelen değer "queryType" ise bize soru tipini // //2. Gelen değer "ext" ise bize alternatif sayfası olup olmadığını // //////////////////////////////////////////////////////////////////////// var levelsAndQueryTypes = [ { A1: [ { page: 1, queryType: voc, ext: true, }, { page: 2, queryType: voc, ext: true, }, { page: 3, queryType: gra, ext: true, }, { page: 4, queryType: gra, ext: true, }, { page: 5, queryType: gra, ext: true, }, { page: 6, queryType: mic, ext: true, }, { page: 7, queryType: lis, ext: true, }, { page: 8, queryType: voc, ext: true, }, { page: 9, queryType: voc, ext: true, }, { page: 10, queryType: voc, ext: true, }, { page: 11, queryType: mic, ext: true, }, { page: 12, queryType: lis, ext: true, }, ], A2: [ { page: 1, queryType: gra, ext: true, }, { page: 2, queryType: voc, ext: true, }, { page: 3, queryType: mic, ext: true, }, { page: 4, queryType: gra, ext: true, }, { page: 5, queryType: gra, ext: true, }, { page: 6, queryType: mic, ext: true, }, { page: 7, queryType: lis, ext: true, }, { page: 8, queryType: mic, ext: true, }, { page: 9, queryType: gra, ext: true, }, { page: 10, queryType: gra, ext: true, }, { page: 11, queryType: mic, ext: true, }, { page: 12, queryType: mic, ext: true, }, ], B1: [ { page: 1, queryType: voc, ext: true, }, { page: 2, queryType: gra, ext: true, }, { page: 3, queryType: mic, ext: true, }, { page: 4, queryType: voc, ext: true, }, { page: 5, queryType: lis, ext: true, }, { page: 6, queryType: mic, ext: true, }, { page: 7, queryType: gra, ext: true, }, { page: 8, queryType: voc, ext: true, }, { page: 9, queryType: gra, ext: true, }, { page: 10, queryType: gra, ext: true, }, { page: 11, queryType: mic, ext: true, }, { page: 12, queryType: voc, ext: true, }, ], B2: [ { page: 1, queryType: lis, ext: true, }, { page: 2, queryType: gra, ext: true, }, { page: 3, queryType: gra, ext: true, }, { page: 4, queryType: voc, ext: true, }, { page: 5, queryType: gra, ext: true, }, { page: 6, queryType: gra, ext: true, }, { page: 7, queryType: voc, ext: true, }, { page: 8, queryType: mic, ext: true, }, { page: 9, queryType: mic, ext: true, }, { page: 10, queryType: gra, ext: true, }, { page: 11, queryType: mic, ext: true, }, { page: 12, queryType: gra, ext: true, }, ], C1: [ { page: 1, queryType: voc, ext: false, }, { page: 2, queryType: gra, ext: false, }, { page: 3, queryType: mic, ext: false, }, { page: 4, queryType: mic, ext: false, }, { page: 5, queryType: lis, ext: false, }, { page: 6, queryType: mic, ext: false, }, { page: 7, queryType: mic, ext: false, }, { page: 8, queryType: mic, ext: false, }, { page: 9, queryType: mic, ext: false, }, { page: 10, queryType: mic, ext: false, }, { page: 11, queryType: voc, ext: false, }, { page: 12, queryType: voc, ext: false, }, ], C2: [ { page: 1, queryType: gra, ext: false, }, { page: 2, queryType: gra, ext: false, }, { page: 3, queryType: voc, ext: false, }, { page: 4, queryType: mic, ext: false, }, { page: 5, queryType: mic, ext: false, }, { page: 6, queryType: mic, ext: false, }, { page: 7, queryType: lis, ext: false, }, { page: 8, queryType: voc, ext: false, }, { page: 9, queryType: voc, ext: false, }, { page: 10, queryType: gra, ext: false, }, { page: 11, queryType: mic, ext: false, }, { page: 12, queryType: voc, ext: false, }, ], }, ]; var pages = levelsAndQueryTypes[0][level]; var result = $.grep(pages, function (e) { return e.page == page; }); queryType = result[0].queryType; if (valueType == 'queryType') return queryType; else return result[0].ext; } function lastPageScore () { var _grammar = init.grammar / init.grammarCount; var _vocabulary = init.vocabulary / init.vocabularyCount; var _meaning = init.meaning / init.meaningCount; var _listening = init.listening / init.listeningCount; // var _success = Math.floor((init.score / init.maxScore) * 100); var _success = (_grammar + _vocabulary + _meaning + _listening) / 4; var _levelSuccess = getLevel(init.level, 'score'); if (_success >= _levelSuccess) { //Başarı belli yüzdenin üstündeyse var lvl = getLevel(init.level, 'level'); var _grammar = init.grammar / init.grammarCount; var _vocabulary = init.vocabulary / init.vocabularyCount; var _meaning = init.meaning / init.meaningCount; var _listening = init.listening / init.listeningCount; var _percent = { level: lvl, success: _success, pages: placementScore.pagesAndpercents, start: init.pageStartTime, Vocabulary: _vocabulary, Grammar: _grammar, Meaning: _meaning, Listening: _listening, start: init.levelStartTime, end: _getTimezoneOffset(), }; placementScore.levelsAndpercents.push(_percent); placementScore.pagesAndpercents = []; init.level++; init.i = 1; init.score = 0; init.maxScore = 0; init.meaning = 0; init.grammar = 0; init.vocabulary = 0; init.listening = 0; init.meaningCount = 0; init.grammarCount = 0; init.vocabularyCount = 0; init.listeningCount = 0; scormPageName = 'Page ' + init.level + '_1'; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); init.levelStartTime = _getTimezoneOffset(); } else { var lvl = getLevel(init.level, 'level'); var _grammar = init.grammar / init.grammarCount; var _vocabulary = init.vocabulary / init.vocabularyCount; var _meaning = init.meaning / init.meaningCount; var _listening = init.listening / init.listeningCount; var _percent = { level: lvl, success: _success, pages: placementScore.pagesAndpercents, start: init.pageStartTime, Vocabulary: _vocabulary, Grammar: _grammar, Meaning: _meaning, Listening: _listening, start: init.levelStartTime, end: _getTimezoneOffset(), }; init.meaning = 0; init.grammar = 0; init.vocabulary = 0; init.listening = 0; init.meaningCount = 0; init.grammarCount = 0; init.vocabularyCount = 0; init.listeningCount = 0; placementScore.levelsAndpercents.push(_percent); placementScore.pagesAndpercents = []; placementScore.currentPage = 'EndTest'; scormPageName = 'EndTest'; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); init.levelStartTime = _getTimezoneOffset(); } } function endPage () { // var _success = Math.floor((init.score / init.maxScore) * 100); var _grammar = init.grammar / init.grammarCount; var _vocabulary = init.vocabulary / init.vocabularyCount; var _meaning = init.meaning / init.meaningCount; var _listening = init.listening / init.listeningCount; var _success = (_grammar + _vocabulary + _meaning + _listening) / 4; var _percent = { level: getLevel(init.level, 'level'), success: _success, pages: placementScore.pagesAndpercents, start: init.pageStartTime, Vocabulary: _vocabulary, Grammar: _grammar, Meaning: _meaning, Listening: _listening, end: _getTimezoneOffset(), }; placementScore.levelsAndpercents.push(_percent); init.meaning = 0; init.grammar = 0; init.vocabulary = 0; init.listening = 0; init.meaningCount = 0; init.grammarCount = 0; init.vocabularyCount = 0; init.listeningCount = 0; placementScore.currentPage = 'EndTest'; placementScore.pagesAndpercents = []; scormPageName = 'EndTest'; scormPageName = 'EndTest'; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); } function controls (pageType) { var pageScore = scoreService.getPageScoreById(pageId); var extPage = pageType == 'extra' ? true : false; init.score += pageScore.score; init.maxScore += pageScore.maxScore; var _pageSuccess = Math.floor( pageScore.score / pageScore.maxScore * 100 ); var lvl = getLevel(init.level, 'level'); var queryType = getPageTypes(lvl, init.i, 'queryType'); var goToExtPage = getPageTypes(lvl, init.i, 'ext'); var _percentPage = { level: lvl, page: init.i, success: _pageSuccess, queryType: queryType, start: init.pageStartTime, end: _getTimezoneOffset(), }; if (queryType == 'Vocabulary') { init.vocabularyCount++; init.vocabulary += _pageSuccess; } else if (queryType == 'Grammar') { init.grammarCount++; init.grammar += _pageSuccess; } else if (queryType == 'Meaning in Context') { init.meaningCount++; init.meaning += _pageSuccess; } else if (queryType == 'Listening') { init.listeningCount++; init.listening += _pageSuccess; } placementScore.pagesAndpercents.push(_percentPage); let scormPageName; if (init.level == init.endLevel && init.i == 12) { // Eğer son seviyenin son sayfasındaysak if (_pageSuccess <= 50) { // Sayfa başarısı %50 altındaysa if (!extPage && goToExtPage) { scormPageName = 'Page ' + init.level + '_' + init.i + ' Ext'; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); // Ekstra sayfaya git init.pageStartTime = _getTimezoneOffset(); } else { endPage(); } } else { endPage(); } } else if (init.page <= init.i) { if (_pageSuccess <= 50) { // Sayfa başarısı %50 altındaysa if (!extPage && goToExtPage) { scormPageName = 'Page ' + init.level + '_' + init.i + ' Ext'; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); } else { lastPageScore(); } } else { lastPageScore(); } } else { // Seviyenin son sayfasındaysak var _pageSuccess = Math.floor( pageScore.score / pageScore.maxScore * 100 ); if (_pageSuccess <= 50 && !extPage && goToExtPage) { scormPageName = 'Page ' + init.level + '_' + init.i + ' Ext'; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); } else { /*if(init.breakPage == init.i && (extPage || !goToExtPage)){*/ if (init.breakPage == init.i) { var _success = Math.floor(init.score / init.maxScore * 100); var _levelSuccess = getLevel(init.level, 'score'); if (_success < _levelSuccess) { lastPageScore(); } else { init.i++; scormPageName = 'Page ' + init.level + '_' + init.i; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); } } else { init.i++; scormPageName = 'Page ' + init.level + '_' + init.i; scormState.pageName = scormPageName; cmd.gotoPage(scormPageName); init.pageStartTime = _getTimezoneOffset(); } } } //* Sayfa geçişinden sonra aldığın placementScore ve init objesini api ye gönder scormState.initArray = init; scormState.placementScore = placementScore; if (placementScore.currentPage == 'EndTest') { var data = { username: $("#login-username").val(), placementScore: placementScore.levelsAndpercents, } fetch('https://report-placement-api.appspot.com/api/student/setQuiz', { method: 'POST', // or 'PUT' headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data), }).then(res => res.json()) .then(data => { console.log('data', data); }).catch(err => { console.log('err', err); }); setPlacementScore(placementScore.levelsAndpercents); // $('.submit-box').show(); } } }); loadControl = true; }); });