View source
<?php
class CaseTrackerCaseController extends EntityAPIController {
public function __construct() {
parent::__construct('casetracker_case');
}
public function create(array $values = array()) {
$values += array(
'pid' => '',
'is_new' => TRUE,
'title' => '',
'language' => '',
'uid' => '',
'created' => '',
'changed' => '',
);
$case = parent::create($values);
return $case;
}
public function view($entities, $view_mode = 'full', $langcode = NULL, $page = NULL) {
$entities = entity_key_array_by_property($entities, $this->idKey);
if (!empty($this->entityInfo['fieldable'])) {
field_attach_prepare_view($this->entityType, $entities, $view_mode);
}
entity_prepare_view($this->entityType, $entities);
$langcode = isset($langcode) ? $langcode : $GLOBALS['language_content']->language;
$view = array();
foreach ($entities as $entity) {
$build = $this
->themeEntity($entity);
$build[] = entity_build_content($this->entityType, $entity, $view_mode, $langcode);
drupal_alter(array(
$this->entityType . '_view',
'entity_view',
), $build, $this->entityType);
$key = isset($entity->{$this->idKey}) ? $entity->{$this->idKey} : NULL;
$view[$this->entityType][$key] = $build;
}
return $view;
}
protected function themeEntity($entity) {
$build = array();
$build['view_mode_full'] = array(
'#theme' => 'casetracker_case_full_view_mode',
'#CaseTrackerCase' => $entity,
);
return $build;
}
public function getTotalAmountByPriority($project_id = NULL) {
$query = "SELECT p.field_casetracker_case_priority_value priority, count(c.cid) total\n FROM {casetracker_case} c\n JOIN {field_data_field_casetracker_case_priority} p ON p.entity_type = 'casetracker_case' AND p.entity_id = c.cid\n ";
if ($project_id != NULL) {
$query .= " JOIN {field_data_field_casetracker_project_ref} proj ON proj.entity_type = 'casetracker_case' AND proj.entity_id = c.cid AND proj.field_casetracker_project_ref_target_id = :pid";
}
$query .= " GROUP BY priority";
if ($project_id != NULL) {
$results = db_query($query, array(
':pid' => $project_id,
))
->fetchAll();
}
else {
$results = db_query($query)
->fetchAll();
}
return $results;
}
public function getTotalAmountByBundle($project_id = NULL) {
$query = "SELECT t.label bundle, count(c.cid) total\n FROM {casetracker_case} c\n INNER JOIN {casetracker_case_type} t ON t.type = c.type";
if ($project_id != NULL) {
$query .= " JOIN {field_data_field_casetracker_project_ref} proj ON proj.entity_type = 'casetracker_case' AND proj.entity_id = c.cid AND proj.field_casetracker_project_ref_target_id = :pid";
}
$query .= " GROUP BY c.type";
if ($project_id != NULL) {
$results = db_query($query, array(
':pid' => $project_id,
))
->fetchAll();
}
else {
$results = db_query($query)
->fetchAll();
}
return $results;
}
}