ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilDiskQuotaHandler.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
13 {
22  public static function handleUpdatedSourceObject($a_src_obj_type, $a_src_obj_id, $a_src_filesize, $a_owner_obj_ids = null, $a_is_prtf = false)
23  {
24  global $ilDB;
25 
26  $done = array();
27 
28  if(is_array($a_owner_obj_ids) && sizeof($a_owner_obj_ids) && (int)$a_src_filesize > 0)
29  {
30  // we are (currently) only interested in personal workspace objects
31 
32  if(!$a_is_prtf)
33  {
34  $set = $ilDB->query("SELECT DISTINCT(od.owner)".
35  " FROM object_data od".
36  " JOIN object_reference_ws ref ON (ref.obj_id = od.obj_id)".
37  " JOIN tree_workspace t ON (t.child = ref.wsp_id)".
38  " WHERE ".$ilDB->in("od.obj_id", $a_owner_obj_ids, "", "integer").
39  " AND t.tree = od.owner");
40  }
41  else
42  {
43  $set = $ilDB->query("SELECT DISTINCT(od.owner)".
44  " FROM object_data od".
45  " JOIN usr_portfolio prtf ON (prtf.id = od.obj_id)".
46  " WHERE ".$ilDB->in("od.obj_id", $a_owner_obj_ids, "", "integer"));
47  }
48  while($row = $ilDB->fetchAssoc($set))
49  {
50  $done[] = $row["owner"];
51 
53  $row["owner"],
54  $a_src_obj_type,
55  $a_src_obj_id,
56  (int)$a_src_filesize
57  );
58  }
59  }
60 
61  // delete obsolete entries
62  $existing = self::getOwnersBySourceObject($a_src_obj_type, $a_src_obj_id);
63  $existing = array_diff($existing, $done);
64  if(sizeof($existing))
65  {
66  foreach($existing as $owner)
67  {
68  self::deleteEntry($owner, $a_src_obj_type, $a_src_obj_id);
69  }
70  }
71  }
72 
80  protected static function deleteEntry($a_owner_id, $a_src_obj_type, $a_src_obj_id)
81  {
82  global $ilDB;
83 
84  $ilDB->manipulate("DELETE FROM il_disk_quota".
85  " WHERE owner_id = ".$ilDB->quote($a_owner_id, "integer").
86  " AND src_type = ".$ilDB->quote($a_src_obj_type, "text").
87  " AND src_obj_id = ".$ilDB->quote($a_src_obj_id, "integer"));
88  }
89 
95  public static function deleteByOwner($a_owner_id)
96  {
97  global $ilDB;
98 
99  $ilDB->manipulate("DELETE FROM il_disk_quota".
100  " WHERE owner_id = ".$ilDB->quote($a_owner_id, "integer"));
101  }
102 
110  protected static function getOwnersBySourceObject($a_src_obj_type, $a_src_obj_id)
111  {
112  global $ilDB;
113 
114  $res = array();
115 
116  $set = $ilDB->query("SELECT owner_id".
117  " FROM il_disk_quota".
118  " WHERE src_type = ".$ilDB->quote($a_src_obj_type, "text").
119  " AND src_obj_id = ".$ilDB->quote($a_src_obj_id, "integer"));
120  while($row = $ilDB->fetchAssoc($set))
121  {
122  $res[] = $row["owner_id"];
123  }
124 
125  return $res;
126  }
127 
134  protected static function getSourceObjectsByOwner($a_owner_id)
135  {
136  global $ilDB;
137 
138  $res = array();
139 
140  $set = $ilDB->query("SELECT src_type, src_obj_id".
141  " FROM il_disk_quota".
142  " WHERE owner_id = ".$ilDB->quote($a_owner_id, "integer"));
143  while($row = $ilDB->fetchAssoc($set))
144  {
145  $res[$row["src_type"]][] = $row["src_obj_id"];
146  }
147 
148  return $res;
149  }
150 
159  protected static function handleEntry($a_owner_id, $a_src_obj_type, $a_src_obj_id, $a_src_filesize)
160  {
161  global $ilDB;
162 
163  $existing = self::getSourceObjectsByOwner($a_owner_id);
164 
165  // update
166  if($existing &&
167  isset($existing[$a_src_obj_type]) &&
168  in_array($a_src_obj_id, $existing[$a_src_obj_type]))
169  {
170  $ilDB->manipulate("UPDATE il_disk_quota".
171  " SET src_size = ".$ilDB->quote($a_src_filesize, "integer").
172  " WHERE owner_id = ".$ilDB->quote($a_owner_id, "integer").
173  " AND src_type = ".$ilDB->quote($a_src_obj_type, "text").
174  " AND src_obj_id = ".$ilDB->quote($a_src_obj_id, "integer"));
175  }
176  // insert
177  else
178  {
179  $ilDB->manipulate("INSERT INTO il_disk_quota".
180  " (owner_id, src_type, src_obj_id, src_size)".
181  " VALUES (".$ilDB->quote($a_owner_id, "integer").
182  ", ".$ilDB->quote($a_src_obj_type, "text").
183  ", ".$ilDB->quote($a_src_obj_id, "integer").
184  ", ".$ilDB->quote($a_src_filesize, "integer").")");
185  }
186  }
187 
194  public static function getFilesizeByOwner($a_owner_id)
195  {
196  global $ilDB;
197 
198  $set = $ilDB->query("SELECT sum(src_size) fsize".
199  " FROM il_disk_quota".
200  " WHERE owner_id = ".$ilDB->quote($a_owner_id, "integer"));
201  $row = $ilDB->fetchAssoc($set);
202  return (int)$row["fsize"];
203  }
204 
211  public static function getFilesizeByTypeAndOwner($a_owner_id)
212  {
213  global $ilDB;
214 
215  $res = array();
216 
217  $set = $ilDB->query("SELECT sum(src_size) filesize, src_type, COUNT(*) count".
218  " FROM il_disk_quota".
219  " WHERE owner_id = ".$ilDB->quote($a_owner_id, "integer").
220  " GROUP BY src_type");
221  while($row = $ilDB->fetchAssoc($set))
222  {
223  $res[] = $row;
224  }
225 
226  return $res;
227  }
228 
229  public static function isUploadPossible($a_additional_size = null)
230  {
231  global $ilUser;
232 
233  include_once "Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php";
235  {
236  return true;
237  }
238 
239  include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
240  $usage = ilDiskQuotaHandler::getFilesizeByOwner($ilUser->getId());
241  if($a_additional_size)
242  {
243  $usage += $a_additional_size;
244  }
245 
246  include_once "Services/WebDAV/classes/class.ilDiskQuotaChecker.php";
247  $quota = ilDiskQuotaChecker::_lookupPersonalWorkspaceDiskQuota($ilUser->getId());
248  $quota = $quota["disk_quota"];
249 
250  // administrator
251  if(is_infinite($quota))
252  {
253  return true;
254  }
255 
256  return $usage < $quota;
257  }
258 
259  public static function getStatusLegend()
260  {
261  global $ilUser, $lng;
262 
263  include_once "Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php";
265  {
266  return;
267  }
268 
269  include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
270  $usage = ilDiskQuotaHandler::getFilesizeByOwner($ilUser->getId());
271 
272  include_once "Services/WebDAV/classes/class.ilDiskQuotaChecker.php";
273  $quota = ilDiskQuotaChecker::_lookupPersonalWorkspaceDiskQuota($ilUser->getId());
274  $quota = $quota["disk_quota"];
275 
276  // administrator
277  if(is_infinite($quota) || !(int)$quota)
278  {
279  return;
280  }
281 
282  $lng->loadLanguageModule("file");
283  return sprintf($lng->txt("personal_workspace_quota_status_legend"),
284  ilFormat::formatSize($usage),
285  ilFormat::formatSize($quota),
286  $quota ? round($usage/$quota*100) : 0);
287  }
288 }
289 
290 ?>