ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
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  $done = array();
26 
27  if (is_array($a_owner_obj_ids) && sizeof($a_owner_obj_ids) && (int) $a_src_filesize > 0) {
28  // we are (currently) only interested in personal workspace objects
29 
30  // problem: file in portfolio comes in with file and portfolio id, however $a_is_prtf is set to false
31  // so we do both for now
32 
33  // get all owners
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  $owners = array();
41  while ($row = $ilDB->fetchAssoc($set)) {
42  if (!in_array($row["owner"], $owners)) {
43  $owners[] = $row["owner"];
44  }
45  }
46  $set = $ilDB->query("SELECT DISTINCT(od.owner)" .
47  " FROM object_data od" .
48  " JOIN usr_portfolio prtf ON (prtf.id = od.obj_id)" .
49  " WHERE " . $ilDB->in("od.obj_id", $a_owner_obj_ids, "", "integer"));
50  while ($row = $ilDB->fetchAssoc($set)) {
51  if (!in_array($row["owner"], $owners)) {
52  $owners[] = $row["owner"];
53  }
54  }
55  foreach ($owners as $owner) {
56  $done[] = $owner;
57 
58  self::handleEntry(
59  $owner,
60  $a_src_obj_type,
61  $a_src_obj_id,
62  (int) $a_src_filesize
63  );
64  }
65  }
66 
67  // delete obsolete entries
68  $existing = self::getOwnersBySourceObject($a_src_obj_type, $a_src_obj_id);
69  $existing = array_diff($existing, $done);
70  if (sizeof($existing)) {
71  foreach ($existing as $owner) {
72  self::deleteEntry($owner, $a_src_obj_type, $a_src_obj_id);
73  }
74  }
75  }
76 
84  protected static function deleteEntry($a_owner_id, $a_src_obj_type, $a_src_obj_id)
85  {
86  global $ilDB;
87 
88  $ilDB->manipulate("DELETE FROM il_disk_quota" .
89  " WHERE owner_id = " . $ilDB->quote($a_owner_id, "integer") .
90  " AND src_type = " . $ilDB->quote($a_src_obj_type, "text") .
91  " AND src_obj_id = " . $ilDB->quote($a_src_obj_id, "integer"));
92  }
93 
99  public static function deleteByOwner($a_owner_id)
100  {
101  global $ilDB;
102 
103  $ilDB->manipulate("DELETE FROM il_disk_quota" .
104  " WHERE owner_id = " . $ilDB->quote($a_owner_id, "integer"));
105  }
106 
114  protected static function getOwnersBySourceObject($a_src_obj_type, $a_src_obj_id)
115  {
116  global $ilDB;
117 
118  $res = array();
119 
120  $set = $ilDB->query("SELECT owner_id" .
121  " FROM il_disk_quota" .
122  " WHERE src_type = " . $ilDB->quote($a_src_obj_type, "text") .
123  " AND src_obj_id = " . $ilDB->quote($a_src_obj_id, "integer"));
124  while ($row = $ilDB->fetchAssoc($set)) {
125  $res[] = $row["owner_id"];
126  }
127 
128  return $res;
129  }
130 
137  protected static function getSourceObjectsByOwner($a_owner_id)
138  {
139  global $ilDB;
140 
141  $res = array();
142 
143  $set = $ilDB->query("SELECT src_type, src_obj_id" .
144  " FROM il_disk_quota" .
145  " WHERE owner_id = " . $ilDB->quote($a_owner_id, "integer"));
146  while ($row = $ilDB->fetchAssoc($set)) {
147  $res[$row["src_type"]][] = $row["src_obj_id"];
148  }
149 
150  return $res;
151  }
152 
161  protected static function handleEntry($a_owner_id, $a_src_obj_type, $a_src_obj_id, $a_src_filesize)
162  {
163  global $ilDB;
164 
165  $existing = self::getSourceObjectsByOwner($a_owner_id);
166 
167  // update
168  if ($existing &&
169  isset($existing[$a_src_obj_type]) &&
170  in_array($a_src_obj_id, $existing[$a_src_obj_type])) {
171  $ilDB->manipulate("UPDATE il_disk_quota" .
172  " SET src_size = " . $ilDB->quote($a_src_filesize, "integer") .
173  " WHERE owner_id = " . $ilDB->quote($a_owner_id, "integer") .
174  " AND src_type = " . $ilDB->quote($a_src_obj_type, "text") .
175  " AND src_obj_id = " . $ilDB->quote($a_src_obj_id, "integer"));
176  }
177  // insert
178  else {
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  $res[] = $row;
223  }
224 
225  return $res;
226  }
227 
228  public static function isUploadPossible($a_additional_size = null)
229  {
230  global $ilUser;
231 
232  include_once "Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php";
234  return true;
235  }
236 
237  include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
238  $usage = ilDiskQuotaHandler::getFilesizeByOwner($ilUser->getId());
239  if ($a_additional_size) {
240  $usage += $a_additional_size;
241  }
242 
243  include_once "Services/WebDAV/classes/class.ilDiskQuotaChecker.php";
245  $quota = $quota["disk_quota"];
246 
247  // administrator
248  if (is_infinite($quota)) {
249  return true;
250  }
251 
252  return $usage < $quota;
253  }
254 
255  public static function getStatusLegend()
256  {
257  global $ilUser, $lng;
258 
259  include_once "Services/WebDAV/classes/class.ilDiskQuotaActivationChecker.php";
261  return;
262  }
263 
264  include_once "Services/DiskQuota/classes/class.ilDiskQuotaHandler.php";
265  $usage = ilDiskQuotaHandler::getFilesizeByOwner($ilUser->getId());
266 
267  include_once "Services/WebDAV/classes/class.ilDiskQuotaChecker.php";
269  $quota = $quota["disk_quota"];
270 
271  // administrator
272  if (is_infinite($quota) || !(int) $quota) {
273  return;
274  }
275 
276  $lng->loadLanguageModule("file");
277  return sprintf(
278  $lng->txt("personal_workspace_quota_status_legend"),
279  ilUtil::formatSize($usage),
280  ilUtil::formatSize($quota),
281  $quota ? round($usage / $quota * 100) : 0
282  );
283  }
284 }
static handleEntry($a_owner_id, $a_src_obj_type, $a_src_obj_id, $a_src_filesize)
Update/create owner-related entry of source object.
static deleteByOwner($a_owner_id)
Delete all entries for owner.
static getOwnersBySourceObject($a_src_obj_type, $a_src_obj_id)
Get owner ids by source object.
static _lookupPersonalWorkspaceDiskQuota($a_user_id)
static deleteEntry($a_owner_id, $a_src_obj_type, $a_src_obj_id)
Delete entry for owner and source object.
foreach($_POST as $key=> $value) $res
$lng
Class ilDiskQuotaHandler.
static isUploadPossible($a_additional_size=null)
$ilUser
Definition: imgupload.php:18
static getFilesizeByOwner($a_owner_id)
Get current storage size for owner.
$row
static handleUpdatedSourceObject($a_src_obj_type, $a_src_obj_id, $a_src_filesize, $a_owner_obj_ids=null, $a_is_prtf=false)
Find and update/create all related entries for source object.
global $ilDB
static formatSize($size, $a_mode='short', $a_lng=null)
Returns the specified file size value in a human friendly form.
static getSourceObjectsByOwner($a_owner_id)
Get all source objects for owner.
static getFilesizeByTypeAndOwner($a_owner_id)
Get current storage size for owner (grouped by type)