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 );
71 uEditBuildLibSelector();
72 patron = fetchFleshedUser(cgi.param('usr'));
73 if(!patron) patron = uEditNewPatron();
77 uEditFetchIdentTypes(),
80 uEditFetchSurveys() );
82 if(patron.isnew()) uEditCreateNewAddr();
86 /* creates a new patron object with card attached */
87 function uEditNewPatron() {
88 var patron = new au();
96 patron.stat_cat_entries([]);
97 patron.survey_responses([]);
99 patron.home_ou(USER.ws_ou());
100 var rand = Math.random();
101 rand = parseInt( rand * 10000 );
103 $('ue_password_plain').appendChild(text(rand));
107 /* Creates a new blank address, adds it to the user and the fields array */
108 var uEditVirtualAddrId = -1;
109 function uEditCreateNewAddr() {
110 var addr = new aua();
111 addr.id(uEditVirtualAddrId--);
113 addr.usr(patron.id());
114 addr.state(defaultState);
115 addr.country(defaultCountry);
116 if(patron.addresses().length == 0) {
117 patron.mailing_address(addr);
118 patron.billing_address(addr);
120 uEditBuildAddrFields(patron, addr);
121 patron.addresses().push(addr);
122 uEditIterateFields(function(f) { uEditCheckValid(f); });
127 /* kicks off the UI drawing */
128 function uEditDraw(identTypes, groups, statCats, surveys ) {
129 hideMe($('uedit_loading'));
130 unHideMe($('ue_maintd'));
133 uEditDrawIDTypes(identTypes);
134 uEditDrawGroups(groups);
135 uEditDrawStatCats(statCats);
136 uEditDrawSurveys(surveys);
137 uEditDefineData(patron);
139 uEditIterateFields(function(f) { uEditActivateField(f) });
140 uEditIterateFields(function(f) { uEditCheckValid(f); });
145 /** Applies the event handlers and sets the data for the field */
146 function uEditActivateField(field) {
148 if( field.widget.id ) {
149 field.widget.node = $(field.widget.id);
153 $n(field.widget.base, field.widget.name);
156 uEditSetOnchange(field);
158 if(field.widget.onblur) {
159 field.widget.node.onblur =
160 function() { field.widget.onblur(field); };
163 var val = field.object[field.key]();
164 if(val == null) return;
166 if( field.widget.type == 'input' )
167 field.widget.node.value = val;
169 if( field.widget.type == 'select' )
170 setSelector(field.widget.node, val);
172 if( field.widget.type == 'checkbox' )
173 field.widget.node.checked =
174 (val && val != 'f') ? true : false;
176 if( field.widget.onload )
177 field.widget.onload(val);
181 if(field.key == 'ident_value') alert(field.widget.onblur);
187 /* set up the onchange event for the field */
188 function uEditSetOnchange(field) {
189 var func = function() {uEditOnChange( field );}
190 field.widget.node.onchange = func;
192 if(field.widget.type != 'select')
193 field.widget.node.onkeyup = func;
196 /* find the current value of the field object's widget */
197 function uEditNodeVal(field) {
198 if(field.widget.type == 'input')
199 return field.widget.node.value;
201 if(field.widget.type == 'checkbox')
202 return field.widget.node.checked;
204 if(field.widget.type == 'select')
205 return getSelectorVal(field.widget.node);
209 /* update a field value */
210 function uEditOnChange(field) {
212 var newval = uEditNodeVal(field);
213 field.object[field.key](newval);
214 field.object.ischanged(1);
216 if(field.widget.onpostchange)
217 field.widget.onpostchange(field, newval);
220 uEditIterateFields(function(f) { uEditCheckValid(f); });
225 function uEditCheckValid(field) {
226 var newval = uEditNodeVal(field);
229 if(field.widget.regex) {
230 if(newval.match(field.widget.regex))
231 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
233 addCSSClass(field.widget.node, CSS_INVALID_DATA);
236 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
242 addCSSClass(field.widget.node, CSS_INVALID_DATA);
245 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
250 /* find a field object by object key */
251 function uEditFindFieldByKey(key) {
252 var fields = grep( dataFields,
253 function(item) { return (item.key == key); });
254 return (fields) ? fields[0] : null;
257 /* find a list of fields by object key */
258 function uEditFindFieldsByKey(key) {
259 return grep( dataFields,
260 function(item) { return (item.key == key); });
263 /* find a field object by widget id */
264 function uEditFindFieldByWId(id) {
265 var fields = grep( dataFields,
266 function(item) { return (item.widget.id == id); });
267 return (fields) ? fields[0] : null;
271 function uEditIterateFields(callback) {
272 for( var f in dataFields ) {
273 callback(dataFields[f]);
278 function uEditGetErrorStrings() {
283 if( field.widget.node.className.indexOf(CSS_INVALID_DATA) != -1) {
284 var str = $(field.errkey).innerHTML;
285 if(str) errors.push(str);
291 if(errors[0]) return errors;
295 function uEditAlertErrors() {
296 var errors = uEditGetErrorStrings();
297 if(!errors) return false;
298 alert(errors.join("\n"));
303 /* send the user to the database */
304 function uEditSaveUser() {
306 if(uEditGetErrorStrings()) {
311 var req = new Request(UPDATE_PATRON, SESSION, patron);
313 var result = req.result();
315 if( checkILSEvent(result) )
316 alert(js2JSON(result));
318 alert($('ue_success').innerHTML);
320 if (window.xulG && typeof window.xulG.save == 'function') {
321 window.xulG.on_save(patron);
323 location.href = location.href;
328 var uEditDupHashes = {};
329 var uEditDupTemplate;
331 function uEditRunDupeSearch(type, search_hash) {
333 if(!patron.isnew()) return;
335 _debug('dup search: ' + js2JSON(search_hash));
337 var req = new Request(PATRON_SEARCH, SESSION, search_hash);
339 var container = $('dup_div_container');
340 if(!uEditDupTemplate)
341 uEditDupTemplate = container.removeChild($('dup_div'));
343 /* clear any existing dups for this type */
344 iterate( container.getElementsByTagName('div'),
346 if( d.getAttribute('type') == type ) {
347 container.removeChild(d)
353 /*req.callback(uEditHandleDupResults);*/
356 uEditHandleDupResults( r.getResultObject(), search_hash, type, container );
363 function uEditHandleDupResults(ids, search_hash, type, container) {
365 _debug('dup search results: ' + js2JSON(ids));
367 if(!(ids && ids[0])) /* no results */
368 return uEditDupHashes[type] = null;
370 /* add a dup link to the UI and plug in the data */
371 var node = uEditDupTemplate.cloneNode(true);
372 container.appendChild(node);
373 node.setAttribute('type', type);
375 var link = $n(node, 'link');
376 link.setAttribute('type', type);
378 $n(node,'count').appendChild(text(ids.length));
380 for( var o in search_hash )
381 $n(node, 'data').appendChild(
382 text(search_hash[o].value + ' '));
384 uEditDupHashes[type] = search_hash;
388 if(confirm($('ue_dup_ident1').innerHTML))
389 uEditShowSearch(type);
395 function uEditShowSearch(link) {
396 var type = link.getAttribute('type');
398 window.xulG.spawn_search(uEditDupHashes[type]);
399 else alert('Search would be:\n' + js2JSON(uEditDupHashes[type]));