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

204 lines
5.1 KiB
PHP

<?php
class lazaret
{
protected $storage = array();
function __construct()
{
$conn = connection::getInstance();
$session = session::getInstance();
$user = user::getInstance($session->usr_id);
$base_ids = array();
foreach($user->_rights_bas as $base_id=>$rights)
{
if($rights['canaddrecord'] === true)
$base_ids[] = $base_id;
}
$sql = "SELECT id, filepath, filename, base_id, uuid, errors, created_on, usr_id
FROM lazaret WHERE base_id IN (".implode(', ', $base_ids).")
ORDER BY uuid, id DESC";
$lazaret_group = array();
if($rs = $conn->query($sql))
{
while($row = $conn->fetch_assoc($rs))
{
$sbas_id = phrasea::sbasFromBas($row['base_id']);
$row['uuid'] = trim($row['uuid']) !== '' ? $row['uuid'] : mt_rand(1000000,9999999);
$key = $row['uuid'].'__'.$sbas_id;
$pathfile = GV_RootPath.'tmp/lazaret/'.$row['filepath'];
if(!file_exists($pathfile))
{
$sql = 'DELETE FROM lazaret WHERE id="'.$row['id'].'"';
$conn->query($sql);
if(file_exists($pathfile.'_thumbnail.jpg'))
unlink($pathfile.'_thumbnail.jpg');
continue;
}
if(!isset($lazaret_group[$key]))
$lazaret_group[$key] = array('candidates'=>array(),'potentials'=>array());
$pathfile_thumbnail = $pathfile.'_thumbnail.jpg';
if(is_file($pathfile_thumbnail) && $gis = @getimagesize($pathfile_thumbnail))
$is = $gis;
else
$is = array(80,80);
$thumbnail = array(
'w' => $is[0],
'h' => $is[1],
'thumbnail' => '/upload/lazaret_image.php?id='.$row['id']
);
$row['created_on'] = new DateTime($row['created_on']);
if($row['usr_id'])
$row['usr_id'] = user::getInstance($row['usr_id']);
else
$row['usr_id'] = array('display_name'=>_('tache d\'archivage'));
$lazaret_group[$key]['candidates'][$row['id']] = array_merge(
array(
'thumbnail' =>$thumbnail,
'title' => $row['filename'],
'caption' => '',
'potential_relationship'=>array()
),
$row
);
}
$conn->free_result($rs);
}
foreach($lazaret_group as $key_group=>$lazaret)
{
$infos = explode('__', $key_group);
$uuid = $infos[0];
$sbas_id = $infos[1];
$connbas = connection::getInstance($sbas_id);
if(!$connbas)
{
continue;
}
$sql = "SELECT record_id, coll_id FROM record WHERE uuid='".$connbas->escape_string($uuid)."'";
if($rs = $connbas->query($sql))
{
while($row = $connbas->fetch_assoc($rs))
{
$record_id = $row['record_id'];
$base_id = phrasea::baseFromColl($sbas_id, $row['coll_id']);
$xml = phrasea_xmlcaption($session->ses_id, $base_id, $row['record_id']);
$thumbnail = answer::getThumbnail($session->ses_id, $base_id, $row['record_id'],GV_zommPrev_rollover_clientAnswer);
$lazaret_group[$key_group]['potentials'][$record_id] = array(
'record_id' => $row['record_id'],
'base_id' => $base_id,
'thumbnail' => $thumbnail,
'title' => answer::format_title($sbas_id, $row['record_id'], $xml),
'caption' => answer::format_caption($base_id, $row['record_id'], $xml, false),
'preview' => answer::get_preview_rollover($base_id, $row['record_id'],$session->ses_id, true, $session->usr_id,$thumbnail['preview'],$thumbnail['type'])
);
}
$connbas->free_result($rs);
}
foreach($lazaret['candidates'] as $lazaret_id=>$lazaret_item)
{
foreach($lazaret_group[$key_group]['potentials'] as $record_id => $properties)
{
$can_substitute = false;
$potential_base_id = $properties['base_id'];
if(isset($user->_rights_bas[$potential_base_id]))
{
if($user->_rights_bas[$potential_base_id]['canaddrecord'] && $user->_rights_bas[$potential_base_id]['candeleterecord'])
$can_substitute = false;
}
$lazaret_group[$key_group]['candidates'][$lazaret_id]['potential_relationship'][$record_id] = array(
'can_substitute' => $can_substitute,
'same_coll' => ($potential_base_id == $lazaret_item['base_id']),
'title' => $properties['title']
);
}
}
}
$this->elements = $lazaret_group;
return $this;
}
public function get_count()
{
$conn = connection::getInstance();
$session = session::getInstance();
$user = user::getInstance($session->usr_id);
$base_ids = array();
foreach($user->_rights_bas as $base_id=>$rights)
{
if($rights['canaddrecord'] === true)
$base_ids[] = $base_id;
}
$sql = "SELECT id, filepath, filename, base_id, uuid, created_on, usr_id
FROM lazaret WHERE base_id IN (".implode(', ', $base_ids).")
ORDER BY uuid, id DESC";
$n = false;
if($rs = $conn->query($sql))
{
if($count = $conn->num_rows($rs))
$n = $count;
$conn->free_result($rs);
}
return $n;
}
public function __get($key)
{
if(isset($this->storage[$key]))
{
return $this->storage[$key];
}
return null;
}
public function __set($key, $value)
{
$this->storage[$key] = $value;
return $this;
}
public function __isset($key)
{
if(isset($this->storage[$key]))
return true;
return false;
}
}