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 = {};
20 /* fetch the necessary data to start off */
21 function uEditInit() {
24 session = cgi.param('ses');
25 if(cgi.param('adv')) advanced = true
26 if(!session) throw "User session is not defined";
30 $('uedit_user').appendChild(text(USER.usrname()));
31 uEditShowPage('uedit_userid');
33 setTimeout( function() { uEditBuild(); }, 20 );
36 /* ------------------------------------------------------------------------------ */
38 /* ------------------------------------------------------------------------------ */
39 function uEditFetchIdentTypes() {
40 var req = new Request(FETCH_ID_TYPES);
45 function uEditFetchStatCats() {
46 var req = new Request(SC_FETCH_ALL, SESSION);
51 function uEditFetchSurveys() {
52 var req = new Request(SV_FETCH_ALL, SESSION);
57 function uEditFetchGroups() {
58 var req = new Request(FETCH_GROUPS);
62 /* ------------------------------------------------------------------------------ */
66 /* fetches necessary and builds the UI */
67 function uEditBuild() {
68 //fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
70 uEditBuildLibSelector();
71 patron = fetchFleshedUser(cgi.param('usr'));
72 if(!patron) patron = uEditNewPatron();
76 uEditFetchIdentTypes(),
79 uEditFetchSurveys() );
81 if(patron.isnew()) uEditCreateNewAddr();
85 /* creates a new patron object with card attached */
86 function uEditNewPatron() {
87 var patron = new au();
95 patron.stat_cat_entries([]);
96 patron.survey_responses([]);
98 patron.home_ou(USER.ws_ou());
102 /* Creates a new blank address, adds it to the user and the fields array */
103 var uEditVirtualAddrId = -1;
104 function uEditCreateNewAddr() {
105 var addr = new aua();
106 addr.id(uEditVirtualAddrId--);
108 addr.usr(patron.id());
109 addr.state(defaultState);
110 addr.country(defaultCountry);
111 if(patron.addresses().length == 0) {
112 patron.mailing_address(addr);
113 patron.billing_address(addr);
115 uEditBuildAddrFields(patron, addr);
116 patron.addresses().push(addr);
117 uEditIterateFields(function(f) { uEditCheckValid(f); });
122 /* kicks off the UI drawing */
123 function uEditDraw(identTypes, groups, statCats, surveys ) {
124 hideMe($('uedit_loading'));
125 unHideMe($('ue_maintd'));
128 uEditDrawIDTypes(identTypes);
129 uEditDrawGroups(groups);
130 uEditDrawStatCats(statCats);
131 uEditDrawSurveys(surveys);
132 uEditDefineData(patron);
134 uEditIterateFields(function(f) { uEditActivateField(f) });
135 uEditIterateFields(function(f) { uEditCheckValid(f); });
140 /** Applies the event handlers and sets the data for the field */
141 function uEditActivateField(field) {
143 if( field.widget.id ) {
144 field.widget.node = $(field.widget.id);
148 $n(field.widget.base, field.widget.name);
151 uEditSetOnchange(field);
153 var val = field.object[field.key]();
154 if(val == null) return;
156 if( field.widget.type == 'input' )
157 field.widget.node.value = val;
159 if( field.widget.type == 'select' )
160 setSelector(field.widget.node, val);
162 if( field.widget.type == 'checkbox' )
163 field.widget.node.checked =
164 (val && val != 'f') ? true : false;
166 if( field.widget.onload )
167 field.widget.onload(val);
171 /* set up the onchange event for the field */
172 function uEditSetOnchange(field) {
173 var func = function() {uEditOnChange( field );}
174 field.widget.node.onchange = func;
176 if(field.widget.type != 'select')
177 field.widget.node.onkeyup = func;
180 /* find the current value of the field object's widget */
181 function uEditNodeVal(field) {
182 if(field.widget.type == 'input')
183 return field.widget.node.value;
185 if(field.widget.type == 'checkbox')
186 return field.widget.node.checked;
188 if(field.widget.type == 'select')
189 return getSelectorVal(field.widget.node);
193 /* update a field value */
194 function uEditOnChange(field) {
196 uEditCheckValid(field);
199 var newval = uEditNodeVal(field);
200 field.object[field.key](newval);
201 field.object.ischanged(1);
203 if(field.widget.onpostchange)
204 field.widget.onpostchange(field, newval);
206 uEditIterateFields(function(f) { uEditCheckValid(f); });
211 function uEditCheckValid(field) {
212 var newval = uEditNodeVal(field);
215 if(field.widget.regex) {
216 if(newval.match(field.widget.regex))
217 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
219 addCSSClass(field.widget.node, CSS_INVALID_DATA);
222 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
228 addCSSClass(field.widget.node, CSS_INVALID_DATA);
231 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
236 /* find a field object by object key */
237 function uEditFindFieldByKey(key) {
238 var fields = grep( dataFields,
239 function(item) { return (item.key == key); });
240 return (fields) ? fields[0] : null;
243 /* find a list of fields by object key */
244 function uEditFindFieldsByKey(key) {
245 return grep( dataFields,
246 function(item) { return (item.key == key); });
249 /* find a field object by widget id */
250 function uEditFindFieldByWId(id) {
251 var fields = grep( dataFields,
252 function(item) { return (item.widget.id == id); });
253 return (fields) ? fields[0] : null;
257 function uEditIterateFields(callback) {
258 for( var f in dataFields ) {
259 callback(dataFields[f]);
264 function uEditGetErrorStrings() {
269 if( field.widget.node.className.indexOf(CSS_INVALID_DATA) != -1) {
270 var str = $(field.errkey).innerHTML;
271 if(str) errors.push(str);
277 if(errors[0]) return errors;
281 function uEditAlertErrors() {
282 var errors = uEditGetErrorStrings();
283 if(!errors) return false;
284 alert(errors.join("\n"));
289 /* send the user to the database */
290 function uEditSaveUser() {
292 if(uEditGetErrorStrings()) {
297 var req = new Request(UPDATE_PATRON, SESSION, patron);
299 var result = req.result();
301 if( checkILSEvent(result) )
302 alert(js2JSON(result));
304 alert($('ue_success').innerHTML);
306 if (window.xulG && typeof window.xulG.save == 'function') {
307 window.xulG.on_save(patron);
309 location.href = location.href;