1 dojo.require('fieldmapper.AutoIDL');
2 dojo.require('dijit.layout.LayoutContainer');
3 dojo.require('dijit.layout.ContentPane');
4 dojo.require('dijit.form.FilteringSelect');
5 dojo.require('dijit.Dialog');
6 dojo.require('dojox.grid.Grid');
7 dojo.require('fieldmapper.Fieldmapper');
8 dojo.require('fieldmapper.dojoData');
9 dojo.require('fieldmapper.OrgUtils');
10 dojo.require('dojo.cookie');
11 dojo.require('openils.CGI');
12 dojo.require('openils.User');
13 dojo.require('openils.Event');
14 dojo.require('openils.widget.OrgUnitFilteringSelect');
15 dojo.require('openils.PermaCrud');
16 dojo.require('openils.widget.AutoFieldWidget');
17 dojo.require('openils.widget.ProgressDialog');
23 var ouSettingValues = {};
27 var searchAssist = [];
29 function osInit(data) {
30 authtoken = new openils.CGI().param('ses') || dojo.cookie('ses');
31 user = new openils.User({authtoken:authtoken});
32 contextOrg = user.user.ws_ou();
33 openils.User.authtoken = authtoken;
35 var grps = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('csg');
36 dojo.forEach(grps, function(grp) { osGroups[grp.name()] = grp.label(); });
39 var connect = function() {
40 dojo.connect(contextOrg, 'onChange', osChangeContext);
42 // don't draw the org settings grid unless the user has permission
43 // to view org settings in at least 1 org unit
44 osContextSelector.store.fetch({query: {}, start: 0, count: 0,
45 onBegin: function(size) {
46 if(size) { osDraw(); return; }
47 dojo.removeClass('no-perms', 'hide_me');
52 new openils.User().buildPermOrgSelector('VIEW_ORG_SETTINGS', osContextSelector, null, connect);
54 fieldmapper.standardRequest(
56 'open-ils.actor.permissions.retrieve'],
58 oncomplete: function(r) {
59 var data = r.recv().content();
60 if(e = openils.Event.parse(data))
63 perm_codes[data[key].id()] = data[key].code();
68 dojo.addOnLoad(osInit);
70 function showProcessingDialog(toggle) {
71 var proc = dojo.byId('proci18n').innerHTML;
73 progressDialog.show(true, proc);
75 progressDialog.hide();
78 function osDraw(specific_setting) {
79 showProcessingDialog(true);
82 if (specific_setting) {
84 for(var key in specific_setting)
88 var types = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('coust');
94 osSettings[type.name()] = {
96 desc : type.description(),
97 type : type.datatype(),
98 fm_class : type.fm_class(),
99 update_perm : type.update_perm(),
100 grp : osGroups[type.grp()]
103 var tmp = "" + type.label() + "" + type.description() + "" + type.fm_class() + "" +
104 osGroups[type.grp()] + "" + type.name();
106 searchAssist[type.name()] = tmp.toLowerCase().replace(/[^a-z0-9]+/, '');
110 for(var key in osSettings)
118 //Limits those functions seen to the ones that have similar text to
119 //that which is provided. Not case sensitive.
120 function osLimitSeen(text) {
121 showProcessingDialog(true);
123 text = text.toLowerCase().replace(/[^a-z0-9]+/, '');
128 for(var n in searchAssist)
129 if(searchAssist[n].indexOf(text) != -1)
132 //Don't update on an empty list as this causes bizarre errors.
133 if(names.length == 0) {
134 showProcessingDialog(false);
136 var noresults = dojo.byId('noresults').innerHTML;
137 myDialog = new dijit.Dialog({ content: noresults});
142 ouSettingValues = {}; // Clear the values.
146 function doSearch() {
147 var query = dojo.byId("searchBox").value;
150 return false; //Keep form from submitting
153 function clearSearch() {
154 dojo.byId("searchBox").value = "";
158 function osToJson() {
159 //console.log(dojo.toJson(ouSettingValues));
160 dojo.byId('jsonOutput').value = dojo.toJson(ouSettingValues);
161 osJSONOutDialog.show();
164 //Draws the grid based upon a given array of items to draw.
165 function osDrawNames(names) {
166 fieldmapper.standardRequest(
168 'open-ils.actor.ou_setting.ancestor_default.batch'],
170 params: [contextOrg, names, authtoken],
171 oncomplete: function(r) {
172 var data = r.recv().content();
173 if(e = openils.Event.parse(data))
176 ouSettingValues[key] = data[key];
177 osLoadGrid(ouSettingValues);
179 showProcessingDialog(false);
185 function osChangeContext() {
186 if(contextOrg == osContextSelector.getValue())
188 contextOrg = osContextSelector.getValue();
192 function osLoadGrid(data) {
193 var gridData = {items:[]}
194 for(var key in data) {
195 var setting = osSettings[key];
196 setting.context = null;
197 setting.value = null;
199 setting.context = data[key].org;
200 setting.value = data[key].value;
202 gridData.items.push({name:key});
204 gridData.items = gridData.items.sort(
206 var seta = osSettings[a.name];
207 var setb = osSettings[b.name];
208 if(seta.label > setb.label) return 1;
209 if(seta.label < setb.label) return -1;
213 gridData.identifier = 'name';
214 var store = new dojo.data.ItemFileReadStore({data:gridData});
215 var model = new dojox.grid.data.DojoData(
216 null, store, {rowsPerPage: 100, clientSort: true, query:{name:'*'}});
218 osGrid.setModel(model);
219 osGrid.setStructure(osGridLayout);
223 function osGetGridData(rowIdx) {
224 var data = this.grid.model.getRow(rowIdx);
226 var setting = osSettings[data.name];
227 var value = setting[this.field];
228 if(value == null) return '';
232 return fieldmapper.aou.findOrgUnit(value).shortname();
234 if(setting.noInherit)
238 if(setting.fm_class) {
239 var autoWidget = new openils.widget.AutoFieldWidget(
241 fmClass : setting.fm_class,
242 selfReference : true,
249 if(autoWidget.getDisplayString())
250 return autoWidget.getDisplayString();
253 if(setting.type == 'bool') {
255 return dojo.byId('os-true').innerHTML;
256 return dojo.byId('os-false').innerHTML;
263 function osGetEditLink(rowIdx) {
264 var data = this.grid.model.getRow(rowIdx);
269 function osFormatEditLink(name) {
270 return this.value.replace(/SETTING/, name);
273 function osLaunchEditor(name) {
274 osEditDialog._osattr = name;
276 var perms = ['UPDATE_ORG_UNIT_SETTING_ALL'];
277 if(osSettings[name].update_perm && perm_codes[osSettings[name].update_perm]) {
278 perms.push(perm_codes[osSettings[name].update_perm]);
280 user.buildPermOrgSelector(
282 osEditContextSelector, osSettings[name].context
284 dojo.byId('os-edit-name').innerHTML = osSettings[name].label;
285 dojo.byId('os-edit-desc').innerHTML = osSettings[name].desc || '';
287 dojo.style(osEditTextBox.domNode, 'display', 'none');
288 dojo.style(osEditCurrencyTextBox.domNode, 'display', 'none');
289 dojo.style(osEditNumberTextBox.domNode, 'display', 'none');
290 dojo.style(osEditBoolSelect.domNode, 'display', 'none');
292 var fmClass = osSettings[name].fm_class;
296 if(osEditAutoWidget) {
297 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
298 osEditAutoWidget.destroy();
301 var autoWidget = new openils.widget.AutoFieldWidget(
304 selfReference : true,
305 parentNode : dojo.create('div', null, dojo.byId('os-edit-auto-widget')),
306 widgetValue : osSettings[name].value
311 osEditAutoWidget = w;
317 switch(osSettings[name].type) {
319 widget = osEditNumberTextBox;
322 widget = osEditCurrencyTextBox;
325 widget = osEditBoolSelect;
328 widget = osEditTextBox;
331 dojo.style(widget.domNode, 'display', 'block');
332 widget.setValue(osSettings[name].value);
336 function osEditSetting(deleteMe) {
338 var name = osEditDialog._osattr;
346 if(osSettings[name].fm_class) {
347 var val = osEditAutoWidget.attr('value');
348 osEditAutoWidget.domNode.parentNode.removeChild(osEditAutoWidget.domNode);
349 osEditAutoWidget.destroy();
350 osEditAutoWidget = null;
351 if(val == null || val == '') return;
355 switch(osSettings[name].type) {
357 obj[name] = osEditNumberTextBox.getValue();
358 if(obj[name] == null) return;
361 obj[name] = osEditCurrencyTextBox.getValue();
362 if(obj[name] == null) return;
365 var val = osEditBoolSelect.getValue();
366 obj[name] = (val == 'true') ? true : false;
369 obj[name] = osEditTextBox.getValue();
370 if(obj[name] == null) return;
375 fieldmapper.standardRequest(
376 ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'],
378 params: [authtoken, osEditContextSelector.getValue(), obj],
379 oncomplete: function(r) {
380 var res = r.recv().content();
381 if(e = openils.Event.parse(res))