1 /* -----------------------------------------------------------------------
2 UI code for the user editor. Handles breaking up the components
3 into a wizard-like interface.
4 ----------------------------------------------------------------------- */
17 /* ID's of objects that should be focused when their page is made visible */
23 'ue_stat_cat_selector_1',
24 'ue_survey_selector_1',
29 function uEditNext() {
30 var i = _findActive();
31 if( i < (pages.length - 1)) uEditShowPage(pages[i+1]);
35 function uEditPrev() {
36 var i = _findActive();
37 if( i > 0 ) uEditShowPage(pages[i-1]);
40 function uEditCheckErrors() {
41 var errors = uEditGetErrorStrings();
42 if(errors) unHideMe($('ue_errors'));
43 else hideMe($('ue_errors'));
47 function uEditFetchError(id) { if($(id)) return $(id).innerHTML + "\n"; return "";}
50 function uEditShowPage(id) {
51 if( id == null ) return;
53 for( var p in pages ) {
56 removeCSSClass($(page+'_label'), 'label_active');
59 var idx = _findPageIdx(id);
62 addCSSClass($(id+'_label'), 'label_active');
63 var fpage = pageFocus[idx];
66 if( id == 'uedit_addresses' )
67 pnode = $n( $('ue_address_tbody').
68 getElementsByTagName('tr')[0], 'ue_addr_label');
72 try{pnode.select()}catch(e){}
75 unHideMe($('ue_back'));
76 unHideMe($('ue_fwd'));
78 if(idx == 0) hideMe($('ue_back'));
79 if(idx == (pages.length-1)) hideMe($('ue_fwd'));
82 function _findActive() {
83 for( var p in pages ) {
84 if(! $(pages[p]).className.match(/hide_me/) )
90 function _findPageIdx(name) {
91 for( var i in pages ) {
93 if( page == name ) return i;
98 /* ------------------------------------------------------------------------------ */
99 /* Below are the various UI components built from retrieved data */
100 /* ------------------------------------------------------------------------------ */
104 function uEditBuildLibSelector( node, depth, selector ) {
105 if(!selector) selector = $('ue_org_selector');
106 if(!node) { depth = 0; node = globalOrgTree; }
107 var opt = insertSelectorVal(
108 selector, -1, node.name(), node.id(), null, depth++ );
109 if(!findOrgType(node.ou_type()).can_have_users()) opt.disabled = true;
110 if( node.id() == USER.ws_ou() )
111 setSelector(selector, node.id());
113 for( var c in node.children() )
114 uEditBuildLibSelector(node.children()[c], depth, selector);
118 /* group tree selector */
119 function uEditDrawGroups(tree, depth, selector) {
121 selector = $('ue_profile');
124 groupsCache[tree.id()] = tree;
125 insertSelectorVal( selector, -1, tree.name(), tree.id(), null, depth++ );
126 for( var c in tree.children() )
127 uEditDrawGroups( tree.children()[c], depth, selector );
131 /* user identification types */
132 function uEditDrawIDTypes(types) {
133 var pri_sel = $('ue_primary_ident_type');
134 var sec_sel = $('ue_secondary_ident_type');
136 for( var t in types ) {
138 if(!type.name()) continue;
139 identTypesCache[type.id()] = type;
140 setSelectorVal( pri_sel, idx, type.name(), type.id() );
141 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
145 /* user statistical catagories */
146 function uEditDrawStatCats(cats) {
147 var tbody = $('ue_stat_cat_tbody');
148 var templ = tbody.removeChild($('ue_stat_cat_row'));
150 for( var c in cats ) {
151 var row = templ.cloneNode(true);
152 uEditInsertCat( row, cats[c], c );
153 tbody.appendChild(row);
158 function uEditInsertCat( row, cat, idx ) {
160 cat.entries().sort( /* sort the entries by value */
162 if( a.value().toLowerCase() > b.value().toLowerCase()) return 1;
163 if( a.value().toLowerCase() < b.value().toLowerCase()) return -1;
168 statCatsCache[cat.id()] = cat;
170 /* register the new map object */
171 uEditBuildSCMField(cat, row);
173 var newval = $n(row, 'ue_stat_cat_newval');
174 var selector = $n(row, 'ue_stat_cat_selector');
176 selector.onchange = function() {
177 newval.value = getSelectorVal(selector);
178 if(newval.onchange()) newval.onchange();
181 if( idx == 0 ) selector.id = 'ue_stat_cat_selector_1';
183 $n(row, 'ue_stat_cat_name').appendChild(text(cat.name()));
184 $n(row, 'ue_stat_cat_owner').appendChild(
185 text(fetchOrgUnit(cat.owner()).shortname()));
187 for( var e in cat.entries() ) {
188 var entry = cat.entries()[e];
189 setSelectorVal( selector,
190 (parseInt(e)+1), entry.value(), entry.value() );
194 /* draw the surveys */
195 function uEditDrawSurveys(surveys) {
197 var div = $('uedit_surveys');
198 var table = div.removeChild($('ue_survey_table'));
199 if( surveys.length == 0 ) unHideMe($('uedit_no_surveys'));
201 for( var s in surveys ) {
202 var survey = surveys[s];
203 surveysCache[survey.id()] = survey;
204 var clone = table.cloneNode(true);
205 uEditInsertSurvey( div, clone, survey, s );
206 div.appendChild(clone);
210 /* insert the servey then insert each of that surveys questions */
211 function uEditInsertSurvey( div, table, survey, sidx ) {
213 $n(table, 'ue_survey_name').appendChild(text(survey.name()));
214 $n(table, 'ue_survey_desc').appendChild(text(survey.description()));
216 var tbody = $n(table, 'ue_survey_tbody');
217 var templ = tbody.removeChild($n(table, 'ue_survey_row'));
219 for( var q in survey.questions() ) {
220 var row = templ.cloneNode(true);
221 var quest = survey.questions()[q];
222 uEditInsertSurveyQuestion( row, survey, quest );
223 tbody.appendChild(row);
227 function uEditInsertSurveyQuestion( row, survey, question ) {
229 var selector = $n(row, 'ue_survey_answer');
230 row.setAttribute('question', question.id());
231 $n(row, 'ue_survey_question').appendChild(text(question.question()));
233 for( var a in question.answers() ) {
234 var answer = question.answers()[a];
235 surveyAnswersCache[answer.id()] = answer;
236 insertSelectorVal(selector, -1, answer.answer(), answer.id() );
239 surveyQuestionsCache[question.id()] = question;
242 if( survey.required() && survey.required() != 'f' ) {
243 addCSSClass(selector, 'invalid_value');
247 selector.onchange = function() {
249 /* remove any existing responses for this survey */
250 patron.survey_responses(
251 grep( patron.survey_responses(),
253 return (item.survey() != survey.id());
259 if(!patron.survey_responses())
260 patron.survey_responses([]);
262 var val = getSelectorVal(selector);
265 if( survey.required() && survey.required() != 'f' ) {
267 removeCSSClass(selector, 'invalid_value');
269 addCSSClass(selector, 'invalid_value');
275 var resp = new asvr();
277 resp.survey(survey.id());
278 resp.usr(patron.id());
279 resp.question(row.getAttribute('question'));
281 patron.survey_responses().push( resp );
289 /* -----------------------------------------------------------------------
290 Spit out the patron info to the summary display tables...
291 ----------------------------------------------------------------------- */
293 function uEditShowSummary() {
294 hideMe($('main_div_container'));
295 unHideMe($('summary_div_container'));
297 for( var f in dataFields ) {
299 var field = dataFields[f];
300 if( field.object == patron ) {
302 var val = uEditNodeVal(field);
304 if( field.key == 'profile' ||
305 field.key == 'home_ou' ||
306 field.key == 'ident_type' ||
307 field.key == 'ident_type2') {
309 val = getSelectorName($(field.widget.id));
312 var node = $('ue_summary_'+field.key);
313 if(node) appendClear(node, text(val));
317 var table = $('ue_summary_table');
318 uEditFleshSummaryAddresses( table, patron );
319 uEditFleshSummaryStatCats( table, patron );
320 uEditFleshSummarySurveys( table, patron );
325 var uEditSummaryAddrRow;
326 function uEditFleshSummaryAddresses( table, patron ) {
328 var addrtbody = $n(table, 'ue_summary_addr_tbody');
329 if(!uEditSummaryAddrRow)
330 uEditSummaryAddrRow =
331 addrtbody.removeChild($n(addrtbody, 'ue_summary_addr_row'));
332 var rowtmpl = uEditSummaryAddrRow;
333 removeChildren(addrtbody);
335 for( var a in patron.addresses() ) {
336 var address = patron.addresses()[a];
337 var row = rowtmpl.cloneNode(true);
338 uEditFleshSummaryAddr( address, patron, row );
339 addrtbody.appendChild(row);
340 if(address.isdeleted()) addCSSClass(row, 'deleted');
345 function uEditFleshSummaryAddr( address, patron, row ) {
346 var yes = $('yes').innerHTML;
347 var no = $('no').innerHTML;
349 $n(row, 'label').appendChild(text(address.address_type()));
350 $n(row, 'street1').appendChild(text(address.street1()));
351 $n(row, 'street2').appendChild(text(address.street2()));
352 $n(row, 'city').appendChild(text(address.city()));
353 $n(row, 'county').appendChild(text(address.county()));
354 $n(row, 'state').appendChild(text(address.state()));
355 $n(row, 'country').appendChild(text(address.country()));
356 $n(row, 'zip').appendChild(text(address.post_code()));
357 $n(row, 'valid').appendChild(text( (address.valid()) ? yes : no ));
358 $n(row, 'incorporated').appendChild(text( (address.within_city_limits()) ? yes : no ));
360 $n(row, 'mailing').appendChild(text(
361 (patron.mailing_address() == address.id()) ? yes : no ));
363 $n(row, 'billing').appendChild(text(
364 (patron.billing_address() == address.id()) ? yes : no ));
369 var uEditSummaryStatCatRow;
370 function uEditFleshSummaryStatCats( table, patron ) {
371 var tbody = $n(table, 'ue_summary_stats_tbody');
373 if(!uEditSummaryStatCatRow)
374 uEditSummaryStatCatRow =
375 tbody.removeChild($n(tbody, 'ue_summary_stats_row'));
376 var rowtmpl = uEditSummaryStatCatRow;
377 removeChildren(tbody);
379 for( var s in patron.stat_cat_entries() ) {
380 row = rowtmpl.cloneNode(true);
381 var entry = patron.stat_cat_entries()[s];
382 var cat = statCatsCache[entry.stat_cat()];
383 $n(row, 'ue_summary_stat_name').appendChild(text(cat.name()));
384 $n(row, 'ue_summary_stat_value').appendChild(text(entry.stat_cat_entry()));
385 row.setAttribute('statcat', entry.stat_cat());
386 if( entry.isdeleted() ) addCSSClass(row, 'deleted');
387 tbody.appendChild(row);
390 if( ! getElementsByTagNameFlat( tbody, 'tr' )[0] )
391 hideMe(tbody.parentNode);
393 unHideMe(tbody.parentNode);
398 var uEditSummarySurveyRow;
399 function uEditFleshSummarySurveys( table, patron ) {
401 var tbody = $n(table, 'ue_summary_survey_tbody');
402 if(!uEditSummarySurveyRow)
403 uEditSummarySurveyRow =
404 tbody.removeChild($n(tbody, 'ue_summary_survey_row'));
405 var rowtmpl = uEditSummarySurveyRow;
407 removeChildren(tbody);
409 for( var r in patron.survey_responses() ) {
410 var row = rowtmpl.cloneNode(true);
411 var resp = patron.survey_responses()[r];
412 var survey = surveysCache[resp.survey()];
413 var quest = surveyQuestionsCache[resp.question()];
414 var answer = surveyAnswersCache[resp.answer()];
415 $n(row, 'ue_summary_survey_name').appendChild(text(survey.name()));
416 $n(row, 'ue_summary_survey_question').appendChild(text(quest.question()));
417 $n(row, 'ue_summary_survey_answer').appendChild(text(answer.answer()));
418 tbody.appendChild(row);
421 if( ! getElementsByTagNameFlat(tbody, 'tr')[0])
422 hideMe(tbody.parentNode);
424 unHideMe(tbody.parentNode);
428 function uEditDrawNetLevels(netLevels) {
429 var sel = $('ue_net_level');
432 insertSelectorVal( sel, -1, i.name(), i.id() );
434 if( i.name() == defaultNetAccess )
435 setSelector( sel, i.id() );