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',
34 /* fetch the necessary data to start off */
35 function uEditInit() {
38 session = cgi.param('ses');
39 if(cgi.param('adv')) advanced = true
40 if(!session) throw "User session is not defined";
43 $('uedit_user').appendChild(text(USER.usrname()));
44 uEditShowPage('uedit_userid');
48 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
49 uEditDrawUser(fetchFleshedUser(cgi.param('usr')));
57 function uEditNext() {
58 var i = _findActive();
59 if( i < (pages.length - 1)) uEditShowPage(pages[i+1]);
62 function uEditPrev() {
63 var i = _findActive();
64 if( i > 0 ) uEditShowPage(pages[i-1]);
68 function uEditShowPage(id) {
69 if( id == null ) return;
71 for( var p in pages ) {
74 removeCSSClass($(page+'_label'), 'label_active');
78 addCSSClass($(id+'_label'), 'label_active');
79 var idx = _findPageIdx(id);
80 var fpage = pageFocus[idx];
81 if(fpage) { $(fpage).focus(); try{$(fpage).select()}catch(e){} }
83 unHideMe($('ue_back'));
84 unHideMe($('ue_fwd'));
86 if(idx == 0) hideMe($('ue_back'));
87 if(idx == (pages.length-1)) hideMe($('ue_fwd'));
91 function _findActive() {
92 for( var p in pages ) {
93 if(! $(pages[p]).className.match(/hide_me/) )
98 function _findPageIdx(name) {
99 for( var i in pages ) {
101 if( page == name ) return i;
106 function uEditAddrHighlight( node, type ) {
107 var tbody = $('ue_address_tbody');
108 for( var c in tbody.childNodes ) {
109 var row = tbody.childNodes[c];
110 if(row.nodeType != XML_ELEMENT_NODE ) continue;
111 var div = $n(row,'ue_addr_'+type+'_yes').parentNode;
112 removeCSSClass(div, 'addr_info_checked');
114 addCSSClass(node.parentNode, 'addr_info_checked');
119 function uEditDrawUser(patron) {
120 if(!patron) return 0;
123 function uEditFetchIDTypes() {
124 var req = new Request(FETCH_ID_TYPES);
125 req.callback(uEditDrawIDTypes);
129 function uEditDrawIDTypes(r) {
131 var types = r.getResultObject();
132 var pri_sel = $('ue_primary_ident_type');
133 var sec_sel = $('ue_secondary_ident_type');
136 for( var t in types ) {
138 setSelectorVal( pri_sel, idx, type.name(), type.id() );
139 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
143 function uEditFetchStatCats() {
144 var req = new Request(SC_FETCH_ALL, SESSION);
145 req.callback(uEditDrawStatCats);
149 function uEditDrawStatCats(r) {
150 var cats = r.getResultObject();
151 var tbody = $('ue_stat_cat_tbody');
152 var templ = tbody.removeChild($('ue_stat_cat_row'));
154 for( var c in cats ) {
155 var row = templ.cloneNode(true);
156 uEditInsertCat( tbody, row, cats[c], c );
157 tbody.appendChild(row);
161 function uEditInsertCat( tbody, row, cat, idx ) {
163 cat.entries().sort( /* sort the entries by value */
165 if( a.value().toLowerCase() > b.value().toLowerCase()) return 1;
166 if( a.value().toLowerCase() < b.value().toLowerCase()) return -1;
171 var selector = $n(row, 'ue_stat_cat_selector');
172 if( idx == 0 ) selector.id = 'ue_stat_cat_selector_1';
173 $n(row, 'ue_stat_cat_name').appendChild(text(cat.name()));
174 $n(row, 'ue_stat_cat_owner').appendChild(text(fetchOrgUnit(cat.owner()).shortname()));
177 for( var e in cat.entries() ) {
178 var entry = cat.entries()[e];
179 setSelectorVal( selector, idx++, entry.value(), entry.id() );
183 function uEditFetchSurveys() {
184 var req = new Request(SV_FETCH_ALL, SESSION);
185 req.callback(uEditDrawSurveys);
189 function uEditDrawSurveys(r) {
191 var surveys = r.getResultObject();
192 var div = $('uedit_surveys');
193 var table = div.removeChild($('ue_survey_table'));
196 for( var s in surveys ) {
197 var survey = surveys[s];
198 var clone = table.cloneNode(true);
199 uEditInsertSurvey( div, clone, survey, x++ );
200 div.appendChild(clone);
204 function uEditInsertSurvey( div, table, survey, sidx ) {
205 $n(table, 'ue_survey_name').appendChild(text(survey.name()));
206 $n(table, 'ue_survey_desc').appendChild(text(survey.description()));
207 var tbody = $n(table, 'ue_survey_tbody');
208 var templ = tbody.removeChild($n(table, 'ue_survey_row'));
210 var polldiv = $('ue_survey_answer_poll');
213 for( var q in survey.questions() ) {
214 var row = templ.cloneNode(true);
215 uEditInsertSurveyQuestion( div, table, tbody, row, survey, survey.questions()[q], sidx );
216 tbody.appendChild(row);
220 function uEditInsertSurveyQuestion( div, table, tbody, row, survey, question, sidx ) {
222 $n(row, 'ue_survey_question').appendChild(text(question.question()));
224 var selector = $n(row, 'ue_survey_answer');
225 var polldiv = $n(row, 'ue_survey_answer_poll');
227 var polltbody = $n(row, 'ue_survey_answer_poll_tbody');
228 var pollrow = polltbody.removeChild($n(polltbody, 'ue_survey_answer_poll_row'));
230 if( sidx == 0 ) selector.id = 'ue_survey_selector_1';
232 for( var a in question.answers() ) {
234 var answer = question.answers()[a];
236 if( survey.poll() ) {
239 var prow = pollrow.cloneNode(true);
240 $n(prow, 'ue_survey_answer_poll_answer').appendChild(text(answer.answer()));
242 $n(prow, 'ue_survey_answer_poll_radio').appendChild(
245 name : 'survey_poll_answer_'+survey.id(),
249 polltbody.appendChild(prow);
253 unHideMe(selector.parentNode);
254 setSelectorVal( selector, idx++, answer.answer(), answer.id() );
260 function uEditFetchError(id) { return $(id).innerHTML + "\n"; }
263 function uEditSaveUser() {
272 patron.card(-1); /* attach to the virtual id of the card */
273 patron.cards([card]);
280 errors += uEditFleshCard(card);
281 errors += uEditAddBasicPatronInfo(patron);
282 errors += uEditAddIdents(patron);
284 if(errors) alert(errors);
285 else alert(js2JSON(patron));
288 function uEditSetVal( obj, func, val, regex ) {
290 if( val == null ) return false;
291 if(!instanceOf(val, String)) {
294 } catch(e) { return false; }
297 if(val == "" ) return false;
298 if(regex && !val.match(regex) ) return false;
301 alert("Setting val: "+val);
307 function uEditAddBasicPatronInfo(patron) {
311 if(!uEditSetVal(patron, "usrname", $('ue_username'), /.+/ ))
312 errors += uEditFetchError('ue_bad_username');
314 /* make sure passwords match */
315 var p1 = $('ue_password1').value;
316 var p2 = $('ue_password1').value;
317 if( p1 != p2 || !uEditSetVal( patron, "passwd", p1 ))
318 errors += uEditFetchError('ue_bad_password');
320 if(!uEditSetVal(patron, "first_given_name", $('ue_firstname'), /.+/))
321 errors += uEditFetchError('ue_bad_firstname');
323 if(!uEditSetVal(patron, "second_given_name", $('ue_middlename'), /.+/))
324 errors += uEditFetchError('ue_bad_middlename');
326 if(!uEditSetVal(patron, "family_name", $('ue_lastname'), /.+/))
327 errors += uEditFetchError('ue_bad_lastname');
329 patron.suffix($('ue_suffix').value); /* suffis isn't required */
331 if(!uEditSetVal(patron, "dob", $('ue_dob'), /^\d{4}-\d{2}-\d{2}/ ) )
332 errors += uEditFetchError('ue_bad_dob');
334 /* make sure emails match */
335 var email = $('ue_email1').value;
336 var email2 = $('ue_email2').value;
337 if( email != email2 || !uEditSetVal(patron, "email", email, /.+\@.+\..+/ ))
338 errors += uEditFetchError('ue_bad_email');
343 function uEditFleshCard(card) {
346 if(!uEditSetVal( card, "barcode", $('ue_barcode') ))
347 return uEditFetchError('ue_bad_barcode');
354 function uEditAddIdents(patron) {
357 var ptype2 = getSelectorVal($('ue_secondary_ident_type'));
358 var val1 = $('ue_primary_ident').value;
359 var val2 = $('ue_secondary_ident').value;
361 if( !uEditSetVal( patron,
362 "ident_type", getSelectorVal($('ue_primary_ident_type'), /^[0-9]+$/ );
363 return uEditFetchError('ue_no_ident');
365 if( !uEditSetVal( patron,
366 "ident_type2", getSelectorVal($('ue_secondary_ident_type'), /^[0-9]+$/ );
367 return uEditFetchError('ue_no_ident');
369 if( !uEditSetVal( patron, "ident_value", $('ue_primary_ident') ))
370 return uEditFetchError('ue_no_ident');
372 if( !uEditSetVal( patron, "ident_value2", $('ue_secondary_ident') ))
373 return uEditFetchError('ue_no_ident');