Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit 220ea63

Browse files
author
Jamie Snape
committed
Check that items have at least one revision where necessary
1 parent 7bcfe52 commit 220ea63

File tree

33 files changed

+191
-57
lines changed

33 files changed

+191
-57
lines changed

core/controllers/ItemController.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ public function editmetadataAction()
6868
} else {
6969
$metadataItemRevision = $this->Item->getLastRevision($itemDao);
7070
}
71+
if ($metadataItemRevision === false) {
72+
throw new Zend_Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
73+
}
7174
$metadatavalues = $this->ItemRevision->getMetadata($metadataItemRevision);
7275
$this->view->metadata = null;
7376

@@ -121,6 +124,9 @@ public function viewAction()
121124
} else {
122125
$metadataItemRevision = $itemRevision;
123126
}
127+
if ($metadataItemRevision === false) {
128+
throw new Zend_Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
129+
}
124130
$deleteMetadata = $this->getParam('deleteMetadata');
125131
$editMetadata = $this->getParam('editMetadata');
126132
if (isset($deleteMetadata) && !empty($deleteMetadata) && $this->view->isModerator) { // delete metadata field
@@ -603,6 +609,9 @@ public function getmetadatavalueexistsAction()
603609
} else {
604610
$metadataItemRevision = $this->Item->getLastRevision($itemDao);
605611
}
612+
if ($metadataItemRevision === false) {
613+
throw new Zend_Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
614+
}
606615
$metadataDao->setItemrevisionId($metadataItemRevision->getKey());
607616
if ($this->Metadata->getMetadataValueExists($metadataDao)) {
608617
$exists = 1;

core/controllers/ShareController.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,13 @@ public function linksAction()
301301
case 'folder':
302302
$dao = $this->Folder->load($id);
303303
$name = $dao->getName().'.zip';
304+
$hasDownload = true;
304305
break;
305306
case 'item':
306307
$dao = $this->Item->load($id);
307-
$headRev = $this->Item->getLastRevision($dao);
308308
$name = $dao->getName();
309+
$headRev = $this->Item->getLastRevision($dao);
310+
$hasDownload = $headRev !== false;
309311
if (count($headRev->getBitstreams()) > 1) {
310312
$name .= '.zip';
311313
}
@@ -318,6 +320,10 @@ public function linksAction()
318320
$this->view->type = $type;
319321
$this->view->id = $id;
320322
$this->view->viewUrl = $baseUrl.'/'.$type.'/'.$id;
321-
$this->view->downloadUrl = $baseUrl.'/download/'.$type.'/'.$id.'/'.urlencode($name);
323+
if ($hasDownload === false) {
324+
$this->view->downloadUrl = '';
325+
} else {
326+
$this->view->downloadUrl = $baseUrl.'/download/'.$type.'/'.$id.'/'.urlencode($name);
327+
}
322328
}
323329
}

core/controllers/UploadController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,10 @@ public function revisionAction()
113113

114114
// Check if the revision exists and if it does, we send its license ID to
115115
// the view. If it does not exist we use our default license
116-
if ($itemRevision) {
117-
$this->view->selectedLicense = $itemRevision->getLicenseId();
118-
} else {
116+
if ($itemRevision === false) {
119117
$this->view->selectedLicense = Zend_Registry::get('configGlobal')->defaultlicense;
118+
} else {
119+
$this->view->selectedLicense = $itemRevision->getLicenseId();
120120
}
121121

122122
$this->view->allLicenses = $this->License->getAll();

core/controllers/components/ApihelperComponent.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public function getItemRevision($item, $revisionNumber = null)
116116
if ($revisionDao) {
117117
return $revisionDao;
118118
} else {
119-
throw new Exception("The item must have at least one revision to have metadata.", MIDAS_INVALID_POLICY);
119+
throw new Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
120120
}
121121
}
122122

@@ -129,7 +129,7 @@ public function getItemRevision($item, $revisionNumber = null)
129129
}
130130
$revisions = $item->getRevisions();
131131
if (count($revisions) === 0) {
132-
throw new Exception("The item must have at least one revision to have metadata.", MIDAS_INVALID_POLICY);
132+
throw new Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
133133
}
134134
// check revisions exist
135135
foreach ($revisions as $revision) {
@@ -231,7 +231,7 @@ public function setMetadata($item, $type, $element, $qualifier, $value, $revisio
231231

232232
// If no module handles this metadata, we add it as normal metadata on the item revision
233233
if (!$revisionDao) {
234-
throw new Exception("The item must have at least one revision to have metadata.", MIDAS_INVALID_POLICY);
234+
throw new Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
235235
}
236236

237237
/** @var MetadataModel $metadataModel */

core/controllers/components/ApiitemComponent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ public function itemDeletemetadataAll($args)
265265
) {
266266
$revisions = $item->getRevisions();
267267
if (count($revisions) === 0) {
268-
throw new Exception("The item must have at least one revision to have metadata.", MIDAS_INVALID_POLICY);
268+
throw new Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
269269
}
270270
foreach ($revisions as $revisionDao) {
271271
$itemRevisionModel->deleteMetadata($revisionDao);

core/controllers/components/ApisystemComponent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ public function uploadGeneratetoken($args)
398398
) {
399399
$revision = $itemModel->getLastRevision($item);
400400

401-
if ($revision == false) {
401+
if ($revision === false) {
402402
// Create new revision if none exists yet
403403
Zend_Loader::loadClass('ItemRevisionDao', BASE_PATH.'/core/models/dao');
404404
$revision = new ItemRevisionDao();

core/controllers/components/ExportComponent.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,20 @@ public function exportBitstreams($userDao, $targetDir, $itemIds, $shouldSymLink)
109109
}
110110
// Use the given revision_number if it is not empty
111111
if (isset($tmpId[1])) {
112-
$revisionNum = $itemModel->getRevision($item, $tmpId[1]);
113-
if ($revisionNum !== false) {
114-
$revisions[] = $revisionNum;
112+
$revision = $itemModel->getRevision($item, $tmpId[1]);
113+
if ($revision !== false) {
114+
$revisions[] = $revision;
115115
} else {
116116
throw new Zend_Exception(
117117
"Revision number ".$tmpId[1]." for item ".$tmpId[0]." does not exist. Please check your input."
118118
);
119119
}
120120
} else {
121121
// Otherwise use the latest revision
122-
$revisionNum = $itemModel->getLastRevision($item);
123-
$revisions[] = $revisionNum;
122+
$revision = $itemModel->getLastRevision($item);
123+
if ($revision !== false) {
124+
$revisions[] = $revision;
125+
}
124126
}
125127
}
126128
}

core/models/base/MetadataModelBase.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ public function addMetadataValue(
122122
/** @var ItemModel $itemModel */
123123
$itemModel = MidasLoader::loadModel('Item');
124124
$lastrevision = $itemModel->getLastRevision($item);
125-
125+
if ($lastrevision === false) {
126+
throw new Zend_Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
127+
}
126128
// refresh zend search index if latest revision has changed
127129
if ($lastrevision->getKey() == $itemRevisionDao->getKey()) {
128130
$itemModel->save($item, $passItemMetadataChanged);

core/models/pdo/FolderModel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,7 @@ public function zipStream(&$zip, $path, $folder, &$userDao, &$overrideOutputFunc
13511351
$item = $this->initDao('Item', $row);
13521352
$rev = $this->Item->getLastRevision($item);
13531353

1354-
if (!$rev) {
1354+
if ($rev === false) {
13551355
$zip->addFile($path.'/'.$item->getName(), ''); // add empty item
13561356
continue;
13571357
}

core/models/pdo/ItemRevisionModel.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ public function deleteMetadata($revisiondao, $metadataId = null)
9595
/** @var ItemModel $itemModel */
9696
$itemModel = MidasLoader::loadModel('Item');
9797
$lastrevision = $itemModel->getLastRevision($item);
98+
if ($lastrevision === false) {
99+
throw new Zend_Exception('The item must have at least one revision to have metadata', MIDAS_INVALID_POLICY);
100+
}
98101

99102
// refresh lucene search index
100103
if ($lastrevision->getKey() == $revisiondao->getKey()) {

0 commit comments

Comments
 (0)