@ -1,8 +1,7 @@
<?php
/**
* This script synchronize the exercise score (track_e_exercises.exe_result)
* with the LP score result (lp_item_view.score).
* This script works only if 1 there's one attempt
* This script deletes all courses created and last visited before
* a specific date (to be edited below)
*/
exit;
@ -14,19 +13,21 @@ if (PHP_SAPI !== 'cli') {
}
// The date before which the course must have been created to be considered
$creation = '2013-01-01 ';
$creation = '2018-12-14 ';
// The last date at which the course must have been accessed to be considered.
// If it was accessed *after* that date, it will NOT be considered for deletion.
$access = '2013-01-01 ';
$access = '2018-12-14 ';
$tableExercise = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$tableCourse = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "SELECT
id, code, directory, db_name, creation_date, last_visit
id, code, directory, creation_date, last_visit
FROM $tableCourse c
WHERE creation_date < '$creation' AND last_visit < '$access'
ORDER by code
WHERE creation_date < '$creation' AND (last_visit < '$access' OR last_visit is NULL) ".
// Change this line to avoid deleting specifi courses
// "AND c.code NOT IN ('CHAMILOTEACHER', 'CHAMILOADMIN') ".
"ORDER by code
";
echo $sql.PHP_EOL;
@ -36,28 +37,36 @@ $total = 0;
$count = 0;
if (!empty($items)) {
foreach ($items as $item) {
$size = exec('du -sh '.__DIR__.'/../../courses/'.$item['directory']);
echo "Course ".$item['code'].'('.$item['id'].') created on '.$item['creation_date'].' and last used on '.$item['last_visit'].' uses '.substr($size, 0, 8).PHP_EOL;
//if (substr($size, 0, 4) == '160K' or substr($size, 0, 4) == '9,1M') {
CourseManager::delete_course($item['code']);
// The normal procedure moves the course directory to archive, so
// delete it there as well
echo('rm -rf '.__DIR__.'/../../archive/'.$item['directory'].'_*').PHP_EOL;
exec('rm -rf '.__DIR__.'/../../archive/'.$item['directory'].'_*');
// The normal procedure also created a database dump, but it is
// stored in the course folder, so no issue there...
if (substr($size, 3, 1) == 'K') {
$total += substr($size, 0, 3);
}
if (substr($size, 3, 1) == 'M') {
//$total += ;
$total += substr($size, 0, 3)*1024;
}
$count ++;
if ($count%100 == 0) {
echo '### Until now: '.$total.'K in '.$count.' courses'.PHP_EOL;
}
//}
$size = exec('du -sh '.__DIR__.'/../../app/courses/'.$item['directory']);
list($mysize, $mypath) = preg_split('/\t/', $size);
$size = trim($mysize);
echo "[$count] Course ".$item['code'].'('.$item['id'].') created on '.$item['creation_date'].' and last used on '.$item['last_visit'].' uses '.$size.PHP_EOL;
CourseManager::delete_course($item['code']);
// The normal procedure moves the course directory to archive, so
// delete it there as well
echo('rm -rf '.__DIR__.'/../../app/courses/'.$item['directory']).PHP_EOL;
exec('rm -rf '.__DIR__.'/../../app/courses/'.$item['directory']);
echo('rm -rf '.__DIR__.'/../../app/cache/'.$item['directory'].'_*').PHP_EOL;
exec('rm -rf '.__DIR__.'/../../app/cache/'.$item['directory'].'_*');
// The normal procedure also created a database dump, but it is
// stored in the course folder, so no issue there...
$matches = [];
preg_match('/^(\d+)(\D)$/', $size, $matches);
switch($matches[2]) {
case 'K':
$total += $matches[1];
break;
case 'M':
$total += $matches[1]*1024;
break;
case 'G':
$total += $matches[1]*1024*1024;
break;
}
$count ++;
if ($count%100 == 0) {
echo '### Until now: '.$total.'K in '.$count.' courses'.PHP_EOL;
}
}
}
echo $total.'K in '.$count.' courses'.PHP_EOL;