diff --git a/lib/actions/documentaction.inc.php b/lib/actions/documentaction.inc.php index e587ad8..6ece23d 100644 --- a/lib/actions/documentaction.inc.php +++ b/lib/actions/documentaction.inc.php @@ -42,6 +42,9 @@ class KTDocumentAction extends KTStandardDispatcher { var $sSection = "view_details"; + var $_bMutator = false; + var $_bMutationAllowedByAdmin = true; + function KTDocumentAction($oDocument = null, $oUser = null, $oPlugin = null) { $this->oDocument =& $oDocument; $this->oUser =& $oUser; @@ -64,7 +67,18 @@ class KTDocumentAction extends KTStandardDispatcher { function _show() { if (is_null($this->_sShowPermission)) { return true; - } + } + $oFolder = Folder::get($this->oDocument->getFolderId()); + + if ($this->_bMutator && $this->oDocument->getImmutable()) { + if ($this->_bMutationAllowedByAdmin === true) { + if (!KTBrowseUtil::inAdminMode($this->oUser, $oFolder)) { + return false; + } + } else { + return false; + } + } if ($this->_bAdminAlwaysAvailable) { if (Permission::userIsSystemAdministrator($this->oUser->getId())) { @@ -86,7 +100,6 @@ class KTDocumentAction extends KTStandardDispatcher { if (($status == DELETED) || ($status == ARCHIVED)) { return false; } if ($this->bAllowInAdminMode) { // check if this user is in admin mode - $oFolder = Folder::get($this->oDocument->getFolderId()); if (KTBrowseUtil::inAdminMode($this->oUser, $oFolder)) { return true; } diff --git a/plugins/ktcore/KTDocumentActions.php b/plugins/ktcore/KTDocumentActions.php index 69e5d94..1b91696 100644 --- a/plugins/ktcore/KTDocumentActions.php +++ b/plugins/ktcore/KTDocumentActions.php @@ -96,6 +96,9 @@ class KTDocumentCheckOutAction extends KTDocumentAction { var $_sShowPermission = "ktcore.permissions.write"; + var $_bMutator = true; + var $_bMutationAllowedByAdmin = false; + function getDisplayName() { return _kt('Checkout'); } @@ -381,6 +384,7 @@ class KTDocumentEditAction extends KTDocumentAction { var $sName = 'ktcore.actions.document.edit'; var $_sShowPermission = "ktcore.permissions.write"; + var $_bMutator = true; function getInfo() { if ($this->oDocument->getIsCheckedOut()) { @@ -404,6 +408,7 @@ class KTDocumentDeleteAction extends KTDocumentAction { var $sName = 'ktcore.actions.document.delete'; var $_sShowPermission = "ktcore.permissions.delete"; + var $_bMutator = true; function getDisplayName() { return _kt('Delete'); @@ -480,6 +485,7 @@ class KTDocumentMoveAction extends KTDocumentAction { var $sName = 'ktcore.actions.document.move'; var $_sShowPermission = "ktcore.permissions.write"; + var $_bMutator = true; function getDisplayName() { return _kt('Move'); @@ -867,6 +873,7 @@ class KTDocumentVersionHistoryAction extends KTDocumentAction { class KTDocumentArchiveAction extends KTDocumentAction { var $sName = 'ktcore.actions.document.archive'; var $_sShowPermission = "ktcore.permissions.write"; + var $_bMutator = true; function getDisplayName() { return _kt('Archive'); diff --git a/plugins/ktcore/document/Rename.php b/plugins/ktcore/document/Rename.php index 9a45e5f..60c4d05 100644 --- a/plugins/ktcore/document/Rename.php +++ b/plugins/ktcore/document/Rename.php @@ -42,6 +42,7 @@ class KTDocumentRenameAction extends KTDocumentAction { var $sName = 'ktcore.actions.document.rename'; var $_sShowPermission = "ktcore.permissions.write"; + var $_bMutator = true; function getDisplayName() { return _kt('Rename');