parent
							
								
									7c8107b70e
								
							
						
					
					
						commit
						ef00b3c86f
					
				@ -0,0 +1,139 @@ | 
				
			||||
<?php | 
				
			||||
/* For licensing terms, see /license.txt */ | 
				
			||||
/** | 
				
			||||
 * This script removes previous tasks from disk to clear space. | 
				
			||||
 * Configure the date on lines 22-23 to change the dates after/before which  | 
				
			||||
 * to delete. | 
				
			||||
 * This works based on sessions dates (it will not delete tasks from  | 
				
			||||
 * base courses). | 
				
			||||
 * This script should be located inside the tests/scripts/ folder to work | 
				
			||||
 * @author Paul Patrocinio <ppatrocino@icpna.edu.pe> | 
				
			||||
 * @author Percy Santiago <psantiago@icpna.edu.pe> | 
				
			||||
 * @author Yannick Warnier <yannick.warnier@beeznest.com> | 
				
			||||
 */ | 
				
			||||
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; | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue