From 2fd5f2e4b234cab451715ce5fef54ad3d455e481 Mon Sep 17 00:00:00 2001 From: Megan Watson Date: Wed, 20 Jan 2010 11:25:43 +0200 Subject: [PATCH] Added triggers after the expunge has completed to do a bulk action on all expunged documents. PT: 2100328 --- plugins/ktcore/admin/deletedDocuments.php | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------- 1 file changed, 78 insertions(+), 64 deletions(-) diff --git a/plugins/ktcore/admin/deletedDocuments.php b/plugins/ktcore/admin/deletedDocuments.php index bd4fe61..6cd8d10 100755 --- a/plugins/ktcore/admin/deletedDocuments.php +++ b/plugins/ktcore/admin/deletedDocuments.php @@ -5,32 +5,32 @@ * KnowledgeTree Community Edition * Document Management Made Simple * Copyright (C) 2008, 2009 KnowledgeTree Inc. - * - * + * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, + * + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, * California 94120-7775, or email info@knowledgetree.com. - * + * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. - * + * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by - * KnowledgeTree" logo and retain the original copyright notice. If the display of the + * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices - * must display the words "Powered by KnowledgeTree" and retain the original + * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * Contributor( s): ______________________________________ * @@ -51,9 +51,9 @@ class DeletedDocumentsDispatcher extends KTAdminDispatcher { var $sHelpPage = 'ktcore/admin/deleted documents.html'; function do_main () { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Deleted Documents')); - + $this->oPage->setBreadcrumbDetails(_kt('view')); - + $aDocuments =& Document::getList('status_id=' . DELETED); if(!empty($aDocuments)){ @@ -72,12 +72,12 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; }else{ $limit = 9; } - + for($i = 0; $i <= $limit; $i++){ $aDocumentsList[] = $aDocuments[$i]; } } - + $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/deletedlist'); $oTemplate->setData(array( @@ -90,7 +90,7 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; )); return $oTemplate; } - + function do_branchConfirm() { $submit = KTUtil::arrayGet($_REQUEST, 'submit' , array()); if (array_key_exists('expunge',$submit)) { @@ -104,33 +104,33 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; } $this->errorRedirectToMain(_kt('No action specified.')); } - + function do_confirm_expunge($all = false) { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Deleted Documents')); - + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); $full_docs = KTUtil::arrayGet($_REQUEST, 'docIds', array()); - + if($all == true){ $selected_docs = $full_docs; } - + $this->oPage->setTitle(sprintf(_kt('Confirm Expunge of %d documents'), count($selected_docs))); - + $this->oPage->setBreadcrumbDetails(sprintf(_kt('confirm expunge of %d documents'), count($selected_docs))); - + $aDocuments = array(); foreach ($selected_docs as $doc_id) { $oDoc =& Document::get($doc_id); - if (PEAR::isError($oDoc) || ($oDoc === false)) { + if (PEAR::isError($oDoc) || ($oDoc === false)) { $this->errorRedirectToMain(_kt('Invalid document id specified. Aborting expunge')); } else if ($oDoc->getStatusId() != DELETED) { $this->errorRedirectToMain(sprintf(_kt('%s is not a deleted document. Aborting expunge'), $oDoc->getName())); } $aDocuments[] = $oDoc; } - - + + $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/expungeconfirmlist'); $oTemplate->setData(array( @@ -140,47 +140,49 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; return $oTemplate; } - function do_finish_expunge() { - $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); - + function do_finish_expunge() { + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); + $aDocuments = array(); foreach ($selected_docs as $doc_id) { $oDoc =& Document::get($doc_id); - if (PEAR::isError($oDoc) || ($oDoc === false)) { + if (PEAR::isError($oDoc) || ($oDoc === false)) { $this->errorRedirectToMain(_kt('Invalid document id specified. Aborting expunge')); } else if ($oDoc->getStatusId() != DELETED) { $this->errorRedirectToMain(sprintf(_kt('%s is not a deleted document. Aborting expunge'), $oDoc->getName())); } $aDocuments[] = $oDoc; } - + $this->startTransaction(); $aErrorDocuments = array(); - $aSuccessDocuments = array(); + $aSuccessDocuments = array(); + $aDeletedDocs = array(); $oStorage =& KTStorageManagerUtil::getSingleton(); + $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); foreach ($aDocuments as $oDoc) { // first evaluate the folder for inconsistencies. $oFolder = Folder::get($oDoc->getFolderID()); if (PEAR::isError($oFolder)) { $oDoc->setFolderId(1); $oDoc->update(); } - + if (!$oStorage->expunge($oDoc)) { $aErrorDocuments[] = $oDoc->getDisplayPath(); } else { $oDocumentTransaction = & new DocumentTransaction($oDoc, _kt('Document expunged'), 'ktcore.transactions.expunge'); $oDocumentTransaction->create(); - + // delete this from the db now if (!$oDoc->delete()) { - $aErrorDocuments[] = $oDoc->getId(); + $aErrorDocuments[] = $oDoc->getId(); } else { // removed succesfully $aSuccessDocuments[] = $oDoc->getDisplayPath(); - + $aDeletedDocs[] = $oDoc->getId(); + // remove any document data $oDoc->cleanupDocumentData($oDoc->getId()); // silly - why the redundancy? - - $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); + $aTriggers = $oKTTriggerRegistry->getTriggers('expunge', 'finalised'); foreach ($aTriggers as $aTrigger) { $sTrigger = $aTrigger[0]; @@ -189,38 +191,50 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; 'document' => $oDoc, ); $oTrigger->setInfo($aInfo); - $ret = $oTrigger->finalised(); + $ret = $oTrigger->finalised(); } } } } $this->commitTransaction(); + + $aTriggers = $oKTTriggerRegistry->getTriggers('expunge', 'postValidate'); + foreach ($aTriggers as $aTrigger) { + $sTrigger = $aTrigger[0]; + $oTrigger = new $sTrigger; + $aInfo = array( + 'documents' => $aDeletedDocs, + ); + $oTrigger->setInfo($aInfo); + $ret = $oTrigger->postValidate(); + } + $msg = sprintf(_kt('%d documents expunged.'), count($aSuccessDocuments)); if (count($aErrorDocuments) != 0) { $msg .= _kt('Failed to expunge') . ': ' . join(', ', $aErrorDocuments); } $this->successRedirectToMain($msg); } - + function do_confirm_restore() { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Deleted Documents')); - - $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); - + + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); + $this->oPage->setTitle(sprintf(_kt('Confirm Restore of %d documents'), count($selected_docs))); - + $this->oPage->setBreadcrumbDetails(sprintf(_kt('Confirm Restore of %d documents'), count($selected_docs))); - + $aDocuments = array(); foreach ($selected_docs as $doc_id) { $oDoc =& Document::get($doc_id); - if (PEAR::isError($oDoc) || ($oDoc === false)) { + if (PEAR::isError($oDoc) || ($oDoc === false)) { $this->errorRedirectToMain(_kt('Invalid document id specified. Aborting expunge')); } else if ($oDoc->getStatusId() != DELETED) { $this->errorRedirectToMain(sprintf(_kt('%s is not a deleted document. Aborting expunge'), $oDoc->getName())); } $aDocuments[] = $oDoc; } - - + + $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/document/admin/restoreconfirmlist'); $oTemplate->setData(array( @@ -230,36 +244,36 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; return $oTemplate; } - function do_finish_restore() { - $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); - + function do_finish_restore() { + $selected_docs = KTUtil::arrayGet($_REQUEST, 'selected_docs', array()); + $aDocuments = array(); foreach ($selected_docs as $doc_id) { $oDoc =& Document::get($doc_id); - if (PEAR::isError($oDoc) || ($oDoc === false)) { + if (PEAR::isError($oDoc) || ($oDoc === false)) { $this->errorRedirectToMain(_kt('Invalid document id specified. Aborting restore')); } else if ($oDoc->getStatusId() != DELETED) { $this->errorRedirectToMain(sprintf(_kt('%s is not a deleted document. Aborting restore'), $oDoc->getName())); } $aDocuments[] = $oDoc; } - + $this->startTransaction(); $aErrorDocuments = array(); - $aSuccessDocuments = array(); + $aSuccessDocuments = array(); $oStorage =& KTStorageManagerUtil::getSingleton(); foreach ($aDocuments as $oDoc) { $oFolder = Folder::get($oDoc->getRestoreFolderId()); // move to root if parent no longer exists. - if (PEAR::isError($oFolder)) { - $oDoc->setFolderId(1); + if (PEAR::isError($oFolder)) { + $oDoc->setFolderId(1); $oFolder = Folder::get(1); - } else { + } else { $oDoc->setFolderId($oDoc->getRestoreFolderId()); } - + if ($oStorage->restore($oDoc)) { $oDoc = Document::get($oDoc->getId()); // storage path has changed for most recent object... $oDoc->setStatusId(LIVE); @@ -269,14 +283,14 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; $aErrorDocuments[] = $oDoc->getName(); continue; // skip transactions, etc. } - + $res = KTPermissionUtil::updatePermissionLookup($oDoc); - + if (PEAR::isError($res)) { $aErrorDocuments[] = $oDoc->getName(); continue; // skip transactions, etc. } - + // create a doc-transaction. // FIXME does this warrant a transaction-type? $oTransaction = new DocumentTransaction($oDoc, sprintf(_kt("Restored from deleted state by %s"), $this->oUser->getName()), 'ktcore.transactions.update'); @@ -293,14 +307,14 @@ var $sHelpPage = 'ktcore/admin/deleted documents.html'; $msg = sprintf(_kt('%d documents restored.'), count($aSuccessDocuments)); if (count($aErrorDocuments) != 0) { $msg .= _kt('Failed to restore') . ': ' . join(', ', $aErrorDocuments); } $this->successRedirectToMain($msg); - } - + } + function getRestoreLocationFor($oDocument) { - $iFolderId = $oDocument->getRestoreFolderId(); + $iFolderId = $oDocument->getRestoreFolderId(); $oFolder = Folder::get($iFolderId); - + if (PEAR::isError($oFolder)) { - return _kt('Original folder no longer exists. Document will be restored in the root folder.'); + return _kt('Original folder no longer exists. Document will be restored in the root folder.'); } else { $aCrumbs = KTBrowseUtil::breadcrumbsForFolder($oFolder); $aParts = array(); -- libgit2 0.21.4