From 9a3f217e45725ef949f950867a10bcfc692e0a2d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 17 Mar 2025 12:50:01 +0100 Subject: [PATCH 1/3] add method isOnClipboard() --- inc/inc.ClassSession.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/inc/inc.ClassSession.php b/inc/inc.ClassSession.php index a9940d938..e1f1c1b8e 100644 --- a/inc/inc.ClassSession.php +++ b/inc/inc.ClassSession.php @@ -286,6 +286,24 @@ class SeedDMS_Session { return (array) $this->data['clipboard']; } /* }}} */ + /** + * Check if object is on clipboard + * + * @param object $object Document or folder + */ + function isOnClipboard($object) { /* {{{ */ + /* id is only set if load() was called before */ + if($this->id) { + $dms = $object->getDMS(); + if($object->isType('document')) { + return in_array($object->getID(), $this->data['clipboard']['docs']); + } elseif($object->isType('folder')) { + return in_array($object->getID(), $this->data['clipboard']['folders']); + } + } + return false; + } /* }}} */ + /** * Add to clipboard of session * From 9abbf6a1e5655833d797df484ba54a1d55341c7f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 17 Mar 2025 15:57:51 +0100 Subject: [PATCH 2/3] objects can be removed from clipboard --- views/bootstrap/class.Bootstrap.php | 24 ++++++++++++++++++++---- views/bootstrap/styles/application.js | 6 ++++++ views/bootstrap4/class.Bootstrap4.php | 24 ++++++++++++++++++++---- views/bootstrap4/styles/application.js | 6 ++++++ 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index a9bdcc62f..91ab0bc20 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -678,6 +678,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function folderNavigationBar($folder) { /* {{{ */ $dms = $this->params['dms']; + $session = $this->params['session']; $enableClipboard = $this->params['enableclipboard']; $accessobject = $this->params['accessobject']; if (!is_object($folder) || !$folder->isType('folder')) { @@ -718,7 +719,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['edit_folder_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_folder_notify')); } if($enableClipboard) { - $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'F'.$folder->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); + if($session->isOnClipboard($folder)) + $menuitems['remove_from_clipboard'] = array('class'=>'removefromclipboard', 'attributes'=>array(['rel', 'F'.$folder->getId()], ['msg', getMLText('splash_removed_from_clipboard')], ['title', getMLText("remove_from_clipboard")]), 'label'=>getMLText("remove_from_clipboard")); + else + $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'F'.$folder->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); } if ($accessobject->check_view_access('Indexer') && $this->params['enablefullsearch']) { $menuitems['index_folder'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Indexer.php?folderid=". $folderID."&showtree=".showtree(), 'label'=>getMLText('index_folder')); @@ -741,6 +745,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } /* }}} */ private function documentNavigationBar($document) { /* {{{ */ + $session = $this->params['session']; $accessobject = $this->params['accessobject']; $enableClipboard = $this->params['enableclipboard']; $accessMode = $document->getAccessMode($this->params['user']); @@ -789,7 +794,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['edit_document_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_document_notify')); } if($enableClipboard) { - $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'D'.$document->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); + if($session->isOnClipboard($document)) + $menuitems['remove_from_clipboard'] = array('class'=>'removefromclipboard', 'attributes'=>array(['rel', 'D'.$document->getId()], ['msg', getMLText('splash_removed_from_clipboard')], ['title', getMLText("remove_from_clipboard")]), 'label'=>getMLText("remove_from_clipboard")); + else + $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'D'.$document->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); } if ($accessobject->check_view_access('TransferDocument')) { $menuitems['transfer_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); @@ -3165,6 +3173,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) function documentListRowAction($document, $previewer, $skipcont=false, $version=0, $extracontent=array()) { /* {{{ */ $user = $this->params['user']; + $session = $this->params['session']; $enableClipboard = $this->params['enableclipboard']; $accessop = $this->params['accessobject']; $onepage = $this->params['onepage']; @@ -3194,7 +3203,10 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $actions['document_access'] = $this->printAccessButton($document, true); } if($enableClipboard) { - $actions['add_to_clipboard'] = ''; + if($session->isOnClipboard($document)) + $actions['remove_from_clipboard'] = ''; + else + $actions['add_to_clipboard'] = ''; } if($onepage) $actions['view_document'] = ''; @@ -3376,6 +3388,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) function folderListRowAction($subFolder, $skipcont=false, $extracontent=array()) { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; + $session = $this->params['session']; // $folder = $this->params['folder']; $showtree = $this->params['showtree']; $enableRecursiveCount = $this->params['enableRecursiveCount']; @@ -3406,7 +3419,10 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $actions['folder_access'] = $this->printAccessButton($subFolder, true); } if($enableClipboard) { - $actions['add_to_clipboard'] = ''; + if($session->isOnClipboard($subFolder)) + $actions['add_to_clipboard'] = ''; + else + $actions['add_to_clipboard'] = ''; } if($onepage) $actions['view_folder'] = ''; diff --git a/views/bootstrap/styles/application.js b/views/bootstrap/styles/application.js index a4911a4d8..1494912f2 100644 --- a/views/bootstrap/styles/application.js +++ b/views/bootstrap/styles/application.js @@ -407,6 +407,8 @@ $(document).ready( function() { if(data.success) { $("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard') $("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard') + $("div.ajax[data-action='navigation']").trigger('update', {}); + $("div.ajax[data-action='folderList']").trigger('update', {}); noty({ text: attr_msg, type: 'success', @@ -442,6 +444,8 @@ $(document).ready( function() { if(data.success) { $("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard') $("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard') + $("div.ajax[data-action='navigation']").trigger('update', {}); + $("div.ajax[data-action='folderList']").trigger('update', {}); noty({ text: attr_msg, type: 'success', @@ -753,6 +757,8 @@ function onAddClipboard(ev) { /* {{{ */ if(data.success) { $("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard') $("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard') + $("div.ajax[data-action='navigation']").trigger('update', {}); + $("div.ajax[data-action='folderList']").trigger('update', {}); noty({ text: data.message, type: 'success', diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php index 843f11277..5ffa75298 100644 --- a/views/bootstrap4/class.Bootstrap4.php +++ b/views/bootstrap4/class.Bootstrap4.php @@ -683,6 +683,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; private function folderNavigationBar($folder) { /* {{{ */ $dms = $this->params['dms']; + $session = $this->params['session']; $enableClipboard = $this->params['enableclipboard']; $accessobject = $this->params['accessobject']; if (!is_object($folder) || !$folder->isType('folder')) { @@ -721,7 +722,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['edit_folder_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_folder_notify')); } if($enableClipboard) { - $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'F'.$folder->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); + if($session->isOnClipboard($folder)) + $menuitems['remove_from_clipboard'] = array('class'=>'removefromclipboard', 'attributes'=>array(['rel', 'F'.$folder->getId()], ['msg', getMLText('splash_removed_from_clipboard')], ['title', getMLText("remove_from_clipboard")]), 'label'=>getMLText("remove_from_clipboard")); + else + $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'F'.$folder->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); } if ($this->params['user']->isAdmin() && $this->params['enablefullsearch']) { $menuitems['index_folder'] = array('link'=>$this->params['settings']->_httpRoot."out/out.Indexer.php?folderid=". $folderID."&showtree=".showtree(), 'label'=>getMLText('index_folder')); @@ -742,6 +746,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } /* }}} */ private function documentNavigationBar($document) { /* {{{ */ + $session = $this->params['session']; $accessobject = $this->params['accessobject']; $enableClipboard = $this->params['enableclipboard']; $accessMode = $document->getAccessMode($this->params['user']); @@ -788,7 +793,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; $menuitems['edit_document_notify'] = array('link'=>$this->params['settings']->_httpRoot."out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_document_notify')); } if($enableClipboard) { - $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'D'.$document->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); + if($session->isOnClipboard($document)) + $menuitems['remove_from_clipboard'] = array('class'=>'removefromclipboard', 'attributes'=>array(['rel', 'D'.$document->getId()], ['msg', getMLText('splash_removed_from_clipboard')], ['title', getMLText("remove_from_clipboard")]), 'label'=>getMLText("remove_from_clipboard")); + else + $menuitems['add_to_clipboard'] = array('class'=>'addtoclipboard', 'attributes'=>array(['rel', 'D'.$document->getId()], ['msg', getMLText('splash_added_to_clipboard')], ['title', getMLText("add_to_clipboard")]), 'label'=>getMLText("add_to_clipboard")); } if ($accessobject->check_view_access('TransferDocument')) { $menuitems['transfer_document'] = array('link'=>$this->params['settings']->_httpRoot."out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); @@ -3215,6 +3223,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) function documentListRowAction($document, $previewer, $skipcont=false, $version=0, $extracontent=array()) { /* {{{ */ $user = $this->params['user']; + $session = $this->params['session']; $enableClipboard = $this->params['enableclipboard']; $accessop = $this->params['accessobject']; $onepage = $this->params['onepage']; @@ -3244,7 +3253,10 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $actions['document_access'] = $this->printAccessButton($document, true); } if($enableClipboard) { - $actions['add_to_clipboard'] = ''; + if($session->isOnClipboard($document)) + $actions['remove_from_clipboard'] = ''; + else + $actions['add_to_clipboard'] = ''; } if($onepage) $actions['view_document'] = ''; @@ -3478,6 +3490,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) function folderListRowAction($subFolder, $skipcont=false, $extracontent=array()) { /* {{{ */ $dms = $this->params['dms']; $user = $this->params['user']; + $session = $this->params['session']; // $folder = $this->params['folder']; $showtree = $this->params['showtree']; $enableRecursiveCount = $this->params['enableRecursiveCount']; @@ -3508,7 +3521,10 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $actions['folder_access'] = $this->printAccessButton($subFolder, true); } if($enableClipboard) { - $actions['add_to_clipboard'] = ''; + if($session->isOnClipboard($subFolder)) + $actions['add_to_clipboard'] = ''; + else + $actions['add_to_clipboard'] = ''; } if($onepage) $actions['view_folder'] = ''; diff --git a/views/bootstrap4/styles/application.js b/views/bootstrap4/styles/application.js index bbd87464a..a36caa04b 100644 --- a/views/bootstrap4/styles/application.js +++ b/views/bootstrap4/styles/application.js @@ -455,6 +455,8 @@ $(document).ready( function() { if(data.success) { $("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard') $("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard') + $("div.ajax[data-action='navigation']").trigger('update', {}); + $("div.ajax[data-action='folderList']").trigger('update', {}); noty({ text: attr_msg, type: 'success', @@ -490,6 +492,8 @@ $(document).ready( function() { if(data.success) { $("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard') $("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard') + $("div.ajax[data-action='navigation']").trigger('update', {}); + $("div.ajax[data-action='folderList']").trigger('update', {}); noty({ text: attr_msg, type: 'success', @@ -801,6 +805,8 @@ function onAddClipboard(ev) { /* {{{ */ if(data.success) { $("#main-clipboard").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=mainclipboard') $("#menu-clipboard div").html('Loading').load(seeddms_webroot+'out/out.Clipboard.php?action=menuclipboard') + $("div.ajax[data-action='navigation']").trigger('update', {}); + $("div.ajax[data-action='folderList']").trigger('update', {}); noty({ text: data.message, type: 'success', From 2ecef66355158807b7d8dd7111ab74154042642c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 17 Mar 2025 15:58:19 +0100 Subject: [PATCH 3/3] add changes for 5.1.39 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index b01d8b807..ed0c07157 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,6 +11,7 @@ - prevent malicious manipulation of referer when setting language - fix setting attributes of type user, group, document, folder when updating a document +- objects can be removed from clipboard -------------------------------------------------------------------------------- Changes in version 5.1.38