76                 $res = $ilDB->queryf(
"SELECT keyword, value ".
 
   79                         "AND keyword IN ('disk_quota', 'disk_quota_last_reminder')",
 
   84                         switch (
$row->keyword)
 
   87                                         $info[
'user_disk_quota'] = 
$row->value;
 
   89                                 case 'disk_quota_last_reminder' :
 
   90                                         $info[
'last_reminder'] = 
$row->value;
 
  101                 $res = $ilDB->queryf(
"SELECT rd.role_id, rd.disk_quota, od.title ".
 
  103                         "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent = %s ".
 
  104                         "JOIN role_data rd ON ua.rol_id=rd.role_id ".
 
  105                         "JOIN object_data od ON od.obj_id=rd.role_id ".
 
  106                         "WHERE ua.usr_id = %s ".
 
  107                         "ORDER BY disk_quota DESC, role_id ASC",
 
  108                 array(
'integer',
'integer'),
 
  109                 array(ROLE_FOLDER_ID, $a_user_id));
 
  112                 $info[
'role_id'] = 
$row->role_id;
 
  113                 $info[
'role_title'] = 
$row->title;
 
  117                 $info[
'role_disk_quota']  = (
$row->role_id == SYSTEM_ROLE_ID) ? -log(0) : 
$row->disk_quota;
 
  118                 $info[
'disk_quota'] = max($info[
'user_disk_quota'], $info[
'role_disk_quota']);
 
  147                 $res = $ilDB->query(
"SELECT keyword, value ".
 
  149                         "WHERE usr_id = ".$ilDB->quote($a_user_id, 
'integer').
" ".
 
  150                         "AND ".$ilDB->like(
"keyword", 
"text", 
'disk\\_usage%')
 
  154                         switch (
$row->keyword)
 
  156                                 case 'disk_usage.last_update' :
 
  157                                         $info[
'last_update'] = 
$row->value;
 
  161                                         $info[
'disk_usage'] = 
$row->value;
 
  170                                         preg_match(
'/^disk_usage\\.([^.]+)\\.([^.]+)/', 
$row->keyword, $matches);
 
  175                                                 $detail_data = $details[$type];
 
  176                                                 if ($detail_data == null) 
 
  178                                                         $detail_data = array(
'type'=>$type);
 
  180                                                 $detail_data[$key] = 
$row->value;
 
  182                                         $details[$type] = $detail_data;
 
  186                 $info[
'details'] = $details;
 
  219         public static function _fetchDiskQuotaReport($a_usage_filter = 3, $a_access_filter = 1,  $a_order_column=
'disk_usage',$a_order_by=
'desc')
 
  224                 if (! $a_order_column) {
 
  225                         $a_order_column = 
'disk_usage';
 
  228                 switch ($a_usage_filter) {
 
  233                                 $where_clause = 
'WHERE (p2.value IS NULL) ';
 
  237                                 $where_clause = 
'WHERE (p2.value > 0) ';
 
  240                                 $where_clause = 
'WHERE (p2.value > p1.value AND p2.value > rq.role_disk_quota) ';
 
  243                 switch ($a_access_filter) {
 
  249                                 $where_clause .= ($where_clause == 
'' ? 
'WHERE ' : 
' AND ' ).
 
  250                                         '(u.active=1 AND (u.time_limit_unlimited = 1 OR '.$ilDB->unixTimestamp().
' BETWEEN u.time_limit_from AND u.time_limit_until)) ';
 
  253                                 $where_clause .= ($where_clause == 
'' ? 
'WHERE ' : 
' AND ' ).
 
  254                                         '(u.active=0 OR (u.time_limit_unlimited IS NULL AND '.$ilDB->unixTimestamp().
' NOT BETWEEN u.time_limit_from AND u.time_limit_until)) ';
 
  258                 $res = $ilDB->queryf(
 
  259                         "SELECT u.usr_id,u.firstname,u.lastname,u.login,u.email,u.last_login,u.active,".
 
  260                                 "u.time_limit_unlimited, ".$ilDB->fromUnixtime(
"u.time_limit_from").
", ".$ilDB->fromUnixtime(
"u.time_limit_until").
",".
 
  266                                 "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,".
 
  268                                 "CASE WHEN ".$ilDB->unixTimestamp().
" BETWEEN u.time_limit_from AND u.time_limit_until THEN 0 ELSE 1 END expired,".
 
  269                                 "rq.role_disk_quota, system_role.rol_id role_id, ".
 
  270                                 "p1.value+0 user_disk_quota,".
 
  271                                 "p2.value+0 disk_usage, ".
 
  272                                 "p3.value last_update, ".
 
  273                                 "p4.value last_reminder, ".
 
  277                                 "CASE WHEN rq.role_disk_quota+0>p1.value+0 OR p1.value IS NULL THEN rq.role_disk_quota+0 ELSE p1.value+0 END disk_quota ".
 
  281                         "JOIN (SELECT u.usr_id usr_id,MAX(rd.disk_quota) role_disk_quota ".
 
  283                                 "JOIN rbac_ua ua ON ua.usr_id=u.usr_id ".
 
  284                                 "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent=%s  ".
 
  285                                 "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 ".
 
  288                         "LEFT JOIN rbac_ua system_role ON system_role.usr_id=u.usr_id AND system_role.rol_id = %s ".
 
  291                         "LEFT JOIN usr_pref p1 ON p1.usr_id=u.usr_id AND p1.keyword = 'disk_quota'  ".
 
  294                         "LEFT JOIN usr_pref p2 ON p2.usr_id=u.usr_id AND p2.keyword = 'disk_usage'  ".
 
  297                         "LEFT JOIN usr_pref p3 ON p3.usr_id=u.usr_id AND p3.keyword = 'disk_usage.last_update'  ".
 
  300                         "LEFT JOIN usr_pref p4 ON p4.usr_id=u.usr_id AND p4.keyword = 'disk_quota_last_reminder'  ".
 
  303                         "ORDER BY ".$a_order_column.
" ".($a_order_by==
'asc'?
' ASC':
' DESC').
", ".
 
  304                                 "lastname, firstname, login" 
  306                 array(
'integer',
'integer'),
 
  307                 array(ROLE_FOLDER_ID, SYSTEM_ROLE_ID)
 
  309                 $previous_usr_id = null;
 
  311                         if ($previous_usr_id != 
$row[
'usr_id'])
 
  314                                 $previous_usr_id = 
$row[
'usr_id'];
 
  335                 $ilDB->manipulate(
"DELETE FROM usr_pref ".
 
  336                         "WHERE ".$ilDB->like(
"keyword", 
"text", 
'disk_usage%'));
 
  339                 require_once 
'Modules/File/classes/class.ilObjFileAccess.php';
 
  342                 require_once 
'Modules/Forum/classes/class.ilObjForumAccess.php';
 
  345                 require_once 
'Modules/HTMLLearningModule/classes/class.ilObjFileBasedLMAccess.php';
 
  348                 require_once 
'Modules/MediaCast/classes/class.ilObjMediaCastAccess.php';
 
  351                 require_once 
'Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php';
 
  354                 require_once 
'Services/Mail/classes/class.ilObjMailAccess.php';
 
  359                 $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  360                         "(usr_id, keyword, value) ".
 
  361                         "SELECT usr_id, 'disk_usage', SUM(value) ".
 
  363                         "WHERE ".$ilDB->like(
"keyword", 
"text", 
'disk_usage.%.size%').
 
  368                 $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  369                         "(usr_id, keyword, value) ".
 
  370                         "SELECT usr_id, 'disk_usage.last_update', ".$ilDB->now().
" ".
 
  393                 $res = $ilDB->query(
"SELECT DISTINCT d.obj_id, d.owner ".
 
  394                         "FROM object_data d ".
 
  395                         "JOIN object_reference r ON d.obj_id=r.obj_id ".
 
  396                         "JOIN tree t ON t.child=r.ref_id ".
 
  397                         "WHERE d.type = ".$ilDB->quote($a_type, 
"text").
" ".
 
  408                         if (
$row->owner != $owner) {
 
  409                                 if ($owner != null) {
 
  410                                         $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  411                                                 "(usr_id, keyword, value) ".
 
  413                                                 "(".$ilDB->quote($owner,
'integer').
", ".
 
  414                                                 $ilDB->quote(
'disk_usage.'.$a_type.
'.size').
", ".
 
  415                                                 $ilDB->quote(
$size, 
'integer').
")");
 
  417                                         $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  418                                                 "(usr_id, keyword, value) ".
 
  420                                                 "(".$ilDB->quote($owner,
'integer').
", ".
 
  421                                                 $ilDB->quote(
'disk_usage.'.$a_type.
'.count').
", ".
 
  422                                                 $ilDB->quote($count, 
'integer').
")" 
  426                                 $owner = 
$row->owner;
 
  430                         $size += $a_access_obj->_lookupDiskUsage(
$row->obj_id);
 
  433                 if ($owner != null) {
 
  434                         $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  435                                 "(usr_id, keyword, value) ".
 
  437                                 "(".$ilDB->quote($owner,
'integer').
", ".
 
  438                                 $ilDB->quote(
'disk_usage.'.$a_type.
'.size').
", ".
 
  439                                 $ilDB->quote(
$size, 
'integer').
")");
 
  441                         $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  442                                 "(usr_id, keyword, value) ".
 
  444                                 "(".$ilDB->quote($owner,
'integer').
", ".
 
  445                                 $ilDB->quote(
'disk_usage.'.$a_type.
'.count').
", ".
 
  446                                 $ilDB->quote($count, 
'integer').
")");
 
  469                 $res = $ilDB->query(
"SELECT usr_id FROM usr_data");
 
  473                         $data = $a_access_obj->_lookupDiskUsageOfUser(
$row->usr_id);
 
  475                         if (
$data[
'size'] != null && 
$data[
'count'] != null)
 
  477                         $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  478                                 "(usr_id, keyword, value) ".
 
  480                                         "(".$ilDB->quote(
$row->usr_id,
'integer').
", ".
 
  481                                         $ilDB->quote(
'disk_usage.'.$a_type.
'.size').
", ".
 
  482                                         $ilDB->quote(
$data[
'size'], 
'integer').
")");
 
  483                         $ilDB->manipulate(
"INSERT INTO usr_pref ".
 
  484                                 "(usr_id, keyword, value) ".
 
  486                                         "(".$ilDB->quote(
$row->usr_id,
'integer').
", ".
 
  487                                         $ilDB->quote(
'disk_usage.'.$a_type.
'.count').
", ".
 
  488                                         $ilDB->quote(
$data[
'count'], 
'integer').
")");
 
  497                 $lastStart = $ilSetting->get(
'last_cronjob_disk_quota_sum_start_ts', 0);
 
  498                 if( !$lastStart || date(
'dmY', $lastStart) != date(
'dmY') )
 
  500                         $ilSetting->set(
'last_cronjob_disk_quota_sum_start_ts', time());
 
  502                         include_once 
'Services/Mail/classes/class.ilDiskQuotaSummaryNotification.php';
 
  517                 require_once 
'Services/Mail/classes/class.ilDiskQuotaReminderMail.php';
 
  520                 $res = $ilDB->queryf(
 
  521                         "SELECT u.usr_id,u.gender,u.firstname,u.lastname,u.login,u.email,u.last_login,u.active,".
 
  522                                 "u.time_limit_unlimited, ".$ilDB->fromUnixtime(
"u.time_limit_from").
", ".$ilDB->fromUnixtime(
"u.time_limit_until").
",".
 
  528                                 "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,".
 
  530                                 " CASE WHEN ".$ilDB->unixTimestamp().
" BETWEEN u.time_limit_from AND u.time_limit_until THEN 0 ELSE 1 END expired,".
 
  531                                 "rq.role_disk_quota, system_role.rol_id role_id, ".
 
  532                                 "p1.value+0 user_disk_quota,".
 
  533                                 "p2.value+0 disk_usage, ".
 
  534                                 "p3.value last_update, ".
 
  535                                 "p4.value last_reminder, ".
 
  536                                 "p5.value language, ".
 
  540                                 "CASE WHEN rq.role_disk_quota+0>p1.value+0 OR p1.value IS NULL THEN rq.role_disk_quota+0 ELSE p1.value+0 END disk_quota ".
 
  544                         "JOIN (SELECT u.usr_id usr_id,MAX(rd.disk_quota) role_disk_quota ".
 
  546                                 "JOIN rbac_ua ua ON ua.usr_id=u.usr_id ".
 
  547                                 "JOIN rbac_fa fa ON fa.rol_id=ua.rol_id AND fa.parent=%s  ".
 
  548                                 "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 ".
 
  551                         "LEFT JOIN rbac_ua system_role ON system_role.usr_id=u.usr_id AND system_role.rol_id = %s ".
 
  554                         "LEFT JOIN usr_pref p1 ON p1.usr_id=u.usr_id AND p1.keyword = 'disk_quota'  ".
 
  557                         "LEFT JOIN usr_pref p2 ON p2.usr_id=u.usr_id AND p2.keyword = 'disk_usage'  ".
 
  560                         "LEFT JOIN usr_pref p3 ON p3.usr_id=u.usr_id AND p3.keyword = 'disk_usage.last_update'  ".
 
  563                         "LEFT JOIN usr_pref p4 ON p4.usr_id=u.usr_id AND p4.keyword = 'disk_quota_last_reminder'  ".
 
  566                         "LEFT JOIN usr_pref p5 ON p5.usr_id=u.usr_id AND p5.keyword = 'language'  ".
 
  570                         'WHERE (p2.value > p1.value AND p2.value > rq.role_disk_quota) '.
 
  571                         'AND (u.active=1 AND (u.time_limit_unlimited = 1 OR '.$ilDB->unixTimestamp().
' BETWEEN u.time_limit_from AND u.time_limit_until)) '.
 
  572                         'AND (p4.value IS NULL OR p4.value < DATE_SUB(NOW(), INTERVAL 7 DAY)) ' 
  575                 array(
'integer',
'integer'),
 
  576                 array(ROLE_FOLDER_ID, SYSTEM_ROLE_ID)
 
  581                         $row[
'disk_usage_details'] = $details[
'details'];
 
  584                         $mail->setData(
$row);
 
  588                         if (
$row[
'last_reminder'] != null)
 
  590                                 $ilDB->manipulatef(
"UPDATE usr_pref SET value= ".$ilDB->now().
" ".
 
  591                                         "WHERE usr_id=%s AND keyword = 'disk_quota_last_reminder'" 
  594                                         array(
$row[
'usr_id'])
 
  599                                 $ilDB->manipulatef(
"INSERT INTO usr_pref (usr_id, keyword, value) ".
 
  600                                         "VALUES (%s, 'disk_quota_last_reminder', ".$ilDB->now().
")" 
  603                                         array(
$row[
'usr_id'])
 
  617                 require_once 
'Services/Mail/classes/class.ilDiskQuotaReminderMail.php';
 
  620                 $res = $ilDB->query(
"SELECT MAX(value) last_update ".
 
  621                         "FROM usr_pref WHERE keyword='disk_usage.last_update'");
 
  623                 return (
$row != null) ? 
$row[
'last_update'] : null;