Commit 9a75fb15d6d73a7cb052f3c0b866c3e7ce13b455

Authored by nbm
1 parent 72a96a3c

Allow the user to select multiple documents for deletion or moving.

Submitted by:	Stefano Ciancio <s.ciancio@pisa.iol.it>


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@2944 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/documentmanagement/browseBL.php
@@ -25,6 +25,7 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/Html.inc&quot;); @@ -25,6 +25,7 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/Html.inc&quot;);
25 * fDocumentTypeID - the document type id to browse [optional depending on fBrowseType] 25 * fDocumentTypeID - the document type id to browse [optional depending on fBrowseType]
26 * fSortBy - the document attribute to sort the browse results by 26 * fSortBy - the document attribute to sort the browse results by
27 * fSortDirection - the direction to sort 27 * fSortDirection - the direction to sort
  28 + * fActions - action for group operations
28 * 29 *
29 * Copyright (c) 2003 Jam Warehouse http://www.jamwarehouse.com 30 * Copyright (c) 2003 Jam Warehouse http://www.jamwarehouse.com
30 * 31 *
@@ -49,6 +50,27 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/Html.inc&quot;); @@ -49,6 +50,27 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/Html.inc&quot;);
49 50
50 // only if we have a valid session 51 // only if we have a valid session
51 if (checkSession()) { 52 if (checkSession()) {
  53 + if (isset($fActions)) {
  54 + // tack on POSTed document ids and redirect to the expunge deleted documents page
  55 + $sQueryString = "";
  56 + if (isset($fDocumentIDs) ) {
  57 + foreach ($fDocumentIDs as $fDocumentID) {
  58 + $sQueryString .= "fDocumentIDs[]=$fDocumentID&";
  59 + }
  60 + }
  61 +
  62 + switch ($fActions) {
  63 + case "delete":
  64 + // delete all selected docs
  65 + controllerRedirect("deleteDocument", $sQueryString);
  66 + break;
  67 + case "move":
  68 + // Move selected docs to root folder
  69 + controllerRedirect("moveDocument", $sQueryString . "fFolderID=1");
  70 + break;
  71 + }
  72 + }
  73 +
52 // retrieve variables 74 // retrieve variables
53 if (!$fBrowseType) { 75 if (!$fBrowseType) {
54 // required param not set- internal error or user querystring hacking 76 // required param not set- internal error or user querystring hacking
@@ -86,4 +108,5 @@ if (checkSession()) { @@ -86,4 +108,5 @@ if (checkSession()) {
86 $main->setSubmitMethod("GET"); 108 $main->setSubmitMethod("GET");
87 $main->render(); 109 $main->render();
88 } 110 }
89 -?>  
90 \ No newline at end of file 111 \ No newline at end of file
  112 +
  113 +?>
presentation/lookAndFeel/knowledgeTree/documentmanagement/browseUI.inc
@@ -289,6 +289,7 @@ function renderDocumentList($aResults, $sNoDocumentsMessage, $sNoPermissionMessa @@ -289,6 +289,7 @@ function renderDocumentList($aResults, $sNoDocumentsMessage, $sNoPermissionMessa
289 // in order for candy striping to work we need to take the number of folders 289 // in order for candy striping to work we need to take the number of folders
290 // into account when alternating 290 // into account when alternating
291 $sToRender .= "<tr bgcolor=\"" . getColour($i+$iFolderCount) . "\" width=\"100%\"><td valign=\"bottom\">" . 291 $sToRender .= "<tr bgcolor=\"" . getColour($i+$iFolderCount) . "\" width=\"100%\"><td valign=\"bottom\">" .
  292 + "<input type=\"checkbox\" name=\"fDocumentIDs[]\" value=\"" . $aResults["documents"][$i]->getID() . "\"/>" .
292 ($bTemplateBrowsing ? displayDocumentLinkForTemplateBrowsing($aResults["documents"][$i], $bDisplayFullPath) : 293 ($bTemplateBrowsing ? displayDocumentLinkForTemplateBrowsing($aResults["documents"][$i], $bDisplayFullPath) :
293 displayDocumentLink($aResults["documents"][$i], $bDisplayFullPath)) . "</td>"; 294 displayDocumentLink($aResults["documents"][$i], $bDisplayFullPath)) . "</td>";
294 295
@@ -304,6 +305,22 @@ function renderDocumentList($aResults, $sNoDocumentsMessage, $sNoPermissionMessa @@ -304,6 +305,22 @@ function renderDocumentList($aResults, $sNoDocumentsMessage, $sNoPermissionMessa
304 } 305 }
305 $sToRender .= "</tr>\n"; 306 $sToRender .= "</tr>\n";
306 } 307 }
  308 +
  309 + $sSectionName = $default->siteMap->getSectionName(substr($_SERVER["PHP_SELF"], strlen($default->rootUrl), strlen($_SERVER["PHP_SELF"])));
  310 + $sTDBGColour = $default->siteMap->getSectionColour($sSectionName, "td");
  311 +
  312 + $sToRender .= "<tr bgcolor=\"". $sTDBGColour . "\"><td colspan=\"5\" valign=\"bottom\">" .
  313 + "<input type=\"checkbox\" name=\"selectall\" onClick=\"selectAll()\"/> Select all documents</td></tr>";
  314 +
  315 + $sToRender .= "<tr><td colspan=\"5\" >";
  316 + $sToRender .= "<input type=\"hidden\" name=\"fActions\">";
  317 +
  318 + $sToRender .= "<input type=\"image\" onclick=\"document.MainForm.fActions.value='move'; document.MainForm.submit()\" src=\"$default->graphicsUrl/widgets/move.gif\" border=\"0\"/>";
  319 + $sToRender .= "<input type=\"image\" onclick=\"document.MainForm.fActions.value='delete'; document.MainForm.submit()\" src=\"$default->graphicsUrl/widgets/delete.gif\" border=\"0\"/>";
  320 + $sToRender .= "</td></tr>\n";
  321 + // Change for group Operations
  322 +
  323 +
307 } else if ($aResults["accessDenied"]) { 324 } else if ($aResults["accessDenied"]) {
308 $sToRender .= "<tr><td>$sNoPermissionMessage</td></tr>"; 325 $sToRender .= "<tr><td>$sNoPermissionMessage</td></tr>";
309 } else { 326 } else {
@@ -341,6 +358,21 @@ function renderPage($aResults, $sBrowseType, $sSortBy, $sSortDirection, $bTempla @@ -341,6 +358,21 @@ function renderPage($aResults, $sBrowseType, $sSortBy, $sSortDirection, $bTempla
341 358
342 $sToRender = renderHeading(_("Browse collection")); 359 $sToRender = renderHeading(_("Browse collection"));
343 360
  361 + // Script function to select all documents
  362 + $sToRender = "\n\n<SCRIPT LANGUAGE=\"javascript\">\n ";
  363 + $sToRender .= "<!--\n";
  364 + $sToRender .= "function selectAll() {\n";
  365 + $sToRender .= "\tf = document.MainForm;\n";
  366 + $sToRender .= "\tc = f.selectall.checked;\n";
  367 + $sToRender .= "\tif (f.elements['fDocumentIDs[]']) {\n";
  368 + $sToRender .= "\t\tif (f.elements['fDocumentIDs[]'].length > 1) {\n";
  369 + $sToRender .= "\t\t\tfor (i = 0; i < f.elements['fDocumentIDs[]'].length; i++) f.elements['fDocumentIDs[]'][i].checked = c;\n";
  370 + $sToRender .= "\t\t} else {\n";
  371 + $sToRender .= "\t\t\tf.elements['fDocumentIDs[]'].checked = c;\n";
  372 + $sToRender .= "\t}}}\n";
  373 + $sToRender .= "//-->\n";
  374 + $sToRender .= "</SCRIPT>\n\n";
  375 +
344 $sToRender .= "<table border=\"0\" cellpadding=\"5\" width=\"100%\"><tr><td bgcolor=\"$sTDBGColour\">"; 376 $sToRender .= "<table border=\"0\" cellpadding=\"5\" width=\"100%\"><tr><td bgcolor=\"$sTDBGColour\">";
345 switch ($sBrowseType) { 377 switch ($sBrowseType) {
346 case "folder" : $sToRender .= displayFolderPathLink(Folder::getFolderPathAsArray($aResults["folders"][0]->getID()), 378 case "folder" : $sToRender .= displayFolderPathLink(Folder::getFolderPathAsArray($aResults["folders"][0]->getID()),
presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentBL.php
@@ -42,45 +42,100 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/lookAndFeel/knowledgeTree/fo @@ -42,45 +42,100 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/lookAndFeel/knowledgeTree/fo
42 42
43 require_once("deleteDocumentUI.inc"); 43 require_once("deleteDocumentUI.inc");
44 44
  45 +$aNondeletedDocs = array();
  46 +
  47 +
45 if (checkSession()) { 48 if (checkSession()) {
46 49
47 - if (isset($fDocumentID)) {  
48 - $oDocument = Document::get($fDocumentID);  
49 - if (Permission::userHasDocumentWritePermission($oDocument)) { 50 + if (isset($fDocumentIDs)) {
  51 +
  52 + // Check permission and collaboration for all documents
  53 + for ($i = 0; $i < count($fDocumentIDs); $i++) {
  54 +
  55 + $oDocument = Document::get($fDocumentIDs[$i]);
  56 + if (!Permission::userHasDocumentWritePermission($oDocument)) {
  57 +
  58 + // user does not have permission to delete the document
  59 + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
  60 + $oPatternCustom = & new PatternCustom();
  61 + $oPatternCustom->setHtml(renderErrorPage("You do not have, at least, permission to delete one document: " .
  62 + $oDocument->getName() . "<br>Please deselect it and retry."));
  63 + $main->setCentralPayload($oPatternCustom);
  64 + $main->render();
  65 + return;
  66 +
  67 + } else {
  68 +
50 // check if there is collaboration for this document 69 // check if there is collaboration for this document
51 - $aFolderUserRoles = FolderUserRole::getList("document_id = $fDocumentID"); 70 + $aFolderUserRoles = FolderUserRole::getList("document_id = $fDocumentIDs[$i]");
52 // check if any of them are active 71 // check if any of them are active
53 $bActive = false; 72 $bActive = false;
54 - for ($i=0; $i<count($aFolderUserRoles); $i++) {  
55 - $default->log->info("delDoc bActive=" . ($bActive ? "1" : "0") . ";folderUserRoleID=" . $aFolderUserRoles[$i]->getGroupFolderApprovalID() . "; active=" . ($aFolderUserRoles[$i]->getActive() ? "1" : "0"));  
56 - $bActive = $bActive || $aFolderUserRoles[$i]->getActive(); 73 + for ($j=0; $j<count($aFolderUserRoles); $j++) {
  74 + $default->log->info("delDoc bActive=" . ($bActive ? "1" : "0") . ";folderUserRoleID=" . $aFolderUserRoles[$j]->getGroupFolderApprovalID() . "; active=" . ($aFolderUserRoles[$j]->getActive() ? "1" : "0"));
  75 + $bActive = $bActive || $aFolderUserRoles[$j]->getActive();
  76 + }
  77 +
  78 + if ($bActive) {
  79 +
  80 + // there are active collaboration roles for this doc
  81 + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
  82 + $oPatternCustom = & new PatternCustom();
  83 + $oPatternCustom->setHtml(renderErrorPage("You can't, at least, delete one document " .
  84 + $oDocument->getName() . " because it's still in collaboration"));
  85 + $main->setCentralPayload($oPatternCustom);
  86 + $main->render();
  87 + return;
  88 + }
57 } 89 }
58 - if (!$bActive) {  
59 - // there aren't any active roles for this doc 90 + }
  91 +
  92 +
  93 + /* Delete all files
  94 + If an error occured while deleting a file, then:
  95 + - make a rollback of the current file
  96 + - insert document object in $aNondeletedDocs array
  97 + - delete the other selected file
  98 +
  99 + At the end check the $aNondeletedDocs array
  100 + - if is empty then OK
  101 + - if is not empty then show the nondeleted files list
  102 + */
  103 +
  104 + // Delete all files with possible rollback
60 if (isset($fDeleteConfirmed)) { 105 if (isset($fDeleteConfirmed)) {
61 - //deletion of document is confirmed  
62 - $oDocument = Document::get($fDocumentID); 106 +
  107 + // deletion of all documents are confirmed
  108 + for ($i = 0; $i < count($fDocumentIDs); $i++) {
  109 +
  110 + $oDocument = Document::get($fDocumentIDs[$i]);
63 if (isset($oDocument)) { 111 if (isset($oDocument)) {
  112 + // New transaction
64 $sDocumentPath = Folder::getFolderPath($oDocument->getFolderID()) . $oDocument->getFileName(); 113 $sDocumentPath = Folder::getFolderPath($oDocument->getFolderID()) . $oDocument->getFileName();
65 - $oDocumentTransaction = & new DocumentTransaction($fDocumentID, "Document deleted", DELETE); 114 + $oDocumentTransaction = & new DocumentTransaction($fDocumentIDs[$i], "Document deleted", DELETE);
66 $oDocumentTransaction->create(); 115 $oDocumentTransaction->create();
  116 +
67 // flip the status id 117 // flip the status id
68 $oDocument->setStatusID(DELETED); 118 $oDocument->setStatusID(DELETED);
  119 +
69 // store 120 // store
70 if ($oDocument->update()) { 121 if ($oDocument->update()) {
71 // now move the document to the delete folder 122 // now move the document to the delete folder
72 if (PhysicalDocumentManager::delete($oDocument)) { 123 if (PhysicalDocumentManager::delete($oDocument)) {
73 // successfully deleted the document 124 // successfully deleted the document
74 - $default->log->info("deleteDocumentBL.php successfully deleted document " . $oDocument->getFileName() . " from folder " . Folder::getFolderPath($oDocument->getFolderID()) . " id=" . $oDocument->getFolderID()); 125 + $default->log->info("deleteDocumentBL.php successfully deleted document " .
  126 + $oDocument->getFileName() . " from folder " .
  127 + Folder::getFolderPath($oDocument->getFolderID()) .
  128 + " id=" . $oDocument->getFolderID());
75 129
76 // delete all collaboration roles 130 // delete all collaboration roles
77 - for ($i=0; $i<count($aFolderUserRoles); $i++) {  
78 - $default->log->info("delDoc deleting folderuserroleID=" . $aFolderUserRoles[$i]->getGroupFolderApprovalID());  
79 - $aFolderUserRoles[$i]->delete(); 131 + for ($j=0; $j<count($aFolderUserRoles); $j++) {
  132 + $default->log->info("delDoc deleting folderuserroleID=" . $aFolderUserRoles[$j]->getGroupFolderApprovalID());
  133 + $aFolderUserRoles[$j]->delete();
80 } 134 }
81 135
82 // fire subscription alerts for the deleted document 136 // fire subscription alerts for the deleted document
83 - $count = SubscriptionEngine::fireSubscription($fDocumentID, SubscriptionConstants::subscriptionAlertType("RemoveSubscribedDocument"), 137 + $count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i],
  138 + SubscriptionConstants::subscriptionAlertType("RemoveSubscribedDocument"),
84 SubscriptionConstants::subscriptionType("DocumentSubscription"), 139 SubscriptionConstants::subscriptionType("DocumentSubscription"),
85 array( "folderID" => $oDocument->getFolderID(), 140 array( "folderID" => $oDocument->getFolderID(),
86 "removedDocumentName" => $oDocument->getName(), 141 "removedDocumentName" => $oDocument->getName(),
@@ -88,14 +143,12 @@ if (checkSession()) { @@ -88,14 +143,12 @@ if (checkSession()) {
88 $default->log->info("deleteDocumentBL.php fired $count subscription alerts for removed document " . $oDocument->getName()); 143 $default->log->info("deleteDocumentBL.php fired $count subscription alerts for removed document " . $oDocument->getName());
89 144
90 // remove all document subscriptions for this document 145 // remove all document subscriptions for this document
91 - if (SubscriptionManager::removeSubscriptions($fDocumentID, SubscriptionConstants::subscriptionType("DocumentSubscription"))) { 146 + if (SubscriptionManager::removeSubscriptions($fDocumentIDs[$i], SubscriptionConstants::subscriptionType("DocumentSubscription"))) {
92 $default->log->info("deleteDocumentBL.php removed all subscriptions for this document"); 147 $default->log->info("deleteDocumentBL.php removed all subscriptions for this document");
93 } else { 148 } else {
94 $default->log->error("deleteDocumentBL.php couldn't remove document subscriptions"); 149 $default->log->error("deleteDocumentBL.php couldn't remove document subscriptions");
95 } 150 }
96 151
97 - // redirect to the browse folder page  
98 - redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID());  
99 } else { 152 } else {
100 //could not delete the document from the file system 153 //could not delete the document from the file system
101 $default->log->error("deleteDocumentBL.php Filesystem error deleting document " . $oDocument->getFileName() . " from folder " . Folder::getFolderPath($oDocument->getFolderID()) . " id=" . $oDocument->getFolderID()); 154 $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()) { @@ -104,11 +157,10 @@ if (checkSession()) {
104 $oDocument->update(); 157 $oDocument->update();
105 //get rid of the document transaction 158 //get rid of the document transaction
106 $oDocumentTransaction->delete(); 159 $oDocumentTransaction->delete();
107 - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");  
108 - $oPatternCustom = & new PatternCustom();  
109 - $oPatternCustom->setHtml(renderErrorPage("The document could not be deleted from the file system", $fDocumentID));  
110 - $main->setCentralPayload($oPatternCustom);  
111 - $main->render(); 160 +
  161 + // Store the doc with problem
  162 + array_push($aNondeletedDocs, array($oDocument, "Could not delete document on file system"));
  163 +
112 } 164 }
113 } else { 165 } else {
114 //could not update the documents status in the db 166 //could not update the documents status in the db
@@ -116,42 +168,49 @@ if (checkSession()) { @@ -116,42 +168,49 @@ if (checkSession()) {
116 168
117 //get rid of the document transaction 169 //get rid of the document transaction
118 $oDocumentTransaction->delete(); 170 $oDocumentTransaction->delete();
119 - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");  
120 - $oPatternCustom = & new PatternCustom();  
121 - $oPatternCustom->setHtml(renderErrorPage("The document could not be deleted from the database", $fDocumentID));  
122 - $main->setCentralPayload($oPatternCustom);  
123 - $main->render(); 171 +
  172 + // Store the doc with problem
  173 + array_push($aNondeletedDocs, array($oDocument, "Could not update document in database"));
  174 +
124 } 175 }
125 } else { 176 } else {
126 //could not load document object 177 //could not load document object
127 - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");  
128 - $oPatternCustom = & new PatternCustom();  
129 - $oPatternCustom->setHtml(renderErrorPage("An error occured whilst retrieving the document from the database", $fDocumentID));  
130 - $main->setCentralPayload($oPatternCustom);  
131 - $main->render(); 178 +
  179 + // Store the doc with problem
  180 + array_push($aNondeletedDocs, array($oDocument, "Could not load document in database"));
  181 +
132 } 182 }
133 - } else {  
134 - //get confirmation first  
135 - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");  
136 - $oPatternCustom = & new PatternCustom();  
137 - $oDocument = Document::get($fDocumentID);  
138 - $oPatternCustom->setHtml(getPage($fDocumentID, $oDocument->getFolderID(), $oDocument->getName()));  
139 - $main->setCentralPayload($oPatternCustom);  
140 - $main->render();  
141 } 183 }
142 - } else {  
143 - // there are active collaboration roles for this doc 184 +
  185 + // List nondeleted documents
  186 + if (!empty($aNondeletedDocs) ) {
  187 +
144 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 188 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
145 $oPatternCustom = & new PatternCustom(); 189 $oPatternCustom = & new PatternCustom();
146 - $oPatternCustom->setHtml(renderErrorPage("You can't delete this document because it's still in collaboration", $fDocumentID)); 190 +
  191 + $sError = "An error occured deleting the following document(s): <br><br>";
  192 + foreach ($aNondeletedDocs as $oDoc) {
  193 + $sError .= $oDoc[0]->getDisplayPath() . ":&nbsp;&nbsp;&nbsp;" .$oDoc[1] . "<br>";
  194 + }
  195 + $sError .= "<br>The other documents are been deleted.";
  196 +
  197 + $oPatternCustom->addHtml(renderErrorPage($sError));
147 $main->setCentralPayload($oPatternCustom); 198 $main->setCentralPayload($oPatternCustom);
148 $main->render(); 199 $main->render();
  200 +
  201 + reset($aNondeletedDocs);
  202 +
  203 + } else {
  204 + // redirect to the browse folder page
  205 + redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID());
149 } 206 }
  207 +
  208 +
150 } else { 209 } else {
151 - //user does not have permission to delete the document 210 + //get confirmation first
152 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 211 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
153 $oPatternCustom = & new PatternCustom(); 212 $oPatternCustom = & new PatternCustom();
154 - $oPatternCustom->setHtml(renderErrorPage("You do not have permission to delete this document", $fDocumentID)); 213 + $oPatternCustom->addHtml(getPage($fDocumentIDs));
155 $main->setCentralPayload($oPatternCustom); 214 $main->setCentralPayload($oPatternCustom);
156 $main->render(); 215 $main->render();
157 } 216 }
@@ -164,3 +223,5 @@ if (checkSession()) { @@ -164,3 +223,5 @@ if (checkSession()) {
164 $main->render(); 223 $main->render();
165 } 224 }
166 } 225 }
  226 +
  227 +?>
presentation/lookAndFeel/knowledgeTree/documentmanagement/deleteDocumentUI.inc
@@ -24,30 +24,27 @@ @@ -24,30 +24,27 @@
24 * @author Rob Cherry, Jam Warehouse (Pty) Ltd, South Africa 24 * @author Rob Cherry, Jam Warehouse (Pty) Ltd, South Africa
25 * @package documentmanagement 25 * @package documentmanagement
26 */ 26 */
27 -  
28 -function getDocumentPath($iFolderID, $sDocumentName) {  
29 - global $default;  
30 - $sSectionName = $default->siteMap->getSectionName(substr($_SERVER["PHP_SELF"], strlen($default->rootUrl), strlen($_SERVER["PHP_SELF"])));  
31 - $sTDBGColour = $default->siteMap->getSectionColour($sSectionName, "td");  
32 - $sDocumentPath = displayFolderPathLink(Folder::getFolderPathAsArray($iFolderID), Folder::getFolderPathNamesAsArray($iFolderID), "$default->rootUrl/control.php?action=browse") . " > " . $sDocumentName;  
33 - return "<table border=\"0\" width = 100%><tr><td bgcolor=\"$sTDBGColour\">$sDocumentPath</td></tr></table>\n";  
34 -}  
35 -  
36 -function getPage($iDocumentID, $iFolderID, $sDocumentName) { 27 +function getPage($fDocumentIDs) {
37 global $default; 28 global $default;
38 $sToRender = renderHeading(_("Delete Document")); 29 $sToRender = renderHeading(_("Delete Document"));
39 - $sToRender .= getDocumentPath($iFolderID, $sDocumentName) . "<br>\n";  
40 $sToRender .= "<table border=\"0\">\n"; 30 $sToRender .= "<table border=\"0\">\n";
41 $sToRender .= "<tr>\n"; 31 $sToRender .= "<tr>\n";
42 - $sToRender .= "<td>You have chosen to delete the document entitled '" . $sDocumentName . "'.</td>\n";  
43 - $sToRender .= "<tr>\n"; 32 + $sToRender .= "<td>You have chosen to delete the following document(s): <br><br></td>\n";
  33 +
  34 + for ($i = 0; $i < count($fDocumentIDs); $i++) {
  35 + $oDocument = Document::get($fDocumentIDs[$i]);
44 $sToRender .= "<tr>\n"; 36 $sToRender .= "<tr>\n";
  37 + $sToRender .= "<td>&nbsp;&nbsp;'" . $oDocument->getDisplayPath() . "'</td>\n";
  38 + $sQueryString .= "fDocumentIDs[]=$fDocumentIDs[$i]&";
  39 + }
  40 + $sToRender .= "<tr><tr><tr><tr>\n";
  41 +
45 $sToRender .= "<td>Select 'Delete' to confirm the deletion, or 'Cancel' to cancel it</td>\n"; 42 $sToRender .= "<td>Select 'Delete' to confirm the deletion, or 'Cancel' to cancel it</td>\n";
46 $sToRender .= "<tr>\n"; 43 $sToRender .= "<tr>\n";
47 $sToRender .= "<tr>\n"; 44 $sToRender .= "<tr>\n";
48 $sToRender .= "<td>&nbsp</td>\n"; 45 $sToRender .= "<td>&nbsp</td>\n";
49 $sToRender .= "<tr>\n"; 46 $sToRender .= "<tr>\n";
50 - $sToRender .= "<td><table><tr><td><a href=\"" . $_SERVER["PHP_SELF"] . "?fDocumentID=$iDocumentID&fDeleteConfirmed=1\"><img src=\"$default->graphicsUrl/widgets/delete.gif\" border=\"0\"></a></td> <td><a href=\"$default->rootUrl/control.php?action=viewDocument&fDocumentID=" . $iDocumentID . "\"><img src=\"$default->graphicsUrl/widgets/cancel.gif\" border=\"0\"></a></td></tr></table></td>"; 47 + $sToRender .= "<td><table><tr><td><a href=\"" . $_SERVER["PHP_SELF"] . "?$sQueryString&fDeleteConfirmed=1\"><img src=\"$default->graphicsUrl/widgets/delete.gif\" border=\"0\"></a></td> <td><a href=\"javascript:history.go(-1)\"><img src=\"$default->graphicsUrl/widgets/cancel.gif\" border=\"0\"></a></td></tr></table></td>";
51 $sToRender .= "</tr>"; 48 $sToRender .= "</tr>";
52 $sToRender .= "</table>\n"; 49 $sToRender .= "</table>\n";
53 50
@@ -63,7 +60,7 @@ function renderErrorPage($sErrorMessage, $iDocumentID = &quot;&quot;) { @@ -63,7 +60,7 @@ function renderErrorPage($sErrorMessage, $iDocumentID = &quot;&quot;) {
63 $sToRender = renderHeading(_("Delete Document")); 60 $sToRender = renderHeading(_("Delete Document"));
64 $sToRender .= "<table>\n"; 61 $sToRender .= "<table>\n";
65 $sToRender .= "<tr><td><p class=\"errorText\">$sErrorMessage</p>\n" . 62 $sToRender .= "<tr><td><p class=\"errorText\">$sErrorMessage</p>\n" .
66 - "<a href=\"javascript:history.go(-1)\"><img src=\"$default->graphicsUrl/widgets/back.gif\" border=\"0\"/></a>\n" . 63 + "<a href=\"javascript:history.go(-2)\"><img src=\"$default->graphicsUrl/widgets/back.gif\" border=\"0\"/></a>\n" .
67 "</p></td></tr></table>\n"; 64 "</p></td></tr></table>\n";
68 return $sToRender; 65 return $sToRender;
69 } 66 }
presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentBL.php
@@ -45,15 +45,24 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/lookAndFeel/knowledgeTree/do @@ -45,15 +45,24 @@ require_once(&quot;$default-&gt;fileSystemRoot/presentation/lookAndFeel/knowledgeTree/do
45 require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc"); 45 require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc");
46 require_once("$default->fileSystemRoot/presentation/Html.inc"); 46 require_once("$default->fileSystemRoot/presentation/Html.inc");
47 47
  48 +$aUnmovedDocs = array();
  49 +
48 if (checkSession()) { 50 if (checkSession()) {
49 51
50 - if (isset($fDocumentID) && isset($fFolderID)) { 52 + if (isset($fDocumentIDs) && isset($fFolderID)) {
51 if (isset($fForMove)) { 53 if (isset($fForMove)) {
52 if ($fConfirmed) { 54 if ($fConfirmed) {
  55 + for ($i = 0; $i < count($fDocumentIDs); $i++) {
  56 +
53 //we're trying to move a document 57 //we're trying to move a document
54 - $oDocument = & Document::get($fDocumentID); 58 + $oDocument = & Document::get($fDocumentIDs[$i]);
55 $oFolder = & Folder::get($fFolderID); 59 $oFolder = & Folder::get($fFolderID);
56 $iOldFolderID = $oDocument->getFolderID(); 60 $iOldFolderID = $oDocument->getFolderID();
  61 +
  62 + // check that there is no filename collision in the destination directory
  63 + $sNewDocumentFileSystemPath = Folder::getFolderPath($fFolderID) . $oDocument->getFileName();
  64 + if (!file_exists($sNewDocumentFileSystemPath)) {
  65 +
57 if (Permission::userHasDocumentWritePermission($oDocument) && Permission::userHasFolderWritePermission($oFolder)) { 66 if (Permission::userHasDocumentWritePermission($oDocument) && Permission::userHasFolderWritePermission($oFolder)) {
58 //if the user has both document and folder write permissions 67 //if the user has both document and folder write permissions
59 //get the old document path 68 //get the old document path
@@ -65,9 +74,8 @@ if (checkSession()) { @@ -65,9 +74,8 @@ if (checkSession()) {
65 $sOldDocumentFileSystemPath = Folder::getFolderPath($iOldFolderID) . $oDocument->getFileName(); 74 $sOldDocumentFileSystemPath = Folder::getFolderPath($iOldFolderID) . $oDocument->getFileName();
66 //move the document on the file system 75 //move the document on the file system
67 if (PhysicalDocumentManager::moveDocument($sOldDocumentFileSystemPath, $oDocument, $oFolder)) { 76 if (PhysicalDocumentManager::moveDocument($sOldDocumentFileSystemPath, $oDocument, $oFolder)) {
68 -  
69 // fire subscription alerts for the moved document (and the folder its in) 77 // fire subscription alerts for the moved document (and the folder its in)
70 - $count = SubscriptionEngine::fireSubscription($fDocumentID, SubscriptionConstants::subscriptionAlertType("MovedDocument"), 78 + $count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i], SubscriptionConstants::subscriptionAlertType("MovedDocument"),
71 SubscriptionConstants::subscriptionType("DocumentSubscription"), 79 SubscriptionConstants::subscriptionType("DocumentSubscription"),
72 array( "folderID" => $iOldFolderID, 80 array( "folderID" => $iOldFolderID,
73 "modifiedDocumentName" => $oDocument->getName(), 81 "modifiedDocumentName" => $oDocument->getName(),
@@ -76,82 +84,116 @@ if (checkSession()) { @@ -76,82 +84,116 @@ if (checkSession()) {
76 $default->log->info("moveDocumentBL.php fired $count subscription alerts for moved document " . $oDocument->getName()); 84 $default->log->info("moveDocumentBL.php fired $count subscription alerts for moved document " . $oDocument->getName());
77 85
78 // fire folder subscriptions for the destination folder 86 // fire folder subscriptions for the destination folder
79 - $count = SubscriptionEngine::fireSubscription($oDocument->getFolderID(), SubscriptionConstants::subscriptionAlertType("MovedDocument"), 87 + $count = SubscriptionEngine::fireSubscription($fDocumentIDs[$i], SubscriptionConstants::subscriptionAlertType("MovedDocument"),
80 SubscriptionConstants::subscriptionType("FolderSubscription"), 88 SubscriptionConstants::subscriptionType("FolderSubscription"),
81 - array( "modifiedDocumentName" => $oDocument->getName(), 89 + array( "folderID" => $iOldFolderID,
  90 + "modifiedDocumentName" => $oDocument->getName(),
82 "oldFolderName" => Folder::getFolderName($iOldFolderID), 91 "oldFolderName" => Folder::getFolderName($iOldFolderID),
83 "newFolderName" => Folder::getFolderName($fFolderID) )); 92 "newFolderName" => Folder::getFolderName($fFolderID) ));
84 $default->log->info("moveDocumentBL.php fired $count (folderID=$fFolderID) folder subscription alerts for moved document " . $oDocument->getName()); 93 $default->log->info("moveDocumentBL.php fired $count (folderID=$fFolderID) folder subscription alerts for moved document " . $oDocument->getName());
85 -  
86 -  
87 - //redirect to the view path  
88 - redirect("$default->rootUrl/control.php?action=viewDocument&fDocumentID=$fDocumentID");  
89 } else { 94 } else {
90 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 95 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
91 //we couldn't move the document on the file system 96 //we couldn't move the document on the file system
92 //so reset the database values 97 //so reset the database values
93 $oDocument->setFolderID($iOldFolderID); 98 $oDocument->setFolderID($iOldFolderID);
94 $oDocument->update(); 99 $oDocument->update();
95 - $oPatternCustom = & new PatternCustom();  
96 - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID));  
97 - $main->setCentralPayload($oPatternCustom);  
98 - $main->setErrorMessage("Could not move document on file system");  
99 - $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1");  
100 - $main->render(); 100 +
  101 + // Store the doc with problem
  102 + array_push($aUnmovedDocs, array($oDocument, "Could not move document on file system"));
101 } 103 }
102 } else { 104 } else {
103 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 105 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
104 //had a problem with the database 106 //had a problem with the database
105 - $oPatternCustom = & new PatternCustom();  
106 - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID));  
107 - $main->setCentralPayload($oPatternCustom);  
108 - $main->setErrorMessage("Could not update document in database");  
109 - $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID");  
110 - $main->render(); 107 + // Store the doc with problem
  108 + array_push($aUnmovedDocs, array($oDocument, "Could not update document in database"));
111 } 109 }
112 } else { 110 } else {
113 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 111 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
  112 +
  113 + // Permission problem
  114 + // Store the doc with problem
  115 + array_push($aUnmovedDocs, array($oDocument, "You do not have rights to move this document"));
  116 + }
  117 +
  118 + } else {
  119 + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
  120 +
  121 + // Store the doc with problem
  122 + array_push($aUnmovedDocs, array($oDocument, "This folder already contains a document of the same name. Please choose another directory"));
  123 + }
  124 +
  125 + }
  126 +
  127 + // Move terminated
  128 +
  129 + // List undeleted documents
  130 + if (!empty($aUnmovedDocs) ) {
  131 +
  132 + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
114 $oPatternCustom = & new PatternCustom(); 133 $oPatternCustom = & new PatternCustom();
115 - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID)); 134 +
  135 + $sError = "An error occured moving the following document(s): <br><br>";
  136 + foreach ($aUnmovedDocs as $oDoc) {
  137 + $sError .= $oDoc[0]->getDisplayPath() . ":&nbsp;&nbsp;&nbsp;" .$oDoc[1] . "<br>";
  138 + }
  139 + $sError .= "<br>The other documents are been moved.";
  140 +
  141 + $oPatternCustom = & new PatternCustom();
  142 + $oPatternCustom->setHtml(renderErrorPage($sError));
116 $main->setCentralPayload($oPatternCustom); 143 $main->setCentralPayload($oPatternCustom);
117 - $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID");  
118 - $main->setErrorMessage("You do not have rights to move this document");  
119 $main->render(); 144 $main->render();
120 - } 145 +
  146 + reset($aUnmovedDocs);
  147 +
121 } else { 148 } else {
  149 + // redirect to the browse folder page
  150 + redirect("$default->rootUrl/control.php?action=browse&fFolderID=" . $oDocument->getFolderID());
  151 + }
  152 +
  153 + } else { // ($fConfirmed)
122 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 154 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
123 $oPatternCustom = & new PatternCustom(); 155 $oPatternCustom = & new PatternCustom();
124 156
125 - $oDocument = Document::get($fDocumentID);  
126 - $oFolder = Folder::get($fFolderID); 157 + // Check for all docs
  158 + for ($i = 0; $i < count($fDocumentIDs); $i++) {
  159 +
  160 + $oDocument = Document::get($fDocumentIDs[$i]);
  161 +
127 // check if the selected folder has the same document type as the document we're moving 162 // check if the selected folder has the same document type as the document we're moving
128 if (Folder::folderIsLinkedToDocType($fFolderID, $oDocument->getDocumentTypeID())) { 163 if (Folder::folderIsLinkedToDocType($fFolderID, $oDocument->getDocumentTypeID())) {
129 // check that there is no filename collision in the destination directory 164 // check that there is no filename collision in the destination directory
130 $sNewDocumentFileSystemPath = Folder::getFolderPath($fFolderID) . $oDocument->getFileName(); 165 $sNewDocumentFileSystemPath = Folder::getFolderPath($fFolderID) . $oDocument->getFileName();
131 if (!file_exists($sNewDocumentFileSystemPath)) { 166 if (!file_exists($sNewDocumentFileSystemPath)) {
132 // display confirmation page 167 // display confirmation page
133 - $oPatternCustom->setHtml(getConfirmationPage($oFolder, $oDocument)); 168 + $oPatternCustom->setHtml(getConfirmationPage($fFolderID, $fDocumentIDs));
134 } else { 169 } else {
135 // filename collision 170 // filename collision
136 - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID, "This folder already contains a document of the same name. Please choose another directory")); 171 + $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentIDs, "This folder already contains a document of the same name ('" .
  172 + $oDocument->getFileName() .
  173 + "'). Please choose another directory"));
  174 + break;
137 } 175 }
138 } else { 176 } else {
139 // the right document type isn't mapped 177 // the right document type isn't mapped
140 - $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")); 178 + $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentIDs, "You can't move the document '" .
  179 + $oDocument->getFileName() .
  180 + "' to this folder because it cannot store the document type of your document. Please choose another directory"));
  181 + break;
  182 + }
141 } 183 }
142 $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID"); 184 $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID");
143 $main->setCentralPayload($oPatternCustom); 185 $main->setCentralPayload($oPatternCustom);
144 $main->render(); 186 $main->render();
145 } 187 }
146 - } else { 188 + } else { // (isset($fForMove))
147 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 189 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
148 $oPatternCustom = & new PatternCustom(); 190 $oPatternCustom = & new PatternCustom();
149 - $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentID)); 191 + $oPatternCustom->setHtml(getPage($fFolderID, $fDocumentIDs));
150 $main->setCentralPayload($oPatternCustom); 192 $main->setCentralPayload($oPatternCustom);
151 $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID"); 193 $main->setFormAction($_SERVER["PHP_SELF"] . "?fForMove=1&fDocumentID=$fDocumentID&fFolderID=$fFolderID");
152 $main->render(); 194 $main->render();
153 } 195 }
154 - } else { 196 + } else { // (isset($fDocumentIDs) && isset($fFolderID))
155 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); 197 require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc");
156 $oPatternCustom = & new PatternCustom(); 198 $oPatternCustom = & new PatternCustom();
157 $oPatternCustom->setHtml(""); 199 $oPatternCustom->setHtml("");
@@ -160,4 +202,5 @@ if (checkSession()) { @@ -160,4 +202,5 @@ if (checkSession()) {
160 $main->render(); 202 $main->render();
161 } 203 }
162 } 204 }
163 -?>  
164 \ No newline at end of file 205 \ No newline at end of file
  206 +
  207 +?>
presentation/lookAndFeel/knowledgeTree/documentmanagement/moveDocumentUI.inc
@@ -25,46 +25,75 @@ @@ -25,46 +25,75 @@
25 * @package documentmanagement 25 * @package documentmanagement
26 */ 26 */
27 27
28 -function getConfirmationPage($oFolder, $oDocument) { 28 +function getConfirmationPage($iFolderID, $iDocumentIDs) {
29 global $default; 29 global $default;
30 $sToRender = renderHeading(_("Move Document")); 30 $sToRender = renderHeading(_("Move Document"));
31 $sToRender .= "<table>\n"; 31 $sToRender .= "<table>\n";
32 $sToRender .= "<tr>\n<td>Are you sure you want to move </td></tr>"; 32 $sToRender .= "<tr>\n<td>Are you sure you want to move </td></tr>";
33 - $sToRender .= "<tr><td><strong>" . $oDocument->getDisplayPath() . "</strong> to </td></tr>\n";  
34 - $sToRender .= "<tr><td><strong>" . Folder::getFolderDisplayPath($oFolder->getID()) . " > " . $oDocument->getFileName() . "</strong></td>\n"; 33 +
  34 + for ($i = 0; $i < count($iDocumentIDs); $i++) {
  35 +
  36 + $oDocument = & Document::get($iDocumentIDs[$i]);
  37 +
  38 + $sToRender .= "<tr><td><strong>" . $oDocument->getDisplayPath() . "</strong> <td>&nbsp;to&nbsp;</td> </td>\n";
  39 + $sToRender .= "<td><strong>" . Folder::getFolderDisplayPath($iFolderID) . " > " . $oDocument->getFileName() . "</strong></td>\n";
  40 + $sQueryString .= "fDocumentIDs[]=$iDocumentIDs[$i]&";
  41 + }
  42 +
35 $sToRender .= "</tr>\n"; 43 $sToRender .= "</tr>\n";
36 - $sToRender .= "<tr><td><a href=\"$default->rootUrl/control.php?action=moveDocument&fDocumentID=" .  
37 - $oDocument->getID() . "&fFolderID=" . $oFolder->getID() . 44 + $sToRender .= "<tr><td><a href=\"$default->rootUrl/control.php?action=moveDocument&" . $sQueryString .
  45 + "fFolderID=$iFolderID" .
38 "&fForMove=1&fConfirmed=1\">" . 46 "&fForMove=1&fConfirmed=1\">" .
39 "<img src=\"$default->graphicsUrl/widgets/move.gif\" border=\"0\"/>" . 47 "<img src=\"$default->graphicsUrl/widgets/move.gif\" border=\"0\"/>" .
40 "</a>&nbsp;" . 48 "</a>&nbsp;" .
41 - "<a href=\"$default->rootUrl/control.php?action=viewDocument&fDocumentID=" . $oDocument->getID() . "\">" .  
42 - "<img src=\"$default->graphicsUrl/widgets/cancel.gif\" border=\"0\"></a>" .  
43 - "</td></tr>\n"; 49 + "<a href=\"$default->rootUrl/control.php?action=browse&fFolderID=$iFolderID\">" .
  50 + "<img src=\"$default->graphicsUrl/widgets/cancel.gif\" border=\"0\"></a></td></tr>\n";
44 $sToRender .= "</table>\n"; 51 $sToRender .= "</table>\n";
45 return $sToRender; 52 return $sToRender;
46 } 53 }
47 54
48 -// FIXME: change these to object references instead of IDs  
49 -function getPage($iFolderID, $iDocumentID, $sErrorMessage = "") { 55 +
  56 +function getPage($iFolderID, $iDocumentIDs, $sErrorMessage = "") {
50 global $default; 57 global $default;
51 $sToRender = renderHeading(_("Move Document")); 58 $sToRender = renderHeading(_("Move Document"));
52 $sToRender .= "<table>\n"; 59 $sToRender .= "<table>\n";
53 if ($sErrorMessage) { 60 if ($sErrorMessage) {
54 $sToRender .= "<tr><td><font color=\"red\">$sErrorMessage</font></td></tr>"; 61 $sToRender .= "<tr><td><font color=\"red\">$sErrorMessage</font></td></tr>";
55 } 62 }
56 - $sToRender .= "<tr><td>Move document " . Document::getDocumentDisplayPath($iDocumentID) . " to:</td></tr>"; 63 + $sToRender .= "<tr><td>Move document(s): <br></td>\n";
  64 +
  65 + for ($i = 0; $i < count($iDocumentIDs); $i++) {
  66 + $sToRender .= "<tr>\n";
  67 + $sToRender .= "<td>&nbsp;&nbsp;'" . Document::getDocumentDisplayPath($iDocumentIDs[$i]) . "'</td>\n";
  68 + $sQueryString .= "fDocumentIDs[]=$iDocumentIDs[$i]&";
  69 + }
  70 +
  71 + $sToRender .= "<tr><td> to:</td></tr>";
57 $sToRender .= "<tr>\n"; 72 $sToRender .= "<tr>\n";
58 - $sToRender .= "<td>" . renderFolderPath($iFolderID, generateControllerUrl("moveDocument", "fDocumentID=$iDocumentID", false)) . "</td>\n"; 73 + $sToRender .= "<td>" . renderFolderPath($iFolderID, "/control.php?action=moveDocument&" . $sQueryString) . "</td>\n";
59 $sToRender .= "</tr>\n"; 74 $sToRender .= "</tr>\n";
60 $sToRender .= "</table>\n"; 75 $sToRender .= "</table>\n";
61 $sToRender .= "<table width=\"100%\">\n"; 76 $sToRender .= "<table width=\"100%\">\n";
62 $sToRender .= "<tr>\n"; 77 $sToRender .= "<tr>\n";
63 - $sToRender .= "<td>" . renderFolderList($iFolderID, generateControllerUrl("moveDocument", "fDocumentID=$iDocumentID", false)) . "</td>\n"; 78 + $sToRender .= "<td>" . renderFolderList($iFolderID, "/control.php?action=moveDocument&" . $sQueryString) . "</td>\n";
64 $sToRender .= "</tr>\n"; 79 $sToRender .= "</tr>\n";
65 - $sToRender .= "<tr><td><table><tr><td><input type=\"image\" src=\"$default->graphicsUrl/widgets/movehere.gif\" border=\"0\"/></td><td><a href=\"$default->rootUrl/control.php?action=viewDocument&fDocumentID=" . $iDocumentID . "\"><img src=\"$default->graphicsUrl/widgets/cancel.gif\" border=\"0\"></a></td></tr></table></td>\n"; 80 + $sToRender .= "<td><table><tr><td><a href=\"" . $_SERVER["PHP_SELF"] . "?$sQueryString&fFolderID=$iFolderID&fForMove=1\"><img src=\"$default->graphicsUrl/widgets/movehere.gif\" border=\"0\"></a></td> <td><a href=\"$default->rootUrl/control.php?action=browse&fFolderID=$iFolderID\"><img src=\"$default->graphicsUrl/widgets/cancel.gif\" border=\"0\"></a></td></tr></table></td>";
  81 +
66 $sToRender .= "</table>\n"; 82 $sToRender .= "</table>\n";
67 return $sToRender; 83 return $sToRender;
68 } 84 }
  85 +function renderErrorPage($sErrorMessage, $iDocumentID = "") {
  86 + global $default;
  87 + if ($iDocumentID) {
  88 + return statusPage("Delete Document", "", $sErrorMessage, "viewDocument", "fDocumentID=$iDocumentID");
  89 + } else {
  90 + $sToRender = renderHeading("Delete Document");
  91 + $sToRender .= "<table>\n";
  92 + $sToRender .= "<tr><td><p class=\"errorText\">$sErrorMessage</p>\n" .
  93 + "<a href=\"javascript:history.go(-2)\"><img src=\"$default->graphicsUrl/widgets/back.gif\" border=\"0\"/></a>\n" .
  94 + "</p></td></tr></table>\n";
  95 + return $sToRender;
  96 + }
  97 +}
69 98
70 ?> 99 ?>
presentation/lookAndFeel/knowledgeTree/documentmanagement/viewUI.inc
@@ -441,7 +441,7 @@ function displayEmailButton($oDocument) { @@ -441,7 +441,7 @@ function displayEmailButton($oDocument) {
441 441
442 function displayDeleteButton($oDocument, $bEdit) { 442 function displayDeleteButton($oDocument, $bEdit) {
443 if ($bEdit) { 443 if ($bEdit) {
444 - $sQueryString = "fDocumentID=" . $oDocument->getID(); 444 + $sQueryString = "fDocumentIDs[]=" . $oDocument->getID();
445 if ($oDocument->getIsCheckedOut()) { 445 if ($oDocument->getIsCheckedOut()) {
446 $sDisabledText = _("This document can't be deleted because its checked out"); 446 $sDisabledText = _("This document can't be deleted because its checked out");
447 } 447 }
@@ -457,7 +457,7 @@ function displayHistoryButton($oDocument) { @@ -457,7 +457,7 @@ function displayHistoryButton($oDocument) {
457 } 457 }
458 function displayMoveButton($oDocument, $bEdit) { 458 function displayMoveButton($oDocument, $bEdit) {
459 if ($bEdit) { 459 if ($bEdit) {
460 - $sQueryString = "fFolderID=" . $oDocument->getFolderID() . "&fDocumentID=" . $oDocument->getID(); 460 + $sQueryString = "fFolderID=" . $oDocument->getFolderID() . "&fDocumentIDs[]=" . $oDocument->getID();
461 // documents in collaboration and checked out documents can't be moved 461 // documents in collaboration and checked out documents can't be moved
462 if ($oDocument->getIsCheckedOut()) { 462 if ($oDocument->getIsCheckedOut()) {
463 $sDisabledText = _("The document is checked out and cannot be moved."); 463 $sDisabledText = _("The document is checked out and cannot be moved.");
presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc
@@ -105,6 +105,13 @@ function renderFolderList($fFolderID, $sLinkURL) { @@ -105,6 +105,13 @@ function renderFolderList($fFolderID, $sLinkURL) {
105 $aQueryStringVariableNames = array("fFolderID"); 105 $aQueryStringVariableNames = array("fFolderID");
106 $aLinkURLs = array("$sLinkURL"); 106 $aLinkURLs = array("$sLinkURL");
107 107
  108 + $aLinkURLs = array();
  109 + if (strlen($default->rootUrl) > 0) {
  110 + $aLinkURLs = array("$default->rootUrl/$sLinkURL");
  111 + } else {
  112 + $aLinkURLs = array("$sLinkURL");
  113 + }
  114 +
108 $oPatternTableSqlQuery = & new PatternTableSqlQuery($sQuery, $aColumns, $aColumnTypes, $aColumnHeaderNames, "100%", $aLinkURLs, $aDBColumns, $aQueryStringVariableNames); 115 $oPatternTableSqlQuery = & new PatternTableSqlQuery($sQuery, $aColumns, $aColumnTypes, $aColumnHeaderNames, "100%", $aLinkURLs, $aDBColumns, $aQueryStringVariableNames);
109 $oPatternTableSqlQuery->setImageURL("$default->graphicsUrl/widgets/dfolder.gif"); 116 $oPatternTableSqlQuery->setImageURL("$default->graphicsUrl/widgets/dfolder.gif");
110 $oPatternTableSqlQuery->setEmptyTableMessage("This folder contains no sub folders"); 117 $oPatternTableSqlQuery->setEmptyTableMessage("This folder contains no sub folders");