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 = {};
16 /* fetch the necessary data to start off */
17 function uEditInit() {
20 session = cgi.param('ses');
21 if(cgi.param('adv')) advanced = true
22 if(!session) throw "User session is not defined";
26 $('uedit_user').appendChild(text(USER.usrname()));
27 uEditShowPage('uedit_userid');
29 setTimeout( function() { uEditBuild(); }, 20 );
33 function uEditBuild() {
34 //fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
36 /* these have to be synchronous */
37 uEditBuildLibSelector();
39 patron = fetchFleshedUser(cgi.param('usr'));
40 if(!patron) patron = uEditNewPatron();
43 uEditFetchIdentTypes(),
46 uEditFetchSurveys() );
50 /* creates a new patron object with card attached */
51 function uEditNewPatron() {
52 var patron = new au();
59 patron.stat_cat_entries([]);
60 patron.survey_responses([]);
65 /* ------------------------------------------------------------------------------ */
67 /* ------------------------------------------------------------------------------ */
68 function uEditFetchIdentTypes() {
69 var req = new Request(FETCH_ID_TYPES);
74 function uEditFetchStatCats() {
75 var req = new Request(SC_FETCH_ALL, SESSION);
80 function uEditFetchSurveys() {
81 var req = new Request(SV_FETCH_ALL, SESSION);
86 function uEditFetchGroups() {
87 var req = new Request(FETCH_GROUPS);
91 /* ------------------------------------------------------------------------------ */
94 function uEditBuildLibSelector( node, depth, selector ) {
95 if(!selector) selector = $('ue_org_selector');
96 if(!node) { depth = 0; node = globalOrgTree; }
98 var opt = insertSelectorVal( selector, -1, node.name(), node.id(), null, depth++ );
100 if(!findOrgType(node.ou_type()).can_have_users()) opt.disabled = true;
102 if( node.id() == USER.ws_ou() )
103 setSelector(selector, node.id());
105 for( var c in node.children() )
106 uEditBuildLibSelector(node.children()[c], depth, selector);
109 function uEditDrawIDTypes(types) {
110 var pri_sel = $('ue_primary_ident_type');
111 var sec_sel = $('ue_secondary_ident_type');
113 for( var t in types ) {
115 if(!type.name()) continue;
116 identTypesCache[type.id()] = type;
117 setSelectorVal( pri_sel, idx, type.name(), type.id() );
118 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
126 function uEditDraw(identTypes, groups, statCats, surveys ) {
128 hideMe($('uedit_loading'));
129 unHideMe($('ue_maintd'));
131 uEditDrawIDTypes(identTypes);
132 uEditDefineData(patron, identTypes, groups, statCats, surveys );
134 for( var f in dataFields )
135 uEditActivateField(dataFields[f]);
139 /** Applies the event handlers and set the data for the field */
140 function uEditActivateField(field) {
142 if( field.widget.id ) {
143 field.widget.node = $(field.widget.id);
147 $n(field.widget.base, field.widget.name);
150 uEditSetOnchange(field);
152 var val = field.object[field.key]();
153 if(val == null) return;
155 if( field.widget.type == 'input' )
156 field.widget.node.value = val;
158 if( field.widget.type == 'select' )
159 setSelector(field.widget.node, val);
161 if( field.widget.type == 'checkbox' )
162 field.widget.node.checked =
163 (val && val != 'f') ? true : false;
165 if( field.widget.onload )
166 field.widget.onload(val);
170 function uEditSetOnchange(field) {
171 var func = function() {uEditOnChange( field );}
172 field.widget.node.onchange = func;
173 field.widget.node.onkeyup = func;
176 function uEditNodeVal(field) {
177 if(field.widget.type == 'input')
178 return field.widget.node.value;
180 if(field.widget.type == 'checkbox')
181 return field.widget.node.checked;
183 if(field.widget.type == 'select')
184 return getSelectorVal(field.widget.node);
188 function uEditOnChange(field) {
189 var newval = uEditNodeVal(field);
193 if(field.widget.regex) {
194 if(newval.match(field.widget.regex))
195 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
197 addCSSClass(field.widget.node, CSS_INVALID_DATA);
200 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
206 addCSSClass(field.widget.node, CSS_INVALID_DATA);
209 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
213 field.object[field.key](newval);
214 field.object.ischanged(1);
216 if(field.widget.onpostchange)
217 field.widget.onpostchange(field, newval);
220 function uEditFindFieldByKey(key) {
221 var fields = grep( dataFields,
222 function(item) { return (item.key == key); });
223 return (fields) ? fields[0] : null;
226 function uEditFindFieldByWId(id) {
227 var fields = grep( dataFields,
228 function(item) { return (item.widget.id == id); });
229 return (fields) ? fields[0] : null;
232 function uEditSaveUser() {
234 var req = new Request(UPDATE_PATRON, SESSION, patron);
236 var result = req.result();
238 if( checkILSEvent(result) )
239 alert(js2JSON(result));
241 alert($('ue_success').innerHTML);
243 if (window.xulG && typeof window.xulG.save == 'function') {
244 window.xulG.on_save(patron);