ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilWorkspaceExplorer.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/Repository/classes/class.ilRepositoryExplorer.php';
5
6/*
7 * Explorer for workspace tree (used in move action per item)
8 *
9 * @author Jörg Lützenkirchen <luetzenkirchen@leifos.com>
10 *
11 */
13{
14 const SEL_TYPE_CHECK = 1;
15 const SEL_TYPE_RADIO = 2;
16
17 public $root_id = 0;
18 public $output = '';
19 public $ctrl = null;
20 public $access = null;
21
22 private $checked_items = array();
23 private $post_var = '';
24 private $form_items = array();
25 private $type = 0;
26
27 protected $clickable = array();
29
38 public function __construct($a_type, $a_target, $a_session_variable, ilWorkspaceTree $a_tree, ilWorkspaceAccessHandler $a_access_handler)
39 {
40 global $ilCtrl;
41
42 $this->ctrl = $ilCtrl;
43 $this->type = $a_type;
44 $this->access = $a_access_handler;
45
46 parent::__construct($a_target);
47
48 // #11173
49 if(!$a_tree->readRootId())
50 {
51 // create (workspace) root folder
52 $root = ilObjectFactory::getClassByType("wsrt");
53 $root = new $root(null);
54 $root->create();
55
56 $root_id = $a_tree->createReference($root->getId());
57 $a_tree->addTree($a_tree->getTreeId(), $root_id);
58 $a_tree->setRootId($root_id);
59 }
60 $this->tree = $a_tree;
61 $this->root_id = $this->tree->readRootId();
62 $this->order_column = 'title';
63 $this->setSessionExpandVariable($a_session_variable);
64
65 // reset filter
66 $this->filter = array();
67
68 $this->addFilter('wsrt');
69 $this->addFilter('wfld');
70
71 $this->addFormItemForType('wsrt');
72 $this->addFormItemForType('wfld');
73
74 $this->setFiltered(true);
76 }
77
78 public function showChilds($a_ref_id, $a_obj_id = 0)
79 {
80 if ($a_ref_id == 0 ||
81 $this->access->checkAccess('read', '', $a_ref_id))
82 {
83 return true;
84 }
85 return false;
86 }
87
88 public function isVisible($a_ref_id,$a_type)
89 {
90 return true;
91 }
92
93 public function sortNodes($a_nodes,$a_parent_obj_id)
94 {
95 return $a_nodes;
96 }
97
98 public function isClickable($a_type, $a_ref_id, $a_obj_id = 0)
99 {
100 if(is_array($this->clickable) && in_array($a_type, $this->clickable) &&
101 $a_ref_id)
102 {
103 return true;
104 }
105 return false;
106 }
107
108 public function addFormItemForType($type)
109 {
110 $this->form_items[$type] = true;
111 }
113 {
114 $this->form_items[$type] = false;
115 }
116 public function removeAllFormItemTypes()
117 {
118 $this->form_items = array();
119 }
120 public function setCheckedItems($a_checked_items = array())
121 {
122 $this->checked_items = $a_checked_items;
123 }
124 public function isItemChecked($a_id)
125 {
126 return in_array($a_id, $this->checked_items) ? true : false;
127 }
128 public function setPostVar($a_post_var)
129 {
130 $this->post_var = $a_post_var;
131 }
132 public function getPostVar()
133 {
134 return $this->post_var;
135 }
136
137 public function buildFormItem($a_node_id, $a_type)
138 {
139 if(!array_key_exists($a_type, $this->form_items) || !$this->form_items[$a_type])
140 {
141 return;
142 }
143
144 switch($this->type)
145 {
147 return ilUtil::formCheckbox((int)$this->isItemChecked($a_node_id), $this->post_var, $a_node_id);
148
150 return ilUtil::formRadioButton((int)$this->isItemChecked($a_node_id), $this->post_var, $a_node_id);
151 }
152 }
153
154 function formatObject(&$tpl, $a_node_id, $a_option, $a_obj_id = 0)
155 {
156 global $lng;
157
158 if (!isset($a_node_id) or !is_array($a_option))
159 {
160 $this->ilias->raiseError(get_class($this)."::formatObject(): Missing parameter or wrong datatype! ".
161 "node_id: ".$a_node_id." options:".var_dump($a_option),$this->ilias->error_obj->WARNING);
162 }
163
164 $pic = false;
165 foreach ($a_option["tab"] as $picture)
166 {
167 if ($picture == 'plus')
168 {
169 $tpl->setCurrentBlock("expander");
170 $tpl->setVariable("EXP_DESC", $lng->txt("expand"));
171 $target = $this->createTarget('+',$a_node_id);
172 $tpl->setVariable("LINK_NAME", $a_node_id);
173 $tpl->setVariable("LINK_TARGET_EXPANDER", $target);
174 $tpl->setVariable("IMGPATH", $this->getImage("browser/plus.png"));
175 $tpl->parseCurrentBlock();
176 $pic = true;
177 }
178
179 if ($picture == 'minus' && $this->show_minus)
180 {
181 $tpl->setCurrentBlock("expander");
182 $tpl->setVariable("EXP_DESC", $lng->txt("collapse"));
183 $target = $this->createTarget('-',$a_node_id);
184 $tpl->setVariable("LINK_NAME", $a_node_id);
185 $tpl->setVariable("LINK_TARGET_EXPANDER", $target);
186 $tpl->setVariable("IMGPATH", $this->getImage("browser/minus.png"));
187 $tpl->parseCurrentBlock();
188 $pic = true;
189 }
190 }
191
192 if (!$pic)
193 {
194 $tpl->setCurrentBlock("blank");
195 $tpl->setVariable("BLANK_PATH", $this->getImage("browser/blank.png"));
196 $tpl->parseCurrentBlock();
197 }
198
199 if ($this->output_icons)
200 {
201 $tpl->setCurrentBlock("icon");
202 $tpl->setVariable("ICON_IMAGE" , $this->getImage("icon_".$a_option["type"].".svg", $a_option["type"], $a_obj_id));
203
204 $tpl->setVariable("TARGET_ID" , "iconid_".$a_node_id);
205 $this->iconList[] = "iconid_".$a_node_id;
206 $tpl->setVariable("TXT_ALT_IMG", $lng->txt($a_option["desc"]));
207 $tpl->parseCurrentBlock();
208 }
209
210 if(strlen($formItem = $this->buildFormItem($a_node_id, $a_option['type'])))
211 {
212 $tpl->setCurrentBlock('check');
213 $tpl->setVariable('OBJ_CHECK', $formItem);
214 $tpl->parseCurrentBlock();
215 }
216
217 if ($this->isClickable($a_option["type"], $a_node_id,$a_obj_id)) // output link
218 {
219 $tpl->setCurrentBlock("link");
220 //$target = (strpos($this->target, "?") === false) ?
221 // $this->target."?" : $this->target."&";
222 //$tpl->setVariable("LINK_TARGET", $target.$this->target_get."=".$a_node_id.$this->params_get);
223 $tpl->setVariable("LINK_TARGET", $this->buildLinkTarget($a_node_id, $a_option["type"]));
224
225 $style_class = $this->getNodeStyleClass($a_node_id, $a_option["type"]);
226
227 if ($style_class != "")
228 {
229 $tpl->setVariable("A_CLASS", ' class="'.$style_class.'" ' );
230 }
231
232 if (($onclick = $this->buildOnClick($a_node_id, $a_option["type"], $a_option["title"])) != "")
233 {
234 $tpl->setVariable("ONCLICK", "onClick=\"$onclick\"");
235 }
236
237 $tpl->setVariable("LINK_NAME", $a_node_id);
238 $tpl->setVariable("TITLE", ilUtil::shortenText(
239 $this->buildTitle($a_option["title"], $a_node_id, $a_option["type"]),
240 $this->textwidth, true));
241 $tpl->setVariable("DESC", ilUtil::shortenText(
242 $this->buildDescription($a_option["description"], $a_node_id, $a_option["type"]), $this->textwidth, true));
243 $frame_target = $this->buildFrameTarget($a_option["type"], $a_node_id, $a_option["obj_id"]);
244 if ($frame_target != "")
245 {
246 $tpl->setVariable("TARGET", " target=\"".$frame_target."\"");
247 }
248 $tpl->parseCurrentBlock();
249 }
250 else // output text only
251 {
252 $tpl->setCurrentBlock("text");
253 $tpl->setVariable("OBJ_TITLE", ilUtil::shortenText(
254 $this->buildTitle($a_option["title"], $a_node_id, $a_option["type"]), $this->textwidth, true));
255 $tpl->setVariable("OBJ_DESC", ilUtil::shortenText(
256 $this->buildDescription($a_option["desc"], $a_node_id, $a_option["type"]), $this->textwidth, true));
257 $tpl->parseCurrentBlock();
258 }
259
260 $tpl->setCurrentBlock("list_item");
261 $tpl->parseCurrentBlock();
262 $tpl->touchBlock("element");
263 }
264
265 /*
266 * overwritten method from base class
267 * @access public
268 * @param integer obj_id
269 * @param integer array options
270 * @return string
271 */
272 function formatHeader(&$tpl, $a_obj_id,$a_option)
273 {
274 global $lng;
275
276 // custom icons
277 $path = ilObject::_getIcon($a_obj_id, "small", "wsrt");
278
279 $tpl->setCurrentBlock("icon");
280 $title = $this->tree->getNodeData($this->root_id);
281 $title = $title["title"];
282 if(!$title)
283 {
284 $title = $lng->txt("personal_workspace");
285 }
286
287 $tpl->setVariable("ICON_IMAGE", $path);
288 $tpl->setVariable("TXT_ALT_IMG", $title);
289 $tpl->parseCurrentBlock();
290
291 if(strlen($formItem = $this->buildFormItem($a_obj_id, $a_option['type'])))
292 {
293 $tpl->setCurrentBlock('check');
294 $tpl->setVariable('OBJ_CHECK', $formItem);
295 $tpl->parseCurrentBlock();
296 }
297
298 $tpl->setVariable('OBJ_TITLE', $title);
299 }
300
301 function setTypeClickable($a_type)
302 {
303 $this->clickable[] = $a_type;
304 }
305
306 function setCustomLinkTarget($a_target)
307 {
308 $this->custom_link_target = $a_target;
309 }
310
311 function buildLinkTarget($a_node_id, $a_type)
312 {
313 if(!$this->custom_link_target)
314 {
315 return parent::buildLinkTarget($a_node_id, $a_type);
316 }
317
318 $link = $this->custom_link_target."&".$this->target_get."=".$a_node_id;
319 return $link;
320 }
321}
322?>
global $tpl
Definition: ilias.php:8
const IL_FM_POSITIVE
getNodeStyleClass($a_id, $a_type)
get style class for node
setSessionExpandVariable($a_var_name="expand")
set name of expand session variable
addFilter($a_item)
adds item to the filter @access public
buildOnClick($a_node_id, $a_type, $a_title)
get onclick event handling (may be overwritten by derived classes)
setFilterMode($a_mode=IL_FM_NEGATIVE)
set filter mode
setFiltered($a_bool)
active/deactivate the filter @access public
createTarget($a_type, $a_node_id, $a_highlighted_subtree=false, $a_append_anch=true)
Creates Get Parameter @access private.
buildTitle($a_title, $a_id, $a_type)
standard implementation for title, may be overwritten by derived classes
buildDescription($a_desc, $a_id, $a_type)
standard implementation for description, may be overwritten by derived classes
static getClassByType($a_obj_type)
Get class by type.
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
getImage($a_name, $a_type="", $a_obj_id="")
get image path
buildFrameTarget($a_type, $a_child=0, $a_obj_id=0)
STATIC, do not use $this inside!
getTreeId()
get tree id @access public
readRootId()
read root id from database
addTree($a_tree_id, $a_node_id=-1)
create a new tree to do: ???
setRootId($a_root_id)
static formRadioButton($checked, $varname, $value, $onclick=null, $disabled=false)
??? @access public
static formCheckbox($checked, $varname, $value, $disabled=false)
??? @access public
static shortenText($a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
Access handler for personal workspace.
formatHeader(&$tpl, $a_obj_id, $a_option)
overwritten method from base class @access public
sortNodes($a_nodes, $a_parent_obj_id)
sort nodes
buildFormItem($a_node_id, $a_type)
__construct($a_type, $a_target, $a_session_variable, ilWorkspaceTree $a_tree, ilWorkspaceAccessHandler $a_access_handler)
Constructor @access public.
showChilds($a_ref_id, $a_obj_id=0)
formatObject(&$tpl, $a_node_id, $a_option, $a_obj_id=0)
Creates output recursive method @access private.
isVisible($a_ref_id, $a_type)
setCheckedItems($a_checked_items=array())
isClickable($a_type, $a_ref_id, $a_obj_id=0)
buildLinkTarget($a_node_id, $a_type)
note: most of this stuff is used by ilCourseContentInterface too
Tree handler for personal workspace.
createReference($a_object_id)
Create workspace reference for object.
global $ilCtrl
Definition: ilias.php:18
redirection script todo: (a better solution should control the processing via a xml file)
global $lng
Definition: privfeed.php:40
$path
Definition: index.php:22