fileSystemRoot/lib/foldermanagement/Folder.inc");
require_once("$default->fileSystemRoot/lib/users/User.inc");
require_once("$default->fileSystemRoot/lib/documentmanagement/Document.inc");
require_once("$default->fileSystemRoot/lib/documentmanagement/DocumentTransaction.inc");
require_once("$default->fileSystemRoot/lib/documentmanagement/PhysicalDocumentManager.inc");
require_once("$default->fileSystemRoot/lib/subscriptions/SubscriptionEngine.inc");
require_once("$default->fileSystemRoot/lib/subscriptions/SubscriptionManager.inc");
require_once("$default->fileSystemRoot/presentation/Html.inc");
require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc");
require_once("deleteDocumentUI.inc");
$aNondeletedDocs = array();
if (!checkSession()) {
die();
}
if (isset($fRememberDocumentID)) {
$fDocumentIDs = $_SESSION['documents'][$fRememberDocumentID];
} else {
$sUniqueID = KTUtil::randomString();
$_SESSION["documents"][$sUniqueID] = $fDocumentIDs;
$fRememberDocumentID = $sUniqueID;
}
if (!isset($fDocumentIDs)) {
//no document selected for deletion
require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
$oPatternCustom = & new PatternCustom();
$oPatternCustom->setHtml(renderErrorPage(_("No document currently selected")));
$main->setCentralPayload($oPatternCustom);
$main->render();
exit(0);
}
// Check permission and collaboration for all documents
for ($i = 0; $i < count($fDocumentIDs); $i++) {
$oDocument = Document::get($fDocumentIDs[$i]);
if (!Permission::userHasDocumentWritePermission($oDocument)) {
// user does not have permission to delete the document
require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
$oPatternCustom = & new PatternCustom();
$oPatternCustom->setHtml(renderErrorPage(_("You do not have, at least, permission to delete one document") . ": " .
$oDocument->getName() . "
" . _("Please deselect it and retry.")));
$main->setCentralPayload($oPatternCustom);
$main->render();
exit(0);
}
}
if (!isset($fDeleteConfirmed)) {
//get confirmation first
require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
$oPatternCustom = & new PatternCustom();
$oPatternCustom->addHtml(getPage($fRememberDocumentID));
$main->setCentralPayload($oPatternCustom);
$main->render();
exit(0);
}
/* Delete all files
If an error occured while deleting a file, then:
- make a rollback of the current file
- insert document object in $aNondeletedDocs array
- delete the other selected file
At the end check the $aNondeletedDocs array
- if is empty then OK
- if is not empty then show the nondeleted files list
*/
for ($i = 0; $i < count($fDocumentIDs); $i++) {
$oDocument = Document::get($fDocumentIDs[$i]);
if (!isset($oDocument)) {
// Store the doc with problem
array_push($aNondeletedDocs, array($oDocument, _("Could not load document in database")));
}
// New transaction
$sDocumentPath = Folder::getFolderPath($oDocument->getFolderID()) . $oDocument->getFileName();
$oDocumentTransaction = & new DocumentTransaction($fDocumentIDs[$i], "Document deleted", DELETE);
$oDocumentTransaction->create();
// flip the status id
$oDocument->setStatusID(DELETED);
// store
if (!$oDocument->update()) {
//could not update the documents status in the db
$default->log->error("deleteDocumentBL.php DB error deleting document " .
$oDocument->getFileName() . " from folder " .
Folder::getFolderPath($oDocument->getFolderID()) .
" id=" . $oDocument->getFolderID());
//get rid of the document transaction
$oDocumentTransaction->delete();
// Store the doc with problem
array_push($aNondeletedDocs, array($oDocument,
_("Could not update document in database")));
}
// now move the document to the delete folder
if (PhysicalDocumentManager::delete($oDocument)) {
//could not delete the document from the file system
$default->log->error("deleteDocumentBL.php Filesystem error deleting document " .
$oDocument->getFileName() . " from folder " .
Folder::getFolderPath($oDocument->getFolderID()) .
" id=" . $oDocument->getFolderID());
//reverse the document deletion
$oDocument->setStatusID(LIVE);
$oDocument->update();
//get rid of the document transaction
$oDocumentTransaction->delete();
// Store the doc with problem
array_push($aNondeletedDocs, array($oDocument, _("Could not delete document on file system")));
}
// successfully deleted the document
$default->log->info("deleteDocumentBL.php successfully deleted document " .
$oDocument->getFileName() . " from folder " .
Folder::getFolderPath($oDocument->getFolderID()) .
" id=" . $oDocument->getFolderID());
// fire subscription alerts for the deleted document
$count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i],
SubscriptionConstants::subscriptionAlertType("RemoveSubscribedDocument"),
SubscriptionConstants::subscriptionType("DocumentSubscription"),
array(
"folderID" => $oDocument->getFolderID(),
"removedDocumentName" => $oDocument->getName(),
"folderName" => Folder::getFolderDisplayPath($oDocument->getFolderID()),
));
$default->log->info("deleteDocumentBL.php fired $count subscription alerts for removed document " . $oDocument->getName());
// remove all document subscriptions for this document
if (SubscriptionManager::removeSubscriptions($fDocumentIDs[$i], SubscriptionConstants::subscriptionType("DocumentSubscription"))) {
$default->log->info("deleteDocumentBL.php removed all subscriptions for this document");
} else {
$default->log->error("deleteDocumentBL.php couldn't remove document subscriptions");
}
}
// List nondeleted documents
if (!empty($aNondeletedDocs) ) {
require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
$oPatternCustom = & new PatternCustom();
$sError = _("An error occured deleting the following document(s):") . "
";
foreach ($aNondeletedDocs as $oDoc) {
$sError .= $oDoc[0]->getDisplayPath() . ": " .$oDoc[1] . "
";
}
$sError .= "
" . _("The other documents are been deleted.");
$oPatternCustom->addHtml(renderErrorPage($sError));
$main->setCentralPayload($oPatternCustom);
$main->render();
exit(0);
}
// redirect to the browse folder page
redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID());
exit(0);
?>