/** * Retrieve categories and return them as an array of Category objects * @param int category id * @param int user id (category owner) * @param string course code * @param int parent category * @param bool visible * @param int session id (in case we are in a session) * @param bool Whether to show all "session" categories (true) or hide them (false) in case there is no session id */ public static function load($id = null, $user_id = null, $course_code = null, $parent_id = null, $visible = null, $session_id = null, $order_by = null) { //if the category given is explicitly 0 (not null), then create // a root category object (in memory) if (isset($id) && (int) $id === 0) { $cats = array(); $cats[] = Category::create_root_category(); return $cats; } $tbl_grade_categories = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY); $sql = 'SELECT * FROM ' . $tbl_grade_categories; $paramcount = 0; if (isset($id)) { $id = Database::escape_string($id); $sql .= ' WHERE id = ' . intval($id); $paramcount++; } if (isset($user_id)) { $user_id = intval($user_id); if ($paramcount != 0) { $sql .= ' AND'; } else { $sql .= ' WHERE'; } $sql .= ' user_id = ' . intval($user_id); $paramcount++; } if (isset($course_code)) { $course_code = Database::escape_string($course_code); if ($paramcount != 0) { $sql .= ' AND'; } else { $sql .= ' WHERE'; } if ($course_code == '0') { $sql .= ' course_code is null '; } else { $sql .= " course_code = '" . Database::escape_string($course_code) . "'"; } /*if ($show_session_categories !== true) { // a query on the course should show all // the categories inside sessions for this course // otherwise a special parameter is given to ask explicitely $sql .= " AND (session_id IS NULL OR session_id = 0) "; } else {*/ if (empty($session_id)) { $sql .= ' AND (session_id IS NULL OR session_id = 0) '; } else { $sql .= ' AND session_id = ' . (int) $session_id . ' '; } //} $paramcount++; } if (isset($parent_id)) { $parent_id = Database::escape_string($parent_id); if ($paramcount != 0) { $sql .= ' AND '; } else { $sql .= ' WHERE '; } $sql .= ' parent_id = ' . intval($parent_id); $paramcount++; } if (isset($visible)) { $visible = Database::escape_string($visible); if ($paramcount != 0) { $sql .= ' AND'; } else { $sql .= ' WHERE'; } $sql .= ' visible = ' . intval($visible); $paramcount++; } if (!empty($order_by)) { if (!empty($order_by) && $order_by != '') { $sql .= ' ' . $order_by; } } $result = Database::query($sql); $allcat = array(); if (Database::num_rows($result) > 0) { $allcat = Category::create_category_objects_from_sql_result($result); } return $allcat; }
/** * Retrieve categories and return them as an array of Category objects * @param int $id category id * @param int $user_id (category owner) * @param string $course_code * @param int $parent_id parent category * @param bool $visible * @param int $session_id (in case we are in a session) * @param bool $order_by Whether to show all "session" * categories (true) or hide them (false) in case there is no session id */ public static function load($id = null, $user_id = null, $course_code = null, $parent_id = null, $visible = null, $session_id = null, $order_by = null) { //if the category given is explicitly 0 (not null), then create // a root category object (in memory) if (isset($id) && (int) $id === 0) { $cats = array(); $cats[] = Category::create_root_category(); return $cats; } $em = Database::getManager(); $qb = $em->createQueryBuilder(); $qb->select('gc')->from('ChamiloCoreBundle:GradebookCategory', 'gc'); if (isset($id)) { $id = intval($id); $qb->andWhere($qb->expr()->eq('gc.id', $id)); } if (isset($user_id)) { $user_id = intval($user_id); $qb->andWhere($qb->expr()->eq('gc.userId', $user_id)); } if (isset($course_code)) { if ($course_code == '0') { $qb->andWhere($qb->expr()->isNull('gc.course')); } else { $courseId = api_get_course_int_id($course_code); $qb->andWhere($qb->expr()->eq('gc.course', $courseId)); } /*if ($show_session_categories !== true) { // a query on the course should show all // the categories inside sessions for this course // otherwise a special parameter is given to ask explicitely $sql .= " AND (session_id IS NULL OR session_id = 0) "; } else {*/ if (empty($session_id)) { $qb->andWhere($qb->expr()->orX($qb->expr()->isNull('gc.sessionId'), $qb->expr()->eq('gc.sessionId', 0))); } else { $session_id = intval($session_id); $qb->andWhere($qb->expr()->eq('gc.sessionId', $session_id)); } //} } if (isset($parent_id)) { $parent_id = intval($parent_id); $qb->andWhere($qb->expr()->eq('gc.parentId', $parent_id)); } if (isset($visible)) { $visible = intval($visible); $qb->andWhere($qb->expr()->eq('gc.visible', $visible)); } if (!empty($order_by) && is_array($order_by)) { foreach ($order_by as $sort => $order) { $qb->orderBy("gc.{$sort}", $order); } } $result = $qb->getQuery()->getResult(); $categories = array(); if (count($result) > 0) { $categories = Category::createCategoryObjectsFromEntities($result); } return $categories; }