Beispiel #1
0
 /**
  * function displayForumIndex
  *
  * @param  object  $userObj
  * @param  integer $id_course
  * @param  integer $expand_index
  * @param  string  $order
  * @param  integer $id_course_instance
  * @param  string  $container_div_name
  * @return string  -
  */
 public static function displayForumIndex($userObj, $id_course, $expand_index, $order, $id_course_instance, $with_icons = NULL, $container_div_name = NULL)
 {
     $dh = $GLOBALS['dh'];
     $show_visits = !$GLOBALS['hide_visits'];
     /**
      *
      */
     if (!isset($id_course_instance)) {
         //return "";
         return new CText('');
     }
     // vito, 3 ottobre 2008
     $container_div = "";
     if ($container_div_name != NULL) {
         $container_div = $container_div_name;
     } else {
         $container_div = 'id_forum_index';
     }
     $show_icons = FALSE;
     if ($with_icons) {
         $show_icons = TRUE;
     }
     $callback_params = array('container_div' => $container_div);
     if ($order == 'chrono' || $order == 'struct') {
         $order_by_date = TRUE;
     } else {
         $order_by_date = FALSE;
     }
     /*
      * Get tutor id for this course instance
      */
     $class_tutor_id = $dh->course_instance_tutor_get($id_course_instance);
     if (AMA_DataHandler::isError($class_tutor_id)) {
         return $class_tutor_id;
     }
     $callback_params['user_id'] = $userObj->getId();
     $callback_params['class_tutors_ids'] = $class_tutor_id;
     $callback_params['show_icons'] = $show_icons;
     $forum_data = $dh->get_notes_for_this_course_instance($id_course_instance, $userObj->id_user, $order_by_date, $show_visits);
     switch ($userObj->tipo) {
         // sarebbe meglio $userObj->getType()
         case AMA_TYPE_AUTHOR:
             $callback = 'forumAuthorCallback';
             break;
         case AMA_TYPE_TUTOR:
             $callback = 'forumTutorCallback';
             $callback_params['id_course_instance'] = $id_course_instance;
             break;
         case AMA_TYPE_STUDENT:
             $callback = 'forumStudentCallback';
             $callback_params['id_course_instance'] = $id_course_instance;
             break;
     }
     if (AMA_DataHandler::isError($forum_data)) {
         return $forum_data;
     } else {
         //retrieving data about nodes' visits
         //first: retrieve visits data about all nodes of selected course and arrange them into an associative array
         $someone_there_data = array();
         $tmp_someone_there_data = ADALoggableUser::is_someone_there_courseFN($id_course_instance);
         if (!empty($tmp_someone_there_data)) {
             foreach ($tmp_someone_there_data as $v) {
                 $someone_there_data[$v['id_nodo']][] = $v;
             }
         }
         unset($tmp_someone_there_data);
         //free memory
         foreach ($forum_data as $k => $v) {
             //let's check if there are records for the node
             if (isset($someone_there_data[$v['id_nodo']])) {
                 $forum_data[$k]['is_someone_there'] = count($someone_there_data[$v['id_nodo']]) >= 1;
             } else {
                 $forum_data[$k]['is_someone_there'] = false;
             }
         }
         unset($someone_there_data);
         //free memory
     }
     /*
      * Attach the subtrees containing notes to the root node for this course instance.
      * This is required in order to display the index.
      */
     $forum_root_node = $id_course . '_' . ADA_DEFAULT_NODE;
     $notes_parent_nodes = array();
     // First, save all the parent ids for the notes in the forum
     foreach ($forum_data as $note) {
         $notes_parent_nodes[$note['id_nodo']] = TRUE;
     }
     // Then, if a note has a parent id which is not a note, attach it to
     // forum_root_node
     for ($i = 0; $i < count($forum_data); $i++) {
         if (!isset($notes_parent_nodes[$forum_data[$i]['id_nodo_parent']])) {
             $forum_data[$i]['id_nodo_parent'] = $forum_root_node;
         }
     }
     $index = CDOMElement::create('div', "id:{$container_div}");
     if ($order == 'chrono') {
         $index->addChild(self::ordered($forum_data, $callback, $callback_params, $forum_root_node));
     } else {
         $index->addChild(self::struct($forum_data, $forum_root_node, $expand_index, $callback, $callback_params));
     }
     return $index;
 }