1(function() { 2 'use strict'; 3 4 angular 5 .module('irk') 6 .controller('ElementyTestuController', ElementyTestuController); 7 8 function ElementyTestuController($http, $scope, $rootScope, i18n, toaster, 9 SIDEBAR_MENU_EVENTS, PYTANIA_DODATKOWE_EVENTS, TEST_EVENTS, Session) { 10 11 $scope.idSzablonuTestu = null; 12 $scope.elementy = null; 13 $scope.kryteriumElementuZaleznegoMap = {}; 14 $scope.zapiszCalosc = false; 15 var zmodyfikowanePytania = {}; 16 17 $scope.init = function(idSzablonuTestu, elementy, idElementowZaleznych, zapiszCalosc) { 18 $scope.kryteriumElementuZaleznegoMap = getKryteriumElementuZaleznegoMap(idElementowZaleznych); 19 $scope.idSzablonuTestu = idSzablonuTestu; 20 $scope.elementy = elementy; 21 $scope.zapiszCalosc = zapiszCalosc; 22 } 23 24 var getKryteriumElementuZaleznegoMap = function(idElementowZaleznych) { 25 var kryteriumElementuZaleznegoMap = {}; 26 for(var i = 0; i < idElementowZaleznych.length; ++i) { 27 var idElementuZaleznego = idElementowZaleznych[i]; 28 var nrElementuWlaczanegoWSzablonie = idElementuZaleznego.nrElementuWlaczanegoWSzablonie; 29 var kryteria = kryteriumElementuZaleznegoMap[nrElementuWlaczanegoWSzablonie]; 30 if(kryteria == null) { 31 kryteria = []; 32 kryteriumElementuZaleznegoMap[nrElementuWlaczanegoWSzablonie] = kryteria; 33 } 34 kryteria.push(idElementuZaleznego); 35 } 36 return kryteriumElementuZaleznegoMap; 37 }; 38 39 $scope.isWidocznyElement = function(element) { 40 var kryteria = $scope.kryteriumElementuZaleznegoMap[element.nrElementuWSzablonie] || []; 41 for(var i = 0; i < kryteria.length; ++i) { 42 var nrPytaniaKryterium = kryteria[i].nrPytaniaKryterium; 43 var nrOdpowiedziKryterium = kryteria[i].nrOdpowiedziKryterium; 44 var pytanieKryterium = getPytanie(nrPytaniaKryterium); 45 var odpowiedzKryterium = getOdpowiedz(pytanieKryterium, nrOdpowiedziKryterium); 46 if(!$scope.isWybranaOdpowiedz(pytanieKryterium, odpowiedzKryterium)) { 47 return false; 48 } 49 } 50 return true; 51 }; 52 53 $scope.isWidocznaOdpowiedzOtwarta = function(pytanie, odpowiedz) { 54 return odpowiedz.otwarta 55 && $scope.isWybranaOdpowiedz(pytanie, odpowiedz); 56 } 57 58 $scope.isWybranaOdpowiedz = function(pytanie, odpowiedz) { 59 if(pytanie == null || odpowiedz == null) { 60 return false; 61 } 62 return pytanie.wybranaOdpowiedz == odpowiedz.nrOdpowiedzi 63 || odpowiedz.zaznaczona; 64 } 65 66 var findPytanie = function(elementy, nrPytania) { 67 var pytanie; 68 for(var i = 0; i < elementy.length; ++i) { 69 var element = elementy[i]; 70 if(element.nrPytania == nrPytania) { 71 return element; 72 } 73 for(var j = 0; j < element.odpowiedzi.length; ++j) { 74 var odpowiedz = element.odpowiedzi[j]; 75 pytanie = findPytanie(odpowiedz.elementyZalezne, nrPytania); 76 if(pytanie) { 77 return pytanie; 78 } 79 } 80 pytanie = findPytanie(element.elementyPodrzedne, nrPytania); 81 if(pytanie) { 82 return pytanie; 83 } 84 } 85 return null; 86 }; 87 88 var getPytanie = function(nrPytania) { 89 return findPytanie($scope.elementy || [], nrPytania) 90 }; 91 92 var getOdpowiedz = function(pytanie, nrOdpowiedzi) { 93 var odpowiedzi = pytanie && pytanie.odpowiedzi ? pytanie.odpowiedzi : []; 94 for(var i = 0; i < odpowiedzi.length; ++i) { 95 var odpowiedz = odpowiedzi[i]; 96 if(odpowiedz.nrOdpowiedzi == nrOdpowiedzi) { 97 return odpowiedz; 98 } 99 } 100 return null; 101 }; 102 103 $scope.zatwierdzPytanie = function(pytanie) { 104 if($scope.zapiszCalosc) { 105 zmodyfikowanePytania[pytanie.nrElementuWSzablonie] = pytanie; 106 return true; 107 } 108 return $http.post('REST/testy/pytanieTestu/' + $scope.idSzablonuTestu, pytanie) 109 .then(function(result) { 110 if(result.data.blad) { 111 toaster.pop('error', result.data.blad); 112 } 113 else if(result.data.ostrzezenie) { 114 toaster.pop('warning', result.data.ostrzezenie); 115 } 116 else if(!result.data.sukces) { 117 popToaster('interfejs.irk.shared.error.SaveError', 'error'); 118 } 119 if(!result.data.sukces) { 120 odswiezTesty(); 121 } 122 }); 123 }; 124 125 $scope.isMoznaZmienic = function(pytanie, odpowiedz) { 126 if(odpowiedz.zaznaczona) { 127 return true; 128 } 129 var liczbaZaznaczonych = 0; 130 var odpowiedzi = pytanie.odpowiedzi; 131 for(var i = 0; i < odpowiedzi.length; ++i) { 132 if(odpowiedzi[i].zaznaczona) { 133 ++liczbaZaznaczonych; 134 } 135 } 136 return liczbaZaznaczonych < pytanie.maxZaznaczonych; 137 }; 138 139 $scope.zapiszAnkiete = function() { 140 var pytania = []; 141 for(var key in zmodyfikowanePytania) { 142 pytania.push(zmodyfikowanePytania[key]); 143 } 144 return $http.post('REST/testy/zapiszTest/' + $scope.idSzablonuTestu, pytania).then(function(result) { 145 if(result.data.sukces) { 146 popToaster('interfejs.irk.shared.ZapisanoFormularz', 'success'); 147 zmodyfikowanePytania = {}; 148 } 149 else if(result.data.blad) { 150 toaster.pop('error', result.data.blad); 151 } 152 else if(result.data.ostrzezenie) { 153 toaster.pop('warning', result.data.ostrzezenie); 154 } 155 else { 156 popToaster('interfejs.irk.shared.error.SaveError', 'error'); 157 } 158 if(!result.data.sukces) { 159 odswiezTesty(); 160 } 161 }); 162 }; 163 164 var popToaster = function(i18nKey, popupType) { 165 i18n.get(i18nKey).then(function(komunikat) { 166 toaster.pop(popupType, komunikat); 167 }); 168 }; 169 170 var odswiezTesty = function() { 171 $rootScope.$broadcast(PYTANIA_DODATKOWE_EVENTS.przeladuj); 172 $rootScope.$broadcast(SIDEBAR_MENU_EVENTS.zmianaLiczbyZgodDoUzupelnienia); 173 $rootScope.$broadcast(SIDEBAR_MENU_EVENTS.zmianaLiczbyTestowDoRozwiazania); 174 $rootScope.$broadcast(TEST_EVENTS.przekieruj); 175 Session.destroy(); 176 }; 177 178 } 179})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.