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