Commit 881cbbce055c50a55462421600856e5ebd3159cf

Authored by bshuttle
1 parent 030ac406

Brad Shuttleworth 2006-02-23 fixes for document-uniqueness, addition, su...


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@4996 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/documentmanagement/Document.inc
@@ -265,6 +265,19 @@ class Document { @@ -265,6 +265,19 @@ class Document {
265 return true; 265 return true;
266 } 266 }
267 // }}} 267 // }}}
  268 +
  269 + function &getByFilenameAndFolder($sFileName, $iFolderID) {
  270 + $sD = KTUtil::getTableName('documents');
  271 + $sDM = KTUtil::getTableName('document_metadata_version');
  272 + $sDC = KTUtil::getTableName('document_content_version');
  273 + $sQuery = "SELECT D.id AS id FROM $sD AS D
  274 + LEFT JOIN $sDM AS DM ON D.metadata_version_id = DM.id
  275 + LEFT JOIN $sDC AS DC ON DM.content_version_id = DC.id
  276 + WHERE DC.filename = ? AND D.folder_id = ?";
  277 + $aParams = array($sFileName, $iFolderID);
  278 + $id = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id');
  279 + return Document::get($id);
  280 + }
268 281
269 // {{{ nameExists 282 // {{{ nameExists
270 /** 283 /**
@@ -293,6 +306,19 @@ class Document { @@ -293,6 +306,19 @@ class Document {
293 } 306 }
294 // }}} 307 // }}}
295 308
  309 + function &getByNameAndFolder($sName, $iFolderID) {
  310 + $sD = KTUtil::getTableName('documents');
  311 + $sDM = KTUtil::getTableName('document_metadata_version');
  312 + $sDC = KTUtil::getTableName('document_content_version');
  313 + $sQuery = "SELECT D.id AS id FROM $sD AS D
  314 + LEFT JOIN $sDM AS DM ON D.metadata_version_id = DM.id
  315 + LEFT JOIN $sDC AS DC ON DM.content_version_id = DC.id
  316 + WHERE DM.name = ? AND D.folder_id = ?";
  317 + $aParams = array($sName, $iFolderID);
  318 + $id = DBUtil::getOneResultKey(array($sQuery, $aParams), 'id');
  319 + return Document::get($id);
  320 + }
  321 +
296 // {{{ getDocumentDisplayPath 322 // {{{ getDocumentDisplayPath
297 /** 323 /**
298 * Static function. 324 * Static function.
lib/documentmanagement/documentutil.inc.php
@@ -135,7 +135,7 @@ class KTDocumentUtil { @@ -135,7 +135,7 @@ class KTDocumentUtil {
135 $sTrigger = $aTrigger[0]; 135 $sTrigger = $aTrigger[0];
136 $oTrigger = new $sTrigger; 136 $oTrigger = new $sTrigger;
137 $aInfo = array( 137 $aInfo = array(
138 - "document" => $this->oDocument, 138 + "document" => $oDocument,
139 ); 139 );
140 $oTrigger->setInfo($aInfo); 140 $oTrigger->setInfo($aInfo);
141 $ret = $oTrigger->postValidate(); 141 $ret = $oTrigger->postValidate();
@@ -375,11 +375,30 @@ class KTDocumentUtil { @@ -375,11 +375,30 @@ class KTDocumentUtil {
375 // {{{ add 375 // {{{ add
376 function &add($oFolder, $sFilename, $oUser, $aOptions) { 376 function &add($oFolder, $sFilename, $oUser, $aOptions) {
377 if (KTDocumentUtil::fileExists($oFolder, $sFilename)) { 377 if (KTDocumentUtil::fileExists($oFolder, $sFilename)) {
378 - return PEAR::raiseError("Document with that filename already exists in this folder"); 378 + $oDoc = Document::getByFilenameAndFolder($sFilename, $oFolder->getId());
  379 + if (PEAR::isError($oDoc)) {
  380 + return PEAR::raiseError(_("Document with that filename already exists in this folder, and appears to be invalid. Please contact the system administrator."));
  381 + } else {
  382 + if ($oDoc->getStatusID != LIVE) {
  383 + return PEAR::raiseError(_("Document with that filename already exists in this folder, but it has been archived or deleted and is still available for restoration. To prevent it being overwritten, you are not allowed to add a document with the same title or filename."));
  384 + } else {
  385 + return PEAR::raiseError(_("Document with that filename already exists in this folder."));
  386 + }
  387 + }
379 } 388 }
380 $sName = KTUtil::arrayGet($aOptions, 'description', $sFilename); 389 $sName = KTUtil::arrayGet($aOptions, 'description', $sFilename);
381 if (KTDocumentUtil::nameExists($oFolder, $sName)) { 390 if (KTDocumentUtil::nameExists($oFolder, $sName)) {
382 - return PEAR::raiseError("Document with that name already exists in this folder"); 391 + $oDoc = Document::getByNameAndFolder($sName, $oFolder->getId());
  392 + if (PEAR::isError($oDoc)) {
  393 + return PEAR::raiseError(_("Document with that title already exists in this folder, and appears to be invalid. Please contact the system administrator."));
  394 + } else {
  395 + if ($oDoc->getStatusID != LIVE) {
  396 + return PEAR::raiseError(_("Document with that title already exists in this folder, but it has been archived or deleted and is still available for restoration. To prevent it being overwritten, you are not allowed to add a document with the same title or filename."));
  397 + } else {
  398 + return PEAR::raiseError(_("Document with that title already exists in this folder."));
  399 + }
  400 + }
  401 +
383 } 402 }
384 $oUploadChannel =& KTUploadChannel::getSingleton(); 403 $oUploadChannel =& KTUploadChannel::getSingleton();
385 $oUploadChannel->sendMessage(new KTUploadNewFile($sFilename)); 404 $oUploadChannel->sendMessage(new KTUploadNewFile($sFilename));
lib/templating/smartytemplate.inc.php
@@ -207,7 +207,7 @@ class KTSmartyTemplate extends KTTemplate { @@ -207,7 +207,7 @@ class KTSmartyTemplate extends KTTemplate {
207 foreach ($entities as $oEntity) { 207 foreach ($entities as $oEntity) {
208 $params['values'][] = call_user_func(array(&$oEntity, $idmethod)); 208 $params['values'][] = call_user_func(array(&$oEntity, $idmethod));
209 if ($method != "none") { 209 if ($method != "none") {
210 - $params['output'][] = call_user_func(array(&$oEntity, $method)); 210 + $params['output'][] = ' ' . call_user_func(array(&$oEntity, $method));
211 } else { 211 } else {
212 $params['output'][] = null; 212 $params['output'][] = null;
213 } 213 }
plugins/ktcore/folder/BulkImport.php
@@ -22,6 +22,14 @@ class KTBulkImportFolderAction extends KTFolderAction { @@ -22,6 +22,14 @@ class KTBulkImportFolderAction extends KTFolderAction {
22 return _('Bulk import'); 22 return _('Bulk import');
23 } 23 }
24 24
  25 + function getInfo() {
  26 + if (!Permission::userIsSystemAdministrator($this->oUser->getId())) {
  27 + return null;
  28 +
  29 + }
  30 + return parent::getInfo();
  31 + }
  32 +
25 function do_main() { 33 function do_main() {
26 $this->oPage->setBreadcrumbDetails(_("bulk import")); 34 $this->oPage->setBreadcrumbDetails(_("bulk import"));
27 $oTemplate =& $this->oValidator->validateTemplate('ktcore/folder/bulkImport'); 35 $oTemplate =& $this->oValidator->validateTemplate('ktcore/folder/bulkImport');
plugins/ktcore/folder/addDocument.php
@@ -92,6 +92,8 @@ class KTFolderAddDocumentAction extends KTFolderAction { @@ -92,6 +92,8 @@ class KTFolderAddDocumentAction extends KTFolderAction {
92 $sTitle = $this->oValidator->validateString($_REQUEST['title'], $aErrorOptions); 92 $sTitle = $this->oValidator->validateString($_REQUEST['title'], $aErrorOptions);
93 93
94 $iFolderId = $this->oFolder->getId(); 94 $iFolderId = $this->oFolder->getId();
  95 + /*
  96 + // this is now done in ::add
95 if (Document::fileExists(basename($aFile['name']), $iFolderId)) { 97 if (Document::fileExists(basename($aFile['name']), $iFolderId)) {
96 $this->errorRedirectToMain(_('There is already a file with that filename in this folder.'), sprintf('fFolderId=%d', $this->oFolder->getId())); 98 $this->errorRedirectToMain(_('There is already a file with that filename in this folder.'), sprintf('fFolderId=%d', $this->oFolder->getId()));
97 exit(0); 99 exit(0);
@@ -101,6 +103,7 @@ class KTFolderAddDocumentAction extends KTFolderAction { @@ -101,6 +103,7 @@ class KTFolderAddDocumentAction extends KTFolderAction {
101 $this->errorRedirectToMain(_('There is already a file with that title in this folder.'), sprintf('fFolderId=%d', $this->oFolder->getId())); 103 $this->errorRedirectToMain(_('There is already a file with that title in this folder.'), sprintf('fFolderId=%d', $this->oFolder->getId()));
102 exit(0); 104 exit(0);
103 } 105 }
  106 + */
104 107
105 $matches = array(); 108 $matches = array();
106 $aFields = array(); 109 $aFields = array();
plugins/ktstandard/KTSubscriptions.php
@@ -284,14 +284,14 @@ class KTFolderSubscriptionAction extends KTFolderAction { @@ -284,14 +284,14 @@ class KTFolderSubscriptionAction extends KTFolderAction {
284 function do_main() { 284 function do_main() {
285 $iSubscriptionType = SubscriptionEvent::subTypes('Folder'); 285 $iSubscriptionType = SubscriptionEvent::subTypes('Folder');
286 if (Subscription::exists($this->oUser->getId(), $this->oFolder->getId(), $iSubscriptionType)) { 286 if (Subscription::exists($this->oUser->getId(), $this->oFolder->getId(), $iSubscriptionType)) {
287 - $_SESSION['KTErrorMessage'][] = _("You are already subscribed to that document"); 287 + $_SESSION['KTErrorMessage'][] = _("You are already subscribed to that folder");
288 } else { 288 } else {
289 $oSubscription = new Subscription($this->oUser->getId(), $this->oFolder->getId(), $iSubscriptionType); 289 $oSubscription = new Subscription($this->oUser->getId(), $this->oFolder->getId(), $iSubscriptionType);
290 $res = $oSubscription->create(); 290 $res = $oSubscription->create();
291 if ($res) { 291 if ($res) {
292 - $_SESSION['KTInfoMessage'][] = _("You have been subscribed to this document"); 292 + $_SESSION['KTInfoMessage'][] = _("You have been subscribed to this folder");
293 } else { 293 } else {
294 - $_SESSION['KTErrorMessage'][] = _("There was a problem subscribing you to this document"); 294 + $_SESSION['KTErrorMessage'][] = _("There was a problem subscribing you to this folder");
295 } 295 }
296 } 296 }
297 controllerRedirect('browse', 'fFolderId=' . $this->oFolder->getId()); 297 controllerRedirect('browse', 'fFolderId=' . $this->oFolder->getId());
templates/ktcore/document/add.smarty
@@ -29,10 +29,8 @@ function handleErrorsInResponse(req) { @@ -29,10 +29,8 @@ function handleErrorsInResponse(req) {
29 29
30 function swapElementFromRequest(elementId, url) { 30 function swapElementFromRequest(elementId, url) {
31 var deff = doSimpleXMLHttpRequest(url); 31 var deff = doSimpleXMLHttpRequest(url);
32 -  
33 var cp = getElement(elementId); 32 var cp = getElement(elementId);
34 cp.innerHTML="loading..."; 33 cp.innerHTML="loading...";
35 -  
36 deff.addCallback(partial(swapInItem, elementId)); 34 deff.addCallback(partial(swapInItem, elementId));
37 deff.addErrback(handleErrorsInResponse); 35 deff.addErrback(handleErrorsInResponse);
38 } 36 }
@@ -82,4 +80,4 @@ addLoadEvent(startupMetadata); @@ -82,4 +80,4 @@ addLoadEvent(startupMetadata);
82 <input type="submit" name="submit" value="{i18n}Add{/i18n}" /> 80 <input type="submit" name="submit" value="{i18n}Add{/i18n}" />
83 </div> 81 </div>
84 <input type="hidden" name="postReceived" value="1" /> 82 <input type="hidden" name="postReceived" value="1" />
85 -</form>  
86 \ No newline at end of file 83 \ No newline at end of file
  84 +</form>
view.php
@@ -458,6 +458,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher { @@ -458,6 +458,7 @@ class ViewDocumentDispatcher extends KTStandardDispatcher {
458 458
459 function getUserForId($iUserId) { 459 function getUserForId($iUserId) {
460 $u = User::get($iUserId); 460 $u = User::get($iUserId);
  461 + if (PEAR::isError($u) || ($u == false)) { return _('User no longer exists'); }
461 return $u->getName(); 462 return $u->getName();
462 } 463 }
463 } 464 }