/**
  * 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;
 }