PageSourceSearch

https://rekrutacja.pedagogium.pl/pdg-irk-app/content/script/irk/pa…/ElementyTestuController.js

js pedagogium.pl collected 2026-10-04 13:34:14 UTC 7,184 bytes, 179 lines download raw bytes

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.