]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/user_editor.js
small tweaks. making sure focus follows user as they page through
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / user_editor.js
1
2 var cgi                                 = null;
3 var patron                              = null;
4 var advanced                    = false;
5 var SC_FETCH_ALL     = 'open-ils.circ:open-ils.circ.stat_cat.actor.retrieve.all';
6 var SC_CREATE_MAP               = 'open-ils.circ:open-ils.circ.stat_cat.actor.user_map.create';
7 var SV_FETCH_ALL                = 'open-ils.circ:open-ils.circ.survey.retrieve.all';
8
9 var myPerms             = [ 'CREATE_USER', 'UPDATE_USER', 'CREATE_PATRON_STAT_CAT_ENTRY_MAP' ];
10
11 var pages               = [ 
12         'uedit_userid', 
13         'uedit_contact_info', 
14         'uedit_addresses', 
15         'uedit_groups', 
16         'uedit_stat_cats', 
17         'uedit_surveys',
18         'uedit_finalize',
19         ];
20
21 /* ID's of objects that should be focused when their page is made visible */
22 var pageFocus   = [
23         'ue_barcode',
24         'ue_email1',
25         'ue_addr_label',
26         'ue_profile',
27         'ue_stat_cat_selector_1',
28         'ue_survey_selector_1',
29         'ue_view_summary'
30 ];
31
32 /* fetch the necessary data to start off */
33 function uEditInit() {
34
35         cgi             = new CGI();
36         session = cgi.param('ses');
37         if(cgi.param('adv')) advanced = true 
38         if(!session) throw "User session is not defined";
39
40         fetchUser(session);
41         $('uedit_user').appendChild(text(USER.usrname()));
42         uEditShowPage('uedit_userid');
43
44         setTimeout( 
45                 function() { 
46                         fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
47                         uEditDrawUser(fetchFleshedUser(cgi.param('usr')));
48                         uEditFetchStatCats();
49                         uEditFetchSurveys();
50                 }, 20 
51         );
52 }
53
54 function uEditNext() {
55         var i = _findActive();
56         if( i < (pages.length - 1)) uEditShowPage(pages[i+1]);
57 }
58
59 function uEditPrev() {
60         var i = _findActive();
61         if( i > 0 ) uEditShowPage(pages[i-1]);
62 }
63
64
65 function uEditShowPage(id) {
66         if( id == null ) return;
67
68         for( var p in pages ) {
69                 var page = pages[p];
70                 hideMe($(page));
71                 removeCSSClass($(page+'_label'), 'label_active');
72         }
73
74         unHideMe($(id));
75         addCSSClass($(id+'_label'), 'label_active');
76         var idx = _findPageIdx(id);
77         var fpage = pageFocus[idx];
78         if(fpage) { $(fpage).focus(); try{$(fpage).select()}catch(e){} }
79
80         unHideMe($('ue_back'));
81         unHideMe($('ue_fwd'));
82
83         if(idx == 0) hideMe($('ue_back'));
84         if(idx == (pages.length-1)) hideMe($('ue_fwd'));
85 }
86
87
88 function _findActive() {
89         for( var p in pages ) {
90                 if(! $(pages[p]).className.match(/hide_me/) )
91                         return parseInt(p);
92         }
93         return null;
94 }
95 function _findPageIdx(name) {
96         for( var i in pages ) {
97                 var page = pages[i];
98                 if( page == name ) return i;
99         }
100         return -1;
101 }
102
103 function uEditAddrHighlight( node, type ) {
104         var tbody = $('ue_address_tbody');
105         for( var c in tbody.childNodes ) {
106                 var row = tbody.childNodes[c];
107                 if(row.nodeType != XML_ELEMENT_NODE ) continue;
108                 var div = $n(row,'ue_addr_'+type+'_yes').parentNode;
109                 removeCSSClass(div, 'addr_info_checked');
110         }
111         addCSSClass(node.parentNode, 'addr_info_checked');
112 }
113
114
115
116 function uEditDrawUser(patron) {
117         if(!patron) return 0;
118 }
119
120 function uEditFetchStatCats() {
121         var req = new Request(SC_FETCH_ALL, SESSION);
122         req.callback(uEditDrawStatCats);
123         req.send();
124 }
125
126 function uEditDrawStatCats(r) {
127         var cats = r.getResultObject();
128         var tbody = $('ue_stat_cat_tbody');
129         var templ = tbody.removeChild($('ue_stat_cat_row'));
130
131         for( var c in cats ) {
132                 var row = templ.cloneNode(true);
133                 uEditInsertCat( tbody, row, cats[c], c );
134                 tbody.appendChild(row);
135         }
136 }
137
138 function uEditInsertCat( tbody, row, cat, idx ) {
139
140         cat.entries().sort(  /* sort the entries by value */
141                 function( a, b ) { 
142                         if( a.value().toLowerCase() > b.value().toLowerCase()) return 1;
143                         if( a.value().toLowerCase() < b.value().toLowerCase()) return -1;
144                         return 0;
145                 }
146         );
147
148         var selector = $n(row, 'ue_stat_cat_selector');
149         if( idx == 0 ) selector.id = 'ue_stat_cat_selector_1'; 
150         $n(row, 'ue_stat_cat_name').appendChild(text(cat.name()));
151         $n(row, 'ue_stat_cat_owner').appendChild(text(fetchOrgUnit(cat.owner()).shortname()));
152
153         var idx = 1;
154         for( var e in cat.entries() ) {
155                 var entry = cat.entries()[e];
156                 setSelectorVal( selector, idx++, entry.value(), entry.id() );
157         }
158 }
159
160 function uEditFetchSurveys() {
161         var req = new Request(SV_FETCH_ALL, SESSION);
162         req.callback(uEditDrawSurveys);
163         req.send();
164 }
165
166 function uEditDrawSurveys(r) {
167
168         var surveys = r.getResultObject();
169         var div = $('uedit_surveys');
170         var table = div.removeChild($('ue_survey_table'));
171
172         var x = 0;
173         for( var s in surveys ) {
174                 var survey = surveys[s];
175                 var clone = table.cloneNode(true);
176                 uEditInsertSurvey( div, clone, survey, x++ );
177                 div.appendChild(clone);
178         }
179 }
180
181 function uEditInsertSurvey( div, table, survey, sidx ) {
182         $n(table, 'ue_survey_name').appendChild(text(survey.name()));
183         $n(table, 'ue_survey_desc').appendChild(text(survey.description()));
184         var tbody = $n(table, 'ue_survey_tbody');
185         var templ = tbody.removeChild($n(table, 'ue_survey_row'));
186
187         var polldiv             = $('ue_survey_answer_poll');
188
189         var idx = 1;
190         for( var q in survey.questions() ) {
191                 var row = templ.cloneNode(true);
192                 uEditInsertSurveyQuestion( div, table, tbody, row, survey, survey.questions()[q], sidx );
193                 tbody.appendChild(row);
194         }
195 }
196
197 function uEditInsertSurveyQuestion( div, table, tbody, row, survey, question, sidx ) {
198
199         $n(row, 'ue_survey_question').appendChild(text(question.question()));
200
201         var selector    = $n(row, 'ue_survey_answer');
202         var polldiv             = $n(row, 'ue_survey_answer_poll');
203         var idx                 = 1;
204         var polltbody   = $n(row, 'ue_survey_answer_poll_tbody');
205         var pollrow             = polltbody.removeChild($n(polltbody, 'ue_survey_answer_poll_row'));
206
207         if( sidx == 0 ) selector.id = 'ue_survey_selector_1'; 
208
209         for( var a in question.answers() ) {
210
211                 var answer = question.answers()[a];
212
213                 if( survey.poll() ) {
214
215                         unHideMe(polldiv);
216                         var prow = pollrow.cloneNode(true);
217                         $n(prow, 'ue_survey_answer_poll_answer').appendChild(text(answer.answer()));
218
219                         $n(prow, 'ue_survey_answer_poll_radio').appendChild(
220                                 elem('input', { 
221                                         type    : 'radio', 
222                                         name    : 'survey_poll_answer_'+survey.id(),
223                                         id              :  answer.id()
224                                 }));
225
226                         polltbody.appendChild(prow);
227
228                 } else {
229
230                         unHideMe(selector.parentNode);
231                         setSelectorVal( selector, idx++, answer.answer(), answer.id() );
232                 }
233         }
234 }
235
236
237 function uEditSaveUser() {
238
239         if(patron == null) patron = new au();
240
241         var barcode = $('ue_barcode').value;
242         patron.usrname($('ue_username').value); 
243         patron.passwd($('ue_password1').value); 
244         patron.first_given_name($('ue_firstname').value);
245         patron.second_given_name($('ue_middlename').value);
246         patron.family_name($('ue_lastname').value);
247         patron.suffix($('ue_suffix').value);
248         patron.dob($('ue_dob').value);
249
250         alert(js2JSON(patron));
251
252 }
253
254