Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/newscorm/learnpath_functions.inc.php

136 lines
4.4 KiB

<?php
/* For licensing terms, see /license.txt */
/**
* This is a function library for the learning path.
*
* Due to the face that the learning path has been built upon the resoucelinker,
* naming conventions have changed at least 2 times. You can see here in order the :
* 1. name used in the first version of the resourcelinker
* 2. name used in the first version of the LP
* 3. name used in the second (current) version of the LP
*
* 1. 2. 3.
* Category = Chapter = Module
* Item (?) = Item = Step
*
* @author Denes Nagy <darkden@evk.bke.hu>, main author
* @author Roan Embrechts, some code cleaning
* @author Yannick Warnier <yannick.warnier@beeznest.com>, multi-level learnpath behaviour + new SCORM tool
* @access public
* @package chamilo.learnpath
* @todo rename functions to coding conventions: not deleteitem but delete_item, etc
* @todo rewrite functions to comply with phpDocumentor
* @todo remove code duplication
*/
/**
* This function returns false if there is at least one item in the path
* @param Learnpath ID
* @return boolean True if nothing was found, false otherwise
*/
function is_empty($id) {
$tbl_learnpath_item = Database :: get_course_table(TABLE_LEARNPATH_ITEM);
$tbl_learnpath_chapter = Database :: get_course_table(TABLE_LEARNPATH_CHAPTER);
$course_id = api_get_course_int_id();
$sql = "SELECT * FROM $tbl_learnpath_chapter WHERE c_id = $course_id AND lp_id=$id ORDER BY display_order ASC";
$result = Database::query($sql);
$num_modules = Database::num_rows($result);
$empty = true;
if ($num_modules != 0) {
while ($row = Database::fetch_array($result)) {
$num_items = 0;
$parent_item_id = $row['id'];
$sql2 = "SELECT * FROM $tbl_learnpath_item WHERE c_id = $course_id AND (parent_item_id=$parent_item_id) ORDER BY display_order ASC";
$result2 = Database::query($sql2);
$num_items = Database::num_rows($result2);
if ($num_items > 0) {
$empty = false;
}
}
}
return ($empty);
}
/**
* This function deletes an entire directory
* @param string The directory path
* @return boolean True on success, false on failure
*/
function deldir($dir) {
$dh = opendir($dir);
while ($file = readdir($dh)) {
if ($file != '.' && $file != '..') {
$fullpath = $dir.'/'.$file;
if (!is_dir($fullpath)) {
unlink($fullpath);
} else {
deldir($fullpath);
}
}
}
closedir($dh);
if (rmdir($dir)) {
return true;
}
return false;
}
function rcopy($source, $dest) {
//error_log($source." -> ".$dest, 0);
if (!file_exists($source)) {
//error_log($source." does not exist", 0);
return false;
}
if (is_dir($source)) {
//error_log($source." is a dir", 0);
// This is a directory.
// Remove trailing '/'
if (strrpos($source, '/') == sizeof($source) - 1) {
$source = substr($source, 0, size_of($source) - 1);
}
if (strrpos($dest, '/') == sizeof($dest) - 1) {
$dest = substr($dest, 0, size_of($dest) - 1);
}
if (!is_dir($dest)) {
$res = @mkdir($dest, api_get_permissions_for_new_directories());
if ($res !== false) {
return true;
} else {
// Remove latest part of path and try creating that.
if (rcopy(substr($source, 0, strrpos($source, '/')), substr($dest, 0, strrpos($dest, '/')))) {
return @mkdir($dest, api_get_permissions_for_new_directories());
} else {
return false;
}
}
}
return true;
} else {
// This is presumably a file.
//error_log($source." is a file", 0);
if (!@ copy($source, $dest)) {
//error_log("Could not simple-copy $source", 0);
$res = rcopy(dirname($source), dirname($dest));
if ($res === true) {
//error_log("Welcome dir created", 0);
return @ copy($source, $dest);
} else {
return false;
//error_log("Error creating path", 0);
}
} else {
//error_log("Could well simple-copy $source", 0);
return true;
}
}
}