* @author Percy Santiago * @author Yannick Warnier */ exit(); //remove this line to execute from the command line if (PHP_SAPI !== 'cli') { die('This script can only be executed from the command line'); } require __DIR__.'/../../main/inc/conf/configuration.php'; // Dates $expiryDate = '2015-06-01'; //session start date must be < to be considered $fromDate = '2011-01-01'; //session start date must be > to be considered $sessionCourses = array(); $coursesCodes = array(); $coursesDirs = array(); if (!$conexion = mysql_connect($_configuration['db_host'], $_configuration['db_user'], $_configuration['db_password'])) { echo 'Could not connect to database'; exit; } if (!mysql_select_db($_configuration['main_database'], $conexion)) { echo 'Could not select database '.$_configuration['main_database']; exit; } echo "[".time()."] Querying sessions\n"; $sql = "SELECT id FROM session where access_start_date < '$expiryDate' AND access_start_date > '$fromDate'"; $res = mysql_query($sql, $conexion); if ($res === false) { //die("Error querying sessions: ".Database::error($res)."\n"); } $countSessions = mysql_num_rows($res); $sql = "SELECT count(*) FROM session"; $resc = mysql_query($sql, $conexion); if ($resc === false) { //die("Error querying sessions: ".Database::error($res)."\n"); } $countAllSessions = mysql_result($resc, 0, 0); echo "[".time()."] Found $countSessions sessions between $fromDate and $expiryDate on a total of $countAllSessions sessions."."\n"; while ($session = mysql_fetch_assoc($res)) { $sql2 = "SELECT c.id AS cid, c.code as ccode, c.directory as cdir FROM course c, session_rel_course s WHERE s.id_session = ".$session['id']." AND s.course_code = c.code"; $res2 = mysql_query($sql2, $conexion); //Database::query($sql2); if ($res2 === false) { die("Error querying courses for session ".$session['id'].": ".mysql_error($res2)."\n"); } if (mysql_num_rows($res2) > 0) { while ($course = mysql_fetch_assoc($res2)) { $sessionCourses[$session['id']] = $course['cid']; //$_SESSION['session_course'] = $sessionCourses; if (empty($coursesCodes[$course['cid']])) { $coursesCodes[$course['cid']] = $course['ccode']; } if (empty($coursesDirs[$course['cid']])) { $coursesDirs[$course['cid']] = $course['cdir']; } } } } echo "[".time()."] Filled courses arrays. Now checking tasks...\n"; /** * Locate and destroy the expired tasks */ //$sessionCourse = $_SESSION['session_course']; $totalSize = 0; foreach ($sessionCourses as $sid => $cid) { // Check if a folder already exists in this session // Folders are exclusive to sessions. If a folder already exists in // another session, you will not be allowed to create the same folder in // another session. As such, folders belong to one and only one session. $sql = "SELECT id, url FROM c_student_publication WHERE filetype = 'folder' AND c_id = $cid AND session_id = $sid AND active = 1 AND url LIKE '%ALP%'"; $resCarpetas = mysql_query($sql, $conexion); //Database::query($sql); if (mysql_num_rows($resCarpetas) > 0) { while ($rowDemo = mysql_fetch_assoc($resCarpetas)) { $carpetaAlpElimina = $_configuration['root_sys'].'courses/'.$coursesDirs[$cid].'/work'.$rowDemo['url']; //echo "rm -rf ".$carpetaAlpElimina."\n"; $size = folderSize($carpetaAlpElimina); $totalSize += $size; echo "Freeing $size of a total $totalSize bytes in $carpetaAlpElimina\n"; exec('rm -rf '.$carpetaAlpElimina); } $sqldel = "DELETE FROM c_student_publication WHERE c_id = $cid AND session_id = $sid AND active = 1;"; $resdel = mysql_query($sqldel); if ($resdel === false) { echo "Error querying sessions: ".Database::error($resdel)."\n"; } } } echo "[".time()."] Deleted tasks from $countSessions sessions between $fromDate and $expiryDate on a total of $countAllSessions sessions."."\n"; /** * Helper function to calculate size of a folder * @author See php.net comments on filesize() */ function folderSize($dir) { $size = 0; $contents = glob(rtrim($dir, '/').'/*', GLOB_NOSORT); foreach ($contents as $contents_value) { if (is_file($contents_value)) { $size += filesize($contents_value); } else { $size += folderSize($contents_value); } } return $size; }