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