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 var FETCH_ID_TYPES = 'open-ils.actor:open-ils.actor.user.ident_types.retrieve';
11 var myPerms = [ 'CREATE_USER', 'UPDATE_USER', 'CREATE_PATRON_STAT_CAT_ENTRY_MAP' ];
23 /* ID's of objects that should be focused when their page is made visible */
29 'ue_stat_cat_selector_1',
30 'ue_survey_selector_1',
35 regexes.phone = /\d{3}-\d{3}-\d{4}/;
36 regexes.email = /.+\@.+\..+/;
37 regexes.date = /^\d{4}-\d{2}-\d{2}/;
38 regexes.isid = /^\d+$/;
40 /* fetch the necessary data to start off */
41 function uEditInit() {
44 session = cgi.param('ses');
45 if(cgi.param('adv')) advanced = true
46 if(!session) throw "User session is not defined";
49 $('uedit_user').appendChild(text(USER.usrname()));
50 uEditShowPage('uedit_userid');
54 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
55 uEditDrawUser(fetchFleshedUser(cgi.param('usr')));
56 uEditBuildLibSelector();
64 function uEditNext() {
65 var i = _findActive();
66 if( i < (pages.length - 1)) uEditShowPage(pages[i+1]);
69 function uEditPrev() {
70 var i = _findActive();
71 if( i > 0 ) uEditShowPage(pages[i-1]);
75 function uEditShowPage(id) {
76 if( id == null ) return;
78 for( var p in pages ) {
81 removeCSSClass($(page+'_label'), 'label_active');
85 addCSSClass($(id+'_label'), 'label_active');
86 var idx = _findPageIdx(id);
87 var fpage = pageFocus[idx];
88 if(fpage) { $(fpage).focus(); try{$(fpage).select()}catch(e){} }
90 unHideMe($('ue_back'));
91 unHideMe($('ue_fwd'));
93 if(idx == 0) hideMe($('ue_back'));
94 if(idx == (pages.length-1)) hideMe($('ue_fwd'));
98 function _findActive() {
99 for( var p in pages ) {
100 if(! $(pages[p]).className.match(/hide_me/) )
105 function _findPageIdx(name) {
106 for( var i in pages ) {
108 if( page == name ) return i;
113 function uEditAddrHighlight( node, type ) {
114 var tbody = $('ue_address_tbody');
115 for( var c in tbody.childNodes ) {
116 var row = tbody.childNodes[c];
117 if(row.nodeType != XML_ELEMENT_NODE ) continue;
118 var div = $n(row,'ue_addr_'+type+'_yes').parentNode;
119 removeCSSClass(div, 'addr_info_checked');
121 addCSSClass(node.parentNode, 'addr_info_checked');
126 function uEditDrawUser(patron) {
127 if(!patron) return 0;
130 function uEditFetchIDTypes() {
131 var req = new Request(FETCH_ID_TYPES);
132 req.callback(uEditDrawIDTypes);
136 function uEditDrawIDTypes(r) {
138 var types = r.getResultObject();
139 var pri_sel = $('ue_primary_ident_type');
140 var sec_sel = $('ue_secondary_ident_type');
143 for( var t in types ) {
145 setSelectorVal( pri_sel, idx, type.name(), type.id() );
146 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
150 function uEditFetchStatCats() {
151 var req = new Request(SC_FETCH_ALL, SESSION);
152 req.callback(uEditDrawStatCats);
156 function uEditDrawStatCats(r) {
157 var cats = r.getResultObject();
158 var tbody = $('ue_stat_cat_tbody');
159 var templ = tbody.removeChild($('ue_stat_cat_row'));
161 for( var c in cats ) {
162 var row = templ.cloneNode(true);
163 uEditInsertCat( tbody, row, cats[c], c );
164 tbody.appendChild(row);
168 function uEditInsertCat( tbody, row, cat, idx ) {
170 cat.entries().sort( /* sort the entries by value */
172 if( a.value().toLowerCase() > b.value().toLowerCase()) return 1;
173 if( a.value().toLowerCase() < b.value().toLowerCase()) return -1;
178 var selector = $n(row, 'ue_stat_cat_selector');
179 if( idx == 0 ) selector.id = 'ue_stat_cat_selector_1';
180 $n(row, 'ue_stat_cat_name').appendChild(text(cat.name()));
181 $n(row, 'ue_stat_cat_owner').appendChild(text(fetchOrgUnit(cat.owner()).shortname()));
184 for( var e in cat.entries() ) {
185 var entry = cat.entries()[e];
186 setSelectorVal( selector, idx++, entry.value(), entry.id() );
190 function uEditFetchSurveys() {
191 var req = new Request(SV_FETCH_ALL, SESSION);
192 req.callback(uEditDrawSurveys);
196 function uEditDrawSurveys(r) {
198 var surveys = r.getResultObject();
199 var div = $('uedit_surveys');
200 var table = div.removeChild($('ue_survey_table'));
203 for( var s in surveys ) {
204 var survey = surveys[s];
205 var clone = table.cloneNode(true);
206 uEditInsertSurvey( div, clone, survey, x++ );
207 div.appendChild(clone);
211 function uEditInsertSurvey( div, table, survey, sidx ) {
212 $n(table, 'ue_survey_name').appendChild(text(survey.name()));
213 $n(table, 'ue_survey_desc').appendChild(text(survey.description()));
214 var tbody = $n(table, 'ue_survey_tbody');
215 var templ = tbody.removeChild($n(table, 'ue_survey_row'));
217 var polldiv = $('ue_survey_answer_poll');
220 for( var q in survey.questions() ) {
221 var row = templ.cloneNode(true);
222 uEditInsertSurveyQuestion( div, table, tbody, row, survey, survey.questions()[q], sidx );
223 tbody.appendChild(row);
227 function uEditInsertSurveyQuestion( div, table, tbody, row, survey, question, sidx ) {
229 $n(row, 'ue_survey_question').appendChild(text(question.question()));
231 var selector = $n(row, 'ue_survey_answer');
232 var polldiv = $n(row, 'ue_survey_answer_poll');
234 var polltbody = $n(row, 'ue_survey_answer_poll_tbody');
235 var pollrow = polltbody.removeChild($n(polltbody, 'ue_survey_answer_poll_row'));
237 if( sidx == 0 ) selector.id = 'ue_survey_selector_1';
239 for( var a in question.answers() ) {
241 var answer = question.answers()[a];
243 if( survey.poll() ) {
246 var prow = pollrow.cloneNode(true);
247 $n(prow, 'ue_survey_answer_poll_answer').appendChild(text(answer.answer()));
249 $n(prow, 'ue_survey_answer_poll_radio').appendChild(
252 name : 'survey_poll_answer_'+survey.id(),
256 polltbody.appendChild(prow);
260 unHideMe(selector.parentNode);
261 setSelectorVal( selector, idx++, answer.answer(), answer.id() );
267 function uEditFetchError(id) { return $(id).innerHTML + "\n"; }
270 function uEditSaveUser() {
279 patron.card(-1); /* attach to the virtual id of the card */
280 patron.cards([card]);
287 errors += uEditFleshCard(card);
288 errors += uEditAddBasicPatronInfo(patron);
289 errors += uEditAddPhones(patron);
290 errors += uEditAddIdents(patron);
292 if(errors) alert(errors);
293 else alert(js2JSON(patron));
296 function uEditSetVal( obj, func, val, regxtype ) {
298 if( val == null ) return false;
299 if(!instanceOf(val, String)) {
302 } catch(e) { return false; }
305 if(val == "" ) return false;
307 if(regxtype && regexes[regxtype]
308 && !val.match(regexes[regxtype]) ) return false;
311 alert("Setting val: "+val);
317 function uEditAddBasicPatronInfo(patron) {
321 if(!uEditSetVal(patron, "usrname", $('ue_username') ))
322 errors += uEditFetchError('ue_bad_username');
324 /* make sure passwords match */
325 var p1 = $('ue_password1').value;
326 var p2 = $('ue_password1').value;
327 if( p1 != p2 || !uEditSetVal( patron, "passwd", p1 ))
328 errors += uEditFetchError('ue_bad_password');
330 if(!uEditSetVal(patron, "first_given_name", $('ue_firstname') ))
331 errors += uEditFetchError('ue_bad_firstname');
333 if(!uEditSetVal(patron, "second_given_name", $('ue_middlename') ))
334 errors += uEditFetchError('ue_bad_middlename');
336 if(!uEditSetVal(patron, "family_name", $('ue_lastname') ))
337 errors += uEditFetchError('ue_bad_lastname');
339 patron.suffix($('ue_suffix').value); /* suffis isn't required */
341 if(!uEditSetVal(patron, "dob", $('ue_dob'), 'date' ) )
342 errors += uEditFetchError('ue_bad_dob');
344 /* make sure emails match */
345 var email = $('ue_email1').value;
346 var email2 = $('ue_email2').value;
347 if( email != email2 || !uEditSetVal(patron, "email", email, 'email' ))
348 errors += uEditFetchError('ue_bad_email');
354 function uEditAddPhones(patron) {
358 /* verifies the phone numbers are formatted correctly */
359 var verify = function(n1, n2, n3) {
363 if( !a || !b || !c ) return false;
364 return a + '-' + p + '-' + s;
368 if(!uEditSetVal( patron, "day_phone",
369 verify($('ue_day_phone_area'),
370 $('ue_day_phone_prefix'),
371 $('ue_day_phone_suffix')), 'phone' ))
372 errors += uEditFetchError('ue_bad_phone');
374 if(!uEditSetVal( patron, "night_phone",
375 verify($('ue_night_phone_area'),
376 $('ue_night_phone_prefix'),
377 $('ue_night_phone_suffix')), 'phone' ))
378 errors += uEditFetchError('ue_bad_phone');
380 if(!uEditSetVal( patron, "other_phone",
381 verify($('ue_other_phone_area'),
382 $('ue_other_phone_prefix'),
383 $('ue_other_phone_suffix')), 'phone' ))
384 errors += uEditFetchError('ue_bad_phone');
389 function uEditFleshCard(card) {
392 if(!uEditSetVal( card, "barcode", $('ue_barcode') ))
393 return uEditFetchError('ue_bad_barcode');
400 function uEditAddIdents(patron) {
402 if( !uEditSetVal( patron,
403 "ident_type", getSelectorVal($('ue_primary_ident_type')), 'isid' ))
404 return uEditFetchError('ue_no_ident');
406 if( !uEditSetVal( patron,
407 "ident_type2", getSelectorVal($('ue_secondary_ident_type')), 'isid' ))
408 return uEditFetchError('ue_no_ident');
410 if( !uEditSetVal( patron, "ident_value", $('ue_primary_ident') ))
411 return uEditFetchError('ue_no_ident');
413 if( !uEditSetVal( patron, "ident_value2", $('ue_secondary_ident') ))
414 return uEditFetchError('ue_no_ident');
421 function uEditBuildLibSelector( node, depth, selector ) {
422 if(!selector) selector = $('ue_org_selector');
423 if(!node) { depth = 0; node = globalOrgTree; }
425 insertSelectorVal( selector, -1, node.name(), node.id(), null, depth++ );
426 if( node.id() == USER.home_ou() ) setSelector(selector, node.id());
427 for( var c in node.children() )
428 uEditBuildLibSelector(node.children()[c], depth, selector);