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());
103 /* Creates a new blank address, adds it to the user and the fields array */
104 var uEditVirtualAddrId = -1;
105 function uEditCreateNewAddr() {
106 var addr = new aua();
107 addr.id(uEditVirtualAddrId--);
109 addr.usr(patron.id());
110 addr.state(defaultState);
111 addr.country(defaultCountry);
112 if(patron.addresses().length == 0) {
113 patron.mailing_address(addr);
114 patron.billing_address(addr);
116 uEditBuildAddrFields(patron, addr);
117 patron.addresses().push(addr);
118 uEditIterateFields(function(f) { uEditCheckValid(f); });
123 /* kicks off the UI drawing */
124 function uEditDraw(identTypes, groups, statCats, surveys ) {
125 hideMe($('uedit_loading'));
126 unHideMe($('ue_maintd'));
129 uEditDrawIDTypes(identTypes);
130 uEditDrawGroups(groups);
131 uEditDrawStatCats(statCats);
132 uEditDrawSurveys(surveys);
133 uEditDefineData(patron);
135 uEditIterateFields(function(f) { uEditActivateField(f) });
136 uEditIterateFields(function(f) { uEditCheckValid(f); });
141 /** Applies the event handlers and sets the data for the field */
142 function uEditActivateField(field) {
144 if( field.widget.id ) {
145 field.widget.node = $(field.widget.id);
149 $n(field.widget.base, field.widget.name);
152 uEditSetOnchange(field);
154 var val = field.object[field.key]();
155 if(val == null) return;
157 if( field.widget.type == 'input' )
158 field.widget.node.value = val;
160 if( field.widget.type == 'select' )
161 setSelector(field.widget.node, val);
163 if( field.widget.type == 'checkbox' )
164 field.widget.node.checked =
165 (val && val != 'f') ? true : false;
167 if( field.widget.onload )
168 field.widget.onload(val);
172 /* set up the onchange event for the field */
173 function uEditSetOnchange(field) {
174 var func = function() {uEditOnChange( field );}
175 field.widget.node.onchange = func;
177 if(field.widget.type != 'select')
178 field.widget.node.onkeyup = func;
181 /* find the current value of the field object's widget */
182 function uEditNodeVal(field) {
183 if(field.widget.type == 'input')
184 return field.widget.node.value;
186 if(field.widget.type == 'checkbox')
187 return field.widget.node.checked;
189 if(field.widget.type == 'select')
190 return getSelectorVal(field.widget.node);
194 /* update a field value */
195 function uEditOnChange(field) {
197 var newval = uEditNodeVal(field);
198 field.object[field.key](newval);
199 field.object.ischanged(1);
201 if(field.widget.onpostchange)
202 field.widget.onpostchange(field, newval);
204 uEditIterateFields(function(f) { uEditCheckValid(f); });
209 function uEditCheckValid(field) {
210 var newval = uEditNodeVal(field);
213 if(field.widget.regex) {
214 if(newval.match(field.widget.regex))
215 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
217 addCSSClass(field.widget.node, CSS_INVALID_DATA);
220 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
226 addCSSClass(field.widget.node, CSS_INVALID_DATA);
229 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
234 /* find a field object by object key */
235 function uEditFindFieldByKey(key) {
236 var fields = grep( dataFields,
237 function(item) { return (item.key == key); });
238 return (fields) ? fields[0] : null;
241 /* find a list of fields by object key */
242 function uEditFindFieldsByKey(key) {
243 return grep( dataFields,
244 function(item) { return (item.key == key); });
247 /* find a field object by widget id */
248 function uEditFindFieldByWId(id) {
249 var fields = grep( dataFields,
250 function(item) { return (item.widget.id == id); });
251 return (fields) ? fields[0] : null;
255 function uEditIterateFields(callback) {
256 for( var f in dataFields ) {
257 callback(dataFields[f]);
262 function uEditGetErrorStrings() {
267 if( field.widget.node.className.indexOf(CSS_INVALID_DATA) != -1) {
268 var str = $(field.errkey).innerHTML;
269 if(str) errors.push(str);
275 if(errors[0]) return errors;
279 function uEditAlertErrors() {
280 var errors = uEditGetErrorStrings();
281 if(!errors) return false;
282 alert(errors.join("\n"));
287 /* send the user to the database */
288 function uEditSaveUser() {
290 if(uEditGetErrorStrings()) {
295 alert(patron.ident_type2());
296 alert(patron.ischanged());
298 var req = new Request(UPDATE_PATRON, SESSION, patron);
300 var result = req.result();
302 if( checkILSEvent(result) )
303 alert(js2JSON(result));
305 alert($('ue_success').innerHTML);
307 if (window.xulG && typeof window.xulG.save == 'function') {
308 window.xulG.on_save(patron);
310 location.href = location.href;