78 "SELECT keyword, value " .
80 "WHERE usr_id = %s " .
81 "AND keyword IN ('disk_quota', 'disk_quota_last_reminder')",
87 switch (
$row->keyword) {
91 case 'disk_quota_last_reminder':
104 "SELECT rd.role_id, rd.disk_quota, od.title " .
106 "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent = %s " .
107 "JOIN role_data rd ON ua.rol_id=rd.role_id " .
108 "JOIN object_data od ON od.obj_id=rd.role_id " .
109 "WHERE ua.usr_id = %s " .
110 "ORDER BY disk_quota DESC, role_id ASC",
111 array(
'integer',
'integer'),
112 array(ROLE_FOLDER_ID, $a_user_id)
121 $info[
'role_disk_quota'] = (
$row->role_id == SYSTEM_ROLE_ID) ? -log(0) :
$row->disk_quota;
122 $info[
'disk_quota'] = max(
$info[
'user_disk_quota'],
$info[
'role_disk_quota']);
150 $ilDB = $DIC[
'ilDB'];
153 "SELECT keyword, value " .
155 "WHERE usr_id = " .
$ilDB->quote($a_user_id,
'integer') .
" " .
156 "AND " .
$ilDB->like(
"keyword",
"text",
'disk\\_usage%')
160 switch (
$row->keyword) {
161 case 'disk_usage.last_update':
175 preg_match(
'/^disk_usage\\.([^.]+)\\.([^.]+)/',
$row->keyword, $matches);
179 $detail_data = $details[
$type];
180 if ($detail_data == null) {
185 $details[
$type] = $detail_data;
189 $info[
'details'] = $details;
222 public static function _fetchDiskQuotaReport($a_usage_filter = 3, $a_access_filter = 1, $a_order_column=
'disk_usage', $a_order_by=
'desc')
226 $ilDB = $DIC[
'ilDB'];
228 if (!$a_order_column) {
229 $a_order_column =
'disk_usage';
232 switch ($a_usage_filter) {
237 $where_clause =
'WHERE (p2.value IS NULL) ';
241 $where_clause =
'WHERE (p2.value+0 > 0) ';
245 $where_clause =
'WHERE (((p1.value+0 > rq.role_disk_quota OR rq.role_disk_quota IS NULL) AND p2.value+0 > p1.value+0) OR 246 ((rq.role_disk_quota > p1.value+0 OR p1.value IS NULL) AND p2.value+0 > rq.role_disk_quota)) ';
249 switch ($a_access_filter) {
255 $where_clause .= ($where_clause ==
'' ?
'WHERE ' :
' AND ') .
256 '(u.active=1 AND (u.time_limit_unlimited = 1 OR ' .
$ilDB->unixTimestamp() .
' BETWEEN u.time_limit_from AND u.time_limit_until)) ';
259 $where_clause .= ($where_clause ==
'' ?
'WHERE ' :
' AND ') .
260 '(u.active=0 OR (u.time_limit_unlimited IS NULL AND ' .
$ilDB->unixTimestamp() .
' NOT BETWEEN u.time_limit_from AND u.time_limit_until)) ';
265 "SELECT u.usr_id,u.firstname,u.lastname,u.login,u.email,u.last_login,u.active," .
266 "u.time_limit_unlimited, " .
$ilDB->fromUnixtime(
"u.time_limit_from") .
", " .
$ilDB->fromUnixtime(
"u.time_limit_until") .
"," .
272 "CASE WHEN u.active = 0 THEN '0001-01-01' ELSE CASE WHEN u.time_limit_unlimited=1 THEN '9999-12-31' ELSE " .
$ilDB->fromUnixtime(
"u.time_limit_until") .
" END END access_until," .
274 "CASE WHEN " .
$ilDB->unixTimestamp() .
" BETWEEN u.time_limit_from AND u.time_limit_until THEN 0 ELSE 1 END expired," .
275 "rq.role_disk_quota, system_role.rol_id role_id, " .
276 "p1.value+0 user_disk_quota," .
277 "p2.value+0 disk_usage, " .
278 "p3.value last_update, " .
279 "p4.value last_reminder, " .
283 "CASE WHEN rq.role_disk_quota>p1.value+0 OR p1.value IS NULL THEN rq.role_disk_quota ELSE p1.value+0 END disk_quota " .
287 "JOIN (SELECT u.usr_id usr_id,MAX(rd.disk_quota) role_disk_quota " .
289 "JOIN rbac_ua ua ON ua.usr_id=u.usr_id " .
290 "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent=%s " .
291 "JOIN role_data rd ON rd.role_id=ua.rol_id WHERE u.usr_id=ua.usr_id GROUP BY u.usr_id) rq ON rq.usr_id=u.usr_id " .
294 "LEFT JOIN rbac_ua system_role ON system_role.usr_id=u.usr_id AND system_role.rol_id = %s " .
297 "LEFT JOIN usr_pref p1 ON p1.usr_id=u.usr_id AND p1.keyword = 'disk_quota' " .
300 "LEFT JOIN usr_pref p2 ON p2.usr_id=u.usr_id AND p2.keyword = 'disk_usage' " .
303 "LEFT JOIN usr_pref p3 ON p3.usr_id=u.usr_id AND p3.keyword = 'disk_usage.last_update' " .
306 "LEFT JOIN usr_pref p4 ON p4.usr_id=u.usr_id AND p4.keyword = 'disk_quota_last_reminder' " .
309 "ORDER BY " . $a_order_column .
" " . ($a_order_by==
'asc'?
' ASC':
' DESC') .
", " .
310 "lastname, firstname, login",
311 array(
'integer',
'integer'),
312 array(ROLE_FOLDER_ID, SYSTEM_ROLE_ID)
314 $previous_usr_id = null;
316 if ($previous_usr_id !=
$row[
'usr_id']) {
318 $previous_usr_id =
$row[
'usr_id'];
337 $ilDB = $DIC[
'ilDB'];
340 $ilDB->manipulate(
"DELETE FROM usr_pref " .
341 "WHERE " .
$ilDB->like(
"keyword",
"text",
'disk_usage%'));
344 require_once
'Modules/File/classes/class.ilObjFileAccess.php';
347 require_once
'Modules/Forum/classes/class.ilObjForumAccess.php';
350 require_once
'Modules/HTMLLearningModule/classes/class.ilObjFileBasedLMAccess.php';
353 require_once
'Modules/MediaCast/classes/class.ilObjMediaCastAccess.php';
356 require_once
'Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php';
359 require_once
'Services/Mail/classes/class.ilObjMailAccess.php';
360 self::__updateDiskUsageReportOfUsers(
new ilObjMailAccess(),
'mail_attachment');
365 "INSERT INTO usr_pref " .
366 "(usr_id, keyword, value) " .
367 "SELECT usr_id, 'disk_usage', SUM(value) " .
369 "WHERE " .
$ilDB->like(
"keyword",
"text",
'disk_usage.%.size%') .
374 $ilDB->manipulate(
"INSERT INTO usr_pref " .
375 "(usr_id, keyword, value) " .
376 "SELECT usr_id, 'disk_usage.last_update', " .
$ilDB->now() .
" " .
398 $res = self::__getRepositoryObjectsByType(
$a_type);
399 self::__updateDiskUsageReportOfTypeHelper($a_access_obj,
$res,
$data);
403 self::__updateDiskUsageReportOfTypeHelper($a_access_obj,
$res,
$data);
407 foreach (
$data as $owner => $item) {
408 self::__saveUserData($owner,
$a_type, $item[
"size"], $item[
"count"]);
424 $ilDB = $DIC[
'ilDB'];
426 if ($a_user_id && $a_size != null && $a_count != null) {
427 $ilDB->manipulate(
"INSERT INTO usr_pref " .
428 "(usr_id, keyword, value) " .
430 "(" .
$ilDB->quote($a_user_id,
'integer') .
", " .
431 $ilDB->quote(
'disk_usage.' .
$a_type .
'.size') .
", " .
432 $ilDB->quote($a_size,
'integer') .
")");
435 "INSERT INTO usr_pref " .
436 "(usr_id, keyword, value) " .
438 "(" .
$ilDB->quote($a_user_id,
'integer') .
", " .
439 $ilDB->quote(
'disk_usage.' .
$a_type .
'.count') .
", " .
440 $ilDB->quote($a_count,
'integer') .
")" 456 if (
$row->owner != null) {
457 if (!array_key_exists(
$row->owner, $a_result)) {
459 $a_result[
$row->owner] =
array(
"size" => 0,
"count" => 0);
462 $a_result[
$row->owner][
"size"] += $a_access_obj->_lookupDiskUsage(
$row->obj_id);
463 $a_result[
$row->owner][
"count"]++;
478 $ilDB = $DIC[
'ilDB'];
481 "SELECT DISTINCT d.obj_id, d.owner " .
482 "FROM object_data d " .
483 "JOIN object_reference r ON d.obj_id=r.obj_id " .
484 "JOIN tree t ON t.child=r.ref_id " .
485 "WHERE d.type = " .
$ilDB->quote(
$a_type,
"text") .
" " .
501 $ilDB = $DIC[
'ilDB'];
504 "SELECT DISTINCT d.obj_id, d.owner " .
505 "FROM object_data d " .
506 "JOIN object_reference_ws r ON d.obj_id=r.obj_id " .
507 "JOIN tree_workspace t ON t.child=r.wsp_id " .
508 "WHERE d.type = " .
$ilDB->quote(
$a_type,
"text") .
" " .
509 "AND t.tree=d.owner " .
530 $ilDB = $DIC[
'ilDB'];
533 $res =
$ilDB->query(
"SELECT usr_id FROM usr_data");
537 $data = $a_access_obj->_lookupDiskUsageOfUser(
$row->usr_id);
547 $lastStart =
$ilSetting->get(
'last_cronjob_disk_quota_sum_start_ts', 0);
548 if (!$lastStart ||
date(
'dmY', $lastStart) !=
date(
'dmY')) {
551 include_once
'Services/Mail/classes/class.ilDiskQuotaSummaryNotification.php';
565 $ilDB = $DIC[
'ilDB'];
567 require_once
'Services/Mail/classes/class.ilDiskQuotaReminderMail.php';
571 "SELECT u.usr_id,u.gender,u.firstname,u.lastname,u.login,u.email,u.last_login,u.active," .
572 "u.time_limit_unlimited, " .
$ilDB->fromUnixtime(
"u.time_limit_from") .
", " .
$ilDB->fromUnixtime(
"u.time_limit_until") .
"," .
578 "CASE WHEN u.active = 0 THEN '0001-01-01' ELSE CASE WHEN u.time_limit_unlimited=1 THEN '9999-12-31' ELSE " .
$ilDB->fromUnixtime(
"u.time_limit_until") .
" END END access_until," .
580 " CASE WHEN " .
$ilDB->unixTimestamp() .
" BETWEEN u.time_limit_from AND u.time_limit_until THEN 0 ELSE 1 END expired," .
581 "rq.role_disk_quota, system_role.rol_id role_id, " .
582 "p1.value+0 user_disk_quota," .
583 "p2.value+0 disk_usage, " .
584 "p3.value last_update, " .
585 "p4.value last_reminder, " .
586 "p5.value language, " .
590 "CASE WHEN rq.role_disk_quota>p1.value+0 OR p1.value IS NULL THEN rq.role_disk_quota ELSE p1.value+0 END disk_quota " .
594 "JOIN (SELECT u.usr_id usr_id,MAX(rd.disk_quota) role_disk_quota " .
596 "JOIN rbac_ua ua ON ua.usr_id=u.usr_id " .
597 "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent=%s " .
598 "JOIN role_data rd ON rd.role_id=ua.rol_id WHERE u.usr_id=ua.usr_id GROUP BY u.usr_id) rq ON rq.usr_id=u.usr_id " .
601 "LEFT JOIN rbac_ua system_role ON system_role.usr_id=u.usr_id AND system_role.rol_id = %s " .
604 "LEFT JOIN usr_pref p1 ON p1.usr_id=u.usr_id AND p1.keyword = 'disk_quota' " .
607 "LEFT JOIN usr_pref p2 ON p2.usr_id=u.usr_id AND p2.keyword = 'disk_usage' " .
610 "LEFT JOIN usr_pref p3 ON p3.usr_id=u.usr_id AND p3.keyword = 'disk_usage.last_update' " .
613 "LEFT JOIN usr_pref p4 ON p4.usr_id=u.usr_id AND p4.keyword = 'disk_quota_last_reminder' " .
616 "LEFT JOIN usr_pref p5 ON p5.usr_id=u.usr_id AND p5.keyword = 'language' " .
621 'WHERE (((p1.value+0 >= rq.role_disk_quota OR rq.role_disk_quota IS NULL) AND p2.value+0 > p1.value+0) OR 622 ((rq.role_disk_quota > p1.value+0 OR p1.value IS NULL) AND p2.value+0 > rq.role_disk_quota)) ' .
623 'AND (u.active=1 AND (u.time_limit_unlimited = 1 OR ' .
$ilDB->unixTimestamp() .
' BETWEEN u.time_limit_from AND u.time_limit_until)) ' .
624 'AND (p4.value IS NULL OR p4.value < DATE_SUB(NOW(), INTERVAL 7 DAY)) ',
625 array(
'integer',
'integer'),
626 array(ROLE_FOLDER_ID, SYSTEM_ROLE_ID)
630 $details = self::_lookupDiskUsage(
$row[
'usr_id']);
631 $row[
'disk_usage_details'] = $details[
'details'];
634 $mail->setData(
$row);
638 if (
$row[
'last_reminder'] != null) {
640 "UPDATE usr_pref SET value= " .
$ilDB->now() .
" " .
641 "WHERE usr_id=%s AND keyword = 'disk_quota_last_reminder'",
647 "INSERT INTO usr_pref (usr_id, keyword, value) " .
648 "VALUES (%s, 'disk_quota_last_reminder', " .
$ilDB->now() .
")",
663 $ilDB = $DIC[
'ilDB'];
665 require_once
'Services/Mail/classes/class.ilDiskQuotaReminderMail.php';
668 $res =
$ilDB->query(
"SELECT MAX(value) last_update " .
669 "FROM usr_pref WHERE keyword='disk_usage.last_update'");
671 return (
$row != null) ?
$row[
'last_update'] : null;
677 $ilDB = $DIC[
'ilDB'];
682 "SELECT keyword, value " .
684 "WHERE usr_id = %s " .
686 array(
'integer',
'text'),
687 array($a_user_id,
"wsp_disk_quota")
691 $info[
'user_wsp_disk_quota'] =
$row->value;
700 "SELECT rd.role_id, rd.wsp_disk_quota, od.title " .
702 "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent = %s " .
703 "JOIN role_data rd ON ua.rol_id=rd.role_id " .
704 "JOIN object_data od ON od.obj_id=rd.role_id " .
705 "WHERE ua.usr_id = %s " .
706 "ORDER BY wsp_disk_quota DESC, role_id ASC",
707 array(
'integer',
'integer'),
708 array(ROLE_FOLDER_ID, $a_user_id)
717 $info[
'role_wsp_disk_quota'] = (
$row->role_id == SYSTEM_ROLE_ID) ? -log(0) :
$row->wsp_disk_quota;
718 $info[
'disk_quota'] = max(
$info[
'user_wsp_disk_quota'],
$info[
'role_wsp_disk_quota']);
static _sendSummaryMails()
static _sendReminderMails()
Sends reminder e-mails to all users who have access and who have exceeded their disk quota and who ha...
Class ilDiskQuotaChecker.
static _lookupPersonalWorkspaceDiskQuota($a_user_id)
Access class for file objects.
static _updateDiskUsageReport()
Updates the disk usage info of all user accounts.
static __updateDiskUsageReportOfType($a_access_obj, $a_type)
Updates the disk usage report of the specified object type for all user accounts. ...
static __updateDiskUsageReportOfTypeHelper($a_access_obj, $a_objects, &$a_result)
for each objects of an owner, count the number of objects and sum up the size
static __getWorkspaceObjectsByType($a_type)
get all objects of the desired type which are in the personal workspace ordered by owner ...
static _lookupDiskUsageReportLastUpdate()
Returns the SQL datetime of the last update of the disk usage report.
static __updateDiskUsageReportOfUsers($a_access_obj, $a_type)
Updates the disk usage report of the specified object type for all user accounts. ...
Class ilFileBasedLMAccess.
foreach($_POST as $key=> $value) $res
static _lookupDiskQuota($a_user_id)
Gets the disk quota info for the specified user account.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
static __saveUserData($a_user_id, $a_type, $a_size, $a_count)
Save disk quota for user.
Create styles array
The data for the language used.
static _lookupDiskUsage($a_user_id)
Gets the disk usage info for the specified user account.
Class ilDiskQuotaReminderMail.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
Class ilObjContentObjectAccess.
static __getRepositoryObjectsByType($a_type)
get all objects of the desired type which are in the repository ordered by owner
static _fetchDiskQuotaReport($a_usage_filter=3, $a_access_filter=1, $a_order_column='disk_usage', $a_order_by='desc')
Reads disk quota/disk usage report of the user accounts.