ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilLMMenuEditor.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2009 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
33{
34 protected $active = "n";
35
39 protected $db;
40
41 public function __construct()
42 {
43 global $DIC;
44
45 $ilDB = $DIC->database();
46
47 $this->db = $ilDB;
48 $this->link_type = "extern";
49 $this->link_ref_id = null;
50 }
51
52 public function setObjId($a_obj_id)
53 {
54 $this->lm_id = $a_obj_id;
55 }
56
57 public function getObjId()
58 {
59 return $this->lm_id;
60 }
61
62 public function setEntryId($a_id)
63 {
64 $this->entry_id = $a_id;
65 }
66
67 public function getEntryId()
68 {
69 return $this->entry_id;
70 }
71
72 public function setLinkType($a_link_type)
73 {
74 $this->link_type = $a_link_type;
75 }
76
77 public function getLinkType()
78 {
79 return $this->link_type;
80 }
81
82 public function setTitle($a_title)
83 {
84 $this->title = $a_title;
85 }
86
87 public function getTitle()
88 {
89 return $this->title;
90 }
91
92 public function setTarget($a_target)
93 {
94 $this->target = $a_target;
95 }
96
97 public function getTarget()
98 {
99 return $this->target;
100 }
101
102 public function setLinkRefId($a_link_ref_id)
103 {
104 $this->link_ref_id = $a_link_ref_id;
105 }
106
107 public function getLinkRefId()
108 {
109 return $this->link_ref_id;
110 }
111
117 public function setActive($a_val)
118 {
119 $this->active = $a_val;
120 }
121
127 public function getActive()
128 {
129 return $this->active;
130 }
131
132
133 public function create()
134 {
136
137 $id = $ilDB->nextId("lm_menu");
138 $q = "INSERT INTO lm_menu (id, lm_id,link_type,title,target,link_ref_id, active) " .
139 "VALUES " .
140 "(" .
141 $ilDB->quote($id, "integer") . "," .
142 $ilDB->quote((int) $this->getObjId(), "integer") . "," .
143 $ilDB->quote($this->getLinkType(), "text") . "," .
144 $ilDB->quote($this->getTitle(), "text") . "," .
145 $ilDB->quote($this->getTarget(), "text") . "," .
146 $ilDB->quote((int) $this->getLinkRefId(), "integer") . "," .
147 $ilDB->quote($this->getActive(), "text") .
148 ")";
149 $r = $ilDB->manipulate($q);
150
151 $this->entry_id = $id;
152
153 return true;
154 }
155
156 public function getMenuEntries($a_only_active = false)
157 {
159
160 $entries = array();
161
162 if ($a_only_active === true) {
163 $and = " AND active = " . $ilDB->quote("y", "text");
164 }
165
166 $q = "SELECT * FROM lm_menu " .
167 "WHERE lm_id = " . $ilDB->quote($this->lm_id, "integer") .
168 $and;
169
170 $r = $ilDB->query($q);
171
172 while ($row = $ilDB->fetchObject($r)) {
173 $entries[] = array('id' => $row->id,
174 'title' => $row->title,
175 'link' => $row->target,
176 'type' => $row->link_type,
177 'ref_id' => $row->link_ref_id,
178 'active' => $row->active
179 );
180 }
181
182 return $entries;
183 }
184
189 public function delete($a_id)
190 {
192
193 if (!$a_id) {
194 return false;
195 }
196
197 $q = "DELETE FROM lm_menu WHERE id = " .
198 $ilDB->quote($a_id, "integer");
199 $ilDB->manipulate($q);
200
201 return true;
202 }
203
208 public function update()
209 {
211
212 $q = "UPDATE lm_menu SET " .
213 " link_type = " . $ilDB->quote($this->getLinkType(), "text") . "," .
214 " title = " . $ilDB->quote($this->getTitle(), "text") . "," .
215 " target = " . $ilDB->quote($this->getTarget(), "text") . "," .
216 " link_ref_id = " . $ilDB->quote((int) $this->getLinkRefId(), "integer") .
217 " WHERE id = " . $ilDB->quote($this->getEntryId(), "integer");
218 $r = $ilDB->manipulate($q);
219
220 return true;
221 }
222
223 public function readEntry($a_id)
224 {
226
227 if (!$a_id) {
228 return false;
229 }
230
231 $q = "SELECT * FROM lm_menu WHERE id = " .
232 $ilDB->quote($a_id, "integer");
233 $r = $ilDB->query($q);
234
235 $row = $ilDB->fetchObject($r);
236
237 $this->setTitle($row->title);
238 $this->setTarget($row->target);
239 $this->setLinkType($row->link_type);
240 $this->setLinkRefId($row->link_ref_id);
241 $this->setEntryid($a_id);
242 $this->setActive($row->active);
243 }
244
250 public function updateActiveStatus($a_entries)
251 {
253
254 // update active status
255 $q = "UPDATE lm_menu SET " .
256 "active = CASE " .
257 "WHEN " . $ilDB->in("id", $a_entries, false, "integer") . " " .
258 "THEN " . $ilDB->quote("y", "text") . " " .
259 "ELSE " . $ilDB->quote("n", "text") . " " .
260 "END " .
261 "WHERE lm_id = " . $ilDB->quote($this->lm_id, "integer");
262
263 $ilDB->manipulate($q);
264 }
265
272 public static function fixImportMenuItems(int $new_lm_id, array $ref_mapping)
273 {
274 global $DIC;
275
276 $db = $DIC->database();
277
278 $set = $db->queryF(
279 "SELECT * FROM lm_menu " .
280 " WHERE lm_id = %s ",
281 array("integer"),
282 array($new_lm_id)
283 );
284 while ($rec = $db->fetchAssoc($set)) {
285 // ... only check internal links
286 if ($rec["link_type"] == "intern") {
287 $link = explode("_", $rec["link_ref_id"]);
288 $ref_id = (int) $link[count($link) - 1];
289 $new_ref_id = $ref_mapping[$ref_id];
290 // if ref id has been imported, update it
291 if ($new_ref_id > 0) {
292 $new_target = str_replace((string) $ref_id, (string) $new_ref_id, $rec["target"]);
293 $db->update("lm_menu", array(
294 "link_ref_id" => array("integer", $new_ref_id),
295 "target" => array("text", $new_target)
296 ), array( // where
297 "id" => array("integer", $rec["id"])
298 ));
299 } else { // if not, delete the menu item
300 $db->manipulateF(
301 "DELETE FROM lm_menu WHERE " .
302 " id = %s",
303 array("integer"),
304 array($rec["id"])
305 );
306 }
307 }
308 }
309 }
310
317 public static function writeActive($entry_id, $active)
318 {
319 global $DIC;
320
321 $db = $DIC->database();
322
323 $db->update("lm_menu", array(
324 "active" => array("text", ($active ? "y" : "n"))
325 ), array( // where
326 "id" => array("", $entry_id)
327 ));
328 }
329}
An exception for terminatinating execution or to throw for unit testing.
class for editing lm menu
updateActiveStatus($a_entries)
update active status of all menu entries of lm
setLinkType($a_link_type)
getMenuEntries($a_only_active=false)
static fixImportMenuItems(int $new_lm_id, array $ref_mapping)
Fix ref ids on import.
setActive($a_val)
Set active.
static writeActive($entry_id, $active)
Write status for entry id.
update()
update menu entry
setLinkRefId($a_link_ref_id)
global $DIC
Definition: goto.php:24
global $ilDB