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 = {};
15 /* if they don't have these perms, they shouldn't be here */
16 var myPerms = [ 'CREATE_USER', 'UPDATE_USER', 'CREATE_PATRON_STAT_CAT_ENTRY_MAP' ];
21 regexes.phone = /\d{3}-\d{3}-\d{4}/;
22 regexes.email = /.+\@.+\..+/;
23 regexes.date = /^\d{4}-\d{2}-\d{2}/;
24 regexes.isnum = /^\d+$/;
28 /* fetch the necessary data to start off */
29 function uEditInit() {
32 session = cgi.param('ses');
33 if(cgi.param('adv')) advanced = true
34 if(!session) throw "User session is not defined";
38 $('uedit_user').appendChild(text(USER.usrname()));
39 uEditShowPage('uedit_userid');
41 setTimeout( function() { uEditBuild(); }, 20 );
45 function uEditBuild() {
46 fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
48 /* these have to be synchronous */
49 uEditBuildLibSelector();
51 patron = fetchFleshedUser(cgi.param('usr'));
52 if(!patron) patron = uEditNewPatron();
55 uEditFetchIdentTypes(),
58 uEditFetchSurveys() );
62 /* creates a new patron object with card attached */
63 function uEditNewPatron() {
64 var patron = new au();
71 patron.stat_cat_entries([]);
72 patron.survey_responses([]);
77 /* ------------------------------------------------------------------------------ */
79 /* ------------------------------------------------------------------------------ */
80 function uEditFetchIdentTypes() {
81 var req = new Request(FETCH_ID_TYPES);
86 function uEditFetchStatCats() {
87 var req = new Request(SC_FETCH_ALL, SESSION);
92 function uEditFetchSurveys() {
93 var req = new Request(SV_FETCH_ALL, SESSION);
98 function uEditFetchGroups() {
99 var req = new Request(FETCH_GROUPS);
103 /* ------------------------------------------------------------------------------ */
106 function uEditBuildLibSelector( node, depth, selector ) {
107 if(!selector) selector = $('ue_org_selector');
108 if(!node) { depth = 0; node = globalOrgTree; }
110 var opt = insertSelectorVal( selector, -1, node.name(), node.id(), null, depth++ );
112 if(!findOrgType(node.ou_type()).can_have_users()) opt.disabled = true;
114 if( node.id() == USER.ws_ou() )
115 setSelector(selector, node.id());
117 for( var c in node.children() )
118 uEditBuildLibSelector(node.children()[c], depth, selector);
121 function uEditDrawIDTypes(types) {
122 var pri_sel = $('ue_primary_ident_type');
123 var sec_sel = $('ue_secondary_ident_type');
125 for( var t in types ) {
127 if(!type.name()) continue;
128 identTypesCache[type.id()] = type;
129 setSelectorVal( pri_sel, idx, type.name(), type.id() );
130 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
137 function uEditDraw(identTypes, groups, statCats, surveys ) {
139 hideMe($('uedit_loading'));
140 unHideMe($('ue_maintd'));
142 uEditDrawIDTypes(identTypes);
143 uEditDefineData(patron, identTypes, groups, statCats, surveys );
145 for( var f in dataFields ) {
147 var field = dataFields[f];
149 if( field.widget.id ) {
150 field.widget.node = $(field.widget.id);
154 $n(field.widget.base, field.widget.name);
157 uEditSetOnchange(field);
159 var val = field.object[field.key]();
160 if(val == null) continue;
162 if( field.widget.type == 'input' )
163 field.widget.node.value = val;
165 if( field.widget.type == 'select' )
166 setSelector(field.widget.node, val);
168 if( field.widget.onload )
169 field.widget.onload(val);
174 function uEditSetOnchange(field) {
175 var func = function() {uEditOnChange( field );}
176 field.widget.node.onchange = func;
177 field.widget.node.onkeyup = func;
180 function uEditNodeVal(field) {
181 if(field.widget.type == 'input')
182 return field.widget.node.value;
184 if(field.widget.type == 'select')
185 return getSelectorVal(field.widget.node);
189 function uEditOnChange(field) {
190 var newval = uEditNodeVal(field);
194 if(field.widget.regex) {
195 if(newval.match(field.widget.regex))
196 removeCSSClass(field.widget.node, 'invalid_value');
198 addCSSClass(field.widget.node, 'invalid_value');
201 removeCSSClass(field.widget.node, 'invalid_value');
207 addCSSClass(field.widget.node, 'invalid_value');
210 removeCSSClass(field.widget.node, 'invalid_value');
214 field.object[field.key](newval);
215 field.object.ischanged(1);
217 if(field.widget.onpostchange)
218 field.widget.onpostchange(field, newval);
221 function uEditFindFieldByKey(key) {
222 var fields = grep( dataFields,
223 function(item) { return (item.key == key); });
224 return (fields) ? fields[0] : null;
227 function uEditFindFieldByWId(id) {
228 var fields = grep( dataFields,
229 function(item) { return (item.widget.id == id); });
230 return (fields) ? fields[0] : null;
233 function uEditSaveUser() {
235 var req = new Request(UPDATE_PATRON, SESSION, patron);
237 var result = req.result();
239 if( checkILSEvent(result) )
240 alert(js2JSON(result));
242 alert($('ue_success').innerHTML);
244 if (window.xulG && typeof window.xulG.save == 'function') {
245 window.xulG.on_save(patron);