ILIAS  Release_4_2_x_branch Revision 61807
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjFileBasedLMAccess.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2011 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 include_once("classes/class.ilObjectAccess.php");
6 
17 {
18  static $online;
19  static $startfile;
20 
33  function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "")
34  {
35  global $ilUser, $lng, $rbacsystem, $ilAccess;
36 
37  if ($a_user_id == "")
38  {
39  $a_user_id = $ilUser->getId();
40  }
41 
42  switch ($a_permission)
43  {
44  case "visible":
45  if (!ilObjFileBasedLMAccess::_lookupOnline($a_obj_id) &&
46  (!$rbacsystem->checkAccessOfUser($a_user_id,'write', $a_ref_id)))
47  {
48  $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline"));
49  return false;
50  }
51  break;
52 
53  case "read":
54 
56  && !$rbacsystem->checkAccessOfUser($a_user_id,'write',$a_ref_id)) ||
58  {
59  $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline"));
60  return false;
61  }
62  break;
63  }
64 
65 
66  return true;
67  }
68 
81  function _getCommands()
82  {
83  $commands = array
84  (
85  array("permission" => "read", "cmd" => "view", "lang_var" => "show",
86  "default" => true),
87  array("permission" => "write", "cmd" => "edit", "lang_var" => "edit"),
88  );
89 
90  return $commands;
91  }
92 
93  //
94  // access relevant methods
95  //
96 
100  function _lookupOnline($a_id)
101  {
102  global $ilDB;
103 
104  if (isset(self::$online[$a_id]))
105  {
106  return self::$online[$a_id];
107  }
108  $q = "SELECT is_online FROM file_based_lm WHERE id = ".$ilDB->quote($a_id, "integer");
109  $set = $ilDB->query($q);
110  $rec = $ilDB->fetchAssoc($set);
111 
112  self::$online[$a_id] = ilUtil::yn2tf($rec["is_online"]);
113 
114  return self::$online[$a_id];
115  }
116 
120  function _determineStartUrl($a_id)
121  {
122  global $ilDB;
123 
124  if (isset(self::$startfile[$a_id]))
125  {
126  $start_file = self::$startfile[$a_id];
127  }
128  else
129  {
130  $q = "SELECT startfile FROM file_based_lm WHERE id = ".$ilDB->quote($a_id, "integer");
131  $set = $ilDB->query($q);
132  $rec = $ilDB->fetchAssoc($set);
133  $start_file = $rec["startfile"];
134  self::$startfile[$a_id] = $start_file."";
135  }
136 
137  $dir = ilUtil::getWebspaceDir()."/lm_data/lm_".$a_id;
138 
139  if (($start_file != "") &&
140  (@is_file($dir."/".$start_file)))
141  {
142  return "./".$dir."/".$start_file;
143  }
144  else if (@is_file($dir."/index.html"))
145  {
146  return "./".$dir."/index.html";
147  }
148  else if (@is_file($dir."/index.htm"))
149  {
150  return "./".$dir."/index.htm";
151  }
152 
153  return "";
154  }
155 
159  function _checkGoto($a_target)
160  {
161  global $ilAccess;
162 
163  $t_arr = explode("_", $a_target);
164 
165  if ($t_arr[0] != "htlm" || ((int) $t_arr[1]) <= 0)
166  {
167  return false;
168  }
169 
170  if ($ilAccess->checkAccess("visible", "", $t_arr[1]))
171  {
172  return true;
173  }
174  return false;
175  }
176 
182  function _lookupDiskUsage($a_id)
183  {
184  $lm_data_dir = ilUtil::getWebspaceDir('filesystem')."/lm_data";
185  $lm_dir = $lm_data_dir.DIRECTORY_SEPARATOR."lm_".$a_id;
186 
187  return file_exists($lm_dir) ? ilUtil::dirsize($lm_dir) : 0;
188  }
189 
198  static function _isOffline($a_obj_id)
199  {
200  return !self::_lookupOnline($a_obj_id);
201  }
202 
208  function _preloadData($a_obj_ids, $a_ref_ids)
209  {
210  global $ilDB, $ilUser;
211 
212  $q = "SELECT id, is_online, startfile FROM file_based_lm WHERE ".
213  $ilDB->in("id", $a_obj_ids, false, "integer");
214 
215  $lm_set = $ilDB->query($q);
216  while ($rec = $ilDB->fetchAssoc($lm_set))
217  {
218  self::$online[$rec["id"]] = ilUtil::yn2tf($rec["is_online"]);
219  self::$startfile[$rec["id"]] = $rec["startfile"]."";
220  }
221  }
222 
223 }
224 
225 ?>