diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseBL.php b/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseBL.php index de64c56..bbcc266 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseBL.php +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseBL.php @@ -25,6 +25,7 @@ require_once("$default->fileSystemRoot/presentation/Html.inc"); * fDocumentTypeID - the document type id to browse [optional depending on fBrowseType] * fSortBy - the document attribute to sort the browse results by * fSortDirection - the direction to sort + * fActions - action for group operations * * Copyright (c) 2003 Jam Warehouse http://www.jamwarehouse.com * @@ -49,6 +50,27 @@ require_once("$default->fileSystemRoot/presentation/Html.inc"); // only if we have a valid session if (checkSession()) { + if (isset($fActions)) { + // tack on POSTed document ids and redirect to the expunge deleted documents page + $sQueryString = ""; + if (isset($fDocumentIDs) ) { + foreach ($fDocumentIDs as $fDocumentID) { + $sQueryString .= "fDocumentIDs[]=$fDocumentID&"; + } + } + + switch ($fActions) { + case "delete": + // delete all selected docs + controllerRedirect("deleteDocument", $sQueryString); + break; + case "move": + // Move selected docs to root folder + controllerRedirect("moveDocument", $sQueryString . "fFolderID=1"); + break; + } + } + // retrieve variables if (!$fBrowseType) { // required param not set- internal error or user querystring hacking @@ -86,4 +108,5 @@ if (checkSession()) { $main->setSubmitMethod("GET"); $main->render(); } -?> \ No newline at end of file + +?> diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseUI.inc b/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseUI.inc index 02c26d2..1e8c69c 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseUI.inc +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/browseUI.inc @@ -289,6 +289,7 @@ function renderDocumentList($aResults, $sNoDocumentsMessage, $sNoPermissionMessa // in order for candy striping to work we need to take the number of folders // into account when alternating $sToRender .= "" . + "getID() . "\"/>" . ($bTemplateBrowsing ? displayDocumentLinkForTemplateBrowsing($aResults["documents"][$i], $bDisplayFullPath) : displayDocumentLink($aResults["documents"][$i], $bDisplayFullPath)) . ""; @@ -304,6 +305,22 @@ function renderDocumentList($aResults, $sNoDocumentsMessage, $sNoPermissionMessa } $sToRender .= "\n"; } + + $sSectionName = $default->siteMap->getSectionName(substr($_SERVER["PHP_SELF"], strlen($default->rootUrl), strlen($_SERVER["PHP_SELF"]))); + $sTDBGColour = $default->siteMap->getSectionColour($sSectionName, "td"); + + $sToRender .= "" . + " Select all documents"; + + $sToRender .= ""; + $sToRender .= ""; + + $sToRender .= "graphicsUrl/widgets/move.gif\" border=\"0\"/>"; + $sToRender .= "graphicsUrl/widgets/delete.gif\" border=\"0\"/>"; + $sToRender .= "\n"; + // Change for group Operations + + } else if ($aResults["accessDenied"]) { $sToRender .= "$sNoPermissionMessage"; } else { @@ -341,6 +358,21 @@ function renderPage($aResults, $sBrowseType, $sSortBy, $sSortDirection, $bTempla $sToRender = renderHeading(_("Browse collection")); + // Script function to select all documents + $sToRender = "\n\n\n\n"; + $sToRender .= "
"; switch ($sBrowseType) { case "folder" : $sToRender .= displayFolderPathLink(Folder::getFolderPathAsArray($aResults["folders"][0]->getID()), diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentBL.php b/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentBL.php index 2e72b97..505fe94 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentBL.php +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentBL.php @@ -42,45 +42,100 @@ require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/fo require_once("deleteDocumentUI.inc"); +$aNondeletedDocs = array(); + + if (checkSession()) { - if (isset($fDocumentID)) { - $oDocument = Document::get($fDocumentID); - if (Permission::userHasDocumentWritePermission($oDocument)) { + if (isset($fDocumentIDs)) { + + // 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(); + return; + + } else { + // check if there is collaboration for this document - $aFolderUserRoles = FolderUserRole::getList("document_id = $fDocumentID"); + $aFolderUserRoles = FolderUserRole::getList("document_id = $fDocumentIDs[$i]"); // check if any of them are active $bActive = false; - for ($i=0; $ilog->info("delDoc bActive=" . ($bActive ? "1" : "0") . ";folderUserRoleID=" . $aFolderUserRoles[$i]->getGroupFolderApprovalID() . "; active=" . ($aFolderUserRoles[$i]->getActive() ? "1" : "0")); - $bActive = $bActive || $aFolderUserRoles[$i]->getActive(); + for ($j=0; $jlog->info("delDoc bActive=" . ($bActive ? "1" : "0") . ";folderUserRoleID=" . $aFolderUserRoles[$j]->getGroupFolderApprovalID() . "; active=" . ($aFolderUserRoles[$j]->getActive() ? "1" : "0")); + $bActive = $bActive || $aFolderUserRoles[$j]->getActive(); + } + + if ($bActive) { + + // there are active collaboration roles for this doc + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom = & new PatternCustom(); + $oPatternCustom->setHtml(renderErrorPage("You can't, at least, delete one document " . + $oDocument->getName() . " because it's still in collaboration")); + $main->setCentralPayload($oPatternCustom); + $main->render(); + return; + } } - if (!$bActive) { - // there aren't any active roles for this doc + } + + + /* 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 + */ + + // Delete all files with possible rollback if (isset($fDeleteConfirmed)) { - //deletion of document is confirmed - $oDocument = Document::get($fDocumentID); + + // deletion of all documents are confirmed + for ($i = 0; $i < count($fDocumentIDs); $i++) { + + $oDocument = Document::get($fDocumentIDs[$i]); if (isset($oDocument)) { + // New transaction $sDocumentPath = Folder::getFolderPath($oDocument->getFolderID()) . $oDocument->getFileName(); - $oDocumentTransaction = & new DocumentTransaction($fDocumentID, "Document deleted", DELETE); + $oDocumentTransaction = & new DocumentTransaction($fDocumentIDs[$i], "Document deleted", DELETE); $oDocumentTransaction->create(); + // flip the status id $oDocument->setStatusID(DELETED); + // store if ($oDocument->update()) { // now move the document to the delete folder if (PhysicalDocumentManager::delete($oDocument)) { // successfully deleted the document - $default->log->info("deleteDocumentBL.php successfully deleted document " . $oDocument->getFileName() . " from folder " . Folder::getFolderPath($oDocument->getFolderID()) . " id=" . $oDocument->getFolderID()); + $default->log->info("deleteDocumentBL.php successfully deleted document " . + $oDocument->getFileName() . " from folder " . + Folder::getFolderPath($oDocument->getFolderID()) . + " id=" . $oDocument->getFolderID()); // delete all collaboration roles - for ($i=0; $ilog->info("delDoc deleting folderuserroleID=" . $aFolderUserRoles[$i]->getGroupFolderApprovalID()); - $aFolderUserRoles[$i]->delete(); + for ($j=0; $jlog->info("delDoc deleting folderuserroleID=" . $aFolderUserRoles[$j]->getGroupFolderApprovalID()); + $aFolderUserRoles[$j]->delete(); } // fire subscription alerts for the deleted document - $count = SubscriptionEngine::fireSubscription($fDocumentID, SubscriptionConstants::subscriptionAlertType("RemoveSubscribedDocument"), + $count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i], + SubscriptionConstants::subscriptionAlertType("RemoveSubscribedDocument"), SubscriptionConstants::subscriptionType("DocumentSubscription"), array( "folderID" => $oDocument->getFolderID(), "removedDocumentName" => $oDocument->getName(), @@ -88,14 +143,12 @@ if (checkSession()) { $default->log->info("deleteDocumentBL.php fired $count subscription alerts for removed document " . $oDocument->getName()); // remove all document subscriptions for this document - if (SubscriptionManager::removeSubscriptions($fDocumentID, SubscriptionConstants::subscriptionType("DocumentSubscription"))) { + 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"); } - // redirect to the browse folder page - redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID()); } else { //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()); @@ -104,11 +157,10 @@ if (checkSession()) { $oDocument->update(); //get rid of the document transaction $oDocumentTransaction->delete(); - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(renderErrorPage("The document could not be deleted from the file system", $fDocumentID)); - $main->setCentralPayload($oPatternCustom); - $main->render(); + + // Store the doc with problem + array_push($aNondeletedDocs, array($oDocument, "Could not delete document on file system")); + } } else { //could not update the documents status in the db @@ -116,42 +168,49 @@ if (checkSession()) { //get rid of the document transaction $oDocumentTransaction->delete(); - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(renderErrorPage("The document could not be deleted from the database", $fDocumentID)); - $main->setCentralPayload($oPatternCustom); - $main->render(); + + // Store the doc with problem + array_push($aNondeletedDocs, array($oDocument, "Could not update document in database")); + } } else { //could not load document object - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(renderErrorPage("An error occured whilst retrieving the document from the database", $fDocumentID)); - $main->setCentralPayload($oPatternCustom); - $main->render(); + + // Store the doc with problem + array_push($aNondeletedDocs, array($oDocument, "Could not load document in database")); + } - } else { - //get confirmation first - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom = & new PatternCustom(); - $oDocument = Document::get($fDocumentID); - $oPatternCustom->setHtml(getPage($fDocumentID, $oDocument->getFolderID(), $oDocument->getName())); - $main->setCentralPayload($oPatternCustom); - $main->render(); } - } else { - // there are active collaboration roles for this doc + + // List nondeleted documents + if (!empty($aNondeletedDocs) ) { + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(renderErrorPage("You can't delete this document because it's still in collaboration", $fDocumentID)); + + $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(); + + reset($aNondeletedDocs); + + } else { + // redirect to the browse folder page + redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID()); } + + } else { - //user does not have permission to delete the document + //get confirmation first require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(renderErrorPage("You do not have permission to delete this document", $fDocumentID)); + $oPatternCustom->addHtml(getPage($fDocumentIDs)); $main->setCentralPayload($oPatternCustom); $main->render(); } @@ -164,3 +223,5 @@ if (checkSession()) { $main->render(); } } + +?> diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentUI.inc b/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentUI.inc index 444abde..eec543d 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentUI.inc +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentUI.inc @@ -24,30 +24,27 @@ * @author Rob Cherry, Jam Warehouse (Pty) Ltd, South Africa * @package documentmanagement */ - -function getDocumentPath($iFolderID, $sDocumentName) { - global $default; - $sSectionName = $default->siteMap->getSectionName(substr($_SERVER["PHP_SELF"], strlen($default->rootUrl), strlen($_SERVER["PHP_SELF"]))); - $sTDBGColour = $default->siteMap->getSectionColour($sSectionName, "td"); - $sDocumentPath = displayFolderPathLink(Folder::getFolderPathAsArray($iFolderID), Folder::getFolderPathNamesAsArray($iFolderID), "$default->rootUrl/control.php?action=browse") . " > " . $sDocumentName; - return "
$sDocumentPath
\n"; -} - -function getPage($iDocumentID, $iFolderID, $sDocumentName) { +function getPage($fDocumentIDs) { global $default; $sToRender = renderHeading(_("Delete Document")); - $sToRender .= getDocumentPath($iFolderID, $sDocumentName) . "
\n"; $sToRender .= "\n"; $sToRender .= "\n"; - $sToRender .= "\n"; - $sToRender .= "\n"; + $sToRender .= "\n"; + + for ($i = 0; $i < count($fDocumentIDs); $i++) { + $oDocument = Document::get($fDocumentIDs[$i]); $sToRender .= "\n"; + $sToRender .= "\n"; + $sQueryString .= "fDocumentIDs[]=$fDocumentIDs[$i]&"; + } + $sToRender .= "\n"; + $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "\n"; - $sToRender .= ""; + $sToRender .= ""; $sToRender .= ""; $sToRender .= "
You have chosen to delete the document entitled '" . $sDocumentName . "'.
You have chosen to delete the following document(s):

  '" . $oDocument->getDisplayPath() . "'
Select 'Delete' to confirm the deletion, or 'Cancel' to cancel it
 
graphicsUrl/widgets/delete.gif\" border=\"0\"> rootUrl/control.php?action=viewDocument&fDocumentID=" . $iDocumentID . "\">graphicsUrl/widgets/cancel.gif\" border=\"0\">
graphicsUrl/widgets/delete.gif\" border=\"0\"> graphicsUrl/widgets/cancel.gif\" border=\"0\">
\n"; @@ -63,7 +60,7 @@ function renderErrorPage($sErrorMessage, $iDocumentID = "") { $sToRender = renderHeading(_("Delete Document")); $sToRender .= "\n"; $sToRender .= "

$sErrorMessage

\n" . - "graphicsUrl/widgets/back.gif\" border=\"0\"/>\n" . + "graphicsUrl/widgets/back.gif\" border=\"0\"/>\n" . "

\n"; return $sToRender; } diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentBL.php b/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentBL.php index 1cc301e..d06bbda 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentBL.php +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentBL.php @@ -45,15 +45,24 @@ require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/do require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc"); require_once("$default->fileSystemRoot/presentation/Html.inc"); +$aUnmovedDocs = array(); + if (checkSession()) { - if (isset($fDocumentID) && isset($fFolderID)) { + if (isset($fDocumentIDs) && isset($fFolderID)) { if (isset($fForMove)) { if ($fConfirmed) { + for ($i = 0; $i < count($fDocumentIDs); $i++) { + //we're trying to move a document - $oDocument = & Document::get($fDocumentID); + $oDocument = & Document::get($fDocumentIDs[$i]); $oFolder = & Folder::get($fFolderID); $iOldFolderID = $oDocument->getFolderID(); + + // check that there is no filename collision in the destination directory + $sNewDocumentFileSystemPath = Folder::getFolderPath($fFolderID) . $oDocument->getFileName(); + if (!file_exists($sNewDocumentFileSystemPath)) { + if (Permission::userHasDocumentWritePermission($oDocument) && Permission::userHasFolderWritePermission($oFolder)) { //if the user has both document and folder write permissions //get the old document path @@ -65,9 +74,8 @@ if (checkSession()) { $sOldDocumentFileSystemPath = Folder::getFolderPath($iOldFolderID) . $oDocument->getFileName(); //move the document on the file system if (PhysicalDocumentManager::moveDocument($sOldDocumentFileSystemPath, $oDocument, $oFolder)) { - // fire subscription alerts for the moved document (and the folder its in) - $count = SubscriptionEngine::fireSubscription($fDocumentID, SubscriptionConstants::subscriptionAlertType("MovedDocument"), + $count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i], SubscriptionConstants::subscriptionAlertType("MovedDocument"), SubscriptionConstants::subscriptionType("DocumentSubscription"), array( "folderID" => $iOldFolderID, "modifiedDocumentName" => $oDocument->getName(), @@ -76,82 +84,116 @@ if (checkSession()) { $default->log->info("moveDocumentBL.php fired $count subscription alerts for moved document " . $oDocument->getName()); // fire folder subscriptions for the destination folder - $count = SubscriptionEngine::fireSubscription($oDocument->getFolderID(), SubscriptionConstants::subscriptionAlertType("MovedDocument"), + $count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i], SubscriptionConstants::subscriptionAlertType("MovedDocument"), SubscriptionConstants::subscriptionType("FolderSubscription"), - array( "modifiedDocumentName" => $oDocument->getName(), + array( "folderID" => $iOldFolderID, + "modifiedDocumentName" => $oDocument->getName(), "oldFolderName" => Folder::getFolderName($iOldFolderID), "newFolderName" => Folder::getFolderName($fFolderID) )); $default->log->info("moveDocumentBL.php fired $count (folderID=$fFolderID) folder subscription alerts for moved document " . $oDocument->getName()); - - - //redirect to the view path - redirect("$default->rootUrl/control.php?action=viewDocument&fDocumentID=$fDocumentID"); } else { require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); //we couldn't move the document on the file system //so reset the database values $oDocument->setFolderID($iOldFolderID); $oDocument->update(); - $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage("Could not move document on file system"); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1"); - $main->render(); + + // Store the doc with problem + array_push($aUnmovedDocs, array($oDocument, "Could not move document on file system")); } } else { require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); //had a problem with the database - $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage("Could not update document in database"); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID"); - $main->render(); + // Store the doc with problem + array_push($aUnmovedDocs, array($oDocument, "Could not update document in database")); } } else { require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + + // Permission problem + // Store the doc with problem + array_push($aUnmovedDocs, array($oDocument, "You do not have rights to move this document")); + } + + } else { + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + + // Store the doc with problem + array_push($aUnmovedDocs, array($oDocument, "This folder already contains a document of the same name. Please choose another directory")); + } + + } + + // Move terminated + + // List undeleted documents + if (!empty($aUnmovedDocs) ) { + + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID)); + + $sError = "An error occured moving the following document(s):

"; + foreach ($aUnmovedDocs as $oDoc) { + $sError .= $oDoc[0]->getDisplayPath() . ":   " .$oDoc[1] . "
"; + } + $sError .= "
The other documents are been moved."; + + $oPatternCustom = & new PatternCustom(); + $oPatternCustom->setHtml(renderErrorPage($sError)); $main->setCentralPayload($oPatternCustom); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID"); - $main->setErrorMessage("You do not have rights to move this document"); $main->render(); - } + + reset($aUnmovedDocs); + } else { + // redirect to the browse folder page + redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID()); + } + + } else { // ($fConfirmed) require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $oPatternCustom = & new PatternCustom(); - $oDocument = Document::get($fDocumentID); - $oFolder = Folder::get($fFolderID); + // Check for all docs + for ($i = 0; $i < count($fDocumentIDs); $i++) { + + $oDocument = Document::get($fDocumentIDs[$i]); + // check if the selected folder has the same document type as the document we're moving if (Folder::folderIsLinkedToDocType($fFolderID, $oDocument->getDocumentTypeID())) { // check that there is no filename collision in the destination directory $sNewDocumentFileSystemPath = Folder::getFolderPath($fFolderID) . $oDocument->getFileName(); if (!file_exists($sNewDocumentFileSystemPath)) { // display confirmation page - $oPatternCustom->setHtml(getConfirmationPage($oFolder, $oDocument)); + $oPatternCustom->setHtml(getConfirmationPage($fFolderID, $fDocumentIDs)); } else { // filename collision - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID, "This folder already contains a document of the same name. Please choose another directory")); + $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentIDs, "This folder already contains a document of the same name ('" . + $oDocument->getFileName() . + "'). Please choose another directory")); + break; } } else { // the right document type isn't mapped - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID, "You can't move the document to this folder because it cannot store the document type of your document. Please choose another directory")); + $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentIDs, "You can't move the document '" . + $oDocument->getFileName() . + "' to this folder because it cannot store the document type of your document. Please choose another directory")); + break; + } } $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID"); $main->setCentralPayload($oPatternCustom); $main->render(); } - } else { + } else { // (isset($fForMove)) require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $oPatternCustom = & new PatternCustom(); - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID)); + $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentIDs)); $main->setCentralPayload($oPatternCustom); $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID"); $main->render(); } - } else { + } else { // (isset($fDocumentIDs) && isset($fFolderID)) require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); $oPatternCustom = & new PatternCustom(); $oPatternCustom->setHtml(""); @@ -160,4 +202,5 @@ if (checkSession()) { $main->render(); } } -?> \ No newline at end of file + +?> diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentUI.inc b/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentUI.inc index bd29121..3b008e3 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentUI.inc +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentUI.inc @@ -25,46 +25,75 @@ * @package documentmanagement */ -function getConfirmationPage($oFolder, $oDocument) { +function getConfirmationPage($iFolderID, $iDocumentIDs) { global $default; $sToRender = renderHeading(_("Move Document")); $sToRender .= "\n"; $sToRender .= "\n"; - $sToRender .= "\n"; - $sToRender .= "\n"; + + for ($i = 0; $i < count($iDocumentIDs); $i++) { + + $oDocument = & Document::get($iDocumentIDs[$i]); + + $sToRender .= "\n"; + $sToRender .= "\n"; + $sQueryString .= "fDocumentIDs[]=$iDocumentIDs[$i]&"; + } + $sToRender .= "\n"; - $sToRender .= "\n"; + "rootUrl/control.php?action=browse&fFolderID=$iFolderID\">" . + "graphicsUrl/widgets/cancel.gif\" border=\"0\">\n"; $sToRender .= "
Are you sure you want to move
" . $oDocument->getDisplayPath() . " to
" . Folder::getFolderDisplayPath($oFolder->getID()) . " > " . $oDocument->getFileName() . "
" . $oDocument->getDisplayPath() . "  to  " . Folder::getFolderDisplayPath($iFolderID) . " > " . $oDocument->getFileName() . "
rootUrl/control.php?action=moveDocument&fDocumentID=" . - $oDocument->getID() . "&fFolderID=" . $oFolder->getID() . + $sToRender .= "
rootUrl/control.php?action=moveDocument&" . $sQueryString . + "fFolderID=$iFolderID" . "&fForMove=1&fConfirmed=1\">" . "graphicsUrl/widgets/move.gif\" border=\"0\"/>" . " " . - "rootUrl/control.php?action=viewDocument&fDocumentID=" . $oDocument->getID() . "\">" . - "graphicsUrl/widgets/cancel.gif\" border=\"0\">" . - "
\n"; return $sToRender; } -// FIXME: change these to object references instead of IDs -function getPage($iFolderID, $iDocumentID, $sErrorMessage = "") { + +function getPage($iFolderID, $iDocumentIDs, $sErrorMessage = "") { global $default; $sToRender = renderHeading(_("Move Document")); $sToRender .= "\n"; if ($sErrorMessage) { $sToRender .= ""; } - $sToRender .= ""; + $sToRender .= "\n"; + + for ($i = 0; $i < count($iDocumentIDs); $i++) { + $sToRender .= "\n"; + $sToRender .= "\n"; + $sQueryString .= "fDocumentIDs[]=$iDocumentIDs[$i]&"; + } + + $sToRender .= ""; $sToRender .= "\n"; - $sToRender .= "\n"; + $sToRender .= "\n"; $sToRender .= "\n"; $sToRender .= "
$sErrorMessage
Move document " . Document::getDocumentDisplayPath($iDocumentID) . " to:
Move document(s):
  '" . Document::getDocumentDisplayPath($iDocumentIDs[$i]) . "'
to:
" . renderFolderPath($iFolderID, generateControllerUrl("moveDocument", "fDocumentID=$iDocumentID", false)) . "" . renderFolderPath($iFolderID, "/control.php?action=moveDocument&" . $sQueryString) . "
\n"; $sToRender .= "\n"; $sToRender .= "\n"; - $sToRender .= "\n"; + $sToRender .= "\n"; $sToRender .= "\n"; - $sToRender .= "\n"; + $sToRender .= ""; + $sToRender .= "
" . renderFolderList($iFolderID, generateControllerUrl("moveDocument", "fDocumentID=$iDocumentID", false)) . "" . renderFolderList($iFolderID, "/control.php?action=moveDocument&" . $sQueryString) . "
graphicsUrl/widgets/movehere.gif\" border=\"0\"/>rootUrl/control.php?action=viewDocument&fDocumentID=" . $iDocumentID . "\">graphicsUrl/widgets/cancel.gif\" border=\"0\">
graphicsUrl/widgets/movehere.gif\" border=\"0\"> rootUrl/control.php?action=browse&fFolderID=$iFolderID\">graphicsUrl/widgets/cancel.gif\" border=\"0\">
\n"; return $sToRender; } +function renderErrorPage($sErrorMessage, $iDocumentID = "") { + global $default; + if ($iDocumentID) { + return statusPage("Delete Document", "", $sErrorMessage, "viewDocument", "fDocumentID=$iDocumentID"); + } else { + $sToRender = renderHeading("Delete Document"); + $sToRender .= "\n"; + $sToRender .= "

$sErrorMessage

\n" . + "graphicsUrl/widgets/back.gif\" border=\"0\"/>\n" . + "

\n"; + return $sToRender; + } +} ?> diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/viewUI.inc b/presentation/lookAndFeel/knowledgeTree/documentmanagement/viewUI.inc index 5fcebde..daf6a26 100644 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/viewUI.inc +++ b/presentation/lookAndFeel/knowledgeTree/documentmanagement/viewUI.inc @@ -441,7 +441,7 @@ function displayEmailButton($oDocument) { function displayDeleteButton($oDocument, $bEdit) { if ($bEdit) { - $sQueryString = "fDocumentID=" . $oDocument->getID(); + $sQueryString = "fDocumentIDs[]=" . $oDocument->getID(); if ($oDocument->getIsCheckedOut()) { $sDisabledText = _("This document can't be deleted because its checked out"); } @@ -457,7 +457,7 @@ function displayHistoryButton($oDocument) { } function displayMoveButton($oDocument, $bEdit) { if ($bEdit) { - $sQueryString = "fFolderID=" . $oDocument->getFolderID() . "&fDocumentID=" . $oDocument->getID(); + $sQueryString = "fFolderID=" . $oDocument->getFolderID() . "&fDocumentIDs[]=" . $oDocument->getID(); // documents in collaboration and checked out documents can't be moved if ($oDocument->getIsCheckedOut()) { $sDisabledText = _("The document is checked out and cannot be moved."); diff --git a/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc b/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc index 1747c32..0e6e776 100644 --- a/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc +++ b/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc @@ -105,6 +105,13 @@ function renderFolderList($fFolderID, $sLinkURL) { $aQueryStringVariableNames = array("fFolderID"); $aLinkURLs = array("$sLinkURL"); + $aLinkURLs = array(); + if (strlen($default->rootUrl) > 0) { + $aLinkURLs = array("$default->rootUrl/$sLinkURL"); + } else { + $aLinkURLs = array("$sLinkURL"); + } + $oPatternTableSqlQuery = & new PatternTableSqlQuery($sQuery, $aColumns, $aColumnTypes, $aColumnHeaderNames, "100%", $aLinkURLs, $aDBColumns, $aQueryStringVariableNames); $oPatternTableSqlQuery->setImageURL("$default->graphicsUrl/widgets/dfolder.gif"); $oPatternTableSqlQuery->setEmptyTableMessage("This folder contains no sub folders");