Commit 9f61ed5a44a06aece4e26ed6afb82ae28ab8a4ea

Authored by Neil Blakey-Milner
1 parent 4f4d266e

Add a mechanism to view permissions applicable to a document.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3649 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/documentmanagement/documentPermissions.php 0 → 100644
  1 +<?php
  2 +
  3 +require_once("../../../../config/dmsDefaults.php");
  4 +
  5 +require_once(KT_DIR . "/presentation/Html.inc");
  6 +
  7 +require_once(KT_LIB_DIR . "/templating/templating.inc.php");
  8 +require_once(KT_LIB_DIR . "/permissions/permission.inc.php");
  9 +require_once(KT_LIB_DIR . "/foldermanagement/Folder.inc");
  10 +require_once(KT_LIB_DIR . "/groups/Group.inc");
  11 +
  12 +require_once(KT_LIB_DIR . "/permissions/permission.inc.php");
  13 +require_once(KT_LIB_DIR . "/permissions/permissionobject.inc.php");
  14 +require_once(KT_LIB_DIR . "/permissions/permissionassignment.inc.php");
  15 +require_once(KT_LIB_DIR . "/permissions/permissiondescriptor.inc.php");
  16 +require_once(KT_LIB_DIR . "/permissions/permissionutil.inc.php");
  17 +
  18 +require_once(KT_LIB_DIR . "/dispatcher.inc.php");
  19 +$sectionName = "Manage Documents";
  20 +require_once(KT_DIR . "/presentation/webpageTemplate.inc");
  21 +
  22 +function displayFolderPathLink($aPathArray, $aPathNameArray, $sLinkPage = "") {
  23 + global $default;
  24 + if (strlen($sLinkPage) == 0) {
  25 + $sLinkPage = $_SERVER["PHP_SELF"];
  26 + }
  27 + $default->log->debug("displayFolderPathLink: slinkPage=$sLinkPage");
  28 + // display a separate link to each folder in the path
  29 + for ($i=0; $i<count($aPathArray); $i++) {
  30 + $iFolderID = $aPathArray[$i];
  31 + // retrieve the folder name for this folder
  32 + $sFolderName = $aPathNameArray[$i];
  33 + // generate a link back to this page setting fFolderID
  34 + $sLink = generateLink($sLinkPage,
  35 + "fBrowseType=folder&fFolderID=$iFolderID",
  36 + $sFolderName);
  37 + $sPathLinks = (strlen($sPathLinks) > 0) ? $sPathLinks . " > " . $sLink : $sLink;
  38 + }
  39 + return $sPathLinks;
  40 +}
  41 +
  42 +
  43 +class DocumentPermissionsDispatcher extends KTStandardDispatcher {
  44 + function do_main() {
  45 + $oTemplating = new KTTemplating;
  46 + $oTemplate = $oTemplating->loadTemplate("ktcore/document/document_permissions");
  47 + $oDocument = Document::get($_REQUEST['fDocumentID']);
  48 + $oPO = KTPermissionObject::get($oDocument->getPermissionObjectID());
  49 + $aPermissions = KTPermission::getList();
  50 + $aMapPermissionGroup = array();
  51 + foreach ($aPermissions as $oPermission) {
  52 + $oPA = KTPermissionAssignment::getByPermissionAndObject($oPermission, $oPO);
  53 + if (PEAR::isError($oPA)) {
  54 + continue;
  55 + }
  56 + $oDescriptor = KTPermissionDescriptor::get($oPA->getPermissionDescriptorID());
  57 + $iPermissionID = $oPermission->getID();
  58 + $aIDs = $oDescriptor->getGroups();
  59 + $aMapPermissionGroup[$iPermissionID] = array();
  60 + foreach ($aIDs as $iID) {
  61 + $aMapPermissionGroup[$iPermissionID][$iID] = true;
  62 + }
  63 + }
  64 + $aMapPermissionUser = array();
  65 + $aUsers = User::getList();
  66 + foreach ($aPermissions as $oPermission) {
  67 + $iPermissionID = $oPermission->getID();
  68 + foreach ($aUsers as $oUser) {
  69 + if (KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $oDocument)) {
  70 + $aMapPermissionUser[$iPermissionID][$oUser->getID()] = true;
  71 + }
  72 + }
  73 + }
  74 +
  75 + $oInherited = KTPermissionUtil::findRootObjectForPermissionObject($oPO);
  76 + if ($oInherited === $oDocument) {
  77 + $bEdit = true;
  78 + } else {
  79 + $iInheritedFolderID = $oInherited->getID();
  80 + $sInherited = displayFolderPathLink(Folder::getFolderPathAsArray($iInheritedFolderID),
  81 + Folder::getFolderPathNamesAsArray($iInheritedFolderID),
  82 + "$default->rootUrl/control.php?action=editFolderPermissions");
  83 + $bEdit = false;
  84 + }
  85 +
  86 + $aTemplateData = array(
  87 + "permissions" => $aPermissions,
  88 + "groups" => Group::getList(),
  89 + "iDocumentID" => $_REQUEST['fDocumentID'],
  90 + "aMapPermissionGroup" => $aMapPermissionGroup,
  91 + "users" => $aUsers,
  92 + "aMapPermissionUser" => $aMapPermissionUser,
  93 + "edit" => $bEdit,
  94 + "inherited" => $sInherited,
  95 + );
  96 + return $oTemplate->render($aTemplateData);
  97 + }
  98 +
  99 + function handleOutput($data) {
  100 + global $main;
  101 + $main->bFormDisabled = true;
  102 + $main->setCentralPayload($data);
  103 + $main->render();
  104 + }
  105 +
  106 + function do_update() {
  107 + $oDocument = Document::get($_REQUEST['fDocumentID']);
  108 + $oPO = KTPermissionObject::get($oDocument->getPermissionObjectID());
  109 + $aFoo = $_REQUEST['foo'];
  110 + $aPermissions = KTPermission::getList();
  111 + foreach ($aPermissions as $oPermission) {
  112 + $iPermID = $oPermission->getID();
  113 + $aAllowed = KTUtil::arrayGet($aFoo, $iPermID, array());
  114 + KTPermissionUtil::setPermissionForID($oPermission, $oPO, $aAllowed);
  115 + }
  116 + KTPermissionUtil::updatePermissionLookupForPO($oPO);
  117 + return $this->errorRedirectToMain('Permissions updated',
  118 + array('fDocumentID' => $oDocument->getID()));
  119 + }
  120 +
  121 + function do_copyPermissions() {
  122 + $oDocument = Document::get($_REQUEST['fDocumentID']);
  123 + KTPermissionUtil::copyPermissionObject($oDocument);
  124 + return $this->errorRedirectToMain('Permissions updated',
  125 + array('fDocumentID' => $oDocument->getID()));
  126 + }
  127 +
  128 + function do_inheritPermissions() {
  129 + $oDocument = Document::get($_REQUEST['fDocumentID']);
  130 + KTPermissionUtil::inheritPermissionObject($oDocument);
  131 + return $this->errorRedirectToMain('Permissions updated',
  132 + array('fDocumentID' => $oDocument->getID()));
  133 + }
  134 +
  135 +
  136 +}
  137 +
  138 +$oDispatcher = new DocumentPermissionsDispatcher;
  139 +$oDispatcher->dispatch();
  140 +
  141 +?>
templates/ktcore/document/document_permissions.smarty 0 → 100644
  1 +{literal}
  2 +<style>
  3 +td.true { background-color: #aaffaa; text-align: centre }
  4 +td.false { background-color: #ffaaaa; text-align: centre }
  5 +.edit { display: none; }
  6 +.view { display: block; }
  7 +
  8 +.tablebutton {
  9 + margin: 0em;
  10 + margin-right: 1em;
  11 + border: 1px solid #cccccc;
  12 +}
  13 +.activebutton {
  14 + background-color: #eeeeff;
  15 +}
  16 +.inactivebutton {
  17 + background-color: #ffeeee;
  18 +}
  19 +</style>
  20 +{/literal}
  21 +<script language="javascript" src="/thirdpartyjs/MochiKit/Base.js">
  22 +<script language="javascript" src="/thirdpartyjs/MochiKit/Iter.js">
  23 +<script language="javascript" src="/thirdpartyjs/MochiKit/DOM.js">
  24 +<h2>Document permissions</h2>
  25 +
  26 +{ if $edit }
  27 +<div style="text-align: right">
  28 +<span class="tablebutton activebutton">
  29 +<a href="javascript:MochiKit.DOM.showElement('view'); MochiKit.DOM.hideElement('edit');">View</a>
  30 +</span>
  31 +<span class="tablebutton inactivebutton">
  32 +<a href="javascript:MochiKit.DOM.showElement('edit'); MochiKit.DOM.hideElement('view');">Edit</a>
  33 +</span>
  34 +</div>
  35 +{ /if }
  36 +<div class="view" id="view">
  37 +<table class="pretty" cellspacing="0" cellpadding="0" border="0" width="100%">
  38 +<thead>
  39 +<tr>
  40 +<th>Group</th>
  41 +{ foreach item=oPerm from=$permissions }
  42 +<th title="{$oPerm->sName}">{$oPerm->sHumanName}</th>
  43 +{ /foreach }
  44 +</tr>
  45 +</thead>
  46 +<tbody>
  47 +{ foreach item=oGroup from=$groups }
  48 +<td>{$oGroup->getID()} / {$oGroup->getName()}</td>
  49 + { assign var=iGroupID value=$oGroup->getID() }
  50 + { foreach item=oPerm from=$permissions }
  51 + { assign var=iPermID value=$oPerm->getID() }
  52 + { assign var=bHasPerm value=$aMapPermissionGroup[$iPermID][$iGroupID] }
  53 +{ if $bHasPerm }
  54 +<td class="true">True</td>
  55 +{ else }
  56 +<td class="false">False</td>
  57 +{ /if }
  58 + { /foreach }
  59 +</tr>
  60 +{ /foreach }
  61 +</tbody>
  62 +</table>
  63 +
  64 +<div style="text-align: center; padding-top: 2px">
  65 +<span style="border: 1px solid #cccccc; background-color: #ffeeee;
  66 +padding: 2px; padding-right: 1em; padding-left: 1em">
  67 +{ if $inherited }
  68 +Inherited from {$inherited}
  69 +{* [<a
  70 +href="{$smarty.server.PHP_SELF}?action=copyPermissions&fDocumentID={$iDocumentID}">Copy</a>]
  71 +*}
  72 +{ else }
  73 +[<a
  74 +href="{$smarty.server.PHP_SELF}?action=inheritPermissions&fDocumentID={$iDocumentID}">Use
  75 +parent's permissions</a>]
  76 +{ /if }
  77 +</span>
  78 +</div>
  79 +</div>
  80 +
  81 +{ if $edit }
  82 +<div class="edit" id="edit">
  83 +<form method="POST">
  84 +<input type="hidden" name="action" value="update">
  85 +<input type="hidden" name="fDocumentID" value="{$iDocumentID}">
  86 +<table class="pretty" cellspacing="0" cellpadding="0" border="0" width="100%">
  87 +<thead>
  88 +<tr>
  89 +<th>Group</th>
  90 +{ foreach item=oPerm from=$permissions }
  91 +<th title="{$oPerm->sName}">{$oPerm->sHumanName}</th>
  92 +{ /foreach }
  93 +</tr>
  94 +</thead>
  95 +<tbody>
  96 +{ foreach item=oGroup from=$groups }
  97 +<td>{$oGroup->getID()} / {$oGroup->getName()}</td>
  98 + { assign var=iGroupID value=$oGroup->getID() }
  99 + { foreach item=oPerm from=$permissions }
  100 + { assign var=iPermID value=$oPerm->getID() }
  101 + { assign var=bHasPerm value=$aMapPermissionGroup[$iPermID][$iGroupID] }
  102 +{ if $bHasPerm }
  103 +<td class="true"><input type="checkbox" name="foo[{$iPermID}][group][]"
  104 +value="{$iGroupID}" checked="true"></td>
  105 +{ else }
  106 +<td class="false"><input type="checkbox" name="foo[{$iPermID}][group][]"
  107 +value="{$iGroupID}"></td>
  108 +{ /if }
  109 + { /foreach }
  110 +</tr>
  111 +{ /foreach }
  112 +</tbody>
  113 +</table>
  114 +
  115 +<input type="submit" name="submit" value="Update">
  116 +</form>
  117 +</div>
  118 +{ /if }
  119 +
  120 +<h2>User permissions</h2>
  121 +
  122 +<div>
  123 +<table class="pretty" cellspacing="0" cellpadding="0" border="0" width="100%">
  124 +<thead>
  125 +<tr>
  126 +<th>User</th>
  127 +{ foreach item=oPerm from=$permissions }
  128 +<th title="{$oPerm->sName}">{$oPerm->sHumanName}</th>
  129 +{ /foreach }
  130 +</tr>
  131 +</thead>
  132 +<tbody>
  133 +{ foreach item=oUser from=$users }
  134 +<td>{$oUser->getID()} / {$oUser->getName()}</td>
  135 + { assign var=iUserID value=$oUser->getID() }
  136 + { foreach item=oPerm from=$permissions }
  137 + { assign var=iPermID value=$oPerm->getID() }
  138 + { assign var=bHasPerm value=$aMapPermissionUser[$iPermID][$iUserID] }
  139 +{ if $bHasPerm }
  140 +<td class="true">True</td>
  141 +{ else }
  142 +<td class="false">False</td>
  143 +{ /if }
  144 + { /foreach }
  145 +</tr>
  146 +{ /foreach }
  147 +</tbody>
  148 +</table>
  149 +</div>