www/my_base/projects/projects.js

Code
Comments
Other
Rev Date Author Line
7604 25 Feb 19 nicklas 1 /* $Id $
7604 25 Feb 19 nicklas 2   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 3   Copyright (C) 2013 Nicklas Nordborg
7604 25 Feb 19 nicklas 4
7604 25 Feb 19 nicklas 5   This file is part of BASE - BioArray Software Environment.
7604 25 Feb 19 nicklas 6   Available at http://base.thep.lu.se/
7604 25 Feb 19 nicklas 7
7604 25 Feb 19 nicklas 8   BASE is free software; you can redistribute it and/or
7604 25 Feb 19 nicklas 9   modify it under the terms of the GNU General Public License
7604 25 Feb 19 nicklas 10   as published by the Free Software Foundation; either version 3
7604 25 Feb 19 nicklas 11   of the License, or (at your option) any later version.
7604 25 Feb 19 nicklas 12
7604 25 Feb 19 nicklas 13   BASE is distributed in the hope that it will be useful,
7604 25 Feb 19 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
7604 25 Feb 19 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7604 25 Feb 19 nicklas 16   GNU General Public License for more details.
7604 25 Feb 19 nicklas 17
7604 25 Feb 19 nicklas 18   You should have received a copy of the GNU General Public License
7604 25 Feb 19 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
7604 25 Feb 19 nicklas 20   ------------------------------------------------------------------
7604 25 Feb 19 nicklas 21
7604 25 Feb 19 nicklas 22   @author Nicklas
7604 25 Feb 19 nicklas 23 */
7604 25 Feb 19 nicklas 24 'use strict';
7604 25 Feb 19 nicklas 25
7604 25 Feb 19 nicklas 26 var Projects = function()
7604 25 Feb 19 nicklas 27 {
7604 25 Feb 19 nicklas 28   var projects = {};
7604 25 Feb 19 nicklas 29   var Permission = {};
7604 25 Feb 19 nicklas 30   
7604 25 Feb 19 nicklas 31   /**
7604 25 Feb 19 nicklas 32     Initialize the page.
7604 25 Feb 19 nicklas 33   */
7604 25 Feb 19 nicklas 34   projects.initPage = function()
7604 25 Feb 19 nicklas 35   {
7604 25 Feb 19 nicklas 36     var pageId = Doc.getPageId();
7604 25 Feb 19 nicklas 37     if (pageId == 'edit-page')
7604 25 Feb 19 nicklas 38     {
7604 25 Feb 19 nicklas 39       Permission.READ = Data.int('page-data', 'read');
7604 25 Feb 19 nicklas 40       Permission.USE = Data.int('page-data', 'use');
7604 25 Feb 19 nicklas 41       Permission.RESTRICTED_WRITE = Data.int('page-data', 'restricted-write');
7604 25 Feb 19 nicklas 42       Permission.WRITE = Data.int('page-data', 'write');
7604 25 Feb 19 nicklas 43       Permission.DELETE = Data.int('page-data', 'delete');
7604 25 Feb 19 nicklas 44       Permission.SET_OWNER = Data.int('page-data', 'set-owner');
7604 25 Feb 19 nicklas 45       Permission.SET_PERMISSION = Data.int('page-data', 'set-permission');
7604 25 Feb 19 nicklas 46
7604 25 Feb 19 nicklas 47       // Save + Close buttons
7604 25 Feb 19 nicklas 48       Buttons.addClickHandler('btnSave', projects.save);
7604 25 Feb 19 nicklas 49       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 50
7604 25 Feb 19 nicklas 51       // Tab validation
7604 25 Feb 19 nicklas 52       TabControl.addTabValidator('settings.info', projects.validateProject);
7703 11 Apr 19 nicklas 53       TabControl.addTabActivateListener('settings.annotations', Annotations.onSwitchToAnnotationsTab);
7604 25 Feb 19 nicklas 54
7604 25 Feb 19 nicklas 55       // Members
7604 25 Feb 19 nicklas 56       Buttons.addClickHandler('btnAddUsers', projects.addUsers);
7604 25 Feb 19 nicklas 57       Events.addEventHandler('btnAddUsers', 'base-selected', projects.addUserCallback);
7604 25 Feb 19 nicklas 58       Buttons.addClickHandler('btnAddGroups', projects.addGroups);
7604 25 Feb 19 nicklas 59       Events.addEventHandler('btnAddGroups', 'base-selected', projects.addGroupCallback);
7604 25 Feb 19 nicklas 60       Events.addEventHandler('members', 'change', projects.membersOnChange);
7604 25 Feb 19 nicklas 61       Events.addEventHandler('members', 'base-removed', projects.memberRemoved);
7604 25 Feb 19 nicklas 62     
7604 25 Feb 19 nicklas 63       // Permissions
7604 25 Feb 19 nicklas 64       Events.addEventHandler('read', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 65       Events.addEventHandler('use', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 66       Events.addEventHandler('restricted_write', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 67       Events.addEventHandler('write', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 68       Events.addEventHandler('delete', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 69       Events.addEventHandler('setOwner', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 70       Events.addEventHandler('setPermission', 'click', projects.permissionsOnClick);
7604 25 Feb 19 nicklas 71
7604 25 Feb 19 nicklas 72       Events.addEventHandler('autoRead', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 73       Events.addEventHandler('autoUse', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 74       Events.addEventHandler('autoRestrictedWrite', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 75       Events.addEventHandler('autoWrite', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 76       Events.addEventHandler('autoDelete', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 77       Events.addEventHandler('autoSetOwner', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 78       Events.addEventHandler('autoSetPermission', 'click', projects.autoPermissionsOnClick);
7604 25 Feb 19 nicklas 79       
7604 25 Feb 19 nicklas 80       // Permission templates
7604 25 Feb 19 nicklas 81       Buttons.addClickHandler('permissiontemplate_id.select', projects.selectPermissionTemplate);
7604 25 Feb 19 nicklas 82       Events.addEventHandler('permissiontemplate_id', 'base-selected', Items.onItemSelected);
7604 25 Feb 19 nicklas 83       Events.addEventHandler('permissiontemplate_id', 'change', projects.permissionTemplateOnChange);
7604 25 Feb 19 nicklas 84       projects.permissionTemplateOnChange();
7604 25 Feb 19 nicklas 85       var frm = document.forms['project'];
7604 25 Feb 19 nicklas 86       projects.showPermissions(parseInt(frm.autoPermissions.value), 'auto_');
7604 25 Feb 19 nicklas 87       
7604 25 Feb 19 nicklas 88     }
7604 25 Feb 19 nicklas 89     else if (pageId == 'view-page')
7604 25 Feb 19 nicklas 90     {
7604 25 Feb 19 nicklas 91       var itemId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 92       var attributes = {'item-type': 'PROJECT', 'item-id': itemId};
7604 25 Feb 19 nicklas 93       Buttons.addClickHandler('btnEdit', Buttons.editItem, attributes);
7604 25 Feb 19 nicklas 94       Buttons.addClickHandler('btnDelete', Buttons.deleteItem, attributes);
7604 25 Feb 19 nicklas 95       Buttons.addClickHandler('btnRestore', Buttons.restoreItem, attributes);
7604 25 Feb 19 nicklas 96       Buttons.addClickHandler('btnUsingItems', Buttons.showUsingItems, attributes);
7604 25 Feb 19 nicklas 97       Buttons.addClickHandler('btnDeletePermanently', Buttons.deleteItemPermanently, attributes);
7604 25 Feb 19 nicklas 98       Buttons.addClickHandler('btnSetOwner', Buttons.setOwner, attributes);
7604 25 Feb 19 nicklas 99       Buttons.addClickHandler('btnExport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 100       Buttons.addClickHandler('btnImport', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 101       Buttons.addClickHandler('btnRunPlugin', Buttons.runPlugin, attributes);
7604 25 Feb 19 nicklas 102       Buttons.addClickHandler('btnSetActive', projects.setActive, attributes);
7604 25 Feb 19 nicklas 103       
7604 25 Feb 19 nicklas 104       TabControl.addTabActivateListener('main.items', projects.viewItems);
7604 25 Feb 19 nicklas 105       TabControl.addTabActivateListener('main.annotations', AnnotationsList.loadOnce);
7604 25 Feb 19 nicklas 106       TabControl.addTabActivateListener('main.history', History.loadOnce);
7604 25 Feb 19 nicklas 107     }
7604 25 Feb 19 nicklas 108     else if (pageId == 'list-page')
7604 25 Feb 19 nicklas 109     {
7604 25 Feb 19 nicklas 110       var attributes = {'item-type': 'PROJECT'};
7604 25 Feb 19 nicklas 111       var tableAttributes = {'table-id': 'projects'};
7604 25 Feb 19 nicklas 112       Buttons.addClickHandler('btnNewItem', Buttons.newItem, attributes);
7604 25 Feb 19 nicklas 113       Buttons.addClickHandler('btnDeleteItems', Buttons.deleteItems, tableAttributes);
7604 25 Feb 19 nicklas 114       Buttons.addClickHandler('btnRestoreItems', Buttons.restoreItems, tableAttributes);
7604 25 Feb 19 nicklas 115       Buttons.addClickHandler('btnSetOwner', Buttons.setOwnerOfItems, tableAttributes);
7604 25 Feb 19 nicklas 116       Buttons.addClickHandler('btnColumns', Buttons.configureColumns, tableAttributes);
7604 25 Feb 19 nicklas 117       Buttons.addClickHandler('btnExport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 118       Buttons.addClickHandler('btnImport', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 119       Buttons.addClickHandler('btnRunPlugin', Buttons.runListPlugin, tableAttributes);
7604 25 Feb 19 nicklas 120
7604 25 Feb 19 nicklas 121       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 122       Buttons.addClickHandler('btnOk', Buttons.returnSelected, tableAttributes);
7604 25 Feb 19 nicklas 123     }
7604 25 Feb 19 nicklas 124     else if (pageId == 'set-active')
7604 25 Feb 19 nicklas 125     {
7604 25 Feb 19 nicklas 126       Buttons.addClickHandler('close', App.closeWindow);
7604 25 Feb 19 nicklas 127       window.opener.location.reload();
7604 25 Feb 19 nicklas 128       setTimeout(App.closeWindow, 500);
7604 25 Feb 19 nicklas 129     }
7604 25 Feb 19 nicklas 130   }
7604 25 Feb 19 nicklas 131   
7604 25 Feb 19 nicklas 132   projects.initElements = function(element, autoInit)
7604 25 Feb 19 nicklas 133   {
7604 25 Feb 19 nicklas 134     if (autoInit == 'set-active')
7604 25 Feb 19 nicklas 135     {
7604 25 Feb 19 nicklas 136       Buttons.addClickHandler(element, projects.setActive);
7604 25 Feb 19 nicklas 137     }
7604 25 Feb 19 nicklas 138   }
7604 25 Feb 19 nicklas 139   
7604 25 Feb 19 nicklas 140   projects.setActive = function(event)
7604 25 Feb 19 nicklas 141   {
7604 25 Feb 19 nicklas 142     var projectId = Data.get(event.currentTarget, 'item-id');
7604 25 Feb 19 nicklas 143     var url = 'set_active.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 144     url += '&project_id='+projectId;
7604 25 Feb 19 nicklas 145     Dialogs.openPopup(url, 'SetActiveProject', 300, 200);
7604 25 Feb 19 nicklas 146   }
7604 25 Feb 19 nicklas 147   
7604 25 Feb 19 nicklas 148   projects.viewItems = function()
7604 25 Feb 19 nicklas 149   {
7604 25 Feb 19 nicklas 150     var projectId = Data.get('page-data', 'item-id');
7604 25 Feb 19 nicklas 151     var url = 'items/index.jsp?ID='+App.getSessionId();
7604 25 Feb 19 nicklas 152     url += '&cmd=List&project_id='+projectId;
7604 25 Feb 19 nicklas 153     location.replace(url);
7604 25 Feb 19 nicklas 154   }
7604 25 Feb 19 nicklas 155
7604 25 Feb 19 nicklas 156   projects.validateProject = function()
7604 25 Feb 19 nicklas 157   {
7604 25 Feb 19 nicklas 158     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 159     if (Strings.trim(frm.name.value) == '')
7604 25 Feb 19 nicklas 160     {
7604 25 Feb 19 nicklas 161       Forms.showNotification(frm.name, 'You must enter a name');
7604 25 Feb 19 nicklas 162       return false;
7604 25 Feb 19 nicklas 163     }
7604 25 Feb 19 nicklas 164     return true;
7604 25 Feb 19 nicklas 165   }
7604 25 Feb 19 nicklas 166
7604 25 Feb 19 nicklas 167   projects.save = function()
7604 25 Feb 19 nicklas 168   {
7604 25 Feb 19 nicklas 169     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 170     if (TabControl.validateActiveTab('settings'))
7604 25 Feb 19 nicklas 171     {
7604 25 Feb 19 nicklas 172       Annotations.saveModifiedAnnotationsToForm(frm);
7604 25 Feb 19 nicklas 173       Link.exportActions('defaultItems');
7604 25 Feb 19 nicklas 174       Link.exportActions('members', '!');
7604 25 Feb 19 nicklas 175       frm.submit();
7604 25 Feb 19 nicklas 176     }
7604 25 Feb 19 nicklas 177   }
7604 25 Feb 19 nicklas 178   
7604 25 Feb 19 nicklas 179   projects.getPermissionCode = function(prefix)
7604 25 Feb 19 nicklas 180   {
7604 25 Feb 19 nicklas 181     if (!prefix) prefix = '';
7604 25 Feb 19 nicklas 182     var permissionCode = 0;
7604 25 Feb 19 nicklas 183     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 184     if (frm[prefix+'read'].checked) permissionCode += Permission.READ;
7604 25 Feb 19 nicklas 185     if (frm[prefix+'use'].checked) permissionCode += Permission.USE;
7604 25 Feb 19 nicklas 186     if (frm[prefix+'restricted_write'].checked) permissionCode += Permission.RESTRICTED_WRITE;
7604 25 Feb 19 nicklas 187     if (frm[prefix+'write'].checked) permissionCode += Permission.WRITE;
7604 25 Feb 19 nicklas 188     if (frm[prefix+'delete'].checked) permissionCode += Permission.DELETE;
7604 25 Feb 19 nicklas 189     if (frm[prefix+'set_owner'].checked) permissionCode += Permission.SET_OWNER;
7604 25 Feb 19 nicklas 190     if (frm[prefix+'set_permission'].checked) permissionCode += Permission.SET_PERMISSION;
7604 25 Feb 19 nicklas 191     return permissionCode;
7604 25 Feb 19 nicklas 192   }
7604 25 Feb 19 nicklas 193   
7604 25 Feb 19 nicklas 194   projects.getPermissionString = function(permissionCode)
7604 25 Feb 19 nicklas 195   {
7604 25 Feb 19 nicklas 196     var s = '';
7604 25 Feb 19 nicklas 197     s += permissionCode & Permission.READ ? "R" : "-";
7604 25 Feb 19 nicklas 198     s += permissionCode & Permission.USE ? "U" : "-";
7604 25 Feb 19 nicklas 199     s += permissionCode & Permission.RESTRICTED_WRITE ? "A" : "-";
7604 25 Feb 19 nicklas 200     s += permissionCode & Permission.WRITE ? "W" : "-";
7604 25 Feb 19 nicklas 201     s += permissionCode & Permission.DELETE ? "D" : "-";
7604 25 Feb 19 nicklas 202     s += permissionCode & Permission.SET_OWNER ? "O" : "-";
7604 25 Feb 19 nicklas 203     s += permissionCode & Permission.SET_PERMISSION ? "P" : "-";
7604 25 Feb 19 nicklas 204     return s;
7604 25 Feb 19 nicklas 205   }
7604 25 Feb 19 nicklas 206
7604 25 Feb 19 nicklas 207   projects.showPermissions = function(permissionCode, prefix)
7604 25 Feb 19 nicklas 208   {
7604 25 Feb 19 nicklas 209     if (!prefix) prefix = '';
7604 25 Feb 19 nicklas 210     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 211     frm[prefix+'read'].checked = permissionCode & Permission.READ;
7604 25 Feb 19 nicklas 212     frm[prefix+'use'].checked = permissionCode & Permission.USE;
7604 25 Feb 19 nicklas 213     frm[prefix+'restricted_write'].checked = permissionCode & Permission.RESTRICTED_WRITE;
7604 25 Feb 19 nicklas 214     frm[prefix+'write'].checked = permissionCode & Permission.WRITE;
7604 25 Feb 19 nicklas 215     frm[prefix+'delete'].checked = permissionCode & Permission.DELETE;
7604 25 Feb 19 nicklas 216     frm[prefix+'set_owner'].checked = permissionCode & Permission.SET_OWNER;
7604 25 Feb 19 nicklas 217     frm[prefix+'set_permission'].checked = permissionCode & Permission.SET_PERMISSION;
7604 25 Feb 19 nicklas 218   }
7604 25 Feb 19 nicklas 219
7604 25 Feb 19 nicklas 220   /**
7604 25 Feb 19 nicklas 221     Makes sure all permission checkboxes are in a consistent state with each other.
7604 25 Feb 19 nicklas 222   */
7604 25 Feb 19 nicklas 223   projects.ensureImpliedPermissions = function(checked, prefix)
7604 25 Feb 19 nicklas 224   {
7604 25 Feb 19 nicklas 225     if (!prefix) prefix = '';
7604 25 Feb 19 nicklas 226     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 227     if (checked)
7604 25 Feb 19 nicklas 228     {
7604 25 Feb 19 nicklas 229       frm[prefix+'write'].checked = frm[prefix+'write'].checked || frm[prefix+'delete'].checked || frm[prefix+'set_owner'].checked || frm[prefix+'set_permission'].checked;
7604 25 Feb 19 nicklas 230       frm[prefix+'restricted_write'].checked = frm[prefix+'restricted_write'].checked || frm[prefix+'write'].checked;
7604 25 Feb 19 nicklas 231       frm[prefix+'use'].checked = frm[prefix+'use'].checked || frm[prefix+'write'].checked;
7604 25 Feb 19 nicklas 232       frm[prefix+'read'].checked = frm[prefix+'read'].checked || frm[prefix+'use'].checked || frm[prefix+'restricted_write'].checked;
7604 25 Feb 19 nicklas 233     }
7604 25 Feb 19 nicklas 234     else
7604 25 Feb 19 nicklas 235     {
7604 25 Feb 19 nicklas 236       frm[prefix+'use'].checked = frm[prefix+'use'].checked && frm[prefix+'read'].checked;
7604 25 Feb 19 nicklas 237       frm[prefix+'restricted_write'].checked = frm[prefix+'restricted_write'].checked && frm[prefix+'read'].checked;
7604 25 Feb 19 nicklas 238       frm[prefix+'write'].checked = frm[prefix+'write'].checked && frm[prefix+'use'].checked && frm[prefix+'restricted_write'].checked;
7604 25 Feb 19 nicklas 239       frm[prefix+'delete'].checked = frm[prefix+'delete'].checked && frm[prefix+'write'].checked;
7604 25 Feb 19 nicklas 240       frm[prefix+'set_owner'].checked = frm[prefix+'set_owner'].checked && frm[prefix+'write'].checked;
7604 25 Feb 19 nicklas 241       frm[prefix+'set_permission'].checked = frm[prefix+'set_permission'].checked && frm[prefix+'write'].checked;
7604 25 Feb 19 nicklas 242     }
7604 25 Feb 19 nicklas 243   }
7604 25 Feb 19 nicklas 244
7604 25 Feb 19 nicklas 245   projects.permissionsOnClick = function(event)
7604 25 Feb 19 nicklas 246   {
7604 25 Feb 19 nicklas 247     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 248     var radio = event.currentTarget;
7604 25 Feb 19 nicklas 249     projects.ensureImpliedPermissions(radio.checked);
7604 25 Feb 19 nicklas 250     var permissionCode = projects.getPermissionCode();
7604 25 Feb 19 nicklas 251     var permissionString = projects.getPermissionString(permissionCode);
7604 25 Feb 19 nicklas 252     for (var i = 0; i < frm.members.length; i++)
7604 25 Feb 19 nicklas 253     {
7604 25 Feb 19 nicklas 254       var option = frm.members[i];
7604 25 Feb 19 nicklas 255       if (option.selected && option.item.id)
7604 25 Feb 19 nicklas 256       {
7604 25 Feb 19 nicklas 257         option.item.value = permissionCode;
7604 25 Feb 19 nicklas 258         var text = option.text.replace(/\[.*\]/, '['+permissionString+']');
7604 25 Feb 19 nicklas 259         option.text = text; 
7604 25 Feb 19 nicklas 260       }
7604 25 Feb 19 nicklas 261     }
7604 25 Feb 19 nicklas 262   }
7604 25 Feb 19 nicklas 263
7604 25 Feb 19 nicklas 264   projects.autoPermissionsOnClick = function(event)
7604 25 Feb 19 nicklas 265   {
7604 25 Feb 19 nicklas 266     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 267     var radio = event.currentTarget;
7604 25 Feb 19 nicklas 268     projects.ensureImpliedPermissions(radio.checked, 'auto_');
7604 25 Feb 19 nicklas 269     frm.autoPermissions.value = projects.getPermissionCode('auto_');
7604 25 Feb 19 nicklas 270   }
7604 25 Feb 19 nicklas 271   
7604 25 Feb 19 nicklas 272   /**
7604 25 Feb 19 nicklas 273     Open a popup dialog for selecting users.
7604 25 Feb 19 nicklas 274   */
7604 25 Feb 19 nicklas 275   projects.addUsers = function(event)
7604 25 Feb 19 nicklas 276   {
7604 25 Feb 19 nicklas 277     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 278     var current = Link.getIdsInList(frm.members, 'USER');
7604 25 Feb 19 nicklas 279     var url = "&exclude="+current.join(',');
7604 25 Feb 19 nicklas 280     url += '&permission=READ';
7604 25 Feb 19 nicklas 281     Dialogs.selectItem('USER', event.currentTarget.id, 1, url);
7604 25 Feb 19 nicklas 282   }
7604 25 Feb 19 nicklas 283   
7604 25 Feb 19 nicklas 284   projects.addUserCallback = function(event)
7604 25 Feb 19 nicklas 285   {
7604 25 Feb 19 nicklas 286     var permissionCode = projects.getPermissionCode();
7604 25 Feb 19 nicklas 287     var permissionString = projects.getPermissionString(permissionCode);
7604 25 Feb 19 nicklas 288     
7604 25 Feb 19 nicklas 289     event.detail.name += ' ['+permissionString+']';
7604 25 Feb 19 nicklas 290     event.detail.value = permissionCode;
7604 25 Feb 19 nicklas 291     event.detail.originalValue = 0;
7604 25 Feb 19 nicklas 292     
7604 25 Feb 19 nicklas 293     Link.addItem('members', 'USER', event.detail);
7604 25 Feb 19 nicklas 294   }
7604 25 Feb 19 nicklas 295
7604 25 Feb 19 nicklas 296   /**
7604 25 Feb 19 nicklas 297     Open a popup dialog for selecting groups.
7604 25 Feb 19 nicklas 298   */
7604 25 Feb 19 nicklas 299   projects.addGroups = function(event)
7604 25 Feb 19 nicklas 300   {
7604 25 Feb 19 nicklas 301     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 302     var current = Link.getIdsInList(frm.members, 'GROUP');
7604 25 Feb 19 nicklas 303     if (!Data.int('page-data', 'share-to-everyone'))
7604 25 Feb 19 nicklas 304     {
7604 25 Feb 19 nicklas 305       current[current.length] = Data.int('page-data', 'everyone-id');
7604 25 Feb 19 nicklas 306     }
7604 25 Feb 19 nicklas 307     var url = "&exclude="+current.join(',');
7604 25 Feb 19 nicklas 308     url += '&permission=READ';
7604 25 Feb 19 nicklas 309     Dialogs.selectItem('GROUP', event.currentTarget.id, 1, url);
7604 25 Feb 19 nicklas 310   }
7604 25 Feb 19 nicklas 311   
7604 25 Feb 19 nicklas 312   projects.addGroupCallback = function(event)
7604 25 Feb 19 nicklas 313   {
7604 25 Feb 19 nicklas 314     var permissionCode = projects.getPermissionCode();
7604 25 Feb 19 nicklas 315     var permissionString = projects.getPermissionString(permissionCode);
7604 25 Feb 19 nicklas 316     
7604 25 Feb 19 nicklas 317     event.detail.name += ' ['+permissionString+']';
7604 25 Feb 19 nicklas 318     event.detail.value = permissionCode;
7604 25 Feb 19 nicklas 319     event.detail.originalValue = 0;
7604 25 Feb 19 nicklas 320     
7604 25 Feb 19 nicklas 321     Link.addItem('members', 'GROUP', event.detail);
7604 25 Feb 19 nicklas 322   }
7604 25 Feb 19 nicklas 323
7604 25 Feb 19 nicklas 324   /**
7604 25 Feb 19 nicklas 325     Set the permission value to 0 when an item is removed
7604 25 Feb 19 nicklas 326   */
7604 25 Feb 19 nicklas 327   projects.memberRemoved = function(event)
7604 25 Feb 19 nicklas 328   {
7604 25 Feb 19 nicklas 329     event.detail.item.value = 0;
7604 25 Feb 19 nicklas 330   }
7604 25 Feb 19 nicklas 331
7604 25 Feb 19 nicklas 332   /**
7604 25 Feb 19 nicklas 333     Update permission checkboxes for the current selected member.
7604 25 Feb 19 nicklas 334   */
7604 25 Feb 19 nicklas 335   projects.membersOnChange = function()
7604 25 Feb 19 nicklas 336   {
7604 25 Feb 19 nicklas 337     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 338     var item = frm.members[frm.members.selectedIndex].item;
7604 25 Feb 19 nicklas 339     projects.showPermissions(item && item.id ? item.value : 0);
7604 25 Feb 19 nicklas 340   }
7604 25 Feb 19 nicklas 341
7604 25 Feb 19 nicklas 342   projects.selectPermissionTemplate = function()
7604 25 Feb 19 nicklas 343   {
7604 25 Feb 19 nicklas 344     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 345     var url = '&resetTemporary=1';
7604 25 Feb 19 nicklas 346     if (frm.permissiontemplate_id.length > 1) 
7604 25 Feb 19 nicklas 347     {
7604 25 Feb 19 nicklas 348       var id = Math.abs(parseInt(frm.permissiontemplate_id[1].value));
7604 25 Feb 19 nicklas 349       url += '&item_id='+id;
7604 25 Feb 19 nicklas 350     }
7604 25 Feb 19 nicklas 351     Dialogs.selectItem('PERMISSIONTEMPLATE', 'permissiontemplate_id', 0, url);
7604 25 Feb 19 nicklas 352   }
7604 25 Feb 19 nicklas 353   
7604 25 Feb 19 nicklas 354   projects.permissionTemplateOnChange = function()
7604 25 Feb 19 nicklas 355   {
7604 25 Feb 19 nicklas 356     var frm = document.forms['project'];
7604 25 Feb 19 nicklas 357     var hasTemplate = frm.permissiontemplate_id.selectedIndex > 0;
7604 25 Feb 19 nicklas 358     frm.auto_read.disabled = hasTemplate;
7604 25 Feb 19 nicklas 359     frm.auto_use.disabled = hasTemplate;
7604 25 Feb 19 nicklas 360     frm.auto_restricted_write.disabled = hasTemplate;
7604 25 Feb 19 nicklas 361     frm.auto_write.disabled = hasTemplate;
7604 25 Feb 19 nicklas 362     frm.auto_delete.disabled = hasTemplate;
7604 25 Feb 19 nicklas 363     frm.auto_set_owner.disabled = hasTemplate;
7604 25 Feb 19 nicklas 364     frm.auto_set_permission.disabled = hasTemplate;
7604 25 Feb 19 nicklas 365   }
7604 25 Feb 19 nicklas 366
7604 25 Feb 19 nicklas 367   
7604 25 Feb 19 nicklas 368   return projects;
7604 25 Feb 19 nicklas 369 }();
7604 25 Feb 19 nicklas 370
7604 25 Feb 19 nicklas 371 Doc.onLoad(Projects.initPage);
7604 25 Feb 19 nicklas 372 Doc.addElementInitializer(Projects.initElements);