/** testRemoveRevision */ public function testRemoveRevision() { Zend_Registry::set('modulesEnable', array()); Zend_Registry::set('notifier', new MIDAS_Notifier(false, null)); $itemsFile = $this->loadData('Item', 'default'); $usersFile = $this->loadData('User', 'default'); $item = $itemsFile[1]; // remove any revisions that may exist while ($this->Item->getLastRevision($itemsFile[1])) { $revision = $this->Item->getLastRevision($itemsFile[1]); $this->Item->removeRevision($item, $revision); } // add on 3 revisions $revision = new ItemRevisionDao(); $revision->setUserId($usersFile[0]->getKey()); $revision->setDate(date('Y-m-d H:i:s')); $revision->setChanges('r1'); $revision->setItemId(0); $revision->setRevision(1); $this->ItemRevision->save($revision); $this->Item->addRevision($itemsFile[1], $revision); $lastRev = $this->Item->getLastRevision($item); $this->assertEquals($revision->getKey(), $lastRev->getKey()); $this->assertEquals($revision->getChanges(), $lastRev->getChanges()); $revision = new ItemRevisionDao(); $revision->setUserId($usersFile[0]->getKey()); $revision->setDate(date('Y-m-d H:i:s')); $revision->setChanges('r2'); $revision->setItemId(0); $revision->setRevision(2); $this->ItemRevision->save($revision); $this->Item->addRevision($item, $revision); $lastRev = $this->Item->getLastRevision($item); $this->assertEquals($revision->getKey(), $lastRev->getKey()); $this->assertEquals($revision->getChanges(), $lastRev->getChanges()); $revision = new ItemRevisionDao(); $revision->setUserId($usersFile[0]->getKey()); $revision->setDate(date('Y-m-d H:i:s')); $revision->setChanges('r3'); $revision->setItemId(0); $revision->setRevision(3); $this->ItemRevision->save($revision); $this->Item->addRevision($item, $revision); $lastRev = $this->Item->getLastRevision($item); $this->assertEquals($revision->getKey(), $lastRev->getKey()); $this->assertEquals($revision->getChanges(), $lastRev->getChanges()); // we now have revision:changes 1:r1, 2:r2, 3:r3 // remove r3, check that last revision changes = r2 $this->Item->removeRevision($item, $lastRev); $lastRev = $this->Item->getLastRevision($item); $this->assertEquals($lastRev->getRevision(), '2'); $this->assertEquals($lastRev->getChanges(), 'r2'); // now we have 1:r1, 2:r2 // remove r1, check that last revision changes = r2 and revision = 1 $rev1 = $this->Item->getRevision($item, 1); $this->Item->removeRevision($item, $rev1); $lastRev = $this->Item->getLastRevision($item); $this->assertEquals($lastRev->getRevision(), '1'); $this->assertEquals($lastRev->getChanges(), 'r2'); // now we have 1:r2 // remove r2, check that there are no revisions $this->Item->removeRevision($item, $lastRev); $lastRev = $this->Item->getLastRevision($item); $this->assertFalse($lastRev); }
/** * Duplicate an item in destination folder/community. * * Create a new item (same as old one) in destination folder/community. The new item * have the same metadata and revisions with the old one, but its owner is set as the * input userDao parameter (who run this operation) and access policy is based on * the input folderDao parameter (destination folder) * * @param ItemDao $itemDao the item to be duplicated * @param UserDao $userDao the user who run this operation * @param FolderDao $folderDao destination folder * @return ItemDao * @throws Zend_Exception on invalid input parameters (itemDao, userDao and folderDao) */ public function duplicateItem($itemDao, $userDao, $folderDao) { if (!$itemDao instanceof ItemDao || !$folderDao instanceof FolderDao) { throw new Zend_Exception('Error in ItemDao or FolderDao when duplicating item'); } if (!$userDao instanceof UserDao) { throw new Zend_Exception('Should be an user.'); } /** @var BitstreamModel $BitstreamModel */ $BitstreamModel = MidasLoader::loadModel('Bitstream'); $name = $itemDao->getName(); $description = $itemDao->getDescription(); $newItem = $this->createItem($name, $description, $folderDao); $newItem->setType($itemDao->getType()); $newItem->setSizebytes($itemDao->getSizebytes()); $newItem->setDateCreation(date('Y-m-d H:i:s')); $newItem->setDateUpdate(date('Y-m-d H:i:s')); $thumbnailId = $itemDao->getThumbnailId(); if ($thumbnailId !== null) { $oldThumb = $BitstreamModel->load($thumbnailId); $newThumb = new BitstreamDao(); $newThumb->setItemrevisionId(-1); $newThumb->setName($oldThumb->getName()); $newThumb->setMimetype($oldThumb->getMimetype()); $newThumb->setSizebytes($oldThumb->getSizebytes()); $newThumb->setChecksum($oldThumb->getChecksum()); $newThumb->setPath($oldThumb->getPath()); $newThumb->setAssetstoreId($oldThumb->getAssetstoreId()); $newThumb->setDate($oldThumb->getDate()); $BitstreamModel->save($newThumb); $newItem->setThumbnailId($newThumb->getKey()); } /** @var ItemRevisionModel $ItemRevisionModel */ $ItemRevisionModel = MidasLoader::loadModel('ItemRevision'); /** @var BitstreamModel $BitstreamModel */ $BitstreamModel = MidasLoader::loadModel('Bitstream'); /** @var MetadataModel $MetadataModel */ $MetadataModel = MidasLoader::loadModel('Metadata'); /** @var ItempolicygroupModel $ItemPolicyGroupModel */ $ItemPolicyGroupModel = MidasLoader::loadModel('Itempolicygroup'); $ItemPolicyGroupModel->computePolicyStatus($newItem); foreach ($itemDao->getRevisions() as $revision) { $dupItemRevision = new ItemRevisionDao(); $dupItemRevision->setItemId($newItem->getItemId()); $dupItemRevision->setRevision($revision->getRevision()); $dupItemRevision->setDate($revision->getDate()); $dupItemRevision->setChanges($revision->getChanges()); $dupItemRevision->setUserId($userDao->getUserId()); $dupItemRevision->setLicenseId($revision->getLicenseId()); $ItemRevisionModel->save($dupItemRevision); // duplicate metadata value $metadatavalues = $ItemRevisionModel->getMetadata($revision); foreach ($metadatavalues as $metadata) { $MetadataModel->addMetadataValue($dupItemRevision, $metadata->getMetadatatype(), $metadata->getElement(), $metadata->getQualifier(), $metadata->getValue(), false); } // duplicate bitstream foreach ($revision->getBitstreams() as $bitstream) { $dupBitstream = new BitstreamDao(); $dupBitstream->setItemrevisionId($dupItemRevision->getItemrevisionId()); $dupBitstream->setName($bitstream->getName()); $dupBitstream->setMimetype($bitstream->getMimetype()); $dupBitstream->setSizebytes($bitstream->getSizebytes()); $dupBitstream->setChecksum($bitstream->getChecksum()); $dupBitstream->setPath($bitstream->getPath()); $dupBitstream->setAssetstoreId($bitstream->getAssetstoreId()); $dupBitstream->setDate($bitstream->getDate()); $BitstreamModel->save($dupBitstream); } } $this->save($newItem, true); // call save with metadata changed flag return $newItem; }