<title>&conify.grp_tree.group_tree.title;</title>
<style type="text/css">
- @import url('/js/dojo/dojox/grid/_grid/tundraGrid.css');
+ @import url('/js/dojo/dojox/grid/resources/Grid.css');
+ @import url('/js/dojo/dojox/grid/resources/tundraGrid.css');
@import url('/js/dojo/dojo/resources/dojo.css');
@import url('/js/dojo/dijit/themes/tundra/tundra.css');
@import url('/js/dojo/dojox/widget/Toaster/Toaster.css');
width: 75%;
height: 100%;
}
-
+
+ .dojoxGrid table {
+ margin: 0;
+ }
</style>
<!-- The OpenSRF API writ JS -->
- <script language='javascript' src='/IDL2js' type='text/javascript'></script>
- <script language='javascript' src='/opac/common/js/utils.js' type='text/javascript'></script>
- <script language='javascript' src='/opac/common/js/CGI.js' type='text/javascript'></script>
- <script language='javascript' src='/opac/common/js/JSON_v1.js' type='text/javascript'></script>
+ <script src='/IDL2js' type='text/javascript'></script>
+ <script src='/opac/common/js/utils.js' type='text/javascript'></script>
+ <script src='/opac/common/js/CGI.js' type='text/javascript'></script>
+ <script src='/opac/common/js/JSON_v1.js' type='text/javascript'></script>
<!-- Dojo goodness -->
<script type="text/javascript" src="../admin.js"></script>
<script type="text/javascript" src="/js/dojo/dojo/dojo.js"></script>
- <script type="text/javascript" src="/js/dojo/dojo/openils_dojo.js"></script>
+ <script type="text/javascript" src="/js/dojo/dojo/openils_dojo.js"></script>
<script type="text/javascript" src="/js/dojo/dijit/dijit.js"></script>
<script type="text/javascript" src="grp_tree.js"></script>
- <script type="text/javascript"><![CDATA[
- var dirtyStore = [];
- var current_group;
-
- var _group_list = server.pcrud.retrieveAll('pgt', { order_by : { pgt : 'name' } });
- var _group_data = pgt.toStoreData( _group_list );
- var group_store = new dojo.data.ItemFileWriteStore({ data : _group_data });
-
- group_store.onSet = function (item, attr, o, n) {
- if (attr == 'ischanged') return;
- if (n == o) return;
- this.setValue( item, 'ischanged', 1);
- };
-
- dojo.addOnUnload( function (event) {
-
- group_store.fetch({
- query : { ischanged : 1 },
- queryOptions : { deep : true },
- onItem : function (item, req) { try { if (this.isItem( item )) dirtyStore.push( item ); } catch (e) { /* meh */ } },
- scope : group_store
- });
-
- if (dirtyStore.length > 0) {
- var confirmation = confirm( pgt_strings.CONFIRM_EXIT_PGT );
-
- if (confirmation) {
- for (var i in dirtyStore) {
- current_group = dirtyStore[i];
- save_group(true);
- }
- }
- }
-
- });
-
- var _ou_type_list = server.pcrud.retrieveAll('aout', { order_by : { aout : 'depth' } });
- var _ou_type_data = aout.toStoreData( _ou_type_list );
- var ou_type_store = new dojo.data.ItemFileReadStore({ data : _ou_type_data });
-
- var _perm_list = server.pcrud.retrieveAll('ppl', { order_by : { ppl : 'code' } });
- var _perm_data = ppl.toStoreData( _perm_list, 'code' );
- var _perm_name_data = ppl.toStoreData( _perm_list, 'code', { identifier : 'code' } );
-
- var perm_store = new dojo.data.ItemFileWriteStore({ data : _perm_data });
- var perm_name_store = new dojo.data.ItemFileWriteStore({ data : _perm_name_data });
-
- var _perm_map_list = server.pcrud.retrieveAll('pgpm');
- var _perm_map_data = pgpm.toStoreData( _perm_map_list, 'id' );
- var perm_map_store = new dojo.data.ItemFileWriteStore({ data : _perm_map_data });
-
- perm_map_store.onSet = function (item, attr, o, n) {
- if (attr == 'ischanged') return;
- if (n == o) return;
-
- this.setValue( item, 'ischanged', 1);
-
- if (attr == 'grantable' && (typeof (n) != 'string'))
- this.setValue(item, 'grantable', n ? 't' : 'f');
- }
-
- dojo.addOnUnload( function (event) { save_them_all(); });
-
- ]]></script>
</head>
minSize="200"
jsId="group_tree"
>
-
- <script type="dojo/method" event="onClick" args="item,node">
-<![CDATA[
- right_pane_toggler.show();
-
- current_group = item;
- window.current_fm_group = new pgt().fromStoreItem(item);
-
- perm_map_model.query = { grp : current_group ? group_store.getValue(current_group,'id') : -1 };
- perm_map_model.refresh();
- perm_grid.refresh();
-
- highlighter.editor_pane.green.play();
- status_update( dojo.string.substitute( pgt_strings.STATUS_EDITING, [this.store.getValue( item, 'name' )]) );
-
- new_kid_button.disabled = false;
- save_group_button.disabled = false;
- delete_group_button.disabled = false;
-
- var main_settings_fields = [ 'name', 'perm_interval', 'description'];
- for ( var i in main_settings_fields ) {
- var field = main_settings_fields[i];
- var value = this.store.getValue( current_group, field );
-
- if (!value) {
- window["editor_pane_" + field].setValue( '' ); // unset the value
- if (field != 'description') window["editor_pane_" + field].setDisplayedValue( '' ); // unset the value
- } else window["editor_pane_" + field].setValue( value );
- }
-
- if ( this.store.getValue( current_group, '_trueRoot' ) == 'true' ) {
- editor_pane_parent.disabled = true;
- editor_pane_parent.setValue(null);
- editor_pane_parent.setDisplayedValue('');
- editor_pane_parent.validate(false);
- } else {
- editor_pane_parent.disabled = false;
- editor_pane_parent.validate(true);
- editor_pane_parent.setValue( this.store.getValue( current_group, 'parent' ) );
- }
-
- editor_pane_application_perm.setValue( this.store.getValue( current_group, 'application_perm' ) );
- editor_pane_hold_priority.setValue( this.store.getValue( current_group, 'hold_priority' ) );
-
- editor_pane_usergroup.setChecked( this.store.getValue( current_group, 'usergroup' ) == 't' ? true : false );
-]]>
- </script>
-
- <script type="dojo/method" event="getLabel" args="item,pI">
- var label = this.store.getValue(item,'name');
- if (this.store.getValue(item,'ischanged') == 1) label = '* ' + label;
- return label;
- </script>
-
</div>
</div>
<div id="right_pane" dojoType="dijit.layout.ContentPane" sizeShare="300">
- <script type="dojo/method">
- window.right_pane_toggler = new dojo.fx.Toggler({ node: 'right_pane'});
- window.right_pane_toggler.hide();
- </script>
<div dojoType="dijit.layout.TabContainer">
<div id="editor_pane" dojoType="dijit.layout.ContentPane" title="&conify.grp_tree.group_config.label;">
- <script type="dojo/method">
- highlighter.group_tree = {};
- highlighter.editor_pane = {};
- highlighter.group_tree.green = dojox.fx.highlight( { color : '#B4FFB4', node : 'group_tree', duration : 500 } );
- highlighter.group_tree.red = dojox.fx.highlight( { color : '#FF2018', node : 'group_tree', duration : 500 } );
- highlighter.editor_pane.green = dojox.fx.highlight( { color : '#B4FFB4', node : 'editor_pane', duration : 500 } );
- highlighter.editor_pane.red = dojox.fx.highlight( { color : '#FF2018', node : 'editor_pane', duration : 500 } );
- </script>
<table class="tundra" style="margin:10px;">
<tr>
<th>&conify.grp_tree.group_name.label;</th>
<td>
<span id="editor_pane_name" dojoType="dijit.form.ValidationTextBox" jsId="editor_pane_name" regExp=".+" required="true">
- <script type="dojo/connect" event="onChange">
- if (current_group) {
- group_store.setValue( current_group, "name", this.getValue() );
- }
- </script>
</span>
<span dojoType="openils.widget.TranslatorPopup" targetObject="current_fm_group" field="name"></span>
</td>
<th>&conify.grp_tree.permission_interval.label;</th>
<td>
<span id="editor_pane_perm_interval" dojoType="dijit.form.ValidationTextBox" jsId="editor_pane_perm_interval" regExp="^\d+ (?:y.*|mo.*|d.*)$" required="true">
- <script type="dojo/connect" event="onChange">
- if (current_group) {
- group_store.setValue( current_group, "perm_interval", this.getValue() );
- }
- </script>
</span>
</td>
</tr>
searchAttr="code"
jsId="editor_pane_application_perm"
>
- <script type="dojo/connect" event="onChange">
-<![CDATA[
- if (current_group && this.getValue()) {
- group_store.setValue( current_group, "application_perm", this.getValue() );
- }
-]]>
- </script>
</div>
</td>
</tr>
dojoType="dijit.form.NumberSpinner"
jsId="editor_pane_hold_priority"
>
- <script type="dojo/connect" event="onChange">
-<![CDATA[
- if (current_group && this.getValue()) {
- group_store.setValue( current_group, "hold_priority", this.getValue() );
- }
-]]>
- </script>
</div>
</td>
</tr>
ignoreCase="true"
required="true"
>
- <script type="dojo/connect" event="onChange">
-<![CDATA[
- if (current_group && this.getValue()) {
- this.store.setValue( current_group, "parent", this.getValue() );
- }
-]]>
- </script>
</div>
</td>
</tr>
<div dojoType="dijit.layout.ContentPane" orientation="horizontal" style="margin-bottom: 20px;">
<button jsId="save_group_button" dojoType="dijit.form.Button" label="&conify.grp_tree.save_button.label;" onClick="save_group()">
- <script type="dojo/connect" event="startup">
- this.disabled = true;
- </script>
</button>
<button jsId="delete_group_button" dojoType="dijit.form.Button" label="&conify.grp_tree.delete_button.label;">
- <script type="dojo/connect" event="startup">
- this.disabled = true;
- </script>
- <script type="dojo/connect" event="onClick">
-<![CDATA[
-
- if (group_store.getValue( current_group, '_trueRoot' ) == 'true') {
- highlighter.editor_pane.red.play();
- status_update( dojo.string.substitute( pgt_strings.STATUS_ERR_DELETING, [group_store.getValue( current_group, 'name' )]) );
- return false;
- }
-
- if ( current_group.children ) {
- var kids = current_group.children;
- if (!dojo.isArray(kids)) kids = [kids];
-
- var existing_kids = dojo.filter(
- kids,
- function(kid){ return kid.isdeleted[0] != 1 }
- );
- if ( existing_kids.length > 0) {
- highlighter.editor_pane.red.play();
- status_update( dojo.string.substitute( pgt_strings.STATUS_ERR_DELETING_DEPENDENCY, [group_store.getValue( current_group, 'name' ), existing_kids.length]) );
- return;
- }
- }
-
- if ( confirm( dojo.string.substitute( pgt_strings.CONFIRM_DELETE, [current_group.name]) ) ) {
- group_store.setValue( current_group, 'isdeleted', 1 );
-
- var modified_pgt = new pgt().fromStoreItem( current_group );
- modified_pgt.isdeleted( 1 );
-
- server.pcrud.eliminate( modified_pgt, {
- onerror : function (r) {
- highlighter.editor_pane.red.play();
- status_update( dojo.string.substitute( pgt_strings.CONFIRM_DELETE, [group_store.getValue( current_group, 'name' )]) );
- },
- oncomplete : function (r) {
- var old_name = group_store.getValue( current_group, 'name' );
-
- group_store.fetch({
- query : { id : group_store.getValue( current_group, 'id' ) },
- queryOptions : { deep : true },
- onItem : function (item, req) { try { if (this.isItem( item )) this.deleteItem( item ); } catch (e) { /* meh */ } },
- scope : group_store
- });
-
- current_group = null;
-
- new_kid_button.disabled = true;
- save_group_button.disabled = true;
- delete_group_button.disabled = true;
-
- var main_settings_fields = [ 'name', 'perm_interval', 'description' ];
- for ( var i in main_settings_fields ) {
- var field = main_settings_fields[i];
- window["editor_pane_" + field].setValue( '' ); // unset the value
- window["editor_pane_" + field].setDisplayedValue( '' ); // unset the value
- }
-
- window["editor_pane_usergroup"].setChecked( false ); // unset the value
-
- highlighter.editor_pane.green.play();
- status_update( dojo.string.substitute( pgt_strings.STATUS_DELETED, [old_name]) );
- }
- });
-
- }
-]]>
- </script>
</button>
</div>
<button jsId="new_kid_button" dojoType="dijit.form.Button" label="&conify.grp_tree.new_child_button.label;">
- <script type="dojo/connect" event="startup">
- this.disabled = true;
- </script>
- <script type="dojo/connect" event="onClick">
-<![CDATA[
-
- var new_fm_obj = new pgt().fromHash({
- isnew : 1,
- name : pgt_strings.LABEL_NEW_GROUP,
- usergroup : 'f',
- parent : group_store.getValue( current_group, 'id' )
- });
-
- var err = false;
-
- server.pcrud.create( new_fm_obj, {
- onerror : function (r) {
- highlighter.editor_pane.red.play();
- status_update( pgt_strings.ERROR_CALLING_METHOD_PGT );
- err = true;
- },
- oncomplete : function (r,list) {
- group_store.newItem( list[0].toStoreItem(), { parent : current_group, attribute : 'children' } );
- }
- });
-
- if (!err) {
- highlighter.editor_pane.green.play();
- highlighter.group_tree.green.play();
- status_update( dojo.string.substitute( pgt_strings.SUCCESS_NEW_CHILD_GROUP, [group_store.getValue( current_group, 'name' )]) );
- }
-]]>
- </script>
</button>
</div>
- <div id="perm_pane" dojoType="dijit.layout.ContentPane" title="&conify.grp_tree.group_permissions.title;">
- <script type="dojo/connect" event="onShow">
- perm_map_model.query = { grp : current_group ? group_store.getValue(current_group,'id') : -1 };
- perm_map_model.refresh();
- perm_grid.refresh();
- </script>
+ <div id="perm_pane" jsId="perm_pane" dojoType="dijit.layout.ContentPane" title="&conify.grp_tree.group_permissions.title;">
<div dojoType="dijit.layout.LayoutContainer" orientation="horizontal" style="width:100%; height:100%;">
<div id="grid_container" dojoType="dijit.layout.ContentPane" sizeShare="1" layoutAlign="left">
- <div dojoType="dojox.grid.data.DojoData" id="perm_map_model" jsId="perm_map_model" store="perm_map_store"></div>
-
- <div id="perm_grid" dojoType="dojox.Grid" model="perm_map_model" jsId="perm_grid">
- <script type="dojo/connect" event="startup">
-<![CDATA[
- function get_item_part(model_field, item_search_field, item_part, model, store, datum, row) {
- var formatter = true;
-
- if (!row && row != '0') {
- row = datum;
- formatter = false;
- }
-
- if(!model.getRow(row)) return null;
- var value = null;
-
- if(!formatter) { //this.editor && (this.editor.alwaysOn || (this.grid.edit.info.rowIndex==row && this.grid.edit.info.cell==this))) {
- return model.getRow(row)[model_field];
- }
-
- var q = {};
- q[item_search_field] = model.getRow(row)[model_field];
-
- store.fetch({
- query : q,
- onItem : function (item) { value = store.getValue( item, item_part ) }
- });
-
- return value;
- }
-
- window.current_perm_grid_layout = [
- { cells : [
- [
- { name : pgt_strings.LABEL_CODE,
- field: "perm",
- formatter : dojo.partial(get_item_part, "perm", "id", "code", perm_map_model, perm_store),
- width : "auto"
- },
- { name : pgt_strings.LABEL_DEPTH,
- field : "depth",
- formatter : dojo.partial(get_item_part, "depth", "depth", "name", perm_map_model, ou_type_store),
- editor : dojox.grid.editors.select,
- options : dojo.map( _ou_type_list, function (x) { return x.name() } ),
- values : dojo.map( _ou_type_list, function (x) { return x.depth() } )
- },
- { name : pgt_strings.LABEL_GRANTABLE,
- field : "grantable",
- editor : dojox.grid.editors.bool,
- get : function (row) {
- var gr = get_item_part("id", "id", "grantable", perm_map_model, perm_map_model.store, row, row);
- if (gr == 't' || gr === true) return true;
- return false;
- },
- }
- ]
- ]
- }
- ];
-
- perm_grid.setStructure(window.current_perm_grid_layout);
-]]>
- </script>
- </div>
+<!--TODO FIXME <div dojoType="dojox.grid.data.DojoData" id="perm_map_model" jsId="perm_map_model" store="perm_map_store"></div>-->
+ <div id="grid_node"></div>
</div>
<div id="new_perm_container" dojoType="dijit.layout.ContentPane" sizeShare="1" layoutAlign="client">
<td>
<div
dojoType="dijit.form.FilteringSelect"
- Id="new_perm_select"
+ id="new_perm_select"
jsId="new_perm_select"
store="perm_store"
searchAttr="code"
<td>
<div
dojoType="dijit.form.FilteringSelect"
- Id="new_depth_select"
+ id="new_depth_select"
jsId="new_depth_select"
store="ou_type_store"
searchAttr="name"
<input
type="checkbox"
dojoType="dijit.form.CheckBox"
- Id="new_grant_checkbox"
+ id="new_grant_checkbox"
jsId="new_grant_checkbox"
value="t"></input>
</td>
</tr>
</table>
- <button dojoType="dijit.form.Button" jsId="new_mapping_add" label="&conify.grp_tree.add_mapping_button.label;">
- <script type="dojo/connect" event="onClick">
-<![CDATA[
- var new_perm = new_perm_select.getValue();
- if (!new_perm) return;
-
- var new_type_id = new_depth_select.getValue();
- if (!new_type_id) return;
-
- var new_type;
- window.ou_type_store.fetch({
- query : { id : new_type_id },
- onItem : function (item, req) { try { new_type = item } catch (e) { /* meh */ } },
- });
-
- var new_depth = ou_type_store.getValue( new_type, 'depth')
- var new_grant = new_grant_checkbox.getValue();
-
- var new_fm_obj = new pgpm().fromHash({
- isnew : 1,
- perm : new_perm,
- depth : new_depth,
- grp : group_store.getValue( current_group, 'id' ),
- grantable : new_grant ? 't' : 'f'
- });
-
- var err = false;
- server.pcrud.create(new_fm_obj, {
- onerror : function (r) {
- highlighter.group_tree.red.play();
- status_update( pgt_strings.ERROR_CALLING_METHOD_PERM_MAP );
- err = true;
- },
- oncomplete : function (r, list) {
-
- var new_item_hash = list[0].toStoreItem();
- perm_map_store.newItem( new_item_hash );
- status_update( pgt_strings.SUCCESS_NEW_PERM_MAP );
- highlighter.group_tree.green.play();
-
- perm_map_model.query = { grp : current_group ? group_store.getValue(current_group,'id') : -1 };
- perm_grid.model.sort(-1);
- perm_map_model.refresh();
- perm_grid.refresh();
-
- }
- });
-
- new_popup._closeDropDown();
-]]>
- </script>
-
- </button>
+ <button dojoType="dijit.form.Button" jsId="new_mapping_add" label="&conify.grp_tree.add_mapping_button.label;"></button>
</div>
</div>
<button jsId="save_pgpm_button" dojoType="dijit.form.Button" label="&conify.grp_tree.save_changes.label;" onClick="save_them_all()"></button><br/>
<button jsId="delete_pgpm_button" dojoType="dijit.form.Button" label="&conify.grp_tree.remove_selected.label;">
- <script type="dojo/connect" event="onClick">
-<![CDATA[
- var selected_rows = perm_grid.selection.getSelected();
-
- var selected_items = [];
- for (var i in selected_rows) {
- selected_items.push(
- perm_grid.model.getRow( selected_rows[i] ).__dojo_data_item
- );
- }
-
- perm_grid.selection.clear();
-
- for (var i in selected_items) {
- window.current_perm_map = selected_items[i];
-
- perm_map_store.setValue( window.current_perm_map, 'isdeleted', 1 );
-
- var modified_pgpm = new pgpm().fromStoreItem( window.current_perm_map );
- modified_pgpm.isdeleted( 1 );
-
- server.pcrud.eliminate( modified_pgpm, {
- onerror : function (r) {
- highlighter.editor_pane.red.play();
- status_update( dojo.string.substitute( pgt_strings.ERROR_DELETING_PERM_MAPPING, [perm_map_store.getValue( window.current_perm_map, 'id' )] ) );
- },
- oncomplete : function (r, list) {
-
- perm_map_store.fetch({
- query : { id : perm_map_store.getValue( window.current_perm_map, 'id' ) },
- onItem : function (item, req) { try { if (this.isItem( item )) this.deleteItem( item ); } catch (e) { /* meh */ } },
- scope : perm_map_store
- });
-
- window.current_perm_map = null;
-
- highlighter.editor_pane.green.play();
- status_update( pgt_strings.SUCCESS_DELETED_PERM_MAP );
- }
- });
-
- }
-]]>
- </script>
</button>
</div>
/*
-# ---------------------------------------------------------------------------
-# Copyright (C) 2008 Georgia Public Library Service / Equinox Software, Inc
-# Mike Rylander <miker@esilibrary.com>
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-# ---------------------------------------------------------------------------
-*/
+ # ---------------------------------------------------------------------------
+ # Copyright (C) 2008 Georgia Public Library Service / Equinox Software, Inc
+ # Mike Rylander <miker@esilibrary.com>
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License
+ # as published by the Free Software Foundation; either version 2
+ # of the License, or (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ # GNU General Public License for more details.
+ # ---------------------------------------------------------------------------
+ */
dojo.require('fieldmapper.AutoIDL');
dojo.require('fieldmapper.dojoData');
dojo.require('dijit.layout.SplitContainer');
dojo.require('dojox.widget.Toaster');
dojo.require('dojox.fx');
-dojo.require('dojox.grid.Grid');
dojo.require('openils.XUL');
+dojo.require('dojox.grid.cells.dijit');
+dojo.require('dojo.data.ItemFileWriteStore');
+dojo.require('dojox.grid.DataGrid');
dojo.requireLocalization("openils.conify", "conify");
// some handy globals
ses = stash.session.key;
}
var server = {};
-server.pcrud = new openils.PermaCrud({ authtoken : ses });
+server.pcrud = new openils.PermaCrud({
+ authtoken : ses
+});
server.actor = new OpenSRF.ClientSession('open-ils.actor');
var pgt_strings = dojo.i18n.getLocalization('openils.conify', 'conify');
var highlighter = {};
-function status_update (markup) {
- if (parent !== window && parent.status_update) parent.status_update( markup );
+
+var _ou_type_list = server.pcrud.retrieveAll('aout', {
+ order_by : {
+ aout : 'depth'
+ }
+});
+
+var _ou_type_data = aout.toStoreData(_ou_type_list);
+var ou_type_store = new dojo.data.ItemFileReadStore({data : _ou_type_data});
+
+var _perm_list = server.pcrud.retrieveAll('ppl', {
+ order_by : {
+ ppl : 'code'
+ }
+});
+var _perm_data = ppl.toStoreData(_perm_list, 'code');
+var _perm_name_data = ppl.toStoreData(_perm_list, 'code', {
+ identifier : 'code'
+});
+
+var perm_store = new dojo.data.ItemFileWriteStore({
+ data : _perm_data
+});
+var perm_name_store = new dojo.data.ItemFileWriteStore({
+ data : _perm_name_data
+});
+
+var _perm_map_list = server.pcrud.retrieveAll('pgpm');
+var _perm_map_data = pgpm.toStoreData(_perm_map_list, 'id');
+var perm_map_store = new dojo.data.ItemFileWriteStore({
+ data : _perm_map_data
+});
+
+perm_map_store.onSet = function(item, attr, o, n) {
+ if (attr == 'ischanged')
+ return;
+ if (n == o)
+ return;
+
+ this.setValue(item, 'ischanged', 1);
+
+ if (attr == 'grantable' && ( typeof (n) != 'string'))
+ this.setValue(item, 'grantable', n ? 't' : 'f');
}
-function save_group () {
- var modified_pgt = new pgt().fromStoreItem( current_group );
- modified_pgt.ischanged( 1 );
+function status_update(markup) {
+ if (parent !== window && parent.status_update)
+ parent.status_update(markup);
+}
+
+function save_group() {
+
+ var modified_pgt = new pgt().fromStoreItem(current_group);
+ modified_pgt.ischanged(1);
new_kid_button.disabled = false;
save_group_button.disabled = false;
delete_group_button.disabled = false;
server.pcrud.update(modified_pgt, {
- onerror : function (r) {
+ onerror : function(r) {
highlighter.editor_pane.red.play();
- status_update( dojo.string.substitute( pgt_strings.ERROR_SAVING_DATA, [group_store.getValue( current_group, 'name' )]) );
+ status_update(dojo.string.substitute(pgt_strings.ERROR_SAVING_DATA, [group_store.getValue(current_group, 'name')]));
},
- oncomplete : function (r) {
- group_store.setValue( current_group, 'ischanged', 0 );
+ oncomplete : function(r) {
+ group_store.setValue(current_group, 'ischanged', 0);
highlighter.editor_pane.green.play();
- status_update( dojo.string.substitute(pgt_strings.SUCCESS_SAVE, [group_store.getValue( current_group, 'name' )]) );
+ status_update(dojo.string.substitute(pgt_strings.SUCCESS_SAVE, [group_store.getValue(current_group, 'name')]));
},
});
}
-function save_perm_map (storeItem) {
+function save_perm_map(storeItem) {
- var modified_pgpm = new pgpm().fromStoreItem( storeItem );
- modified_pgpm.ischanged( 1 );
+ var modified_pgpm = new pgpm().fromStoreItem(storeItem);
+ modified_pgpm.ischanged(1);
server.pcrud.update(modified_pgpm, {
- onerror : function (r) {
+ onerror : function(r) {
highlighter.editor_pane.red.play();
- status_update( dojo.string.substitute(pgt_strings.ERROR_SAVING_PERM_DATA, [group_store.getValue( current_group, 'name' )]) );
+ status_update(dojo.string.substitute(pgt_strings.ERROR_SAVING_PERM_DATA, [group_store.getValue(current_group, 'name')]));
},
- oncomplete : function (r) {
- perm_map_store.setValue( storeItem, 'ischanged', 0 );
+ oncomplete : function(r) {
+ perm_map_store.setValue(storeItem, 'ischanged', 0);
highlighter.editor_pane.green.play();
- status_update( dojo.string.substitute(pgt_strings.SUCCESS_SAVE_PERM, [group_store.getValue( current_group, 'name' )]) );
+ status_update(dojo.string.substitute(pgt_strings.SUCCESS_SAVE_PERM, [group_store.getValue(current_group, 'name')]));
},
});
}
-function save_them_all (event) {
+function save_them_all(event) {
var dirtyMaps = [];
- perm_map_store.fetch({
- query : { ischanged : 1 },
- onItem : function (item, req) { try { if (this.isItem( item )) dirtyMaps.push( item ); } catch (e) { /* meh */ } },
- scope : perm_map_store
- });
-
- var confirmation = true;
+ perm_map_store.fetch({
+ query : {
+ ischanged : 1
+ },
+ onItem : function(item, req) {
+ try {
+ if (this.isItem(item))
+ dirtyMaps.push(item);
+ } catch (e) {/* meh */
+ }
+ },
+ scope : perm_map_store
+ });
+ var confirmation = true;
- if (event && dirtyMaps.length > 0) {
- confirmation = confirm( pgt_strings.CONFIRM_EXIT);
- }
+ if (event && dirtyMaps.length > 0) {
+ confirmation = confirm(pgt_strings.CONFIRM_EXIT);
+ }
- if (confirmation) {
- for (var i in dirtyMaps) {
- save_perm_map(dirtyMaps[i]);
- }
- }
+ if (confirmation) {
+ for (var i in dirtyMaps) {
+ save_perm_map(dirtyMaps[i]);
+ }
+ }
}
-dojo.addOnUnload( save_them_all );
+dojo.addOnUnload(save_them_all);
+
+var dirtyStore = [];
+var current_group;
+
+var _group_list = server.pcrud.retrieveAll('pgt', {
+ order_by : {
+ pgt : 'name'
+ }
+});
+var _group_data = pgt.toStoreData(_group_list);
+var group_store = new dojo.data.ItemFileWriteStore({
+ data : _group_data
+});
+
+group_store.onSet = function(item, attr, o, n) {
+ if (attr == 'ischanged')
+ return;
+ if (n == o)
+ return;
+ this.setValue(item, 'ischanged', 1);
+};
+
+dojo.addOnUnload(function(event) {
+
+ group_store.fetch({
+ query : {
+ ischanged : 1
+ },
+ queryOptions : {
+ deep : true
+ },
+ onItem : function(item, req) {
+ try {
+ if (this.isItem(item))
+ dirtyStore.push(item);
+ } catch (e) {/* meh */
+ }
+ },
+ scope : group_store
+ });
+
+ if (dirtyStore.length > 0) {
+ var confirmation = confirm(pgt_strings.CONFIRM_EXIT_PGT);
+
+ if (confirmation) {
+ for (var i in dirtyStore) {
+ current_group = dirtyStore[i];
+ save_group(true);
+ }
+ }
+ }
+});
+
+
+
+dojo.addOnUnload(function(event) {
+ save_them_all();
+});
+
+/** Called once everything has loaded, getting us ready for 1.7 **/
+dojo.addOnLoad(function() {
+ window.right_pane_toggler = new dojo.fx.Toggler({
+ node : 'right_pane'
+ });
+ window.right_pane_toggler.hide();
+
+ highlighter.group_tree = {};
+ highlighter.editor_pane = {};
+ highlighter.group_tree.green = dojox.fx.highlight({
+ color : '#B4FFB4',
+ node : 'group_tree',
+ duration : 500
+ });
+ highlighter.group_tree.red = dojox.fx.highlight({
+ color : '#FF2018',
+ node : 'group_tree',
+ duration : 500
+ });
+ highlighter.editor_pane.green = dojox.fx.highlight({
+ color : '#B4FFB4',
+ node : 'editor_pane',
+ duration : 500
+ });
+ highlighter.editor_pane.red = dojox.fx.highlight({
+ color : '#FF2018',
+ node : 'editor_pane',
+ duration : 500
+ });
+
+ dojo.connect(group_tree, "getLabel", group_tree, function(item, pI) {
+ var label = this.store.getValue(item, 'name');
+
+ if (this.store.getValue(item, 'ischanged') == 1)
+ label = '* ' + label;
+
+ return label;
+ });
+
+ dojo.connect(group_tree, "onClick", group_tree, function(item, node) {
+ right_pane_toggler.show();
+
+ current_group = item;
+ window.current_fm_group = new pgt().fromStoreItem(item);
+
+ perm_grid.filter({
+ grp : current_group ? group_store.getValue(current_group, 'id') : -1
+ });
+ //perm_map_store.refresh();
+ //perm_grid.refresh();
+
+ highlighter.editor_pane.green.play();
+ status_update(dojo.string.substitute(pgt_strings.STATUS_EDITING, [this.store.getValue(item, 'name')]));
+
+ new_kid_button.disabled = false;
+ save_group_button.disabled = false;
+ delete_group_button.disabled = false;
+
+ var main_settings_fields = ['name', 'perm_interval', 'description'];
+ for (var i in main_settings_fields ) {
+ var field = main_settings_fields[i];
+ var value = this.store.getValue(current_group, field);
+
+ if (!value) {
+ window["editor_pane_" + field].setValue('');
+ // unset the value
+ if (field != 'description')
+ window["editor_pane_" + field].setDisplayedValue('');
+ // unset the value
+ } else
+ window["editor_pane_" + field].setValue(value);
+ }
+
+ if (this.store.getValue(current_group, '_trueRoot') == 'true') {
+ editor_pane_parent.disabled = true;
+ editor_pane_parent.setValue(null);
+ editor_pane_parent.setDisplayedValue('');
+ editor_pane_parent.validate(false);
+ } else {
+ editor_pane_parent.disabled = false;
+ editor_pane_parent.validate(true);
+ editor_pane_parent.setValue(this.store.getValue(current_group, 'parent'));
+ }
+
+ editor_pane_application_perm.setValue(this.store.getValue(current_group, 'application_perm'));
+ editor_pane_hold_priority.setValue(this.store.getValue(current_group, 'hold_priority'));
+
+ editor_pane_usergroup.setChecked(this.store.getValue(current_group, 'usergroup') == 't' ? true : false);
+ });
+
+ dojo.connect(editor_pane_name, "onChange", editor_pane_name, function() {
+ if (current_group) {
+ group_store.setValue(current_group, "name", this.getValue());
+ }
+ });
+
+ dojo.connect(editor_pane_perm_interval, "onChange", editor_pane_perm_interval, function() {
+ if (current_group) {
+ group_store.setValue(current_group, "perm_interval", this.getValue());
+ }
+ });
+
+ dojo.connect(editor_pane_application_perm, "onChange", editor_pane_application_perm, function() {
+ if (current_group && this.getValue()) {
+ group_store.setValue(current_group, "application_perm", this.getValue());
+ }
+ });
+
+ dojo.connect(editor_pane_hold_priority, "onChange", editor_pane_hold_priority, function() {
+ if (current_group && this.getValue()) {
+ group_store.setValue(current_group, "hold_priority", this.getValue());
+ }
+ });
+
+ dojo.connect(editor_pane_parent, "onChange", editor_pane_parent, function() {
+ if (current_group && this.getValue()) {
+ this.store.setValue(current_group, "parent", this.getValue());
+ }
+ });
+
+ save_group_button.disabled = true;
+ delete_group_button.disabled = true;
+
+ dojo.connect(delete_group_button, "onClick", delete_group_button, function() {
+ if (group_store.getValue(current_group, '_trueRoot') == 'true') {
+ highlighter.editor_pane.red.play();
+ status_update(dojo.string.substitute(pgt_strings.STATUS_ERR_DELETING, [group_store.getValue(current_group, 'name')]));
+ return false;
+ }
+
+ if (current_group.children) {
+ var kids = current_group.children;
+ if (!dojo.isArray(kids))
+ kids = [kids];
+
+ var existing_kids = dojo.filter(kids, function(kid) {
+ if(kid == null)
+ return false;
+ return kid.isdeleted[0] != 1
+ });
+ if (existing_kids.length > 0) {
+ highlighter.editor_pane.red.play();
+ status_update(dojo.string.substitute(pgt_strings.STATUS_ERR_DELETING_DEPENDENCY, [group_store.getValue(current_group, 'name'), existing_kids.length]));
+ return;
+ }
+ }
+
+ if (confirm(dojo.string.substitute(pgt_strings.CONFIRM_DELETE, [current_group.name]))) {
+ group_store.setValue(current_group, 'isdeleted', 1);
+
+ var modified_pgt = new pgt().fromStoreItem(current_group);
+ modified_pgt.isdeleted(1);
+
+ server.pcrud.eliminate(modified_pgt, {
+ onerror : function(r) {
+ highlighter.editor_pane.red.play();
+ status_update(dojo.string.substitute(pgt_strings.CONFIRM_DELETE, [group_store.getValue(current_group, 'name')]));
+ },
+ oncomplete : function(r) {
+ var old_name = group_store.getValue(current_group, 'name');
+
+ group_store.fetch({
+ query : {
+ id : group_store.getValue(current_group, 'id')
+ },
+ queryOptions : {
+ deep : true
+ },
+ onItem : function(item, req) {
+ try {
+ if (this.isItem(item))
+ this.deleteItem(item);
+ } catch (e) {/* meh */
+ }
+ },
+ scope : group_store
+ });
+
+ current_group = null;
+
+ new_kid_button.disabled = true;
+ save_group_button.disabled = true;
+ delete_group_button.disabled = true;
+
+ var main_settings_fields = ['name', 'perm_interval', 'description'];
+ for (var i in main_settings_fields ) {
+ var field = main_settings_fields[i];
+ window["editor_pane_" + field].setValue('');
+ // unset the value
+ window["editor_pane_" + field].setDisplayedValue('');
+ // unset the value
+ }
+
+ window["editor_pane_usergroup"].setChecked(false);
+ // unset the value
+
+ highlighter.editor_pane.green.play();
+ status_update(dojo.string.substitute(pgt_strings.STATUS_DELETED, [old_name]));
+ }
+ });
+
+ }
+ });
+
+ new_kid_button.disabled = true;
+
+ dojo.connect(new_kid_button, "onClick", new_kid_button, function() {
+ var new_fm_obj = new pgt().fromHash({
+ isnew : 1,
+ name : pgt_strings.LABEL_NEW_GROUP,
+ usergroup : 'f',
+ parent : group_store.getValue(current_group, 'id')
+ });
+
+ var err = false;
+
+ server.pcrud.create(new_fm_obj, {
+ onerror : function(r) {
+ highlighter.editor_pane.red.play();
+ status_update(pgt_strings.ERROR_CALLING_METHOD_PGT);
+ err = true;
+ },
+ oncomplete : function(r, list) {
+ group_store.newItem(list[0].toStoreItem(), {
+ parent : current_group,
+ attribute : 'children'
+ });
+ }
+ });
+
+ if (!err) {
+ highlighter.editor_pane.green.play();
+ highlighter.group_tree.green.play();
+ status_update(dojo.string.substitute(pgt_strings.SUCCESS_NEW_CHILD_GROUP, [group_store.getValue(current_group, 'name')]));
+ }
+ });
+
+ dojo.connect(perm_pane, "onShow", perm_pane, function() {
+ perm_grid.filter({
+ grp : current_group ? group_store.getValue(current_group, 'id') : -1
+ });
+ //perm_map_model.refresh();
+ //perm_grid.refresh();
+ });
+
+ perm_grid = new dojox.grid.DataGrid({
+ query: {perm: '*'},
+ store: perm_map_store,
+ structure: [{
+ cells : [[{
+ name : pgt_strings.LABEL_CODE,
+ field : "perm",
+ formatter : function(val, rowIndex)
+ {
+ console.log(this.grid.getItem(rowIndex)["perm"][0]);
+ var perm_val = this.grid.getItem(rowIndex)["perm"][0];
+
+ var returnval = "undefined";
+ console.log("items");
+ dojo.map(_perm_data.items, function(x)
+ {
+ if(x.id == perm_val)
+ {
+ returnval = x.code;
+ }
+ });
+ return returnval;
+
+
+ perm_store.fetch({query : {id: perm_val},
+ onItem: function(item) {
+ console.log(perm_store.getValue(item));
+ }});
+ return "";
+ },
+ width : "auto"
+ }, {
+ editable:true,
+ name : pgt_strings.LABEL_DEPTH,
+ field : "depth",
+ formatter : function(item){
+ return _ou_type_list[item].name();
+ },
+ cellType : dojox.grid.cells.Select,
+ options : dojo.map(_ou_type_list, function(x) {
+ return x.name()
+ }),
+ values : dojo.map(_ou_type_list, function(x) {
+ return x.depth()
+ })
+ }, {
+ name : pgt_strings.LABEL_GRANTABLE,
+ field : "grantable",
+ editable:true,
+ cellType : dojox.grid.cells.Bool,
+ get : function(rowIndex, store) {
+ var gr = this.grid.getItem(rowIndex)["grantable"][0];
+ return (gr == 't' || gr === true);
+ },
+ }]]
+ }],
+ }, 'grid_node');
+ perm_grid.startup();
+
+ dojo.connect(new_mapping_add, "onClick", new_mapping_add, function() {
+ var new_perm = new_perm_select.getValue();
+ if (!new_perm)
+ return;
+
+ var new_type_id = new_depth_select.getValue();
+ if (!new_type_id)
+ return;
+
+ var new_type;
+ window.ou_type_store.fetch({
+ query : {
+ id : new_type_id
+ },
+ onItem : function(item, req) {
+ try {
+ new_type = item
+ } catch (e) {/* meh */
+ }
+ },
+ });
+
+ var new_depth = ou_type_store.getValue(new_type, 'depth')
+ var new_grant = new_grant_checkbox.getValue();
+
+ var new_fm_obj = new pgpm().fromHash({
+ isnew : 1,
+ perm : new_perm,
+ depth : new_depth,
+ grp : group_store.getValue(current_group, 'id'),
+ grantable : new_grant ? 't' : 'f'
+ });
+
+ var err = false;
+ server.pcrud.create(new_fm_obj, {
+ onerror : function(r) {
+ highlighter.group_tree.red.play();
+ status_update(pgt_strings.ERROR_CALLING_METHOD_PERM_MAP);
+ err = true;
+ },
+ oncomplete : function(r, list) {
+
+ var new_item_hash = list[0].toStoreItem();
+ perm_map_store.newItem(new_item_hash);
+ status_update(pgt_strings.SUCCESS_NEW_PERM_MAP);
+ highlighter.group_tree.green.play();
+
+ perm_grid.filter({
+ grp : current_group ? group_store.getValue(current_group, 'id') : -1
+ });
+ perm_grid.sort(-1);
+ //perm_map_model.refresh();
+ //perm_grid.refresh();
+
+ }
+ });
+
+ new_popup.closeDropDown();
+ });
+
+ dojo.connect(delete_pgpm_button, "onClick", delete_pgpm_button, function() {
+ var selected_items = perm_grid.selection.getSelected();
+
+ for (var i in selected_items) {
+ window.current_perm_map = selected_items[i];
+
+ perm_map_store.setValue(window.current_perm_map, 'isdeleted', 1);
+
+ var modified_pgpm = new pgpm().fromStoreItem(window.current_perm_map);
+ modified_pgpm.isdeleted(1);
+
+ server.pcrud.eliminate(modified_pgpm, {
+ onerror : function(r) {
+ highlighter.editor_pane.red.play();
+ status_update(dojo.string.substitute(pgt_strings.ERROR_DELETING_PERM_MAPPING, [perm_map_store.getValue(window.current_perm_map, 'id')]));
+ },
+ oncomplete : function(r, list) {
+
+ perm_map_store.fetch({
+ query : {
+ id : perm_map_store.getValue(window.current_perm_map, 'id')
+ },
+ onItem : function(item, req) {
+ try {
+ if (this.isItem(item))
+ this.deleteItem(item);
+ } catch (e) {/* meh */
+ }
+ },
+ scope : perm_map_store
+ });
+
+ window.current_perm_map = null;
+
+ highlighter.editor_pane.green.play();
+ status_update(pgt_strings.SUCCESS_DELETED_PERM_MAP);
+ }
+ });
+ }
+ });
+});