3 var SC_FETCH_ALL = 'open-ils.circ:open-ils.circ.stat_cat.actor.retrieve.all';
4 var SC_CREATE_MAP = 'open-ils.circ:open-ils.circ.stat_cat.actor.user_map.create';
5 var SV_FETCH_ALL = 'open-ils.circ:open-ils.circ.survey.retrieve.all';
6 var FETCH_ID_TYPES = 'open-ils.actor:open-ils.actor.user.ident_types.retrieve';
7 var FETCH_GROUPS = 'open-ils.actor:open-ils.actor.groups.tree.retrieve';
8 var UPDATE_PATRON = 'open-ils.actor:open-ils.actor.patron.update';
9 var defaultState = 'GA';
13 var identTypesCache = {};
14 var statCatsCache = {};
15 var surveysCache = {};
16 var surveyQuestionsCache = {};
17 var surveyAnswersCache = {};
21 /* fetch the necessary data to start off */
22 function uEditInit() {
25 session = cgi.param('ses');
26 if(cgi.param('adv')) advanced = true
27 if(!session) throw "User session is not defined";
31 $('uedit_user').appendChild(text(USER.usrname()));
32 uEditShowPage('uedit_userid');
34 setTimeout( function() { uEditBuild(); }, 20 );
37 /* ------------------------------------------------------------------------------ */
39 /* ------------------------------------------------------------------------------ */
40 function uEditFetchIdentTypes() {
41 var req = new Request(FETCH_ID_TYPES);
46 function uEditFetchStatCats() {
47 var req = new Request(SC_FETCH_ALL, SESSION);
52 function uEditFetchSurveys() {
53 var req = new Request(SV_FETCH_ALL, SESSION);
58 function uEditFetchGroups() {
59 var req = new Request(FETCH_GROUPS);
63 /* ------------------------------------------------------------------------------ */
67 /* fetches necessary and builds the UI */
68 function uEditBuild() {
69 //fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
73 xulG.new_tab('about:blank',{},{});
79 uEditBuildLibSelector();
80 patron = fetchFleshedUser(cgi.param('usr'));
81 if(!patron) patron = uEditNewPatron();
85 uEditFetchIdentTypes(),
88 uEditFetchSurveys() );
90 if(patron.isnew()) uEditCreateNewAddr();
94 /* creates a new patron object with card attached */
95 function uEditNewPatron() {
96 var patron = new au();
103 patron.cards([card]);
104 patron.stat_cat_entries([]);
105 patron.survey_responses([]);
106 patron.addresses([]);
107 patron.home_ou(USER.ws_ou());
111 /* Creates a new blank address, adds it to the user and the fields array */
112 var uEditVirtualAddrId = -1;
113 function uEditCreateNewAddr() {
114 var addr = new aua();
115 addr.id(uEditVirtualAddrId--);
117 addr.usr(patron.id());
118 addr.state(defaultState);
119 addr.country(defaultCountry);
120 if(patron.addresses().length == 0) {
121 patron.mailing_address(addr);
122 patron.billing_address(addr);
124 uEditBuildAddrFields(patron, addr);
125 patron.addresses().push(addr);
126 uEditIterateFields(function(f) { uEditCheckValid(f); });
131 /* kicks off the UI drawing */
132 function uEditDraw(identTypes, groups, statCats, surveys ) {
133 hideMe($('uedit_loading'));
134 unHideMe($('ue_maintd'));
137 uEditDrawIDTypes(identTypes);
138 uEditDrawGroups(groups);
139 uEditDrawStatCats(statCats);
140 uEditDrawSurveys(surveys);
141 uEditDefineData(patron);
143 uEditIterateFields(function(f) { uEditActivateField(f) });
144 uEditIterateFields(function(f) { uEditCheckValid(f); });
149 /** Applies the event handlers and sets the data for the field */
150 function uEditActivateField(field) {
152 if( field.widget.id ) {
153 field.widget.node = $(field.widget.id);
157 $n(field.widget.base, field.widget.name);
160 uEditSetOnchange(field);
162 if(field.widget.onblur) {
163 field.widget.node.onblur =
164 function() { field.widget.onblur(field); };
167 var val = field.object[field.key]();
168 if(val == null) return;
170 if( field.widget.type == 'input' )
171 field.widget.node.value = val;
173 if( field.widget.type == 'select' )
174 setSelector(field.widget.node, val);
176 if( field.widget.type == 'checkbox' )
177 field.widget.node.checked =
178 (val && val != 'f') ? true : false;
180 if( field.widget.onload )
181 field.widget.onload(val);
185 if(field.key == 'ident_value') alert(field.widget.onblur);
191 /* set up the onchange event for the field */
192 function uEditSetOnchange(field) {
193 var func = function() {uEditOnChange( field );}
194 field.widget.node.onchange = func;
196 if(field.widget.type != 'select')
197 field.widget.node.onkeyup = func;
200 /* find the current value of the field object's widget */
201 function uEditNodeVal(field) {
202 if(field.widget.type == 'input')
203 return field.widget.node.value;
205 if(field.widget.type == 'checkbox')
206 return field.widget.node.checked;
208 if(field.widget.type == 'select')
209 return getSelectorVal(field.widget.node);
213 /* update a field value */
214 function uEditOnChange(field) {
216 var newval = uEditNodeVal(field);
217 field.object[field.key](newval);
218 field.object.ischanged(1);
220 if(field.widget.onpostchange)
221 field.widget.onpostchange(field, newval);
224 uEditIterateFields(function(f) { uEditCheckValid(f); });
229 function uEditCheckValid(field) {
230 var newval = uEditNodeVal(field);
233 if(field.widget.regex) {
234 if(newval.match(field.widget.regex))
235 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
237 addCSSClass(field.widget.node, CSS_INVALID_DATA);
240 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
246 addCSSClass(field.widget.node, CSS_INVALID_DATA);
249 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
254 /* find a field object by object key */
255 function uEditFindFieldByKey(key) {
256 var fields = grep( dataFields,
257 function(item) { return (item.key == key); });
258 return (fields) ? fields[0] : null;
261 /* find a list of fields by object key */
262 function uEditFindFieldsByKey(key) {
263 return grep( dataFields,
264 function(item) { return (item.key == key); });
267 /* find a field object by widget id */
268 function uEditFindFieldByWId(id) {
269 var fields = grep( dataFields,
270 function(item) { return (item.widget.id == id); });
271 return (fields) ? fields[0] : null;
275 function uEditIterateFields(callback) {
276 for( var f in dataFields ) {
277 callback(dataFields[f]);
282 function uEditGetErrorStrings() {
287 if( field.widget.node.className.indexOf(CSS_INVALID_DATA) != -1) {
288 var str = $(field.errkey).innerHTML;
289 if(str) errors.push(str);
295 if(errors[0]) return errors;
299 function uEditAlertErrors() {
300 var errors = uEditGetErrorStrings();
301 if(!errors) return false;
302 alert(errors.join("\n"));
307 /* send the user to the database */
308 function uEditSaveUser() {
310 if(uEditGetErrorStrings()) {
315 alert(patron.ident_type2());
316 alert(patron.ischanged());
318 var req = new Request(UPDATE_PATRON, SESSION, patron);
320 var result = req.result();
322 if( checkILSEvent(result) )
323 alert(js2JSON(result));
325 alert($('ue_success').innerHTML);
327 if (window.xulG && typeof window.xulG.save == 'function') {
328 window.xulG.on_save(patron);
330 location.href = location.href;
335 var uEditDupHashes = {};
336 var uEditDupTemplate;
338 function uEditRunDupeSearch(type, search_hash) {
340 if(!patron.isnew()) return;
342 _debug('dup search: ' + js2JSON(search_hash));
344 var req = new Request(PATRON_SEARCH, SESSION, search_hash);
346 var container = $('dup_div_container');
347 if(!uEditDupTemplate)
348 uEditDupTemplate = container.removeChild($('dup_div'));
350 /* clear any existing dups for this type */
351 iterate( container.getElementsByTagName('div'),
353 if( d.getAttribute('type') == type ) {
354 container.removeChild(d)
360 /*req.callback(uEditHandleDupResults);*/
363 uEditHandleDupResults( r.getResultObject(), search_hash, type, container );
370 function uEditHandleDupResults(ids, search_hash, type, container) {
372 _debug('dup search results: ' + js2JSON(ids));
374 if(!(ids && ids[0])) /* no results */
375 return uEditDupHashes[type] = null;
377 /* add a dup link to the UI and plug in the data */
378 var node = uEditDupTemplate.cloneNode(true);
379 container.appendChild(node);
380 node.setAttribute('type', type);
382 var link = $n(node, 'link');
383 link.setAttribute('type', type);
385 $n(node,'count').appendChild(text(ids.length));
387 for( var o in search_hash )
388 $n(node, 'data').appendChild(
389 text(search_hash[o].value + ' '));
391 uEditDupHashes[type] = search_hash;
395 if(confirm($('ue_dup_ident1').innerHTML))
396 uEditShowSearch(type);
402 function uEditShowSearch(link) {
403 var type = link.getAttribute('type');
405 window.xulG.spawn_search(uEditDupHashes[type]);
406 else alert('Search would be:\n' + js2JSON(uEditDupHashes[type]));