ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilWorkspaceShareTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 2010 Leifos, GPL, see docs/LICENSE */
3 
4 include_once("./Services/Table/classes/class.ilTable2GUI.php");
5 
15 {
16  protected $handler; // [ilWorkspaceAccessHandler]
17  protected $parent_node_id; // [int]
18  protected $filter; // [array]
19  protected $crs_ids; // [array]
20  protected $grp_ids; // [array]
21  protected $portfolio_mode = false; // [bool]
22 
32  function __construct($a_parent_obj, $a_parent_cmd, $a_handler, $a_parent_node_id = null, $a_load_data = false)
33  {
34  global $ilCtrl, $lng;
35 
36  $this->handler = $a_handler;
37 
38  if(stristr(get_class($a_parent_obj), "portfolio"))
39  {
40  $this->parent_node_id = $a_parent_node_id;
41  $this->portfolio_mode = true;
42  }
43 
44  parent::__construct($a_parent_obj, $a_parent_cmd);
45 
46  $this->setId("il_tbl_wspsh".(int)$this->portfolio_mode);
47 
48  $this->setTitle($lng->txt("wsp_shared_resources"));
49 
50  $this->addColumn($this->lng->txt("lastname"), "lastname");
51  $this->addColumn($this->lng->txt("firstname"), "firstname");
52  $this->addColumn($this->lng->txt("login"), "login");
53 
54  if(!$this->portfolio_mode)
55  {
56  $this->addColumn($this->lng->txt("wsp_shared_object_type"), "obj_type");
57  }
58 
59  $this->addColumn($this->lng->txt("wsp_shared_date"), "acl_date");
60  $this->addColumn($this->lng->txt("wsp_shared_title"), "title");
61  $this->addColumn($this->lng->txt("wsp_shared_type"));
62 
63  if(!$this->portfolio_mode)
64  {
65  $this->addColumn($this->lng->txt("action"));
66  }
67 
68  $this->setDefaultOrderField("acl_date");
69  $this->setDefaultOrderDirection("desc");
70 
71  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
72  $this->setRowTemplate("tpl.shared_row.html", "Services/PersonalWorkspace");
73 
74  $this->setDisableFilterHiding(true);
75  $this->setResetCommand("resetsharefilter", $this->lng->txt("wsp_shared_filter_reset_button"));
76  $this->setFilterCommand("applysharefilter", $this->lng->txt("wsp_shared_filter_button"));
77 
78  $this->initFilter();
79 
80  // reset will remove all filters
81  if($this->portfolio_mode &&
82  !$this->filter["obj_type"])
83  {
84  $this->filter["obj_type"] = "prtf";
85  }
86 
87  // incoming request: check for validity
88  if($a_load_data)
89  {
90  /*
91  if(($this->filter["user"] && strlen($this->filter["user"]) > 3) ||
92  ($this->filter["title"] && strlen($this->filter["title"]) > 3) ||
93  $this->filter["acl_date"] ||
94  $this->filter["obj_type"] ||
95  $this->filter["acl_type"] ||
96  $this->filter["crsgrp"])
97  {
98  */
99 
100  // #16630
101  $this->importData();
102  include_once "Services/User/classes/class.ilUserUtil.php";
103  return;
104  }
105  else
106  {
107  ilUtil::sendInfo($lng->txt("wsp_shared_mandatory_filter_info"));
108  }
109 
110  // initial state: show filters only
111  $this->disable("header");
112  $this->disable("content");
113  }
114 
115  public function initFilter()
116  {
117  global $lng, $ilSetting, $ilUser;
118 
119  include_once "Services/Membership/classes/class.ilParticipants.php";
120  $this->crs_ids = ilParticipants::_getMembershipByType($ilUser->getId(), "crs");
121  $this->grp_ids = ilParticipants::_getMembershipByType($ilUser->getId(), "grp");
122 
123  $lng->loadLanguageModule("search");
124 
125  $item = $this->addFilterItemByMetaType("user", self::FILTER_TEXT, false, $lng->txt("wsp_shared_user_filter"));
126  $this->filter["user"] = $item->getValue();
127 
128  // incoming back link (shared)
129  if((int)$_REQUEST["shr_id"] &&
130  !is_array($_SESSION["form_".$this->getId()]) && // #17747
131  !$this->filter["user"])
132  {
133  $this->filter["user"] = ilObjUser::_lookupName((int)$_REQUEST["shr_id"]);
134  $this->filter["user"] = $this->filter["user"]["login"];
135  $item->setValue($this->filter["user"]);
136  }
137 
138  $item = $this->addFilterItemByMetaType("title", self::FILTER_TEXT, false, $lng->txt("wsp_shared_title"));
139  $this->filter["title"] = $item->getValue();
140 
141  $item = $this->addFilterItemByMetaType("acl_date", self::FILTER_DATE, false, $lng->txt("wsp_shared_date_filter"));
142  $this->filter["acl_date"] = $item->getDate();
143 
144  if(!$this->portfolio_mode)
145  {
146  // see ilPersonalWorkspaceGUI::renderToolbar
147  $options = array(""=>$lng->txt("search_any"));
148  $settings_map = array("blog" => "blogs",
149  "file" => "files");
150  // see ilObjWorkspaceFolderTableGUI
151  foreach(array("file", "blog") as $type)
152  {
153  if(isset($settings_map[$type]) && $ilSetting->get("disable_wsp_".$settings_map[$type]))
154  {
155  continue;
156  }
157  $options[$type] = $lng->txt("wsp_type_".$type);
158  }
159  }
160  else
161  {
162  $options = array("prtf"=>$lng->txt("obj_prtf"));
163  }
164  if(sizeof($options))
165  {
166  asort($options);
167  $item = $this->addFilterItemByMetaType("obj_type", self::FILTER_SELECT, false, $lng->txt("wsp_shared_object_type"));
168  $item->setOptions($options);
169  $this->filter["obj_type"] = $item->getValue();
170  }
171 
172  // see ilWorkspaceAccessGUI::share
173  $options = array();
174  $options["user"] = $lng->txt("wsp_set_permission_single_user");
175 
176  if(sizeof($this->grp_ids))
177  {
178  $options["group"] = $lng->txt("wsp_set_permission_group");
179  }
180 
181  if(sizeof($this->crs_ids))
182  {
183  $options["course"] = $lng->txt("wsp_set_permission_course");
184  }
185 
186  if(!$this->handler->hasRegisteredPermission($this->parent_node_id))
187  {
188  $options["registered"] = $lng->txt("wsp_set_permission_registered");
189  }
190 
191  if($ilSetting->get("enable_global_profiles"))
192  {
193  if(!$this->handler->hasGlobalPasswordPermission($this->parent_node_id))
194  {
195  $options["password"] = $this->lng->txt("wsp_set_permission_all_password");
196  }
197 
198  if(!$this->handler->hasGlobalPermission($this->parent_node_id))
199  {
200  $options["all"] = $this->lng->txt("wsp_set_permission_all");
201  }
202  }
203 
204  if(sizeof($options))
205  {
206  // asort($options);
207  $item = $this->addFilterItemByMetaType("acl_type", self::FILTER_SELECT, false, $lng->txt("wsp_shared_type"));
208  $item->setOptions(array(""=>$lng->txt("search_any"))+$options);
209  $this->filter["acl_type"] = $item->getValue();
210  }
211 
212  if(sizeof($this->crs_ids) || sizeof($this->grp_ids))
213  {
214  $options = array();
215  foreach($this->crs_ids as $crs_id)
216  {
217  $options[$crs_id] = $lng->txt("obj_crs")." ".ilObject::_lookupTitle($crs_id);
218  }
219  foreach($this->grp_ids as $grp_id)
220  {
221  $options[$grp_id] = $lng->txt("obj_grp")." ".ilObject::_lookupTitle($grp_id);
222  }
223  asort($options);
224  $item = $this->addFilterItemByMetaType("crsgrp", self::FILTER_SELECT, false, $lng->txt("wsp_shared_member_filter"));
225  $item->setOptions(array(""=>$lng->txt("search_any"))+$options);
226  $this->filter["crsgrp"] = $item->getValue();
227  }
228  }
229 
230  protected function importData()
231  {
232  global $lng;
233 
234  $data = array();
235 
236  $user_data = array();
237 
238  $objects = $this->handler->findSharedObjects($this->filter, $this->crs_ids, $this->grp_ids);
239  if($objects)
240  {
241  foreach($objects as $wsp_id => $item)
242  {
243  if(!isset($user_data[$item["owner"]]))
244  {
245  $user_data[$item["owner"]] = ilObjUser::_lookupName($item["owner"]);
246  }
247 
248  // #18535 - deleted user?
249  if(!$user_data[$item["owner"]]["login"])
250  {
251  continue;
252  }
253 
254  $data[] = array(
255  "wsp_id" => $wsp_id,
256  "obj_id" => $item["obj_id"],
257  "type" => $item["type"],
258  "obj_type" => $lng->txt("wsp_type_".$item["type"]),
259  "title" => $item["title"],
260  "owner_id" => $item["owner"],
261  "lastname" => $user_data[$item["owner"]]["lastname"],
262  "firstname" => $user_data[$item["owner"]]["firstname"],
263  "login" => $user_data[$item["owner"]]["login"],
264  "acl_type" => $item["acl_type"],
265  "acl_date" => $item["acl_date"]
266  );
267  }
268  }
269 
270  $this->setData($data);
271 
272  include_once('./Services/Link/classes/class.ilLink.php');
273  }
274 
280  protected function fillRow($node)
281  {
282  global $ilCtrl, $lng;
283 
284  $this->tpl->setVariable("LASTNAME", $node["lastname"]);
285  $this->tpl->setVariable("FIRSTNAME", $node["firstname"]);
286  $this->tpl->setVariable("LOGIN", $node["login"]);
287 
288  $this->tpl->setVariable("TITLE", $node["title"]);
289 
290  if(!$this->portfolio_mode)
291  {
292  $this->tpl->setVariable("TYPE", $node["obj_type"]);
293  $this->tpl->setVariable("ICON_ALT", $node["obj_type"]);
294  $this->tpl->setVariable("ICON", ilObject::_getIcon("", "tiny", $node["type"]));
295 
296  $url = $this->handler->getGotoLink($node["wsp_id"], $node["obj_id"]);
297  }
298  else
299  {
300  $url = ilLink::_getStaticLink($node["obj_id"], "prtf", true);
301  }
302  $this->tpl->setVariable("URL_TITLE", $url);
303 
304  $this->tpl->setVariable("ACL_DATE",
305  ilDatePresentation::formatDate(new ilDateTime($node["acl_date"], IL_CAL_UNIX)));
306 
307  asort($node["acl_type"]);
308  foreach($node["acl_type"] as $obj_id)
309  {
310  // see ilWorkspaceAccessTableGUI
311  switch($obj_id)
312  {
314  $title = $icon_alt = $this->lng->txt("wsp_set_permission_registered");
315  $type = "registered";
316  break;
317 
319  $title = $icon_alt = $this->lng->txt("wsp_set_permission_all_password");
320  $type = "all_password";
321  break;
322 
324  $title = $icon_alt = $this->lng->txt("wsp_set_permission_all");
325  $type = "all_password";
326  break;
327 
328  default:
329  $type = ilObject::_lookupType($obj_id);
330  /*
331  $icon = ilUtil::getTypeIconPath($type, null, "tiny");
332  $icon_alt = $this->lng->txt("obj_".$type);
333  */
334  if($type != "usr")
335  {
336  $title = ilObject::_lookupTitle($obj_id);
337  }
338  else
339  {
340  $title = ilUserUtil::getNamePresentation($obj_id, false, true);
341  }
342  break;
343  }
344 
345  /* #17758
346  if($icon)
347  {
348  $this->tpl->setCurrentBlock("acl_type_icon_bl");
349  $this->tpl->setVariable("ACL_ICON", $icon);
350  $this->tpl->setVariable("ACL_ICON_ALT", $icon_alt);
351  $this->tpl->parseCurrentBlock();
352  }
353  */
354 
355  $this->tpl->setCurrentBlock("acl_type_bl");
356  $this->tpl->setVariable("ACL_TYPE", $title);
357  $this->tpl->parseCurrentBlock();
358  }
359 
360  if(!$this->portfolio_mode)
361  {
362  // files may be copied to own workspace
363  if($node["type"] == "file")
364  {
365  $ilCtrl->setParameter($this->parent_obj, "wsp_id",
366  $this->parent_node_id);
367  $ilCtrl->setParameter($this->parent_obj, "item_ref_id",
368  $node["wsp_id"]);
369  $url = $ilCtrl->getLinkTarget($this->parent_obj, "copyshared");
370 
371  $this->tpl->setCurrentBlock("action_bl");
372  $this->tpl->setVariable("URL_ACTION", $url);
373  $this->tpl->setVariable("ACTION", $lng->txt("copy"));
374  $this->tpl->parseCurrentBlock();
375  }
376  else
377  {
378  $this->tpl->touchBlock("action_col_bl");
379  }
380  }
381  }
382 }
383 
384 ?>
static _lookupName($a_user_id)
lookup user name
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
$_SESSION["AccountId"]
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=NULL)
Add filter by standard type.
static _getMembershipByType($a_usr_id, $a_type, $a_only_member_role=false)
get membership by type Get course or group membership
static _lookupTitle($a_id)
lookup object title
$url
Definition: shib_logout.php:72
const IL_CAL_UNIX
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
Workspace share handler table GUI class.
static getNamePresentation($a_user_id, $a_user_image=false, $a_profile_link=false, $a_profile_back_link="", $a_force_first_lastname=false, $a_omit_login=false, $a_sortable=true, $a_return_data_array=false)
Default behaviour is:
__construct($a_parent_obj, $a_parent_cmd, $a_handler, $a_parent_node_id=null, $a_load_data=false)
Constructor.
Class ilTable2GUI.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
if(!is_array($argv)) $options
setDisableFilterHiding($a_val=true)
Set disable filter hiding.
static formatDate(ilDateTime $date)
Format a date public.
Date and time handling
$ilUser
Definition: imgupload.php:18
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
disable($a_module_name)
diesables particular modules of table
global $ilSetting
Definition: privfeed.php:17
global $lng
Definition: privfeed.php:17
getId()
Get element id.
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
setFilterCommand($a_val, $a_caption=null)
Set filter command.