moving dojo to /js/; adding the start of the permission editor; using a dropdown...
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 29 Mar 2008 05:33:02 +0000 (05:33 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 29 Mar 2008 05:33:02 +0000 (05:33 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/dojo-admin@9160 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/conify/global/actor/org_unit.html
Open-ILS/web/conify/global/actor/org_unit_type.html
Open-ILS/web/conify/global/admin.html
Open-ILS/web/conify/global/permission/grp_tree.html
Open-ILS/web/conify/global/permission/grp_tree.js
Open-ILS/web/conify/global/permission/perm_list.html [new file with mode: 0644]
Open-ILS/web/conify/global/permission/perm_list.js [new file with mode: 0644]
Open-ILS/web/conify/js/conify/fieldmapper/addToStoreData.js

index e7a6e3e..5be7978 100644 (file)
@@ -3,9 +3,9 @@
                <title>Confiy :: Global :: Actor :: Org Units</title>
 
                <style type="text/css">
-                       @import url("/conify/js/dojo/resources/dojo.css");
-                       @import url("/conify/js/dijit/themes/tundra/tundra.css");
-                       @import url("/conify/js/dojox/widget/Toaster/Toaster.css");
+                       @import url("/js/dojo/resources/dojo.css");
+                       @import url("/js/dijit/themes/tundra/tundra.css");
+                       @import url("/js/dojox/widget/Toaster/Toaster.css");
                </style>
 
                <style>
@@ -41,8 +41,8 @@
                <script language='javascript' src='/opac/common/js/OrgTree.js' type='text/javascript'></script>
 
                <!-- Dojo goodness -->
-               <script type="text/javascript" src="/conify/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
-               <script type="text/javascript" src="/conify/js/dijit/dijit.js"></script>
+               <script type="text/javascript" src="/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
+               <script type="text/javascript" src="/js/dijit/dijit.js"></script>
 
                <script type="text/javascript" src="org_unit.js"></script>
 
index cc49013..c720273 100644 (file)
@@ -3,9 +3,9 @@
                <title>Confiy :: Global :: Actor :: Org Unit Types</title>
 
                <style type="text/css">
-                       @import url("/conify/js/dojo/resources/dojo.css");
-                       @import url("/conify/js/dijit/themes/tundra/tundra.css");
-                       @import url("/conify/js/dojox/widget/Toaster/Toaster.css");
+                       @import url("/js/dojo/resources/dojo.css");
+                       @import url("/js/dijit/themes/tundra/tundra.css");
+                       @import url("/js/dojox/widget/Toaster/Toaster.css");
                </style>
 
                <style>
@@ -41,8 +41,8 @@
                <script language='javascript' src='/opac/common/js/OrgTree.js' type='text/javascript'></script>
 
                <!-- Dojo goodness -->
-               <script type="text/javascript" src="/conify/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
-               <script type="text/javascript" src="/conify/js/dijit/dijit.js"></script>
+               <script type="text/javascript" src="/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
+               <script type="text/javascript" src="/js/dijit/dijit.js"></script>
 
                <script type="text/javascript" src="org_unit_type.js"></script>
 
index d332dfa..833329f 100644 (file)
@@ -3,9 +3,9 @@
                <title>Conify :: Global :: Admin</title>
 
         <style type="text/css">
-            @import url("/conify/js/dojo/resources/dojo.css");
-            @import url("/conify/js/dijit/themes/tundra/tundra.css");
-            @import url("/conify/js/dojox/widget/Toaster/Toaster.css");
+            @import url("/js/dojo/resources/dojo.css");
+            @import url("/js/dijit/themes/tundra/tundra.css");
+            @import url("/js/dojox/widget/Toaster/Toaster.css");
         </style>
 
         <style>
@@ -20,8 +20,8 @@
         </style>
 
         <!-- Dojo goodness -->
-        <script type="text/javascript" src="/conify/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
-        <script type="text/javascript" src="/conify/js/dijit/dijit.js"></script>
+        <script type="text/javascript" src="/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
+        <script type="text/javascript" src="/js/dijit/dijit.js"></script>
 
         <script type="text/javascript">
             dojo.require('dojo.parser');
@@ -47,6 +47,7 @@
                                        <li><a href="" onclick="dojo.byId('action_iframe').src = 'actor/org_unit_type.html'; return false;">Organization Types</a></li>
                                        <li><a href="" onclick="dojo.byId('action_iframe').src = 'actor/org_unit.html'; return false;">Organizational Units</a></li>
                                        <li><a href="" onclick="dojo.byId('action_iframe').src = 'permission/grp_tree.html'; return false;">Permission Groups</a></li>
+                                       <li><a href="" onclick="dojo.byId('action_iframe').src = 'permission/perm_list.html'; return false;">Permissions</a></li>
                                </ul>
                        </div>
                        <div id="content_pane" jsId="content_pane" dojoType="dijit.layout.ContentPane" layoutAlign="client" style="margin: 2px; border-top: 2px solid grey; border-bottom: 2px solid grey; border-left: 2px solid grey;">
index c3d284c..6934117 100644 (file)
@@ -3,9 +3,9 @@
                <title>Confiy :: Global :: Permission :: Group Tree</title>
 
                <style type="text/css">
-                       @import url("/conify/js/dojo/resources/dojo.css");
-                       @import url("/conify/js/dijit/themes/tundra/tundra.css");
-                       @import url("/conify/js/dojox/widget/Toaster/Toaster.css");
+                       @import url("/js/dojo/resources/dojo.css");
+                       @import url("/js/dijit/themes/tundra/tundra.css");
+                       @import url("/js/dojox/widget/Toaster/Toaster.css");
                </style>
 
                <style>
@@ -41,8 +41,8 @@
                <script language='javascript' src='/opac/common/js/OrgTree.js' type='text/javascript'></script>
 
                <!-- Dojo goodness -->
-               <script type="text/javascript" src="/conify/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
-               <script type="text/javascript" src="/conify/js/dijit/dijit.js"></script>
+               <script type="text/javascript" src="/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
+               <script type="text/javascript" src="/js/dijit/dijit.js"></script>
 
                <script type="text/javascript" src="grp_tree.js"></script>
 
                         params : [ ses, { id : { "!=" : null } }, { order_by : { pgt : 'name' } } ],
                         onerror : function (r) { status_update('Problem fetching groups') },
                         oncomplete : function (r) {
-                            ou_group_store = new dojo.data.ItemFileWriteStore({ data : pgt.toStoreData( r.recv().content() ) });
-                            ou_group_store.onSet = function (item, attr, n, o) {
+                            window._group_list = r.recv().content();
+                            window._group_data = pgt.toStoreData( window._group_list );
+                            window.group_store = new dojo.data.ItemFileWriteStore({ data : window._group_data });
+                            window.group_store.onSet = function (item, attr, n, o) {
                                 if (attr == 'ischanged') return;
                                 if (n == o) return;
                                 this.setValue( item, 'ischanged', 1);
                             };
                             dojo.addOnUnload( function (event) {
 
-                                ou_group_store.fetch({
+                                window.group_store.fetch({
                                     query : { ischanged : 1 },
                                     queryOptions : { deep : true },
                                     onItem : function (item, req) { try { if (this.isItem( item )) window.dirtyStore.push( item ); } catch (e) { /* meh */ } },
-                                    scope : ou_group_store
+                                    scope : window.group_store
                                 });
 
                                 if (dirtyStore.length > 0) {
                         }
                     }).send();
 
+                                       function get_perm_part(part, model, row) {
+                                               var value;
+                                               perm_store.fetchItemByIdentity({
+                                                       identity : model.getRow(row).perm,
+                                                       onItem : function (item) { value = perm_store.getValue( item, part ) }
+                                               });
+                                               return value;
+                                       }
+
+                                       // XXX Use existing perm grabbing functions??  see old interface
+                    pCRUD.request({
+                        method : 'open-ils.permacrud.search.ppl.atomic',
+                        timeout : 10,
+                        params : [ ses, { id : { "!=" : null } }, { order_by : { ppl : 'code' } } ],
+                        onerror : function (r) { status_update('Problem fetching perms') },
+                        oncomplete : function (r) {
+    
+                            window._perm_list = r.recv().content();
+                            window._perm_data = ppl.toStoreData( window._perm_list, 'code' );
+                            window._perm_name_data = ppl.toStoreData( window._perm_list, 'code', { identifier : 'code' } );
+                            window.perm_store = new dojo.data.ItemFileWriteStore({ data : window._perm_data });
+                            window.perm_name_store = new dojo.data.ItemFileWriteStore({ data : window._perm_name_data });
+    
+                            window.current_perm_grid_layout = [
+                                {   cells : [
+                                        [
+                                            {  name : "Depth",
+                                                                                               field : "perm",
+                                                                                               width : "5em",
+                                                                                               noresize : true
+                                                                                       }, 
+                                            {  name : "Code",
+                                                                                               //get : dojo.partial(get_perm_part, "code", perm_map_model),
+                                                                                               width : "300px"
+                                                                                       },
+                                            {  name : "Description",
+                                                                                               //get : dojo.partial(get_perm_part, "code", perm_map_model),
+                                                                                               width : "auto"
+                                                                                       }
+                                        ]
+                                    ]
+                                }
+                            ];
+    
+                        }
+                    }).send();
+
+                    pCRUD.request({
+                        method : 'open-ils.permacrud.search.pgmp.atomic',
+                        timeout : 10,
+                        params : [ ses, { id : { "!=" : null } } ],
+                        onerror : function (r) { status_update('Problem fetching perm maps') },
+                        oncomplete : function (r) {
+                            window._perm_map_list = r.recv().content();
+                            window._perm_map_data = pgpm.toStoreData( window._perm_map_list, 'id' );
+                            window.perm_map_store = new dojo.data.ItemFileWriteStore({ data : window._perm_map_data });
+                        }
+                    }).send();
+
+                    pCRUD.request({
+                        method : 'open-ils.permacrud.search.aout.atomic',
+                        timeout : 10,
+                        params : [ ses, { id : { "!=" : null } }, { order_by : { aout : 'depth' } } ],
+                        onerror : function (r) { status_update('Problem fetching types') },
+                        oncomplete : function (r) {
+                                                       window._ou_type_list =  r.recv().content();
+                                                       window._ou_type_data = aout.toStoreData( window._ou_type_list );
+                            window.ou_type_store = new dojo.data.ItemFileWriteStore({ data : window._ou_type_data });
+                        }
+                    }).send();
+
                                </script>
                                <div
                                  id="group_tree"
                                  label="Permission Groups"
                                  query="{'_top':'true'}"
                                  dojoType="dijit.Tree"
-                                 store="ou_group_store"
+                                 store="group_store"
                                  minSize="200"
                                  jsId="group_tree"
                                >
                                                save_out_button.disabled = false;
                                                delete_out_button.disabled = false;
 
-                                               var main_settings_fields = [ 'name', 'perm_interval', 'description', 'application_perm'];
+                                               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 );
                                                        editor_pane_parent.setValue( this.store.getValue( current_group, 'parent' ) );
                                                }
 
+                                               editor_pane_application_perm.setValue( this.store.getValue( current_group, 'application_perm' ) );
+
                                                editor_pane_usergroup.setChecked( this.store.getValue( current_group, 'usergroup' ) == 't' ? true : false );
 
                                        </script>
                                        window.right_pane_toggler.hide();
                                </script>
 
-                                       <div id="editor_pane" dojoType="dijit.layout.ContentPane">
+                               <div dojoType="dijit.layout.TabContainer">
+                                       <div id="editor_pane" dojoType="dijit.layout.ContentPane" title="Group Configuration">
                                                <script type="dojo/method">
                                                        highlighter.group_tree = {};
                                                        highlighter.editor_pane = {};
                                                                        <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) {
-                                                                                               ou_group_store.setValue( current_group, "name", this.getValue() );
+                                                                                               group_store.setValue( current_group, "name", this.getValue() );
                                                                                        }
                                                                                </script>
                                                                        </span>
                                                                          id="editor_pane_description"
                                                                          dojoType="dijit.form.Textarea"
                                                                          jsId="editor_pane_description"
-                                                                         onChange="if (current_group) ou_group_store.setValue( current_group, "description", this.getValue() );"
+                                                                         onChange="if (current_group) group_store.setValue( current_group, "description", this.getValue() );"
                                                                        ></textarea>
                                                                </td>
                                                        </tr>
                                                                        <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) {
-                                                                                               ou_group_store.setValue( current_group, "perm_interval", this.getValue() );
+                                                                                               group_store.setValue( current_group, "perm_interval", this.getValue() );
                                                                                        }
                                                                                </script>
                                                                        </span>
                                                        <tr>
                                                                <th>Edit Permission</th>
                                                                <td>
-                                                                       <span id="editor_pane_application_perm" dojoType="dijit.form.ValidationTextBox" jsId="editor_pane_application_perm">
+                                                                       <div
+                                                                         id="editor_pane_application_perm"
+                                                                         dojoType="dijit.form.FilteringSelect"
+                                                                         store="perm_name_store"
+                                                                         jsId="editor_pane_application_perm"
+                                                                       >
                                                                                <script type="dojo/connect" event="onChange">
                                                                                        if (current_group && this.getValue()) {
-                                                                                               ou_group_store.setValue( current_group, "application_perm", this.getValue() );
+                                                                                               group_store.setValue( current_group, "application_perm", this.getValue() );
                                                                                        }
                                                                                </script>
-                                                                       </span>
+                                                                       </div>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                          id="editor_pane_parent"
                                                                          dojoType="dijit.form.FilteringSelect"
                                                                          jsId="editor_pane_parent"
-                                                                         store="ou_group_store"
+                                                                         store="group_store"
                                                                          searchAttr="name"
                                                                          ignoreCase="true"
                                                                          required="true"
                                                                          jsId="editor_pane_usergroup"
                                                                          type="checkbox"
                                                                          dojoType="dijit.form.CheckBox"
-                                                                         onChange='if (current_group) ou_group_store.setValue( current_group, "usergroup", this.checked ? "t" : "f" );'
+                                                                         onChange='if (current_group) group_store.setValue( current_group, "usergroup", this.checked ? "t" : "f" );'
                                                                        />
                                                                </td>
                                                        </tr>
                                                                </script>
                                                                <script type="dojo/connect" event="onClick">
        
-                                                                       if (ou_group_store.getValue( current_group, '_trueRoot' ) == 'true') {
+                                                                       if (group_store.getValue( current_group, '_trueRoot' ) == 'true') {
                                                                                highlighter.editor_pane.red.play();
-                                                                               status_update( 'Cannot delete' + ou_group_store.getValue( current_group, 'name' ) + ', you need at least one.' );
+                                                                               status_update( 'Cannot delete' + group_store.getValue( current_group, 'name' ) + ', you need at least one.' );
                                                                                return false;
                                                                        }
 
                                                                                );
                                                                                if ( existing_kids.length > 0) {
                                                                                        highlighter.editor_pane.red.play();
-                                                                                       status_update( 'Cannot delete' + ou_group_store.getValue( current_group, 'name' ) + ', ' + existing_kids.length + ' subordinates still exist.' );
+                                                                                       status_update( 'Cannot delete' + group_store.getValue( current_group, 'name' ) + ', ' + existing_kids.length + ' subordinates still exist.' );
                                                                                        return;
                                                                                }
                                                                        }
        
                                                                        if ( confirm('Are you sure you want to delete ' + current_group.name + '?')) {
-                                                                               ou_group_store.setValue( current_group, 'isdeleted', 1 );
+                                                                               group_store.setValue( current_group, 'isdeleted', 1 );
        
                                                                                var modified_pgt = new pgt().fromStoreItem( current_group );
                                                                                modified_pgt.isdeleted( 1 );
                                                                                        params : [ ses, modified_pgt ],
                                                                                        onerror : function (r) {
                                                                                                highlighter.editor_pane.red.play();
-                                                                                               status_update( 'Problem deleting ' + ou_group_store.getValue( current_group, 'name' ) );
+                                                                                               status_update( 'Problem deleting ' + group_store.getValue( current_group, 'name' ) );
                                                                                        },
                                                                                        oncomplete : function (r) {
                                                                                                var res = r.recv();
                                                                                                if ( res && res.content() ) {
        
-                                                                                                       var old_name = ou_group_store.getValue( current_group, 'name' );
+                                                                                                       var old_name = group_store.getValue( current_group, 'name' );
 
-                                                                                                       ou_group_store.fetch({
-                                                                                                               query : { id : ou_group_store.getValue( current_group, 'id' ) },
+                                                                                                       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 : ou_group_store
+                                                                                                               scope : group_store
                                                                                                        });
        
                                                                                                        current_group = null;
                                                                                                        save_out_button.disabled = true;
                                                                                                        delete_out_button.disabled = true;
                        
-                                                                                                       var main_settings_fields = [ 'name', 'perm_interval', 'description', 'application_perm' ];
+                                                                                                       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
                                                                        isnew                   : 1,
                                                                        name                    : 'New Group',
                                                                        usergroup               : 'f',
-                                                                       parent                  : ou_group_store.getValue( current_group, 'id' )
+                                                                       parent                  : group_store.getValue( current_group, 'id' )
                                                                });
        
                                                                var err = false;
                                                                        oncomplete : function (r) {
                                                                                var res = r.recv();
                                                                                if ( res && res.content() ) {
-                                                                                       ou_group_store.newItem(
+                                                                                       group_store.newItem(
                                                                                                res.content().toHash(),
                                                                                                { parent : current_group, attribute : 'children' }
                                                                                        );
                                                                if (!err) {
                                                                        highlighter.editor_pane.green.play();
                                                                        highlighter.group_tree.green.play();
-                                                                       status_update( 'New child Group created for ' + ou_group_store.getValue( current_group, 'name' ) );
+                                                                       status_update( 'New child Group created for ' + group_store.getValue( current_group, 'name' ) );
                                                                }
        
                                                        </script>
                                                </button>
        
                                        </div>
+
+                                       <div id="perm_pane" dojoType="dijit.layout.ContentPane" title="Group Permissions">
+                                               <!--
+                                               <div dojoType="dojox.grid.data.DojoData" id="perm_data_model"jsId="perm_data_model" rowsPerPage="20" store="perm_store" query="{ code : '*' }"></div>
+                                               <div id="perm_grid" dojoType="dojox.Grid" model="perm_data_model" structure="perm_grid_layout" jsId="perm_grid"></div>
+                                               -->
+                                       </div>
+
                                </div>
                        </div>
                </div>
index 031db97..de5b941 100644 (file)
@@ -19,6 +19,7 @@ dojo.require('dijit.layout.LayoutContainer');
 dojo.require('dijit.layout.SplitContainer');
 dojo.require('dojox.widget.Toaster');
 dojo.require('dojox.fx');
+//dojo.require('dojox.grid.Grid');
 
 // some handy globals
 var cgi = new CGI();
@@ -50,17 +51,17 @@ function save_group () {
                params : [ ses, modified_pgt ],
                onerror : function (r) {
                        highlighter.editor_pane.red.play();
-                       status_update( 'Problem saving data for ' + ou_group_store.getValue( current_group, 'name' ) );
+                       status_update( 'Problem saving data for ' + group_store.getValue( current_group, 'name' ) );
                },
                oncomplete : function (r) {
                        var res = r.recv();
                        if ( res && res.content() ) {
-                               ou_group_store.setValue( current_group, 'ischanged', 0 );
+                               group_store.setValue( current_group, 'ischanged', 0 );
                                highlighter.editor_pane.green.play();
-                               status_update( 'Saved changes to ' + ou_group_store.getValue( current_group, 'name' ) );
+                               status_update( 'Saved changes to ' + group_store.getValue( current_group, 'name' ) );
                        } else {
                                highlighter.editor_pane.red.play();
-                               status_update( 'Problem saving data for ' + ou_group_store.getValue( current_group, 'name' ) );
+                               status_update( 'Problem saving data for ' + group_store.getValue( current_group, 'name' ) );
                        }
                },
        }).send();
diff --git a/Open-ILS/web/conify/global/permission/perm_list.html b/Open-ILS/web/conify/global/permission/perm_list.html
new file mode 100644 (file)
index 0000000..4ccba07
--- /dev/null
@@ -0,0 +1,214 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+       <head>
+               <title>Confiy :: Global :: Permission :: Permission List</title>
+
+               <style type="text/css">
+                       @import url("/js/dojox/grid/_grid/tundraGrid.css");
+                       @import url("/js/dojo/resources/dojo.css");
+                       @import url("/js/dijit/themes/tundra/tundra.css");
+                       @import url("/js/dojox/widget/Toaster/Toaster.css");
+               </style>
+
+               <style>
+                       html, body {
+                               height: 100%;
+                               width: 100%;
+                               margin: 0px 0px 0px 0px;
+                               padding: 0px 0px 0px 0px;
+                               overflow: hidden;
+                       }
+
+                       #perm_grid {
+                               border: 1px solid #333;
+                               width: 100%;
+                               height: 90%;
+                       }
+               </style>
+
+               <!-- The OpenSRF API writ JS -->
+               <script language='javascript' src='/opac/common/js/utils.js' type='text/javascript'></script>
+               <script language='javascript' src='/opac/common/js/Cookies.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 language='javascript' src='/opac/common/js/opensrf.js' type='text/javascript'></script>
+               <script language='javascript' src='/opac/common/js/opensrf_xhr.js' type='text/javascript'></script>
+
+               <!-- Fieldmapper objects -->
+               <script language='javascript' src='/opac/common/js/fmall.js' type='text/javascript'></script>
+               <script language='javascript' src='/opac/common/js/fmgen.js' type='text/javascript'></script>
+               <script language='javascript' src='/opac/common/js/OrgTree.js' type='text/javascript'></script>
+
+               <!-- Dojo goodness -->
+               <script type="text/javascript" src="/js/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
+               <script type="text/javascript" src="/js/dijit/dijit.js"></script>
+
+               <script type="text/javascript" src="perm_list.js"></script>
+
+       </head>
+
+       <body class="tundra" id='pagebody'>
+
+               <div dojoType="dijit.layout.ContentPane" id="grid_container" jsId="grid_container">
+                       <script type="dojo/method">
+                               window.highlighter= {};
+                               window.highlighter.green = dojox.fx.highlight( { color : '#B4FFB4', node : 'grid_container', duration : 500 } );
+                               window.highlighter.red = dojox.fx.highlight( { color : '#FF2018', node : 'grid_container', duration : 500 } );
+
+                               window.dirtyStore = [];
+
+                pCRUD.request({
+                    method : 'open-ils.permacrud.search.ppl.atomic',
+                    timeout : 10,
+                    params : [ ses, { id : { "!=" : null } }, { order_by : { ppl : 'code' } } ],
+                    onerror : function (r) { status_update('Problem fetching perms') },
+                    oncomplete : function (r) {
+
+                        window._perm_list = r.recv().content();
+                        window._perm_data = ppl.toStoreData( window._perm_list, 'code' );
+                        window.perm_store = new dojo.data.ItemFileWriteStore({ data : window._perm_data });
+
+                           perm_store.onSet = function (item, attr, n, o) {
+                            if (attr == 'ischanged') return;
+                            if (n == o) return;
+                            this.setValue( item, 'ischanged', 1);
+                        };
+
+                                               window.perm_grid_layout = [
+                                                       {       cells : [
+                                                                       [
+                                                                               { name : "ID", field : "id", width : "5em", noresize : true }, 
+                                                                               { name : "Code", field : "code", width : "300px", editor : dojox.grid.editors.Dijit }, 
+                                                                               { name : "Description", field : "description", width : "100%", editor : dojox.grid.editors.Editor }
+                                                                       ]
+                                                               ]
+                                                       }
+                                               ];
+
+                        dojo.addOnUnload( function (event) {
+
+                            perm_store.fetch({
+                                query : { ischanged : 1 },
+                                onItem : function (item, req) { try { if (this.isItem( item )) window.dirtyStore.push( item ); } catch (e) { /* meh */ } },
+                                scope : perm_store
+                            });
+
+                            if (dirtyStore.length > 0) {
+                                var confirmation = confirm(
+                                    'There are unsaved modified Permissions!  '+
+                                    'OK to save these changes, Cancel to abandon them.'
+                                );
+
+                                if (confirmation) {
+                                    for (var i in window.dirtyStore) {
+                                        window.current_perm = window.dirtyStore[i];
+                                        save_perm(true);
+                                    }
+                                }
+                            }
+
+                        });
+                    }
+                }).send();
+
+                       </script>
+
+                       <div dojoType="dojox.grid.data.DojoData" id="perm_data_model"jsId="perm_data_model" rowsPerPage="20" store="perm_store" query="{ code : '*' }"></div>
+                       <div id="perm_grid" dojoType="dojox.Grid" model="perm_data_model" structure="perm_grid_layout" jsId="perm_grid">
+                               <script type="dojo/connect" event="onSet" args="item,attr,oldVal,newVal">
+                               </script>
+                       </div>
+
+               </div>
+
+               <div dojoType="dijit.layout.ContentPane" orientation="horizontal" style="margin-bottom: 20px;">
+       
+                       <button jsId="save_ppl_button" dojoType="dijit.form.Button" label="Save" onClick="save_perm()">
+                               <script type="dojo/connect" event="startup">
+                                       this.disabled = true;
+                               </script>
+                       </button>
+       
+                       <button jsId="delete_ppl_button" dojoType="dijit.form.Button" label="Delete">
+                               <script type="dojo/connect" event="startup">
+                                       this.disabled = true;
+                               </script>
+                               <script type="dojo/connect" event="onClick">
+       
+                                       if (perm_store.getValue( current_perm, '_trueRoot' ) == 'true') {
+                                               highlighter.red.play();
+                                               status_update( 'Cannot delete' + perm_store.getValue( current_perm, 'code' ) + ', you need at least one.' );
+                                               return false;
+                                       }
+
+                                       if ( current_perm.children ) {
+                                               var kids = current_perm.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.red.play();
+                                                       status_update( 'Cannot delete' + perm_store.getValue( current_perm, 'code' ) + ', ' + existing_kids.length + ' subordinates still exist.' );
+                                                       return;
+                                               }
+                                       }
+       
+                                       if ( confirm('Are you sure you want to delete ' + current_perm.name + '?')) {
+                                               perm_store.setValue( current_perm, 'isdeleted', 1 );
+       
+                                               var modified_ppl = new ppl().fromStoreItem( current_perm );
+                                               modified_ppl.isdeleted( 1 );
+       
+                                               pCRUD.request({
+                                                       method : 'open-ils.permacrud.delete.ppl',
+                                                       timeout : 10,
+                                                       params : [ ses, modified_ppl ],
+                                                       onerror : function (r) {
+                                                               highlighter.red.play();
+                                                               status_update( 'Problem deleting ' + perm_store.getValue( current_perm, 'code' ) );
+                                                       },
+                                                       oncomplete : function (r) {
+                                                               var res = r.recv();
+                                                               if ( res && res.content() ) {
+       
+                                                                       var old_name = perm_store.getValue( current_perm, 'code' );
+
+                                                                       perm_store.fetch({
+                                                                               query : { id : perm_store.getValue( current_perm, 'id' ) },
+                                                                               onItem : function (item, req) { try { if (this.isItem( item )) this.deleteItem( item ); } catch (e) { /* meh */ } },
+                                                                               scope : perm_store
+                                                                       });
+       
+                                                                       current_perm = null;
+       
+                                                                       new_kid_button.disabled = true;
+                                                                       save_ppl_button.disabled = true;
+                                                                       delete_ppl_button.disabled = true;
+                       
+                                                                       var main_settings_fields = [ 'code', '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
+                                                                       }
+
+                                                                       highlighter.green.play();
+                                                                       status_update( old_name + ' deleted' );
+                                                               } else {
+                                                                       highlighter.red.play();
+                                                                       status_update( 'Problem deleting ' + old_name );
+                                                               }
+                                                       }
+                                               }).send();
+       
+                                       }
+       
+                               </script>
+                       </button>
+       
+               </div>
+       
+       </body>
+</html>
diff --git a/Open-ILS/web/conify/global/permission/perm_list.js b/Open-ILS/web/conify/global/permission/perm_list.js
new file mode 100644 (file)
index 0000000..fb103e8
--- /dev/null
@@ -0,0 +1,62 @@
+dojo.require('conify.fieldmapper.addToHash', true);
+dojo.require('conify.fieldmapper.addFromHash', true);
+dojo.require('conify.fieldmapper.addToStoreData', true);
+dojo.require('conify.fieldmapper.addFromStoreItem', true);
+dojo.require('dojo.parser');
+dojo.require('dojo.data.ItemFileWriteStore');
+dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.ValidationTextBox');
+dojo.require('dijit.form.Textarea');
+dojo.require('dijit.layout.ContentPane');
+dojo.require('dojox.widget.Toaster');
+dojo.require('dojox.fx');
+dojo.require('dojox.grid.Grid');
+dojo.require('dojox.grid._data.model');
+dojo.require("dojox.grid.editors");
+
+// some handy globals
+var cgi = new CGI();
+var cookieManager = new HTTP.Cookies();
+var ses = cookieManager.read('ses') || cgi.param('ses');
+var pCRUD = new OpenSRF.ClientSession('open-ils.permacrud');
+
+var current_perm;
+var virgin_out_id = -1;
+
+var highlighter = {};
+
+function status_update (markup) {
+       if (parent !== window && parent.status_update) parent.status_update( markup );
+}
+
+function save_perm () {
+
+       var modified_ppl = new ppl().fromStoreItem( current_perm );
+       modified_ppl.ischanged( 1 );
+
+       new_kid_button.disabled = false;
+       save_out_button.disabled = false;
+       delete_out_button.disabled = false;
+
+       pCRUD.request({
+               method : 'open-ils.permacrud.update.ppl',
+               timeout : 10,
+               params : [ ses, modified_ppl ],
+               onerror : function (r) {
+                       highlighter.red.play();
+                       status_update( 'Problem saving data for ' + perm_store.getValue( current_perm, 'code' ) );
+               },
+               oncomplete : function (r) {
+                       var res = r.recv();
+                       if ( res && res.content() ) {
+                               perm_store.setValue( current_perm, 'ischanged', 0 );
+                               highlighter.green.play();
+                               status_update( 'Saved changes to ' + perm_store.getValue( current_perm, 'code' ) );
+                       } else {
+                               highlighter.red.play();
+                               status_update( 'Problem saving data for ' + perm_store.getValue( current_perm, 'code' ) );
+                       }
+               },
+       }).send();
+}
+
index e5d097e..99f803e 100644 (file)
@@ -1,14 +1,18 @@
 
 function _toStoreData (list, label, params) {
 
+       if (!params) params = {};
+
        // a sane default
        if (!params.identifier) params.identifier = 'id';
+       if (!label) label = params.label;
+       if (!label) label = params.identifier;
 
-       var data = { label : 'shortname', identifier : 'id', items : [] };
+       var data = { label : label, identifier : params.identifier, items : [] };
 
        for (var i in list) data.items.push( list[i].toHash() );
 
-       if (params.children && params['parent']) {
+       if (params.children && params.parent) {
                var _hash_list = data.items;
 
                var _find_root = {};
@@ -23,7 +27,7 @@ function _toStoreData (list, label, params) {
 
                        for (var j in _hash_list) {
                                var kid = _hash_list[j];
-                               if (kid[params['parent']] == obj[params.identifier]) {
+                               if (kid[params.parent] == obj[params.identifier]) {
                                        obj[params.children].push( { _reference : kid[params.identifier] } );
                                        kid._iskid = true;
                                        if (_find_root[kid[params.identifier]]) delete _find_root[kid[params.identifier]];
@@ -35,7 +39,7 @@ function _toStoreData (list, label, params) {
 
                for (var j in _find_root) {
                        _find_root[j]['_top'] = 'true';
-                       if (!_find_root[j][params['parent']])
+                       if (!_find_root[j][params.parent])
                                _find_root[j]['_trueRoot'] = 'true';
                }
 
@@ -63,4 +67,10 @@ pgt.toStoreData = function (list, label) {
        return _toStoreData(list, label, { 'parent' : 'parent', 'children' : 'children' });
 }
 
+/*
+ppl.toStoreData = function (list, label) {
+       if (!label) label = 'code';
+       return _toStoreData(list, label, {});
+}
+*/