ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilPCResourcesGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once("./Services/COPage/classes/class.ilPCResources.php");
5require_once("./Services/COPage/classes/class.ilPageContentGUI.php");
6
18{
22 protected $rep_tree;
23
27 protected $obj_definition;
28
29
34 public function __construct(&$a_pg_obj, &$a_content_obj, $a_hier_id, $a_pc_id = "")
35 {
36 global $DIC;
37
38 $this->ctrl = $DIC->ctrl();
39 $this->tpl = $DIC["tpl"];
40 $this->lng = $DIC->language();
41 $this->obj_definition = $DIC["objDefinition"];
42 $tree = $DIC->repositoryTree();
43
44 $this->rep_tree = $tree;
45 parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
46 }
47
51 public function executeCommand()
52 {
53 // get next class that processes or forwards current command
54 $next_class = $this->ctrl->getNextClass($this);
55
56 // get current command
57 $cmd = $this->ctrl->getCmd();
58
59 switch ($next_class) {
60 default:
61 $ret = $this->$cmd();
62 break;
63 }
64
65 return $ret;
66 }
67
71 public function insert()
72 {
73 $this->edit(true);
74 }
75
79 public function edit($a_insert = false)
80 {
84 $objDefinition = $this->obj_definition;
85
87
88 // edit form
89 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
91 $form->setFormAction($ilCtrl->getFormAction($this));
92 if ($a_insert) {
93 $form->setTitle($this->lng->txt("cont_insert_resources"));
94 } else {
95 $form->setTitle($this->lng->txt("cont_update_resources"));
96 }
97
98 // count number of existing objects per type and collect item groups
99 $ref_id = (int) $_GET["ref_id"];
100 $childs = $this->rep_tree->getChilds($ref_id);
101 $type_counts = array();
102 $item_groups = array();
103 foreach ($childs as $c) {
104 // see bug #12471
105 //echo "<br>-".$c["type"]."-".$objDefinition->getGroupOfObj($c["type"])."-";
106 $key = ($objDefinition->getGroupOfObj($c["type"]) != "")
107 ? $objDefinition->getGroupOfObj($c["type"])
108 : $c["type"];
109 $type_counts[$key] += 1;
110 if ($c["type"] == "itgr") {
111 $item_groups[$c["ref_id"]] = $c["title"];
112 }
113 }
114
115 if (count($item_groups) > 0) {
116 // radio group for type selection
117 $radg = new ilRadioGroupInputGUI($lng->txt("cont_resources"), "res_type");
118 if (!$a_insert && $this->content_obj->getMainType() == "ItemGroup") {
119 $radg->setValue("itgr");
120 } else {
121 $radg->setValue("by_type");
122 }
123
124 $op_type = new ilRadioOption($lng->txt("cont_resources_of_type"), "by_type", "");
125 $radg->addOption($op_type);
126 $op_itemgroup = new ilRadioOption($lng->txt("obj_itgr"), "itgr", "");
127 $radg->addOption($op_itemgroup);
128 $form->addItem($radg);
129 }
130
131 // type selection
132 $type_prop = new ilSelectInputGUI(
133 $this->lng->txt("cont_type"),
134 "type"
135 );
136 $obj_id = ilObject::_lookupObjId($_GET["ref_id"]);
137 $obj_type = ilObject::_lookupType($obj_id);
138 $sub_objs = $objDefinition->getGroupedRepositoryObjectTypes($obj_type);
139 $types = array();
140 foreach ($sub_objs as $k => $so) {
141 if (!$objDefinition->isPlugin($k)) {
142 if ($k != "itgr") {
143 $types[$k] = $this->lng->txt("objs_" . $k) . " (" . (int) $type_counts[$k] . ")";
144 }
145 } else {
147 $types[$k] = $pl->txt("objs_" . $k) . " (" . (int) $type_counts[$k] . ")";
148 }
149 }
150 $type_prop->setOptions($types);
151 $selected = ($a_insert)
152 ? ""
153 : $this->content_obj->getResourceListType();
154 $type_prop->setValue($selected);
155 if (count($item_groups) > 0) {
156 $op_type->addSubItem($type_prop);
157 } else {
158 $form->addItem($type_prop);
159 }
160
161 if (count($item_groups) > 0) {
162 // item groups
163 $options = $item_groups;
164 $si = new ilSelectInputGUI($this->lng->txt("obj_itgr"), "itgr");
165 $si->setOptions($options);
166 $selected = ($a_insert)
167 ? ""
168 : $this->content_obj->getItemGroupRefId();
169 $op_itemgroup->addSubItem($si);
170 }
171
172
173 // save/cancel buttons
174 if ($a_insert) {
175 $form->addCommandButton("create_resources", $lng->txt("save"));
176 $form->addCommandButton("cancelCreate", $lng->txt("cancel"));
177 } else {
178 $form->addCommandButton("update_resources", $lng->txt("save"));
179 $form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
180 }
181 $html = $form->getHTML();
182 $tpl->setContent($html);
183 return $ret;
184 }
185
186
190 public function create()
191 {
192 $this->content_obj = new ilPCResources($this->getPage());
193 $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
194
195 if ($_POST["res_type"] != "itgr") {
196 $this->content_obj->setResourceListType(ilUtil::stripSlashes($_POST["type"]));
197 } else {
198 $this->content_obj->setItemGroupRefId(ilUtil::stripSlashes($_POST["itgr"]));
199 }
200 $this->updated = $this->pg_obj->update();
201 if ($this->updated === true) {
202 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
203 } else {
204 $this->insert();
205 }
206 }
207
211 public function update()
212 {
213 if ($_POST["res_type"] != "itgr") {
214 $this->content_obj->setResourceListType(ilUtil::stripSlashes($_POST["type"]));
215 } else {
216 $this->content_obj->setItemGroupRefId(ilUtil::stripSlashes($_POST["itgr"]));
217 }
218 $this->updated = $this->pg_obj->update();
219 if ($this->updated === true) {
220 $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
221 } else {
222 $this->pg_obj->addHierIDs();
223 $this->edit();
224 }
225 }
226
234 {
235 global $DIC;
236
237 $objDefinition = $DIC["objDefinition"];
238 $tree = $DIC->repositoryTree();
239 $lng = $DIC->language();
240
241 $ref_id = (int) $_GET["ref_id"];
242 $obj_id = (int) ilObject::_lookupObjId($ref_id);
243 $obj_type = ilObject::_lookupType($obj_id);
244
245 // determine type -> group
246 $type_to_grp = array();
247 $type_grps =
248 $objDefinition->getGroupedRepositoryObjectTypes($obj_type);
249 foreach ($type_grps as $grp => $def) {
250 foreach ($def["objs"] as $t) {
251 $type_to_grp[$t] = $grp;
252 }
253 }
254
255 $childs = $tree->getChilds($ref_id);
256 $childs_by_type = array();
257 $item_groups = array();
258 foreach ($childs as $child) {
259 $childs_by_type[$type_to_grp[$child["type"]]][] = $child;
260 if ($child["type"] == "itgr") {
261 $item_groups[(int) $child["ref_id"]] = $child["title"];
262 }
263 }
264
265 // handle "by type" lists
266 foreach ($type_grps as $type => $v) {
267 if (is_int(strpos($a_content, "[list-" . $type . "]"))) {
268 // render block
269 $tpl = new ilTemplate("tpl.resource_block.html", true, true, "Services/COPage");
270 $cnt = 0;
271
272 if (is_array($childs_by_type[$type]) && count($childs_by_type[$type]) > 0) {
273 foreach ($childs_by_type[$type] as $child) {
274 $tpl->setCurrentBlock("row");
275 $tpl->setVariable("IMG", ilUtil::img(ilObject::_getIcon($child["obj_id"], "small")));
276 $tpl->setVariable("TITLE", $child["title"]);
277 $tpl->parseCurrentBlock();
278 $cnt++;
279 }
280 $tpl->setVariable("HEADER", $lng->txt("objs_" . $type));
281 $a_content = str_replace("[list-" . $type . "]", $tpl->get(), $a_content);
282 } else {
283 $tpl->setCurrentBlock("row");
284 $tpl->setVariable("TITLE", $lng->txt("no_items"));
285 $tpl->parseCurrentBlock();
286 $tpl->setVariable("HEADER", $lng->txt("objs_" . $type));
287 $a_content = str_replace("[list-" . $type . "]", $tpl->get(), $a_content);
288 }
289 }
290 }
291
292 // handle item groups
293 while (preg_match('/\[(item-group-([0-9]*))\]/i', $a_content, $found)) {
294 $itgr_ref_id = (int) $found[2];
295
296 // check whether this item group is child -> insert editing html
297 if (isset($item_groups[$itgr_ref_id])) {
298 include_once("./Modules/ItemGroup/classes/class.ilItemGroupItems.php");
299 $itgr_items = new ilItemGroupItems($itgr_ref_id);
300 $items = $itgr_items->getValidItems();
301
302 // render block
303 $tpl = new ilTemplate("tpl.resource_block.html", true, true, "Services/COPage");
304 foreach ($items as $it_ref_id) {
305 $it_obj_id = ilObject::_lookupObjId($it_ref_id);
306 $it_title = ilObject::_lookupTitle($it_obj_id);
307 $it_type = ilObject::_lookupType($it_obj_id);
308
309 // TODO: Handle this switch by module.xml definitions
310 if (in_array($it_type, array("catr", "crsr", "grpr"))) {
311 include_once('./Services/ContainerReference/classes/class.ilContainerReference.php');
312 $it_title = ilContainerReference::_lookupTitle($it_obj_id);
313 }
314
315
316 $tpl->setCurrentBlock("row");
317 $tpl->setVariable("IMG", ilUtil::img(ilObject::_getIcon($it_obj_id, "small")));
318 $tpl->setVariable("TITLE", $it_title);
319 $tpl->parseCurrentBlock();
320 }
321 $tpl->setVariable("HEADER", $item_groups[$itgr_ref_id]);
322 $html = $tpl->get();
323 } else {
324 $html = "<i>" . $lng->txt("cont_element_refers_removed_itgr") . "</i>";
325 }
326 $a_content = preg_replace('/\[' . $found[1] . '\]/i', $html, $a_content);
327 }
328
329
330 return $a_content;
331 }
332}
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
static _lookupTitle($a_obj_id)
Overwitten from base class.
static getPluginObjectByType($type)
Return either a repoObject plugin or a orgunit extension plugin or null if the type is not a plugin.
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _lookupType($a_id, $a_reference=false)
lookup object type
Class ilPCResourcesGUI.
create()
Create new Resources Component.
__construct(&$a_pg_obj, &$a_content_obj, $a_hier_id, $a_pc_id="")
Constructor @access public.
edit($a_insert=false)
Edit resources form.
insert()
Insert new resources component form.
update()
Update Resources Component.
static insertResourcesIntoPageContent($a_content)
Insert resources (see also ilContainerContentGUI::determinePageEmbeddedBlocks for presentation)
executeCommand()
execute command
Class ilPCResources.
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
displayValidationError()
display validation errors
This class represents a property form user interface.
This class represents a property in a property form.
This class represents an option in a radio group.
This class represents a selection list property in a property form.
special template class to simplify handling of ITX/PEAR
static img($a_src, $a_alt=null, $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
$def
Definition: croninfo.php:21
$key
Definition: croninfo.php:18
$html
Definition: example_001.php:87
global $ilCtrl
Definition: ilias.php:18
$ret
Definition: parser.php:6
$type
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7
$a_content
Definition: workflow.php:93