Refactor basket_adapter

This commit is contained in:
Romain Neutron
2011-12-26 10:50:55 +01:00
parent 6a815c91da
commit 0e6757e2db
11 changed files with 107 additions and 133 deletions

View File

@@ -46,4 +46,28 @@ class BasketElementRepository extends EntityRepository
return $query->getResult(); return $query->getResult();
} }
/**
*
* @param type $element_id
* @param \User_Adapter $user
* @return \Entities\BasketELement
*/
public function findUserElement($element_id, \User_Adapter $user)
{
$element = $this->find($element_id);
/* @var $element \Entities\BasketElement */
if (null === $element)
{
throw new \Exception_NotFound(_('Element is not found'));
}
if ($element->getBasket()->getowner()->get_id() != $user->get_id())
{
throw new \Exception_Forbidden(_('You have not access to this basket element'));
}
return $element;
}
} }

View File

@@ -15,7 +15,7 @@
* @license http://opensource.org/licenses/gpl-3.0 GPLv3 * @license http://opensource.org/licenses/gpl-3.0 GPLv3
* @link www.phraseanet.com * @link www.phraseanet.com
*/ */
class Bridge_Exception extends Exception class Bridge_Exception extends \Exception
{ {
} }

View File

@@ -15,7 +15,7 @@
* @license http://opensource.org/licenses/gpl-3.0 GPLv3 * @license http://opensource.org/licenses/gpl-3.0 GPLv3
* @link www.phraseanet.com * @link www.phraseanet.com
*/ */
class Bridge_Exception_ApiConnectorNotConfigured extends Bridge_Exception class Bridge_Exception_ApiConnectorNotConfigured extends \Bridge_Exception
{ {
} }

View File

@@ -15,7 +15,7 @@
* @license http://opensource.org/licenses/gpl-3.0 GPLv3 * @license http://opensource.org/licenses/gpl-3.0 GPLv3
* @link www.phraseanet.com * @link www.phraseanet.com
*/ */
class Bridge_Exception_ApiConnectorNotConnected extends Bridge_Exception class Bridge_Exception_ApiConnectorNotConnected extends \Bridge_Exception
{ {
} }

View File

@@ -1,21 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2010 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
*
* @package Exception
* @license http://opensource.org/licenses/gpl-3.0 GPLv3
* @link www.phraseanet.com
*/
class Exception_Basket_NotFound extends Exception_NotFound
{
}

View File

@@ -518,7 +518,6 @@ class basket_element_adapter implements cache_cacheableInterface
$note = strip_tags($note); $note = strip_tags($note);
if (!$this->validate_id) if (!$this->validate_id)
return false; return false;
$appbox = appbox::get_instance(); $appbox = appbox::get_instance();
@@ -596,7 +595,9 @@ class basket_element_adapter implements cache_cacheableInterface
foreach ($this->choices as $key => $value) foreach ($this->choices as $key => $value)
{ {
if (trim($value['note']) != '') if (trim($value['note']) != '')
{
$n++; $n++;
}
} }
return $n; return $n;

View File

@@ -479,23 +479,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface
*/ */
public function move_to_collection(collection &$collection, appbox &$appbox) public function move_to_collection(collection &$collection, appbox &$appbox)
{ {
$sql = 'UPDATE sselcont
SET base_id = :base_id
WHERE record_id = :record_id
AND base_id IN (SELECT base_id FROM bas WHERE sbas_id = :sbas_id)';
$params = array(
':base_id' => $collection->get_base_id(),
':record_id' => $this->get_record_id(),
':sbas_id' => $this->get_sbas_id()
);
$stmt = $appbox->get_connection()->prepare($sql);
$stmt->execute($params);
$stmt->closeCursor();
basket_adapter::revoke_baskets_record($this, $appbox);
$sql = "UPDATE record SET coll_id = :coll_id WHERE record_id =:record_id"; $sql = "UPDATE record SET coll_id = :coll_id WHERE record_id =:record_id";
$params = array( $params = array(
@@ -1714,21 +1697,17 @@ class record_adapter implements record_Interface, cache_cacheableInterface
$stmt->execute(array(':record_id' => $this->get_record_id())); $stmt->execute(array(':record_id' => $this->get_record_id()));
$stmt->closeCursor(); $stmt->closeCursor();
$sql = 'SELECT s.ssel_id, c.sselcont_id, s.usr_id $em = bootstrap::getCore()->getEntityManager();
FROM sselcont c, ssel s
WHERE c.base_id = :base_id AND c.record_id = :record_id
AND s.ssel_id = c.ssel_id';
$stmt = $conn->prepare($sql);
$stmt->execute(array(':record_id' => $this->get_record_id(), ':base_id' => $this->get_base_id()));
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rs as $row) $repository = $em->getRepository('\Entities\BasketElement');
/* @var $repository \Repositories\BasketElementRepository */
foreach($repository->findElementsByRecord($this) as $basket_element)
{ {
$basket = basket_adapter::getInstance($appbox, $row['ssel_id'], $row['usr_id']); $em->remove($basket_element);
$basket->remove_from_ssel($row['sselcont_id']);
} }
$stmt->closeCursor(); $em->flush();
foreach ($ftodel as $f) foreach ($ftodel as $f)
@unlink($f); @unlink($f);
@@ -1935,37 +1914,13 @@ class record_adapter implements record_Interface, cache_cacheableInterface
*/ */
public function get_container_baskets() public function get_container_baskets()
{ {
if ($this->container_basket) $Core = bootstrap::getCore();
return $this->container_basket; $em = $Core->getEntityManager();
$appbox = appbox::get_instance(); $repo = $em->getRepository('\Entities\Baskets');
$session = $appbox->get_session();
$baskets = array(); /* @var $$repo \Repositories\BasketRepository */
$sql = 'SELECT s.ssel_id FROM ssel s, sselcont c return $repo->findContainingRecord($this);
WHERE s.ssel_id = c.ssel_id
AND c.base_id = :base_id AND record_id = :record_id
AND usr_id = :usr_id AND temporaryType="0"';
$params = array(
':base_id' => $this->get_base_id()
, ':record_id' => $this->get_record_id()
, ':usr_id' => $session->get_usr_id()
);
$stmt = $appbox->get_connection()->prepare($sql);
$stmt->execute($params);
$rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();
foreach ($rs as $row)
{
$baskets[$row['ssel_id']] = basket_adapter::getInstance($appbox, $row['ssel_id'], $session->get_usr_id());
}
$this->container_basket = $baskets;
return $this->container_basket;
} }
/** /**

View File

@@ -89,6 +89,7 @@ class record_preview extends record_adapter
public function __construct($env, $pos, $contId, $reload_train, searchEngine_adapter $search_engine =null, $query='') public function __construct($env, $pos, $contId, $reload_train, searchEngine_adapter $search_engine =null, $query='')
{ {
$appbox = appbox::get_instance(); $appbox = appbox::get_instance();
$Core = bootstrap::getCore();
$number = null; $number = null;
$this->env = $env; $this->env = $env;
@@ -139,37 +140,42 @@ class record_preview extends record_adapter
break; break;
case "BASK": case "BASK":
$basket = basket_adapter::getInstance($appbox, $contId, $appbox->get_session()->get_usr_id()); $em = $Core->getEntityManager();
$repository = $em->getRepository('\Entities\Basket');
$this->container = $basket; /* @var $repository \Repositories\BasketRepository */
$this->total = count($basket->get_elements()); $Basket = $repository->findUserBasket($contId, $Core->getAuthenticatedUser());
/* @var $Basket \Entities\Basket */
$this->container = $Basket;
$this->total = $Basket->getElements()->count();
$i = 0; $i = 0;
$first = true; $first = true;
foreach ($basket->get_elements() as $element) foreach ($Basket->getElements() as $element)
{ {
/* @var $element \Entities\BasketElement */
$i++; $i++;
if ($first) if ($first)
{ {
$sbas_id = $element->get_record()->get_sbas_id(); $sbas_id = $element->getRecord()->get_sbas_id();
$record_id = $element->get_record()->get_record_id(); $record_id = $element->getRecord()->get_record_id();
$this->name = $basket->get_name(); $this->name = $Basket->getName();
$number = $element->get_order(); $number = $element->getOrd();
} }
$first = false; $first = false;
if ($element->get_order() == $pos) if ($element->getOrd() == $pos)
{ {
$sbas_id = $element->get_record()->get_sbas_id(); $sbas_id = $element->getRecord()->get_sbas_id();
$record_id = $element->get_record()->get_record_id(); $record_id = $element->getRecord()->get_record_id();
$this->name = $basket->get_name(); $this->name = $Basket->getName();
$number = $element->get_order(); $number = $element->getOrd();
} }
} }
break; break;
case "FEED": case "FEED":
$entry = Feed_Entry_Adapter::load_from_id($appbox, $contId); $entry = Feed_Entry_Adapter::load_from_id($appbox, $contId);
// $basket = basket_adapter::getInstance($appbox, $contId, $appbox->get_session()->get_usr_id());
$this->container = $entry; $this->container = $entry;
$this->total = count($entry->get_content()); $this->total = count($entry->get_content());

View File

@@ -36,12 +36,13 @@ class set_export extends set_abstract
*/ */
public function __construct($lst, $sstid) public function __construct($lst, $sstid)
{ {
$Core = bootstrap::getCore();
$appbox = appbox::get_instance(); $appbox = appbox::get_instance();
$session = $appbox->get_session(); $session = $appbox->get_session();
$registry = $appbox->get_registry(); $registry = $appbox->get_registry();
$user = $Core->getAuthenticatedUser();
$user = User_Adapter::getInstance($session->get_usr_id(), $appbox);
$download_list = array(); $download_list = array();
@@ -49,12 +50,17 @@ class set_export extends set_abstract
if ($sstid != "") if ($sstid != "")
{ {
$basket = basket_adapter::getInstance($appbox, $sstid, $user->get_id()); $em = $Core->getEntityManager();
$repository = $em->getRepository('\Entities\Basket');
foreach ($basket->get_elements() as $basket_element) /* @var $repository \Repositories\BasketRepository */
$Basket = $repository->findUserBasket($sstid, $user);
foreach ($Basket->getElements() as $basket_element)
{ {
$base_id = $basket_element->get_record()->get_base_id(); /* @var $basket_element \Entities\BasketElement */
$record_id = $basket_element->get_record()->get_record_id(); $base_id = $basket_element->getRecord()->get_base_id();
$record_id = $basket_element->getRecord()->get_record_id();
if (!isset($remain_hd[$base_id])) if (!isset($remain_hd[$base_id]))
{ {
@@ -70,7 +76,7 @@ class set_export extends set_abstract
$current_element = $download_list[] = $current_element = $download_list[] =
new record_exportElement( new record_exportElement(
$basket_element->get_record()->get_sbas_id(), $basket_element->getRecord()->get_sbas_id(),
$record_id, $record_id,
$basket->get_name() . '/', $basket->get_name() . '/',
$remain_hd[$base_id] $remain_hd[$base_id]

View File

@@ -219,19 +219,29 @@ class set_order extends set_abstract
} }
} }
try $core = \bootstrap::getCore();
{
$basket = basket_adapter::getInstance($appbox, $this->ssel_id, $session->get_usr_id());
}
catch (Exception $e)
{
$basket = basket_adapter::create($appbox, sprintf(_('Commande du %s'), $this->created_on->format('Y-m-d')), $this->user, '', $pusher);
$this->ssel_id = $basket->get_ssel_id(); $em = $core->getEntityManager();
$repository = $em->getRepository('\Entities\Basket');
/* @var $repository \Repositories\BasketRepository */
$Basket = $repository->findUserBasket($this->ssel_id, $core->getAuthenticatedUser());
if(!$Basket)
{
$Basket = new Basket();
$Basket->setName(sprintf(_('Commande du %s'), $this->created_on->format('Y-m-d')));
$Basket->setOwner($this->user);
$Basket->setPusher($core->getAuthenticatedUser());
$em->persist($Basket);
$em->flush();
$this->ssel_id = $Basket->getId();
$sql = 'UPDATE `order` SET ssel_id = :ssel_id WHERE id = :order_id'; $sql = 'UPDATE `order` SET ssel_id = :ssel_id WHERE id = :order_id';
$stmt = $conn->prepare($sql); $stmt = $conn->prepare($sql);
$stmt->execute(array(':ssel_id' => $basket->get_ssel_id(), ':order_id' => $this->id)); $stmt->execute(array(':ssel_id' => $Basket->getId(), ':order_id' => $this->id));
$stmt->closeCursor(); $stmt->closeCursor();
} }

View File

@@ -31,21 +31,14 @@ class set_selection extends set_abstract
/** /**
* *
* @param basket_adapter $basket * @param \Entities\Basket $basket
* @param boolean $flatten_if_grouping
* @return set_selection * @return set_selection
*/ */
public function load_basket(basket_adapter $basket, $flatten_if_grouping = true) public function load_basket(\Entities\Basket $Basket)
{ {
if ($basket->is_grouping() && !$flatten_if_grouping) foreach ($Basket->getElements() as $basket_element)
{ {
$record = new record_adapter($basket->get_sbas_id(), $basket->get_record_id(), count($this->elements)); $this->add_element($basket_element->getRecord());
$this->add_element($record);
}
else
{
foreach ($basket->get_elements() as $basket_element)
$this->add_element($basket_element->get_record());
} }
return $this; return $this;