<?php
namespace TheatreCore\Repository;
use TheatreCore\Entity\ObjectMultimedia;
use TheatreCore\Traits\TheatreTrait;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* ObjectMultimediaRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class ObjectMultimediaRepository extends ServiceEntityRepository
{
use TheatreTrait;
private $em;
public $__table;
public $__table_object;
public $__idtable;
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, ObjectMultimedia::class);
$this->__table = $this->getClassMetadata()->getTableName();
$this->__table_object = $this->getClassMetadata()->name;
$this->__idtable = 'idobject';
}
// {{{ getObjectsMultimedia()
/** Récupérer les titres des objets liés à un document multimédia
*
* @access public
* @return array
*/
public function getObjectsMultimedia($idmultimedia, $object, $fields = null, $idrole = null, $all = false)
{
$infos = array();
if ($fields) {
// si liaisons multiples
if (!empty($fields['fields'])) {
// cle étrangère avec idmultimedia
$fk = $fields['fields'][0];
// champs de la table liée directement avec multimedia
$select_fields = '';
$fields_count = count($fields['fields']);
for ($i = 0; $i < $fields_count; $i++) {
$select_fields .= ', ' . $object . '.' . $fields[$i];
}
// champs liées à cette table
}
// cle étrangère
$fk = $fields[0];
$select_fields = '';
$fields_count = count($fields);
for ($i = 0; $i < $fields_count; $i++) {
$select_fields .= ', ' . $object . '.' . $fields[$i];
}
$sql = 'SELECT ' . $this->__table . '.object, ' . $this->__table . '.idobject' . $select_fields . '
FROM ' . $this->__table . ', ' . $object . '
WHERE ' . $this->__table . '.' . $this->__idtable . '=' . $object . '.' . $fk . '
AND ' . $this->__table . '.idmultimedia=' . ((int)$idmultimedia) . '
AND ' . $this->__table . '.object=\'' . $object . '\'';
} else {
$sql = 'SELECT ' . $this->__table . '.object, ' . $this->__table . '.idobject
FROM ' . $this->__table . '
WHERE 1
AND idmultimedia=' . ((int)$idmultimedia);
}
if ($idrole) {
if ($idrole == 'NULL') {
$sql .= ' AND ' . $this->__table . '.idrole IS NULL';
} else {
$sql .= ' AND ' . $this->__table . '.idrole=' . ((int)$idrole);
}
}
$sql .= ' ORDER BY ' . $this->__table . '.ordermultimedia ';
$res = $this->query($sql);
while ($row = $this->fetchRow()) { //$res->fetchRow()
// objet lie
$con = $this->getEntityManager();
$obj = $con->getRepository('TheatreCore\Entity\\' . ucfirst($row['object']));
// parametres de getObjectTitle
if ($fields) {
for ($i = 0; $i < $fields_count; $i++) {
$infos_object[$fields[$i]] = $row[$fields[$i]];
}
} else {
$infos_object = null;
}
// retourne tous les champs
if ($all) {
if ($fields) {
for ($i = 0; $i < $fields_count; $i++) {
$infos[$row['idobject']][$fields[$i]] = $row[$fields[$i]];
}
}
if ($object == 'spectacles') {
$infos[$row['idobject']]['title'] = $obj->getObjectTitle($row['idobject']);
}
} // uniquement le titre
else {
$infos[$row['idobject']] = array(
'title' => $obj->getObjectTitle($row['idobject'], $infos_object), //.' - '.$spectacle->getDirectorsString($r['idspectacle'])
);
}
}
$this->free(); //$res->free()
// retourner les infos
return $infos;
}
// }}}
}