Adding support for multiple URL for course categories see BT#6195

1.9.x
Julio Montoya 12 years ago
parent 71278e567f
commit 1f162d6fba
  1. 14
      main/admin/configure_homepage.php
  2. 2
      main/admin/course_category.php
  3. 1
      main/course_info/infocours.php
  4. 72
      main/inc/lib/course_category.lib.php
  5. 2
      main/inc/lib/database.constants.inc.php
  6. 91
      main/inc/lib/urlmanager.lib.php

@ -19,11 +19,11 @@ api_protect_admin_script();
require_once api_get_path(LIBRARY_PATH).'WCAG/WCAG_rendering.php';
require_once api_get_path(LIBRARY_PATH).'fileUpload.lib.php';
require_once api_get_path(LIBRARY_PATH).'course_category.lib.php';
global $_configuration;
$action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : null;
$tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY);
$tool_name = get_lang('ConfigureHomePage');
$_languages = api_get_languages();
@ -198,7 +198,7 @@ if (!empty($action)) {
$fp = fopen($homep.$topf.'_'.$lang_name.$ext, 'w');
fputs($fp, $home_top);
fclose($fp);
}
}
}
@ -234,7 +234,7 @@ if (!empty($action)) {
}
}
}
} else {
fputs($fp, '');
if ($_POST['all_langs']) {
@ -460,9 +460,9 @@ if (!empty($action)) {
$fp = fopen($homep.$menuf.'_'.$lang_name.$ext, 'w');
fputs($fp, $home_menu);
fclose($fp);
}
}
}
}
}
}
@ -687,7 +687,7 @@ if (!empty($action)) {
}// end of "else" in if($_POST['formSent']) condition
} else {
//if $action is empty, then prepare a list of the course categories to display (?)
$Categories = Database::store_result(Database::query("SELECT name FROM $tbl_category WHERE parent_id IS NULL ORDER BY tree_pos"));
$Categories = getCategoriesToDisplayInHomePage();
}
// Display section
@ -896,7 +896,7 @@ switch ($action) {
</tr>
<tr>
<?php
$access_url_id = 1;
// we only show the category options for the main chamilo installation
if (api_is_multiple_url_enabled()) {

@ -2,7 +2,6 @@
/* For licensing terms, see /license.txt */
/**
* @package chamilo.admin
* @todo use formvalidator for the form
*/
/**
* Code
@ -123,7 +122,6 @@ if ($action == 'add' || $action == 'edit') {
echo Display::page_subheader($parentInfo['name']);
}
echo listCategories($category);
}
Display::display_footer();

@ -66,6 +66,7 @@ $tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
$tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
// Get all course categories
$sql = "SELECT code,name FROM ".$table_course_category."
WHERE auth_course_child ='TRUE' OR code = '".Database::escape_string($_course['categoryCode'])."'
ORDER BY tree_pos";

@ -13,6 +13,10 @@ function isMultipleUrlSupport()
return false;
}
/**
* @param string $category
* @return array
*/
function getCategory($category)
{
global $tbl_category;
@ -26,17 +30,33 @@ function getCategory($category)
}
/**
* @param $category
* @param string $category
* @return array
*/
function getCategories($category)
{
global $tbl_category, $tbl_course;
$category = Database::escape_string($category);
$sql = "SELECT t1.name,t1.code,t1.parent_id,t1.tree_pos,t1.children_count,COUNT(DISTINCT t3.code) AS nbr_courses
FROM $tbl_category t1 LEFT JOIN $tbl_category t2 ON t1.code=t2.parent_id LEFT JOIN $tbl_course t3 ON t3.category_code=t1.code
WHERE t1.parent_id " . (empty($category) ? "IS NULL" : "='$category'") . "
GROUP BY t1.name,t1.code,t1.parent_id,t1.tree_pos,t1.children_count ORDER BY t1.tree_pos";
$conditions = null;
if (isMultipleUrlSupport()) {
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
$conditions = " INNER JOIN $table a ON (t1.id = a.course_category_id)";
}
$sql = "SELECT
t1.name,
t1.code,
t1.parent_id,
t1.tree_pos,
t1.children_count,
COUNT(DISTINCT t3.code) AS nbr_courses
FROM $tbl_category t1
$conditions
LEFT JOIN $tbl_category t2 ON t1.code=t2.parent_id
LEFT JOIN $tbl_course t3 ON t3.category_code=t1.code
WHERE
t1.parent_id " . (empty($category) ? "IS NULL" : "='$category'") . "
GROUP BY t1.name,t1.code,t1.parent_id,t1.tree_pos,t1.children_count
ORDER BY t1.tree_pos";
$result = Database::query($sql);
return Database::store_result($result);
}
@ -66,6 +86,13 @@ function deleteNode($node)
}
}
/**
* @param string $code
* @param string $name
* @param string $canHaveCourses
* @param int $parent_id
* @return bool
*/
function addNode($code, $name, $canHaveCourses, $parent_id)
{
global $tbl_category;
@ -86,8 +113,14 @@ function addNode($code, $name, $canHaveCourses, $parent_id)
$sql = "INSERT INTO $tbl_category(name,code,parent_id,tree_pos,children_count,auth_course_child)
VALUES('$name','$code'," . (empty($parent_id) ? "NULL" : "'$parent_id'") . ",'$tree_pos','0','$canHaveCourses')";
Database::query($sql);
$categoryId = Database::insert_id();
updateFils($parent_id);
return true;
if (isMultipleUrlSupport()) {
addToUrl($categoryId);
}
return $categoryId;
}
function editNode($code, $name, $canHaveCourses, $old_code)
@ -190,10 +223,10 @@ function listCategories($categorySource)
foreach ($categories as $category) {
$editUrl = $mainUrl.'&id='.$category['code'].'&action=edit';
$deleteUrl = $mainUrl.'&id='.$category['code'].'&action=delete';
$moveUrl = $mainUrl.'&id='.$category['code'].'&action=moveUp&tree_pos='.$category['tree_pos'];
$deleteUrl = $mainUrl.'&id='.$category['code'].'&action=delete';
$actions = Display::url($editIcon, $editUrl).Display::url($deleteIcon, $deleteUrl).Display::url($moveIcon, $moveUrl);
$actions = Display::url($editIcon, $editUrl).Display::url($moveIcon, $moveUrl).Display::url($deleteIcon, $deleteUrl);
$url = api_get_path(WEB_CODE_PATH).'admin/course_category.php?category='.$category['code'];
$title = Display::url(
Display::return_icon('folder_document.gif', get_lang('OpenNode'), null, ICON_SIZE_SMALL).' '.$category['name'],
@ -203,7 +236,6 @@ function listCategories($categorySource)
$title,
$category['children_count'],
$category['nbr_courses'],
$actions
);
$column = 0;
@ -218,3 +250,25 @@ function listCategories($categorySource)
return Display::return_message(get_lang("NoCategories"), 'warning');
}
}
function getCategoriesToDisplayInHomePage()
{
global $tbl_category;
$sql = "SELECT name FROM $tbl_category WHERE parent_id IS NULL ORDER BY tree_pos";
return Database::store_result(Database::query($sql));
}
/**
* @param int $id
* @return bool
*/
function addToUrl($id)
{
if (!isMultipleUrlSupport()) {
return false;
}
UrlManager::addCourseCategoryListToUrl(array($id), array(api_get_current_access_url_id()));
}
/**
* CREATE TABLE IF NOT EXISTS access_url_rel_course_category (access_url_id int unsigned NOT NULL, course_category_id int unsigned NOT NULL, PRIMARY KEY (access_url_id, course_category_id));
*/

@ -83,6 +83,7 @@ define('TABLE_MAIN_ACCESS_URL_REL_USER', 'access_url_rel_user');
define('TABLE_MAIN_ACCESS_URL_REL_COURSE', 'access_url_rel_course');
define('TABLE_MAIN_ACCESS_URL_REL_SESSION', 'access_url_rel_session');
define('TABLE_MAIN_ACCESS_URL_REL_USERGROUP', 'access_url_rel_usergroup');
define('TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY', 'access_url_rel_course_category');
// Global calendar
define('TABLE_MAIN_SYSTEM_CALENDAR', 'sys_calendar');
@ -143,7 +144,6 @@ define('TABLE_STATISTIC_TRACK_C_REFERERS', 'track_c_referers');
define('TABLE_STATISTIC_TRACK_COURSE_RANKING', 'track_course_ranking');
define('TABLE_MAIN_USER_REL_COURSE_VOTE', 'user_rel_course_vote');
// SCORM database tables this is used only during the migration from 1.6 to 1.8 see update-db-scorm-1.6.x-1.8.0.inc
define('TABLE_SCORM_MAIN', 'scorm_main');
define('TABLE_SCORM_SCO_DATA', 'scorm_sco_data');

@ -11,16 +11,16 @@
*/
class UrlManager
{
/**
* Creates a new url access
*
* @author Julio Montoya <gugli100@gmail.com>,
*
* @param string The URL of the site
* @param string The description of the site
* @param int is active or not
* @return boolean if success
*/
/**
* Creates a new url access
*
* @author Julio Montoya <gugli100@gmail.com>,
*
* @param string The URL of the site
* @param string The description of the site
* @param int is active or not
* @return boolean if success
*/
public static function add($url, $description, $active)
{
$tms = time();
@ -407,7 +407,7 @@ class UrlManager
if (is_array($course_list) && is_array($url_list)){
foreach ($url_list as $url_id) {
foreach ($course_list as $course_code) {
$count = UrlManager::relation_url_course_exist($course_code,$url_id);
$count = self::relation_url_course_exist($course_code,$url_id);
if ($count==0) {
$sql = "INSERT INTO $table_url_rel_course
SET course_code = '".Database::escape_string($course_code)."', access_url_id = ".Database::escape_string($url_id);
@ -436,7 +436,7 @@ class UrlManager
if (is_array($userGroupList) && is_array($urlList)) {
foreach ($urlList as $urlId) {
foreach ($userGroupList as $userGroupId) {
$count = UrlManager::relation_url_usergroup_exist($userGroupId, $urlId);
$count = self::relation_url_usergroup_exist($userGroupId, $urlId);
if ($count == 0) {
$result = self::addUserGroupToUrl($userGroupId, $urlId);
if ($result) {
@ -452,6 +452,71 @@ class UrlManager
return $resultArray;
}
/**
* Add a group of user group into a group of URLs
* @author Julio Montoya
* @param array of course ids
* @param array of url_ids
* @return array
**/
public static function addCourseCategoryListToUrl($courseCategoryList, $urlList)
{
$resultArray = array();
if (is_array($courseCategoryList) && is_array($urlList)) {
foreach ($urlList as $urlId) {
foreach ($courseCategoryList as $categoryCourseId) {
$count = self::relationUrlCourseCategoryExist($categoryCourseId, $urlId);
if ($count == 0) {
$result = self::addCourseCategoryToUrl($categoryCourseId, $urlId);
if ($result) {
$resultArray[$urlId][$categoryCourseId] = 1;
} else {
$resultArray[$urlId][$categoryCourseId] = 0;
}
}
}
}
}
return $resultArray;
}
/**
* Checks the relationship between an URL and a UserGr
* oup (return the num_rows)
* @author Julio Montoya
* @param int $categoryCourseId
* @param int $urlId
* @return boolean true if success
* */
public static function relationUrlCourseCategoryExist($categoryCourseId, $urlId)
{
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
$sql= "SELECT course_category_id FROM $table
WHERE access_url_id = ".Database::escape_string($urlId)." AND
course_category_id = ".Database::escape_string($categoryCourseId);
$result = Database::query($sql);
$num = Database::num_rows($result);
return $num;
}
/**
* @param int $categoryCourseId
* @param int $urlId
* @return int
*/
public static function addCourseCategoryToUrl($categoryCourseId, $urlId)
{
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
$sql = "INSERT INTO $table
SET
course_category_id = '".intval($categoryCourseId)."',
access_url_id = ".intval($urlId);
Database::query($sql);
return Database::insert_id();
}
/**
* @param int $userGroupId
* @param int $urlId
@ -778,7 +843,7 @@ class UrlManager
// Deleting old users
foreach($existing_sessions as $existing_session) {
if(!in_array($existing_session, $session_list)) {
if (!in_array($existing_session, $session_list)) {
if (!empty($existing_session) && !empty($access_url_id)) {
UrlManager::delete_url_rel_session($existing_session,$access_url_id);
}

Loading…
Cancel
Save