1<?php 2 3/** 4 * Class ilDclBooleanFieldModel 5 * 6 * @author Michael Herren <mh@studer-raimann.ch> 7 * @version 1.0.0 8 */ 9class ilDclIliasReferenceFieldModel extends ilDclBaseFieldModel 10{ 11 12 /** 13 * Returns a query-object for building the record-loader-sql-query 14 * 15 * @return null|ilDclRecordQueryObject 16 */ 17 public function getRecordQuerySortObject($direction = "asc", $sort_by_status = false) 18 { 19 global $DIC; 20 $ilDB = $DIC['ilDB']; 21 22 $join_str 23 = "LEFT JOIN il_dcl_record_field AS sort_record_field_{$this->getId()} ON (sort_record_field_{$this->getId()}.record_id = record.id AND sort_record_field_{$this->getId()}.field_id = " 24 . $ilDB->quote($this->getId(), 'integer') . ") "; 25 $join_str .= "LEFT JOIN il_dcl_stloc{$this->getStorageLocation()}_value AS sort_stloc_{$this->getId()} ON (sort_stloc_{$this->getId()}.record_field_id = sort_record_field_{$this->getId()}.id) "; 26 $join_str .= "LEFT JOIN object_reference AS sort_object_reference_{$this->getId()} ON (sort_object_reference_{$this->getId()}.ref_id = sort_stloc_{$this->getId()}.value AND sort_object_reference_{$this->getId()}.deleted IS NULL)"; 27 $join_str .= "LEFT JOIN object_data AS sort_object_data_{$this->getId()} ON (sort_object_data_{$this->getId()}.obj_id = sort_object_reference_{$this->getId()}.obj_id)"; 28 29 if ($sort_by_status) { 30 global $DIC; 31 $ilUser = $DIC['ilUser']; 32 $join_str .= "LEFT JOIN ut_lp_marks AS ut ON (ut.obj_id = sort_object_data_{$this->getId()}.obj_id AND ut.usr_id = " 33 . $ilDB->quote($ilUser->getId(), 'integer') . ") "; 34 } 35 36 $select_str = (!$sort_by_status) ? " sort_object_data_{$this->getId()}.title AS field_{$this->getId()}," : " ut.status AS field_{$this->getId()}"; 37 38 $sql_obj = new ilDclRecordQueryObject(); 39 $sql_obj->setSelectStatement($select_str); 40 $sql_obj->setJoinStatement($join_str); 41 $sql_obj->setOrderStatement("field_{$this->getId()} " . $direction); 42 43 return $sql_obj; 44 } 45 46 47 /** 48 * Returns a query-object for building the record-loader-sql-query 49 * 50 * @param string $filter_value 51 * 52 * @return null|ilDclRecordQueryObject 53 */ 54 public function getRecordQueryFilterObject($filter_value = "", ilDclBaseFieldModel $sort_field = null) 55 { 56 global $DIC; 57 $ilDB = $DIC['ilDB']; 58 59 $join_str 60 = "INNER JOIN il_dcl_record_field AS filter_record_field_{$this->getId()} ON (filter_record_field_{$this->getId()}.record_id = record.id AND filter_record_field_{$this->getId()}.field_id = " 61 . $ilDB->quote($this->getId(), 'integer') . ") "; 62 $join_str .= "INNER JOIN il_dcl_stloc{$this->getStorageLocation()}_value AS filter_stloc_{$this->getId()} ON (filter_stloc_{$this->getId()}.record_field_id = filter_record_field_{$this->getId()}.id) "; 63 $join_str .= "INNER JOIN object_reference AS filter_object_reference_{$this->getId()} ON (filter_object_reference_{$this->getId()}.ref_id = filter_stloc_{$this->getId()}.value ) "; 64 $join_str .= "INNER JOIN object_data AS filter_object_data_{$this->getId()} ON (filter_object_data_{$this->getId()}.obj_id = filter_object_reference_{$this->getId()}.obj_id AND filter_object_data_{$this->getId()}.title LIKE " 65 . $ilDB->quote("%$filter_value%", 'text') . ") "; 66 67 $sql_obj = new ilDclRecordQueryObject(); 68 $sql_obj->setJoinStatement($join_str); 69 70 return $sql_obj; 71 } 72 73 74 /** 75 * @inheritDoc 76 */ 77 public function getValidFieldProperties() 78 { 79 return array(ilDclBaseFieldModel::PROP_LEARNING_PROGRESS, ilDclBaseFieldModel::PROP_ILIAS_REFERENCE_LINK, ilDclBaseFieldModel::PROP_DISPLAY_COPY_LINK_ACTION_MENU); 80 } 81} 82