You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
<?php
|
|
|
|
use Doctrine\ORM\QueryBuilder;
|
|
|
|
/**
|
|
* Description of repository
|
|
*
|
|
* @license see /license.txt
|
|
* @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
|
|
*/
|
|
class EntityRepository extends Doctrine\ORM\EntityRepository
|
|
{
|
|
|
|
function next_id($entity = null)
|
|
{
|
|
$column = $this->get_id_field();
|
|
if (empty($column)) {
|
|
return false;
|
|
}
|
|
|
|
$metadata = $this->getClassMetadata();
|
|
$entity_name = $metadata->name;
|
|
|
|
if ($this->is_course_table()) {
|
|
$course = $entity ? $entity->get_c_id() : Entity::current_course();
|
|
$course = $course ? $course : Entity::current_course();
|
|
$c_id = is_object($course) ? $course->get_id() : $course;
|
|
if (empty($c_id)) {
|
|
return null;
|
|
}
|
|
|
|
$query = new QueryBuilder($this->getEntityManager());
|
|
$query = $query->select("MAX(t.id) AS m")->from($entity_name, 't')->where('t.c_id = ' . $c_id);
|
|
} else {
|
|
$query = new QueryBuilder($this->getEntityManager());
|
|
$query = $query->select("MAX(t.$column) AS m")->from($entity_name, 't');
|
|
}
|
|
$result = $this->getEntityManager()->createQuery($query);
|
|
$result = $result->getSingleScalarResult();
|
|
$result += 10; //in case somebody does an insert in between
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return string|bool
|
|
*/
|
|
function get_id_field()
|
|
{
|
|
$metadata = $this->getClassMetadata();
|
|
if (count($metadata->identifier) == 1) {
|
|
$field = $metadata->identifier[0];
|
|
return $field;
|
|
}
|
|
if (count($metadata->identifier) > 2) {
|
|
return false;
|
|
}
|
|
|
|
if (isset($metadata->identifier['id'])) {
|
|
return 'id';
|
|
}
|
|
|
|
if (!$this->is_course_table()) {
|
|
return false;
|
|
}
|
|
|
|
|
|
foreach ($metadata->identifier as $field) {
|
|
if ($field != 'c_id' && $field != 'course') {
|
|
return $field;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function is_course_table()
|
|
{
|
|
$metadata = $this->getClassMetadata();
|
|
$table = $metadata->table['name'];
|
|
return strpos($table, 'c_') === 0;
|
|
}
|
|
|
|
} |