From fb24d85e702b9371b42c2f81802d264d8402c6e1 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Wed, 25 Apr 2012 23:54:10 +0200 Subject: [PATCH 1/4] Fix Phraseanet version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29b5712620..facbcebe85 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Phraseanet 3.5 - Digital Asset Management application +Phraseanet 3.6 - Digital Asset Management application ================================================= #Features : From bf97f5ce496e963fc0302b5fb19d85aff6dd4b68 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Wed, 25 Apr 2012 23:54:29 +0200 Subject: [PATCH 2/4] Bump to version 3.6.3 --- lib/Alchemy/Phrasea/Core/Version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Alchemy/Phrasea/Core/Version.php b/lib/Alchemy/Phrasea/Core/Version.php index 9769686318..6feaa75cd3 100644 --- a/lib/Alchemy/Phrasea/Core/Version.php +++ b/lib/Alchemy/Phrasea/Core/Version.php @@ -20,7 +20,7 @@ namespace Alchemy\Phrasea\Core; class Version { - protected static $number = '3.6.2'; + protected static $number = '3.6.3'; protected static $name = 'Brachiosaure'; public static function getNumber() From 529452a677cc573ad1fc5c9250db3bfda4edeb1f Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Fri, 27 Apr 2012 15:53:18 +0200 Subject: [PATCH 3/4] fix command export --- lib/classes/set/exportorder.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/classes/set/exportorder.class.php b/lib/classes/set/exportorder.class.php index ca7470eb42..3a0cf6def7 100644 --- a/lib/classes/set/exportorder.class.php +++ b/lib/classes/set/exportorder.class.php @@ -110,13 +110,13 @@ class set_exportorder extends set_export protected function get_orderable_lst() { $ret = array(); - foreach ($this as $basrec => $download_element) + foreach ($this as $download_element) { foreach ($download_element->get_orderable() as $name => $bool) { if ($bool === true) { - $ret[] = $basrec; + $ret[] = $download_element->get_serialize_key(); } } } From f8f6c9791874a48580157893869e628779ba6bc5 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Fri, 27 Apr 2012 17:41:22 +0200 Subject: [PATCH 4/4] fix #605 consistency deletion of records in order_elements table --- lib/classes/record/adapter.class.php | 7 +++ lib/classes/set/exportorder.class.php | 5 ++- lib/classes/set/order.class.php | 40 +++++++++-------- .../PhraseanetPHPUnitAbstract.class.inc | 2 + lib/unitTest/record/adapterTest.php | 43 +++++++++++++++++++ 5 files changed, 77 insertions(+), 20 deletions(-) diff --git a/lib/classes/record/adapter.class.php b/lib/classes/record/adapter.class.php index b24686ce48..bab9df8597 100644 --- a/lib/classes/record/adapter.class.php +++ b/lib/classes/record/adapter.class.php @@ -1717,6 +1717,13 @@ class record_adapter implements record_Interface, cache_cacheableInterface $stmt->execute(array(':record_id' => $this->get_record_id())); $stmt->closeCursor(); + $base_ids = array_map(function($collection){ return $collection->get_base_id();}, $this->databox->get_collections()); + + $sql = "DELETE FROM order_elements WHERE record_id = :record_id AND base_id IN (".implode(', ', $base_ids).")"; + $stmt = $conn->prepare($sql); + $stmt->execute(array(':record_id' => $this->get_record_id())); + $stmt->closeCursor(); + $em = bootstrap::getCore()->getEntityManager(); $repository = $em->getRepository('\Entities\BasketElement'); diff --git a/lib/classes/set/exportorder.class.php b/lib/classes/set/exportorder.class.php index 3a0cf6def7..b11a99843c 100644 --- a/lib/classes/set/exportorder.class.php +++ b/lib/classes/set/exportorder.class.php @@ -24,6 +24,7 @@ class set_exportorder extends set_export * @param String $usage * @param String $deadline * @return boolean + * @return $order_id */ public function order_available_elements($from_usr_id, $usage, $deadline) { @@ -100,7 +101,7 @@ class set_exportorder extends set_export $evt_mngr->trigger('__NEW_ORDER__', $params); - return true; + return $order_id; } /** @@ -112,7 +113,7 @@ class set_exportorder extends set_export $ret = array(); foreach ($this as $download_element) { - foreach ($download_element->get_orderable() as $name => $bool) + foreach ($download_element->get_orderable() as $bool) { if ($bool === true) { diff --git a/lib/classes/set/order.class.php b/lib/classes/set/order.class.php index 9f0926010e..cf0da5341b 100644 --- a/lib/classes/set/order.class.php +++ b/lib/classes/set/order.class.php @@ -101,29 +101,33 @@ class set_order extends set_abstract $this->ssel_id = (int) $row['ssel_id']; $base_ids = array_keys($user->ACL()->get_granted_base(array('order_master'))); - $sql = 'SELECT e.base_id, e.record_id, e.order_master_id, e.id, e.deny - FROM order_elements e - WHERE order_id = :order_id - AND e.base_id - IN ('.implode(',', $base_ids).')'; - - $stmt = $conn->prepare($sql); - $stmt->execute(array(':order_id' => $id)); - $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); - $stmt->closeCursor(); $elements = array(); - foreach ($rs as $row) + if(count($base_ids) > 0) { - $order_master_id = $row['order_master_id'] ? $row['order_master_id'] : false; + $sql = 'SELECT e.base_id, e.record_id, e.order_master_id, e.id, e.deny + FROM order_elements e + WHERE order_id = :order_id + AND e.base_id + IN ('.implode(',', $base_ids).')'; - $elements[$row['id']] = new record_orderElement( - phrasea::sbasFromBas($row['base_id']), - $row['record_id'], - $row['deny'], - $order_master_id - ); + $stmt = $conn->prepare($sql); + $stmt->execute(array(':order_id' => $id)); + $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + foreach ($rs as $row) + { + $order_master_id = $row['order_master_id'] ? $row['order_master_id'] : false; + + $elements[$row['id']] = new record_orderElement( + phrasea::sbasFromBas($row['base_id']), + $row['record_id'], + $row['deny'], + $order_master_id + ); + } } $this->elements = $elements; diff --git a/lib/unitTest/PhraseanetPHPUnitAbstract.class.inc b/lib/unitTest/PhraseanetPHPUnitAbstract.class.inc index 98cecc7068..42d1ab1d97 100644 --- a/lib/unitTest/PhraseanetPHPUnitAbstract.class.inc +++ b/lib/unitTest/PhraseanetPHPUnitAbstract.class.inc @@ -944,6 +944,8 @@ abstract class PhraseanetPHPUnitAbstract extends WebTestCase $base_id = $collection->get_base_id(); $user->ACL()->give_access_to_base(array($base_id)); + set_exportorder::set_order_admins(array($user->get_id()), $base_id); + $rights = array( 'canputinalbum' => '1' , 'candwnldhd' => '1' diff --git a/lib/unitTest/record/adapterTest.php b/lib/unitTest/record/adapterTest.php index 40bbb4811e..df50339135 100644 --- a/lib/unitTest/record/adapterTest.php +++ b/lib/unitTest/record/adapterTest.php @@ -38,6 +38,49 @@ class record_adapterTest extends PhraseanetPHPUnitAuthenticatedAbstract parent::tearDownAfterClass(); } + /** + * Check whether a record is delete from order_elements when + * record::delete is call + * @covers \record_adapter + */ + public function testSetExport() + { + $recordsf = new system_file(__DIR__ . '/../testfiles/test001.CR2'); + $record = record_adapter::create(self::$collection, $recordsf); + + $basket = new \Entities\Basket(); + + $basket->setName('hello'); + $basket->setOwner(self::$user); + $basket->setDescription('hello'); + + $em = self::$core->getEntityManager(); + + $basketElement = new \Entities\BasketElement(); + + $basketElement->setRecord($record); + $basketElement->setBasket($basket); + + $em->persist($basketElement); + + $basket->addBasketElement($basketElement); + + $em->persist($basket); + $em->flush(); + + $export = new set_exportorder(self::$record_1->get_serialize_key(), $basket->getId()); + + $orderId = $export->order_available_elements(self::$user->get_id(), 'ahaha', '+2 hours'); + + $record->delete(); + + try { + $order = new set_order($orderId); + } catch (\Exception $e) { + $this->fail('should not raise an exception' . $e->getMessage() . ' ' . $e->getLine() . ' ' . $e->getFile() . ' ' . $e->getTraceAsString()); + } + } + public function testGet_creation_date() { $date_obj = new DateTime();