diff --git a/main/document/document.php b/main/document/document.php index 7af7ba3659..937332aebe 100755 --- a/main/document/document.php +++ b/main/document/document.php @@ -217,7 +217,6 @@ $curdirpath = isset($_GET['curdirpath']) ? Security::remove_XSS($_GET['curdirpat switch ($action) { case 'replace': - if (($isAllowedToEdit || $groupMemberWithUploadRights || DocumentManager::isBasicCourseFolder($curdirpath, $sessionId) || @@ -1840,6 +1839,14 @@ if ($isAllowedToEdit || api_get_path(WEB_CODE_PATH).'document/add_link.php?'.api_get_cidreq().'&id='.$documentIdFromGet ); } + + $hook = HookDocumentAction::create(); + if (!empty($hook)) { + $data = $hook->notifyDocumentAction(HOOK_EVENT_TYPE_PRE); + if (isset($data['action'])) { + $actionsLeft .= $data['action']; + } + } } if (!isset($_GET['keyword']) && !$is_certificate_mode) { diff --git a/main/inc/lib/document.lib.php b/main/inc/lib/document.lib.php index dd76f5f8a3..c5f2fbc589 100644 --- a/main/inc/lib/document.lib.php +++ b/main/inc/lib/document.lib.php @@ -5595,6 +5595,16 @@ class DocumentManager // is from a non-session context, hide the edition capabilities $modify_icons = []; $modify_icons[] = self::getButtonEdit($is_read_only, $document_data, $extension, $is_certificate_mode); + + $hook = HookDocumentItemAction::create(); + if (!empty($hook)) { + $hook->setEventData($document_data); + $data = $hook->notifyDocumentItemAction(HOOK_EVENT_TYPE_PRE); + if (isset($data['action'])) { + $modify_icons[] = $data['action']; + } + } + $modify_icons[] = self::getButtonMove($is_read_only, $document_data, $is_certificate_mode, $parent_id); $modify_icons[] = self::getButtonVisibility( $is_read_only, diff --git a/main/inc/lib/hook/HookDocumentAction.php b/main/inc/lib/hook/HookDocumentAction.php new file mode 100644 index 0000000000..ac572f20f8 --- /dev/null +++ b/main/inc/lib/hook/HookDocumentAction.php @@ -0,0 +1,31 @@ +eventData['type'] = $type; + + /** @var HookDocumentActionEventInterface $observer */ + foreach ($this->observers as $observer) { + $data = $observer->notifyDocumentAction($this); + $this->setEventData($data); + } + + return $this->eventData; + } +} diff --git a/main/inc/lib/hook/HookDocumentItemAction.php b/main/inc/lib/hook/HookDocumentItemAction.php new file mode 100644 index 0000000000..e3d1662a46 --- /dev/null +++ b/main/inc/lib/hook/HookDocumentItemAction.php @@ -0,0 +1,31 @@ +eventData['type'] = $type; + + /** @var HookDocumentItemActionEventInterface $observer */ + foreach ($this->observers as $observer) { + $data = $observer->notifyDocumentItemAction($this); + $this->setEventData($data); + } + + return $this->eventData; + } +} diff --git a/main/inc/lib/hook/interfaces/HookDocumentActionEventInterface.php b/main/inc/lib/hook/interfaces/HookDocumentActionEventInterface.php new file mode 100644 index 0000000000..c346dbc994 --- /dev/null +++ b/main/inc/lib/hook/interfaces/HookDocumentActionEventInterface.php @@ -0,0 +1,8 @@ +