1<?php
2
3/* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5/**
6 * Portfolio
7 *
8 * @author Jörg Lützenkirchen <luetzenkirchen@leifos.com>
9 */
10class ilObjPortfolioTemplate extends ilObjPortfolioBase
11{
12    protected $activation_limited; // [bool]
13    protected $activation_visibility; // [bool]
14    protected $activation_starting_time; // [integer]
15    protected $activation_ending_time; // [integer]
16
17    public function initType()
18    {
19        $this->type = "prtt";
20    }
21
22    protected function doRead()
23    {
24        parent::doRead();
25
26        if ($this->ref_id) {
27            $activation = ilObjectActivation::getItem($this->ref_id);
28            switch ($activation["timing_type"]) {
29                case ilObjectActivation::TIMINGS_ACTIVATION:
30                    $this->setActivationLimited(true);
31                    $this->setActivationStartDate($activation["timing_start"]);
32                    $this->setActivationEndDate($activation["timing_end"]);
33                    $this->setActivationVisibility($activation["visible"]);
34                    break;
35
36                default:
37                    $this->setActivationLimited(false);
38                    break;
39            }
40        }
41    }
42
43    protected function doCreate()
44    {
45        parent::doCreate();
46        $this->updateActivation();
47    }
48
49    protected function doUpdate()
50    {
51        parent::doUpdate();
52        $this->updateActivation();
53    }
54
55    protected function deleteAllPages()
56    {
57        // delete pages
58        $pages = ilPortfolioTemplatePage::getAllPortfolioPages($this->id);
59        foreach ($pages as $page) {
60            $page_obj = new ilPortfolioTemplatePage($page["id"]);
61            $page_obj->setPortfolioId($this->id);
62            $page_obj->delete();
63        }
64    }
65
66    protected function doCloneObject($new_obj, $a_target_id, $a_copy_id = null)
67    {
68        //copy online status if object is not the root copy object
69        $cp_options = ilCopyWizardOptions::_getInstance($a_copy_id);
70
71        if (!$cp_options->isRootNode($this->getRefId())) {
72            $new_obj->setOnline($this->isOnline());
73        }
74
75        self::cloneBasics($this, $new_obj);
76
77        // copy pages
78        foreach (ilPortfolioPage::getAllPortfolioPages($this->getId()) as $page) {
79            // see ilObjWiki::cloneObject();
80
81            $page = new ilPortfolioTemplatePage($page["id"]);
82
83            $new_page = new ilPortfolioTemplatePage();
84            $new_page->setPortfolioId($new_obj->getId());
85            $new_page->setTitle($page->getTitle());
86            $new_page->setType($page->getType());
87            $new_page->setOrderNr($page->getOrderNr());
88            $new_page->create();
89
90            $page->copy($new_page->getId(), "", 0, true);
91        }
92    }
93
94
95    //
96    // ACTIVATION
97    //
98
99    protected function updateActivation()
100    {
101        // moved activation to ilObjectActivation
102        if ($this->ref_id) {
103            ilObjectActivation::getItem($this->ref_id);
104
105            $item = new ilObjectActivation;
106            if (!$this->isActivationLimited()) {
107                $item->setTimingType(ilObjectActivation::TIMINGS_DEACTIVATED);
108            } else {
109                $item->setTimingType(ilObjectActivation::TIMINGS_ACTIVATION);
110                $item->setTimingStart($this->getActivationStartDate());
111                $item->setTimingEnd($this->getActivationEndDate());
112                $item->toggleVisible($this->getActivationVisibility());
113            }
114
115            $item->update($this->ref_id);
116        }
117    }
118
119    public function isActivationLimited()
120    {
121        return (bool) $this->activation_limited;
122    }
123
124    public function setActivationLimited($a_value)
125    {
126        $this->activation_limited = (bool) $a_value;
127    }
128
129    public function setActivationVisibility($a_value)
130    {
131        $this->activation_visibility = (bool) $a_value;
132    }
133
134    public function getActivationVisibility()
135    {
136        return $this->activation_visibility;
137    }
138
139    public function setActivationStartDate($starting_time = null)
140    {
141        $this->activation_starting_time = $starting_time;
142    }
143
144    public function setActivationEndDate($ending_time = null)
145    {
146        $this->activation_ending_time = $ending_time;
147    }
148
149    public function getActivationStartDate()
150    {
151        return (strlen($this->activation_starting_time)) ? $this->activation_starting_time : null;
152    }
153
154    public function getActivationEndDate()
155    {
156        return (strlen($this->activation_ending_time)) ? $this->activation_ending_time : null;
157    }
158
159
160    //
161    // HELPER
162    //
163
164    public static function getAvailablePortfolioTemplates($a_permission = "read")
165    {
166        global $DIC;
167
168        $ilUser = $DIC->user();
169        $ilAccess = $DIC->access();
170
171        $res = array();
172
173        foreach (ilObject::_getObjectsByType("prtt") as $obj) {
174            $has_permission = false;
175
176            if ($obj["owner"] == $ilUser->getId()) {
177                $has_permission = true;
178            } else {
179                foreach (ilObject::_getAllReferences($obj["obj_id"]) as $ref_id) {
180                    if ($ilAccess->checkAccess($a_permission, "", $ref_id)) {
181                        $has_permission = true;
182                        break;
183                    }
184                }
185            }
186
187            if ($has_permission) {
188                $res[$obj["obj_id"]] = $obj["title"];
189            }
190        }
191
192        asort($res);
193        return $res;
194    }
195}
196