Files
Phraseanet/lib/classes/basketCollection.class.php
2011-02-16 16:09:48 +01:00

178 lines
4.0 KiB
PHP

<?php
class basketCollection
{
private $baskets = array();
function __get($name)
{
if ($this->$name) {
return $this->$name;
}
$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
public function __isset($name)
{
if (isset($this->$name))
{
return true;
}
return false;
}
/**
* @param string $order (optionnal name_asc or date_desc - defaut to name_asc)
* @param array $except (array of element not return. avalaible values are regroup baskets and recept)
* @return basketCollectionObject
*/
function __construct($order='name asc',$except = array())
{
$session = session::getInstance();
$ses = $session->ses_id;
$usr = $session->usr_id;
if(!($ph_session = phrasea_open_session($ses,$usr)))
return;
$current_timestamp_obj = new DateTime();
$current_timestamp = $current_timestamp_obj->format('U');
$baskets = false;
if(!$baskets)
{
$conn = connection::getInstance();
$sql = 'SELECT ssel_id FROM ssel WHERE usr_id="'.$conn->escape_string($usr).'" AND temporaryType="0" and deleted="0"';
if($rs = $conn->query($sql))
{
if($conn->num_rows($rs) == 0)
{
$basket = new basket();
$basket->save();
}
$conn->free_result($rs);
}
$baskets = array();
$baskets['baskets'] = $baskets['recept'] = $baskets['regroup'] = array();
$sql = 'SELECT s.ssel_id, s.usr_id as owner, v.id as validate_id, s.temporaryType, s.pushFrom, v.expires_on FROM ssel s
LEFT JOIN validate v ON (v.ssel_id = s.ssel_id AND v.usr_id="'.$conn->escape_string($usr).'")
WHERE (s.usr_id="'.$conn->escape_string($usr).'" OR v.id IS NOT NULL) and deleted="0"';
if($rs = $conn->query($sql))
{
while($row = $conn->fetch_assoc($rs))
{
try {
$is_mine = ($row['owner'] == $session->usr_id);
$expires_on_obj = new DateTime($row['expires_on']);
$expires_on = $expires_on_obj->format('U');
if($row['validate_id'] != null && !$is_mine && $expires_on < $current_timestamp)
continue;
if($row['temporaryType'] == '1')
$baskets['regroup'][] = basket::getInstance($row['ssel_id']);
elseif(!is_null($row['validate_id']))
$baskets['baskets'][] = basket::getInstance($row['ssel_id']);
elseif((int)$row['pushFrom'] > 0)
$baskets['recept'][] = basket::getInstance($row['ssel_id']);
else
$baskets['baskets'][] = basket::getInstance($row['ssel_id']);
}
catch(Exception $e)
{
}
}
$conn->free_result($rs);
}
}
$to_remove = array_intersect(array('recept','regroup','baskets'),$except);
foreach($to_remove as $type)
$baskets[$type] = array();
if($order == 'name asc')
{
uasort($baskets['baskets'],array('basketCollection','story_name_sort'));
uasort($baskets['regroup'],array('basketCollection','story_name_sort'));
uasort($baskets['recept'],array('basketCollection','story_name_sort'));
}
if($order == 'date desc')
{
uasort($baskets['baskets'],array('basketCollection','story_date_sort'));
uasort($baskets['regroup'],array('basketCollection','story_date_sort'));
uasort($baskets['recept'],array('basketCollection','story_date_sort'));
}
$this->baskets = $baskets;
return $this;
}
function get_names()
{
$array_names = array();
foreach($this->baskets as $type_name=>$type)
{
foreach($type as $basket)
{
$array_names[] = array('ssel_id'=>$basket->ssel_id,'name'=>$basket->name,'type'=>$type_name);
}
}
return $array_names;
}
function story_date_sort($a, $b)
{
if(!$a->create || !$b->create)
return 0;
$comp = strcasecmp($a->create, $b->create);
if($comp == 0)
return 0;
return $comp < 0 ? -1 : 1;
}
function story_name_sort($a, $b)
{
if(!$a->name || !$b->name)
{
return 0;
}
$comp = strcasecmp($a->name, $b->name);
if($comp == 0)
return 0;
return $comp < 0 ? -1 : 1;
}
}