From 0672f0386cc87e6a815664c5627eed9fe802c0c0 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 13 Aug 2015 19:40:23 +0200 Subject: [PATCH] Fix course cateogory order. --- main/inc/lib/course_category.lib.php | 89 ++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 25 deletions(-) diff --git a/main/inc/lib/course_category.lib.php b/main/inc/lib/course_category.lib.php index be5d3d6144..19786346b9 100755 --- a/main/inc/lib/course_category.lib.php +++ b/main/inc/lib/course_category.lib.php @@ -60,13 +60,19 @@ function getCategories($category) $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $category = Database::escape_string($category); $conditions = null; - $whereCondition = null; + $whereCondition = ''; + 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)"; $whereCondition = " AND a.access_url_id = ".api_get_current_access_url_id(); } + $parentIdCondition = " AND (t1.parent_id IS NULL OR t1.parent_id = '' )"; + if (!empty($category)) { + $parentIdCondition = " AND t1.parent_id = '$category' "; + } + $sql = "SELECT t1.name, t1.code, @@ -76,10 +82,13 @@ function getCategories($category) 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 + 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'") . " + 1 = 1 + $parentIdCondition $whereCondition GROUP BY t1.name, t1.code, @@ -87,9 +96,15 @@ function getCategories($category) t1.tree_pos, t1.children_count ORDER BY t1.tree_pos"; + $result = Database::query($sql); - return Database::store_result($result); + $categories = Database::store_result($result); + foreach ($categories as $category) { + $category['nbr_courses'] = 1; + } + + return $categories; } @@ -107,7 +122,6 @@ function addNode($code, $name, $canHaveCourses, $parent_id) $code = trim($code); $name = trim($name); $parent_id = trim($parent_id); - $canHaveCourses = $canHaveCourses; $code = CourseManager::generate_course_code($code); $sql = "SELECT 1 FROM $tbl_category @@ -123,7 +137,7 @@ function addNode($code, $name, $canHaveCourses, $parent_id) $params = [ 'name' => $name, 'code' => $code, - 'parent_id' => empty($parent_id) ? "NULL" : $parent_id, + 'parent_id' => empty($parent_id) ? '' : $parent_id, 'tree_pos' => $tree_pos, 'children_count' => 0, 'auth_course_child' => $canHaveCourses @@ -160,11 +174,13 @@ function updateParentCategoryChildrenCount($categoryId, $delta = 1) // Now we're at the top, get back down to update each child //$children_count = courseCategoryChildrenCount($categoryId); if ($delta >= 0) { - $sql = "UPDATE $tbl_category SET children_count = (children_count + $delta) WHERE code = '$categoryId'"; + $sql = "UPDATE $tbl_category SET children_count = (children_count + $delta) + WHERE code = '$categoryId'"; } else { - $sql = "UPDATE $tbl_category SET children_count = (children_count - ".abs($delta).") WHERE code = '$categoryId'"; + $sql = "UPDATE $tbl_category SET children_count = (children_count - ".abs($delta).") + WHERE code = '$categoryId'"; } - $result = Database::query($sql); + Database::query($sql); } /** @@ -234,8 +250,9 @@ function editNode($code, $name, $canHaveCourses, $old_code) /** * Move a node up on display * @param string $code - * @param string $tree_pos - * @param int $parent_id + * @param int $tree_pos + * @param string $parent_id + * * @return bool */ function moveNodeUp($code, $tree_pos, $parent_id) @@ -243,28 +260,47 @@ function moveNodeUp($code, $tree_pos, $parent_id) $tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY); $code = Database::escape_string($code); $tree_pos = intval($tree_pos); - $parent_id = intval($parent_id); + $parent_id = Database::escape_string($parent_id); + + $parentIdCondition = " AND (parent_id IS NULL OR parent_id = '' )"; + if (!empty($parent_id)) { + $parentIdCondition = " AND parent_id = '$parent_id' "; + } + $sql = "SELECT code,tree_pos - FROM $tbl_category - WHERE parent_id " . (empty($parent_id) ? "IS NULL" : " = $parent_id") . " AND tree_pos < $tree_pos - ORDER BY tree_pos DESC LIMIT 0,1"; + FROM $tbl_category + WHERE + tree_pos < $tree_pos + $parentIdCondition + ORDER BY tree_pos DESC + LIMIT 0,1"; + $result = Database::query($sql); if (!$row = Database::fetch_array($result)) { - - $sql = "SELECT code,tree_pos FROM $tbl_category - WHERE parent_id " . (empty($parent_id) ? "IS NULL" : " = $parent_id") . " AND tree_pos > $tree_pos - ORDER BY tree_pos DESC LIMIT 0,1"; + $sql = "SELECT code, tree_pos + FROM $tbl_category + WHERE + tree_pos > $tree_pos + $parentIdCondition + ORDER BY tree_pos DESC + LIMIT 0,1"; $result2 = Database::query($sql); - if (!$row2 = Database::fetch_array($result2)) { + if (!$row = Database::fetch_array($result2)) { return false; } } - Database::query("UPDATE $tbl_category SET tree_pos='" . $row['tree_pos'] . "' WHERE code='$code'"); - Database::query("UPDATE $tbl_category SET tree_pos='$tree_pos' WHERE code='" . $code . "'"); + $sql = "UPDATE $tbl_category + SET tree_pos ='" . $row['tree_pos'] . "' + WHERE code='$code'"; + Database::query($sql); - return true; + $sql = "UPDATE $tbl_category + SET tree_pos = '$tree_pos' + WHERE code= '" . $row['code'] . "'"; + Database::query($sql); + return true; } /** @@ -313,6 +349,7 @@ function getChildren($categoryCode) /** * @param string $categoryCode + * * @return array */ function getParents($categoryCode) @@ -323,7 +360,8 @@ function getParents($categoryCode) $tbl_category = Database::get_main_table(TABLE_MAIN_CATEGORY); $categoryCode = Database::escape_string($categoryCode); - $sql = "SELECT code, parent_id FROM $tbl_category WHERE code = '$categoryCode'"; + $sql = "SELECT code, parent_id FROM $tbl_category + WHERE code = '$categoryCode'"; $result = Database::query($sql); $children = array(); @@ -351,6 +389,7 @@ function getParentsToString($categoryCode) $categories[] = $category['code']; } $categoriesInString = implode(' > ', $categories).' > '; + return $categoriesInString; } return null;