Esempio n. 1
0
/**
 * @return void
 */
function disconnect_user_of_chat()
{
    $list_info_user_in_chat = users_list_in_chat();
    $course_id = api_get_course_int_id();
    $groupId = api_get_group_id();
    $now = time();
    $cd_date = date('Y-m-d', $now);
    $cdate_h = date('H', $now);
    $cdate_m = date('i', $now);
    $cdate_s = date('s', $now);
    $cd_count_time_seconds = $cdate_h * 3600 + $cdate_m * 60 + $cdate_s;
    if (is_array($list_info_user_in_chat) && count($list_info_user_in_chat) > 0) {
        foreach ($list_info_user_in_chat as $list_info_user) {
            $date_db_date = date('Y-m-d', api_strtotime($list_info_user['last_connection'], 'UTC'));
            $date_db_h = date('H', api_strtotime($list_info_user['last_connection'], 'UTC'));
            $date_db_m = date('i', api_strtotime($list_info_user['last_connection'], 'UTC'));
            $date_db_s = date('s', api_strtotime($list_info_user['last_connection'], 'UTC'));
            $date_count_time_seconds = $date_db_h * 3600 + $date_db_m * 60 + $date_db_s;
            if ($cd_date == $date_db_date) {
                if ($cd_count_time_seconds - $date_count_time_seconds > 5) {
                    $tbl_chat_connected = Database::get_course_table(TABLE_CHAT_CONNECTED);
                    $sql = 'DELETE FROM ' . $tbl_chat_connected . '
			 		        WHERE
			 		            c_id = ' . $course_id . ' AND
			 		            user_id = ' . $list_info_user['user_id'] . ' AND
			 		            to_group_id = ' . $groupId . '
                            ';
                    Database::query($sql);
                }
            }
        }
    }
}
Esempio n. 2
0
 function validate($values, $options)
 {
     if (!is_array($values[0]) && !is_array($values[1])) {
         return api_strtotime($values[0]) < api_strtotime($values[1]);
     } else {
         $compareFn = create_function('$a, $b', 'return mktime($a[\'H\'],$a[\'i\'],0,$a[\'M\'],$a[\'d\'],$a[\'Y\']) <=   mktime($b[\'H\'],$b[\'i\'],0,$b[\'M\'],$b[\'d\'],$b[\'Y\'] );');
         return $compareFn($values[0], $values[1]);
     }
 }
Esempio n. 3
0
 /**
  * Refreshes the chat windows (usually called every x seconds through AJAX)
  * @return void (prints JSON array of chat windows)
  */
 public function heartbeat()
 {
     $to_user_id = api_get_user_id();
     $minutes = 60;
     $now = time() - $minutes * 60;
     $now = api_get_utc_datetime($now);
     //OR  sent > '$now'
     $sql = "SELECT * FROM " . $this->table . "\n                WHERE to_user = '******' AND ( recd  = 0 ) ORDER BY id ASC";
     $result = Database::query($sql);
     $chat_list = array();
     while ($chat = Database::fetch_array($result, 'ASSOC')) {
         $chat_list[$chat['from_user']]['items'][] = $chat;
     }
     $items = array();
     foreach ($chat_list as $from_user_id => $rows) {
         $rows = $rows['items'];
         $user_info = api_get_user_info($from_user_id, true);
         //Cleaning tsChatBoxes
         unset($_SESSION['tsChatBoxes'][$from_user_id]);
         foreach ($rows as $chat) {
             $chat['message'] = Security::remove_XSS($chat['message']);
             $item = array('s' => '0', 'f' => $from_user_id, 'm' => $chat['message'], 'username' => $user_info['complete_name'], 'id' => $chat['id']);
             $items[$from_user_id]['items'][] = $item;
             $items[$from_user_id]['user_info']['user_name'] = $user_info['complete_name'];
             $items[$from_user_id]['user_info']['online'] = $user_info['user_is_online'];
             $_SESSION['openChatBoxes'][$from_user_id] = api_strtotime($chat['sent'], 'UTC');
         }
         $_SESSION['chatHistory'][$from_user_id]['items'][] = $item;
         $_SESSION['chatHistory'][$from_user_id]['user_info']['user_name'] = $user_info['complete_name'];
         $_SESSION['chatHistory'][$from_user_id]['user_info']['online'] = $user_info['user_is_online'];
     }
     if (!empty($_SESSION['openChatBoxes'])) {
         foreach ($_SESSION['openChatBoxes'] as $user_id => $time) {
             if (!isset($_SESSION['tsChatBoxes'][$user_id])) {
                 $now = time() - $time;
                 $time = api_convert_and_format_date($time, DATE_TIME_FORMAT_SHORT_TIME_FIRST);
                 $message = sprintf(get_lang('SentAtX'), $time);
                 if ($now > 180) {
                     $item = array('s' => '2', 'f' => $user_id, 'm' => $message);
                     if (isset($_SESSION['chatHistory'][$user_id])) {
                         $_SESSION['chatHistory'][$user_id]['items'][] = $item;
                     }
                     $_SESSION['tsChatBoxes'][$user_id] = 1;
                 }
             }
         }
     }
     $sql = "UPDATE " . $this->table . " SET recd = 1 WHERE to_user = '******' AND recd = 0";
     Database::query($sql);
     if ($items != '') {
         //$items = substr($items, 0, -1);
     }
     echo json_encode(array('items' => $items));
 }
 /**
  * Validate 2 dates
  * @param string $operator The operator to use (default '==')
  * @return boolean True if the 2 given dates match the operator
  */
 function validate($values, $operator = null)
 {
     $datetime1 = api_strtotime($values[0]);
     $datetime2 = api_strtotime($values[1]);
     if (strpos($operator, 'allow_empty') !== false) {
         $operator = str_replace('allow_empty', '', $operator);
         if (!$datetime2 || empty($datetime2)) {
             return true;
         }
     }
     $result = parent::validate(array($datetime1, $datetime2), $operator);
     return $result;
 }
 /**
  *
  * @param int   student id
  * @param int   years
  * @param bool  show warning_message
  * @param bool  return_timestamp
  */
 public static function delete_inactive_student($student_id, $years = 2, $warning_message = false, $return_timestamp = false)
 {
     $tbl_track_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN);
     $sql = 'SELECT login_date FROM ' . $tbl_track_login . '
             WHERE login_user_id = ' . intval($student_id) . '
             ORDER BY login_date DESC LIMIT 0,1';
     if (empty($years)) {
         $years = 1;
     }
     $inactive_time = $years * 31536000;
     //1 year
     $rs = Database::query($sql);
     if (Database::num_rows($rs) > 0) {
         if ($last_login_date = Database::result($rs, 0, 0)) {
             $last_login_date = api_get_local_time($last_login_date, null, date_default_timezone_get());
             if ($return_timestamp) {
                 return api_strtotime($last_login_date);
             } else {
                 if (!$warning_message) {
                     return api_format_date($last_login_date, DATE_FORMAT_SHORT);
                 } else {
                     $timestamp = api_strtotime($last_login_date);
                     $currentTimestamp = time();
                     //If the last connection is > than 7 days, the text is red
                     //345600 = 7 days in seconds 63072000= 2 ans
                     // if ($currentTimestamp - $timestamp > 184590 )
                     if ($currentTimestamp - $timestamp > $inactive_time && UserManager::delete_user($student_id)) {
                         Display::display_normal_message(get_lang('UserDeleted'));
                         echo '<p>', 'id', $student_id, ':', $last_login_date, '</p>';
                     }
                 }
             }
         }
     }
     return false;
 }
Esempio n. 6
0
 /**
  * @param int $exe_id
  * @return array|mixed
  */
 public function get_stat_track_exercise_info_by_exe_id($exe_id)
 {
     $track_exercises = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
     $exe_id = intval($exe_id);
     $sql_track = "SELECT * FROM {$track_exercises} WHERE exe_id = {$exe_id} ";
     $result = Database::query($sql_track);
     $new_array = array();
     if (Database::num_rows($result) > 0) {
         $new_array = Database::fetch_array($result, 'ASSOC');
         $new_array['duration'] = null;
         $start_date = api_get_utc_datetime($new_array['start_date'], true);
         $end_date = api_get_utc_datetime($new_array['exe_date'], true);
         if (!empty($start_date) && !empty($end_date)) {
             $start_date = api_strtotime($start_date, 'UTC');
             $end_date = api_strtotime($end_date, 'UTC');
             if ($start_date && $end_date) {
                 $mytime = $end_date - $start_date;
                 $new_learnpath_item = new learnpathItem(null);
                 $time_attemp = $new_learnpath_item->get_scorm_time('js', $mytime);
                 $h = get_lang('h');
                 $time_attemp = str_replace('NaN', '00' . $h . '00\'00"', $time_attemp);
                 $new_array['duration'] = $time_attemp;
             }
         }
     }
     return $new_array;
 }
Esempio n. 7
0
 /**
  * This function checks if the learnpath is visible for student after the progress of its prerequisite is completed, and considering time availability
  * @param    int        Learnpath id
  * @param    int        Student id
  * @param   string  Course code (optional)
  * @return    bool    True if
  */
 public static function is_lp_visible_for_student($lp_id, $student_id, $course_code = null)
 {
     $lp_id = (int) $lp_id;
     $course_info = api_get_course_info($course_code);
     $tbl_learnpath = Database::get_course_table(TABLE_LP_MAIN);
     // Get current prerequisite
     $sql = "SELECT id, prerequisite, subscribe_users, publicated_on, expired_on\n                FROM {$tbl_learnpath} WHERE c_id = " . $course_info['real_id'] . " AND id = {$lp_id}";
     $rs = Database::query($sql);
     $now = time();
     $session_id = api_get_session_id();
     if (Database::num_rows($rs) > 0) {
         $row = Database::fetch_array($rs, 'ASSOC');
         $prerequisite = $row['prerequisite'];
         $is_visible = true;
         $progress = 0;
         //Checking LP prerequisites
         if (!empty($prerequisite)) {
             $progress = intval(self::get_db_progress($prerequisite, $student_id, '%', '', false, $session_id));
             if ($progress < 100) {
                 $is_visible = false;
             }
         }
         // Also check the time availability of the LP
         if ($is_visible) {
             //Adding visibility restrictions
             if (!empty($row['publicated_on']) && $row['publicated_on'] != '0000-00-00 00:00:00') {
                 if ($now < api_strtotime($row['publicated_on'], 'UTC')) {
                     //api_not_allowed();
                     $is_visible = false;
                 }
             }
             //Blocking empty start times see BT#2800
             global $_custom;
             if (isset($_custom['lps_hidden_when_no_start_date']) && $_custom['lps_hidden_when_no_start_date']) {
                 if (empty($row['publicated_on']) || $row['publicated_on'] == '0000-00-00 00:00:00') {
                     //api_not_allowed();
                     $is_visible = false;
                 }
             }
             if (!empty($row['expired_on']) && $row['expired_on'] != '0000-00-00 00:00:00') {
                 if ($now > api_strtotime($row['expired_on'], 'UTC')) {
                     //api_not_allowed();
                     $is_visible = false;
                 }
             }
         }
         //Check if the subscription users/group to a LP is ON
         if (isset($row['subscribe_users']) && $row['subscribe_users'] == 1) {
             //Checking only the user visibility
             $userVisibility = api_get_item_visibility($course_info, 'learnpath', $row['id'], $session_id, $student_id, 'LearnpathSubscription');
             if ($userVisibility == 1) {
                 $is_visible = true;
             } else {
                 $is_visible = false;
             }
             //the group visibility is not going to be checked because the user *must* be related to the LP
             /*$groupList = GroupManager::get_group_ids($course_info['real_id'], $student_id);
             
                             if (!empty($groupList)) {
                                 foreach($groupList as $groupId) {
                                     $groupVisibility = api_get_item_visibility($course_info, 'learnpath', $row['id'], $session_id, 0, 'LearnpathSubscription', $groupId);
             
                                     if ($groupVisibility == 1) {
                                         $is_visible = true;
                                         break;
                                     }
                                 }
                             }*/
         }
         return $is_visible;
     }
     return false;
 }
     SystemAnnouncementManager::delete_announcement($_GET['id']);
     Display::display_confirmation_message(get_lang('AnnouncementDeleted'));
     break;
 case 'delete_selected':
     foreach ($_POST['id'] as $index => $id) {
         SystemAnnouncementManager::delete_announcement($id);
     }
     Display::display_confirmation_message(get_lang('AnnouncementDeleted'));
     $action_todo = false;
     break;
 case 'add':
     // Add an announcement.
     $values['action'] = 'add';
     // Set default time window: NOW -> NEXT WEEK
     $values['start'] = date('Y-m-d H:i:s', api_strtotime(api_get_local_time()));
     $values['end'] = date('Y-m-d H:i:s', api_strtotime(api_get_local_time()) + 7 * 24 * 60 * 60);
     $values['range'] = substr(api_get_local_time(time()), 0, 16) . ' / ' . substr(api_get_local_time(time() + 7 * 24 * 60 * 60), 0, 16);
     $action_todo = true;
     break;
 case 'edit':
     // Edit an announcement.
     $announcement = SystemAnnouncementManager::get_announcement($_GET['id']);
     $values['id'] = $announcement->id;
     $values['title'] = $announcement->title;
     $values['content'] = $announcement->content;
     $values['start'] = api_get_local_time($announcement->date_start);
     $values['end'] = api_get_local_time($announcement->date_end);
     $values['range'] = substr(api_get_local_time($announcement->date_start), 0, 16) . ' / ' . substr(api_get_local_time($announcement->date_end), 0, 16);
     $values['visible_teacher'] = $announcement->visible_teacher;
     $values['visible_student'] = $announcement->visible_student;
     $values['visible_guest'] = $announcement->visible_guest;
Esempio n. 9
0
}
if (isset($error_checkdate) && $error_checkdate) {
    $message = get_lang('InvalidDate');
    Display::display_error_message($message, false);
}
if (isset($action) && $action == 'calendar_add') {
    $groupList = GroupManager::get_group_list(null, null, 1);
    $groupIdList = array('--');
    foreach ($groupList as $group) {
        $groupIdList[$group['id']] = $group['name'];
    }
    // calendar add form
    $form = new FormValidator('attendance_calendar_add', 'POST', 'index.php?action=calendar_add&attendance_id=' . $attendance_id . $param_gradebook . '&' . api_get_cidreq(), '');
    $form->addElement('header', get_lang('AddADateTime'));
    $form->addElement('date_time_picker', 'date_time');
    $defaults['date_time'] = date('Y-m-d H:i', api_strtotime(api_get_local_time()));
    $form->addElement('checkbox', 'repeat', null, get_lang('RepeatDate'), array('onclick' => "javascript: if(this.checked){document.getElementById('repeat-date-attendance').style.display='block';}else{document.getElementById('repeat-date-attendance').style.display='none';}"));
    $defaults['repeat'] = isset($repeat) ? $repeat : null;
    if ($defaults['repeat']) {
        $form->addElement('html', '<div id="repeat-date-attendance" style="display:block">');
    } else {
        $form->addElement('html', '<div id="repeat-date-attendance" style="display:none">');
    }
    $a_repeat_type = array('daily' => get_lang('RepeatDaily'), 'weekly' => get_lang('RepeatWeekly'), 'monthlyByDate' => get_lang('RepeatMonthlyByDate'));
    $form->addElement('select', 'repeat_type', get_lang('RepeatType'), $a_repeat_type);
    $form->addElement('date_picker', 'end_date_time', get_lang('RepeatEnd'), array('form_name' => 'attendance_calendar_add'));
    $defaults['end_date_time'] = date('Y-m-d');
    $form->addElement('html', '</div>');
    $defaults['repeat_type'] = 'weekly';
    $form->addSelect('groups', get_lang('Group'), $groupIdList);
    $form->addButtonCreate(get_lang('Save'));
Esempio n. 10
0
 /**
  * Adds x months to a UNIX timestamp
  * @param   int     The timestamp
  * @param   int     The number of years to add
  * @return  int     The new timestamp
  */
 private function add_month($timestamp, $num = 1)
 {
     $values = api_get_utc_datetime($timestamp);
     $values = str_replace(array(':', '-', ' '), '/', $values);
     list($y, $m, $d, $h, $n, $s) = split('/', $values);
     if ($m + $num > 12) {
         $y += floor($num / 12);
         $m += $num % 12;
     } else {
         $m += $num;
     }
     //date_default_timezone_set('UTC');
     // return mktime($h, $n, $s, $m, $d, $y);
     $result = api_strtotime($y . '-' . $m . '-' . $d . ' ' . $h . ':' . $n . ':' . $s, 'UTC');
     if (!empty($result)) {
         return $result;
     }
     return false;
 }
Esempio n. 11
0
 /**
  * Gets all the course meetings saved in the plugin_bbb_meeting table
  * @return array Array of current open meeting rooms
  */
 public function getCourseMeetings()
 {
     $pass = $this->getUserMeetingPassword();
     $meetingList = Database::select('*', $this->table, array('where' => array('c_id = ? AND session_id = ? ' => array(api_get_course_int_id(), api_get_session_id()))));
     $newMeetingList = array();
     $item = array();
     foreach ($meetingList as $meetingDB) {
         $meetingBBB = $this->getMeetingInfo(array('meetingId' => $meetingDB['remote_id'], 'password' => $pass));
         if ($meetingBBB === false) {
             //checking with the remote_id didn't work, so just in case and
             // to provide backwards support, check with the id
             $params = array('meetingId' => $meetingDB['id'], 'password' => $pass);
             $meetingBBB = $this->getMeetingInfo($params);
         }
         if ($meetingDB['visibility'] == 0 and $this->isTeacher() == false) {
             continue;
         }
         $meetingBBB['end_url'] = api_get_self() . '?' . api_get_cidreq() . '&action=end&id=' . $meetingDB['id'];
         if ((string) $meetingBBB['returncode'] == 'FAILED') {
             if ($meetingDB['status'] == 1 && $this->isTeacher()) {
                 $this->endMeeting($meetingDB['id']);
             }
         } else {
             $meetingBBB['add_to_calendar_url'] = api_get_self() . '?' . api_get_cidreq() . '&action=add_to_calendar&id=' . $meetingDB['id'] . '&start=' . api_strtotime($meetingDB['created_at']);
         }
         $recordArray = array();
         $actionLinksArray = array();
         if ($meetingDB['record'] == 1) {
             // backwards compatibility (when there was no remote ID)
             $mId = $meetingDB['remote_id'];
             if (empty($mId)) {
                 $mId = $meetingDB['id'];
             }
             if (empty($mId)) {
                 // if the id is still empty (should *never* occur as 'id' is
                 // the table's primary key), skip this conference
                 continue;
             }
             $recordingParams = array('meetingId' => $mId);
             //To see the recording list in your BBB server do: bbb-record --list
             $records = $this->api->getRecordingsWithXmlResponseArray($recordingParams);
             if (!empty($records)) {
                 $count = 1;
                 if (isset($records['message']) && !empty($records['message'])) {
                     if ($records['messageKey'] == 'noRecordings') {
                         $recordArray[] = get_lang('NoRecording');
                         if ($meetingDB['visibility'] == 0) {
                             $actionLinksArray[] = Display::url(Display::return_icon('invisible.png', get_lang('MakeVisible'), array(), ICON_SIZE_MEDIUM), api_get_self() . '?' . api_get_cidreq() . '&action=publish&id=' . $meetingDB['id']);
                         } else {
                             $actionLinksArray[] = Display::url(Display::return_icon('visible.png', get_lang('MakeInvisible'), array(), ICON_SIZE_MEDIUM), api_get_self() . '?' . api_get_cidreq() . '&action=unpublish&id=' . $meetingDB['id']);
                         }
                     } else {
                         //$recordArray[] = $records['message'];
                     }
                 } else {
                     foreach ($records as $record) {
                         //if you get several recordings here and you used a
                         // previous version of Chamilo, you might want to
                         // only keep the last result for each chamilo conf
                         // (see show_links after the end of this loop)
                         if (is_array($record) && isset($record['recordId'])) {
                             $url = Display::url(get_lang('ViewRecord') . " [~" . $record['playbackFormatLength'] . "']", $record['playbackFormatUrl'], array('target' => '_blank'));
                             $actionLinks = '';
                             if ($this->isTeacher()) {
                                 $actionLinks .= Display::url(Display::return_icon('link.gif', get_lang('CopyToLinkTool')), api_get_self() . '?' . api_get_cidreq() . '&action=copy_record_to_link_tool&id=' . $meetingDB['id']);
                                 $actionLinks .= Display::url(Display::return_icon('agenda.png', get_lang('AddToCalendar')), api_get_self() . '?' . api_get_cidreq() . '&action=add_to_calendar&id=' . $meetingDB['id'] . '&start=' . api_strtotime($meetingDB['created_at']) . '&url=' . $record['playbackFormatUrl']);
                                 $actionLinks .= Display::url(Display::return_icon('delete.png', get_lang('Delete')), api_get_self() . '?' . api_get_cidreq() . '&action=delete_record&id=' . $meetingDB['id']);
                                 if ($meetingDB['visibility'] == 0) {
                                     $actionLinks .= Display::url(Display::return_icon('invisible.png', get_lang('MakeVisible'), array(), ICON_SIZE_MEDIUM), api_get_self() . '?' . api_get_cidreq() . '&action=publish&id=' . $meetingDB['id']);
                                 } else {
                                     $actionLinks .= Display::url(Display::return_icon('visible.png', get_lang('MakeInvisible'), array(), ICON_SIZE_MEDIUM), api_get_self() . '?' . api_get_cidreq() . '&action=unpublish&id=' . $meetingDB['id']);
                                 }
                             }
                             //$url .= api_get_self().'?action=publish&id='.$record['recordID'];
                             $count++;
                             $recordArray[] = $url;
                             $actionLinksArray[] = $actionLinks;
                         } else {
                             /*if (is_array($record) && isset($record['recordID']) && isset($record['playbacks'])) {
                             
                                                                 //Fix the bbb timestamp
                                                                 //$record['startTime'] = substr($record['startTime'], 0, strlen($record['startTime']) -3);
                                                                 //$record['endTime']   = substr($record['endTime'], 0, strlen($record['endTime']) -3);
                                                                 //.' - '.api_convert_and_format_date($record['startTime']).' - '.api_convert_and_format_date($record['endTime'])
                                                                 foreach($record['playbacks'] as $item) {
                                                                     $url = Display::url(get_lang('ViewRecord'), $item['url'], array('target' => '_blank'));
                                                                     //$url .= Display::url(get_lang('DeleteRecord'), api_get_self().'?action=delete_record&'.$record['recordID']);
                                                                     if ($this->isTeacher()) {
                                                                         $url .= Display::url(Display::return_icon('link.gif',get_lang('CopyToLinkTool')), api_get_self().'?action=copy_record_to_link_tool&id='.$meetingDB['id'].'&record_id='.$record['recordID']);
                                                                         $url .= Display::url(Display::return_icon('agenda.png',get_lang('AddToCalendar')), api_get_self().'?action=add_to_calendar&id='.$meetingDB['id'].'&start='.api_strtotime($meetingDB['created_at']).'&url='.$item['url']);
                                                                         $url .= Display::url(Display::return_icon('delete.png',get_lang('Delete')), api_get_self().'?action=delete_record&id='.$record['recordID']);
                                                                     }
                                                                     //$url .= api_get_self().'?action=publish&id='.$record['recordID'];
                                                                     $count++;
                                                                     $recordArray[] = $url;
                                                                 }
                                                             }*/
                         }
                     }
                 }
             } else {
                 $actionLinks = '';
                 if ($this->isTeacher()) {
                     if ($meetingDB['visibility'] == 0) {
                         $actionLinks .= Display::url(Display::return_icon('invisible.png', get_lang('MakeVisible'), array(), ICON_SIZE_MEDIUM), api_get_self() . '?' . api_get_cidreq() . '&action=publish&id=' . $meetingDB['id']);
                     } else {
                         $actionLinks .= Display::url(Display::return_icon('visible.png', get_lang('MakeInvisible'), array(), ICON_SIZE_MEDIUM), api_get_self() . '?' . api_get_cidreq() . '&action=unpublish&id=' . $meetingDB['id']);
                     }
                 }
                 $actionLinksArray[] = $actionLinks;
                 $item['action_links'] = implode('<br />', $actionLinksArray);
             }
             //var_dump($recordArray);
             $item['show_links'] = implode('<br />', $recordArray);
             $item['action_links'] = implode('<br />', $actionLinksArray);
         }
         $item['created_at'] = api_convert_and_format_date($meetingDB['created_at']);
         //created_at
         $meetingDB['created_at'] = $item['created_at'];
         //avoid overwrite in array_merge() below
         $item['publish_url'] = api_get_self() . '?' . api_get_cidreq() . '&action=publish&id=' . $meetingDB['id'];
         $item['unpublish_url'] = api_get_self() . '?' . api_get_cidreq() . '&action=unpublish&id=' . $meetingDB['id'];
         if ($meetingDB['status'] == 1) {
             $joinParams = array('meetingId' => $meetingDB['remote_id'], 'username' => $this->user_complete_name, 'password' => $pass, 'createTime' => '', 'userID' => '', 'webVoiceConf' => '');
             $item['go_url'] = $this->protocol . $this->api->getJoinMeetingURL($joinParams);
         }
         $item = array_merge($item, $meetingDB, $meetingBBB);
         $newMeetingList[] = $item;
     }
     return $newMeetingList;
 }
Esempio n. 12
0
 /**
  * Adds a repetitive item to the database
  * @param   array   Course info
  * @param   int     The original event's id
  * @param   string  Type of repetition
  * @param   int     Timestamp of end of repetition (repeating until that date)
  * @param   array   $userList
  * @param 	string  a comment about a attachment file into agenda
  * @return  boolean False if error, True otherwise
  */
 private function addRepeatItem($course_info, $orig_id, $type, $end, $userList, $file_comment = '')
 {
     $t_agenda = Database::get_course_table(TABLE_AGENDA);
     $t_agenda_r = Database::get_course_table(TABLE_AGENDA_REPEAT);
     $course_id = $course_info['real_id'];
     $sql = 'SELECT title, content, start_date as sd, end_date as ed FROM ' . $t_agenda . '
             WHERE c_id = ' . $course_id . ' AND id ="' . intval($orig_id) . '" ';
     $res = Database::query($sql);
     if (Database::num_rows($res) !== 1) {
         return false;
     }
     $row = Database::fetch_array($res);
     $orig_start = api_strtotime(api_get_local_time($row['sd']));
     $orig_end = api_strtotime(api_get_local_time($row['ed']));
     $diff = $orig_end - $orig_start;
     $orig_title = $row['title'];
     $orig_content = $row['content'];
     $now = time();
     $type = Database::escape_string($type);
     $end = intval($end);
     if (1 <= $end && $end <= 500) {
         //we assume that, with this type of value, the user actually gives a count of repetitions
         //and that he wants us to calculate the end date with that (particularly in case of imports from ical)
         switch ($type) {
             case 'daily':
                 $end = $orig_start + 86400 * $end;
                 break;
             case 'weekly':
                 $end = $this->addWeek($orig_start, $end);
                 break;
             case 'monthlyByDate':
                 $end = $this->addMonth($orig_start, $end);
                 break;
             case 'monthlyByDay':
                 //TODO
                 break;
             case 'monthlyByDayR':
                 //TODO
                 break;
             case 'yearly':
                 $end = $this->addYear($orig_start, $end);
                 break;
         }
     }
     if ($end > $now && in_array($type, array('daily', 'weekly', 'monthlyByDate', 'monthlyByDay', 'monthlyByDayR', 'yearly'))) {
         $sql = "INSERT INTO {$t_agenda_r} (c_id, cal_id, cal_type, cal_end)\n                    VALUES ({$course_id}, '{$orig_id}', '{$type}', {$end})";
         Database::query($sql);
         switch ($type) {
             case 'daily':
                 for ($i = $orig_start + 86400; $i <= $end; $i += 86400) {
                     $this->add_event(date('Y-m-d H:i:s', $i), date('Y-m-d H:i:s', $i + $diff), false, null, $orig_title, $orig_content, $userList, false, $orig_id);
                 }
                 break;
             case 'weekly':
                 for ($i = $orig_start + 604800; $i <= $end; $i += 604800) {
                     $this->add_event(date('Y-m-d H:i:s', $i), date('Y-m-d H:i:s', $i + $diff), false, null, $orig_title, $orig_content, $userList, false, $orig_id);
                     //$res = agenda_add_item($course_info, $orig_title, $orig_content, date('Y-m-d H:i:s', $i), date('Y-m-d H:i:s', $i + $diff), $userList, $orig_id, $file_comment);
                 }
                 break;
             case 'monthlyByDate':
                 $next_start = $this->addMonth($orig_start);
                 while ($next_start <= $end) {
                     $this->add_event(date('Y-m-d H:i:s', $next_start), date('Y-m-d H:i:s', $next_start + $diff), false, null, $orig_title, $orig_content, $userList, false, $orig_id);
                     //$res = agenda_add_item($course_info, $orig_title, $orig_content, date('Y-m-d H:i:s', $next_start), date('Y-m-d H:i:s', $next_start + $diff), $userList, $orig_id, $file_comment);
                     $next_start = $this->addMonth($next_start);
                 }
                 break;
             case 'monthlyByDay':
                 //not yet implemented
                 break;
             case 'monthlyByDayR':
                 //not yet implemented
                 break;
             case 'yearly':
                 $next_start = $this->addYear($orig_start);
                 while ($next_start <= $end) {
                     $this->add_event(date('Y-m-d H:i:s', $next_start), date('Y-m-d H:i:s', $next_start + $diff), false, null, $orig_title, $orig_content, $userList, false, $orig_id);
                     //agenda_add_item($course_info, $orig_title, $orig_content, date('Y-m-d H:i:s', $next_start), date('Y-m-d H:i:s', $next_start + $diff), $userList, $orig_id, $file_comment);
                     $next_start = $this->addYear($next_start);
                 }
                 break;
         }
     }
     return true;
 }
    }
}
if (!$objExercise) {
    //Redirect to the exercise overview
    //Check if the exe_id exists
    header("Location: overview.php?exerciseId=" . $exerciseId);
    exit;
}
$time_control = false;
$clock_expired_time = ExerciseLib::get_session_time_control_key($objExercise->id, $learnpath_id, $learnpath_item_id);
if ($objExercise->expired_time != 0 && !empty($clock_expired_time)) {
    $time_control = true;
}
if ($time_control) {
    // Get time left for exipiring time
    $time_left = api_strtotime($clock_expired_time, 'UTC') - time();
    $htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH) . 'javascript/epiclock/stylesheet/jquery.epiclock.css');
    $htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH) . 'javascript/epiclock/renderers/minute/epiclock.minute.css');
    $htmlHeadXtra[] = api_get_js('epiclock/javascript/jquery.dateformat.min.js');
    $htmlHeadXtra[] = api_get_js('epiclock/javascript/jquery.epiclock.min.js');
    $htmlHeadXtra[] = api_get_js('epiclock/renderers/minute/epiclock.minute.js');
    $htmlHeadXtra[] = $objExercise->show_time_control_js($time_left);
}
$exe_id = intval(Session::read('exe_id'));
$exercise_stat_info = $objExercise->get_stat_track_exercise_info_by_exe_id($exe_id);
if (!empty($exercise_stat_info['data_tracking'])) {
    $question_list = explode(',', $exercise_stat_info['data_tracking']);
}
if (empty($exercise_stat_info) || empty($question_list)) {
    api_not_allowed();
}
Esempio n. 14
0
/**
 * @param array $session_info
 * @param string $course_code
 * @param bool $ignore_visibility_for_admins
 * @param bool $check_coach_dates
 * @return bool
 */
function api_get_session_date_validation($session_info, $course_code, $ignore_visibility_for_admins = true, $check_coach_dates = true)
{
    if (api_is_platform_admin()) {
        if ($ignore_visibility_for_admins) {
            return true;
        }
    }
    $session_id = $session_info['id'];
    $now = time();
    $access = false;
    if ($session_info) {
        // I don't care the field visibility because there are not limit dates.
        if (empty($session_info['access_start_date']) && empty($session_info['access_end_date']) || $session_info['access_start_date'] == '0000-00-00 00:00:00' && $session_info['access_end_date'] == '0000-00-00 00:00:00') {
            return true;
        } else {
            $accessStart = true;
            // If access_start_date is set
            if (!empty($session_info['access_start_date']) && $session_info['access_start_date'] != '0000-00-00 00:00:00') {
                if ($now > api_strtotime($session_info['access_start_date'], 'UTC')) {
                    $access = true;
                } else {
                    $access = false;
                    $accessStart = false;
                }
            }
            if ($accessStart == true) {
                //if access_end_date is set
                if (!empty($session_info['access_end_date']) && $session_info['access_end_date'] != '0000-00-00 00:00:00') {
                    //only if access_end_date said that it was ok
                    if ($now <= api_strtotime($session_info['access_end_date'], 'UTC')) {
                        //date still available
                        $access = true;
                    } else {
                        //session ends
                        $access = false;
                    }
                }
            }
        }
        if ($check_coach_dates) {
            //2. If I'm a coach
            $is_coach = api_is_coach($session_id, $course_code);
            if ($is_coach) {
                if (isset($session_info['access_end_date']) && !empty($session_info['access_end_date']) && $session_info['access_end_date'] != '0000-00-00 00:00:00' && isset($session_info['coach_access_end_date']) && !empty($session_info['coach_access_end_date']) && $session_info['coach_access_end_date'] != '0000-00-00 00:00:00') {
                    $end_date_extra_for_coach = api_strtotime($session_info['coach_access_end_date'], 'UTC');
                    if ($now <= $end_date_extra_for_coach) {
                        $access = true;
                    } else {
                        $access = false;
                    }
                }
                //Test start date
                if (isset($session_info['access_start_date']) && !empty($session_info['access_start_date']) && $session_info['access_start_date'] != '0000-00-00 00:00:00' && isset($session_info['coach_start_date']) && !empty($session_info['coach_start_date']) && $session_info['coach_start_date'] != '0000-00-00 00:00:00') {
                    $start_date_for_coach = api_strtotime($session_info['coach_start_date'], 'UTC');
                    if ($now > $start_date_for_coach) {
                        $access = true;
                    } else {
                        $access = false;
                    }
                }
            }
        }
        return $access;
    }
}
 /**
  * It's used for controlling attendance calendar (list, add, edit, delete),
  * render to attendance_calendar view
  * @param string $action (optional, by default 'calendar_list')
  * @param int	 $attendance_id (optional)
  * @param int	 $calendar_id (optional)
  */
 public function attendance_calendar($action = 'calendar_list', $attendance_id = 0, $calendar_id = 0)
 {
     $attendance = new Attendance();
     $calendar_id = intval($calendar_id);
     $data = array();
     $data['attendance_id'] = $attendance_id;
     $attendance_id = intval($attendance_id);
     $groupList = isset($_POST['groups']) ? array($_POST['groups']) : array();
     if ($action == 'calendar_add') {
         if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
             if (!isset($_POST['cancel'])) {
                 if (isset($_POST['repeat'])) {
                     //@todo  check this error_logs
                     $start_datetime = api_strtotime(api_get_utc_datetime($_POST['date_time']), 'UTC');
                     $end_datetime = api_strtotime(api_get_utc_datetime($_POST['end_date_time'] . ' 23:59:59'), 'UTC');
                     $checkdate = api_is_valid_date(api_get_utc_datetime($_POST['end_date_time'] . ' 23:59:59'));
                     $repeat_type = $_POST['repeat_type'];
                     if ($end_datetime > $start_datetime && $checkdate) {
                         $attendance->attendance_repeat_calendar_add($attendance_id, $start_datetime, $end_datetime, $repeat_type, $groupList);
                         $action = 'calendar_list';
                     } else {
                         if (!$checkdate) {
                             $data['error_checkdate'] = true;
                         } else {
                             $data['error_repeat_date'] = true;
                         }
                         $data['repeat'] = true;
                         $action = 'calendar_add';
                     }
                 } else {
                     $datetime = $_POST['date_time'];
                     $datetimezone = api_get_utc_datetime($datetime);
                     if (!empty($datetime)) {
                         $attendance->set_date_time($datetimezone);
                         $attendance->attendance_calendar_add($attendance_id, $groupList);
                         $action = 'calendar_list';
                     } else {
                         $data['error_date'] = true;
                         $action = 'calendar_add';
                     }
                 }
             } else {
                 $action = 'calendar_list';
             }
         }
     } else {
         if ($action == 'calendar_edit') {
             $data['calendar_id'] = $calendar_id;
             if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
                 if (!isset($_POST['cancel'])) {
                     $datetime = $_POST['date_time'];
                     $datetimezone = api_get_utc_datetime($datetime);
                     $attendance->set_date_time($datetimezone);
                     $attendance->attendance_calendar_edit($calendar_id, $attendance_id);
                     $data['calendar_id'] = 0;
                     $action = 'calendar_list';
                 } else {
                     $action = 'calendar_list';
                 }
             }
         } else {
             if ($action == 'calendar_delete') {
                 $attendance->attendance_calendar_delete($calendar_id, $attendance_id);
                 $action = 'calendar_list';
             } else {
                 if ($action == 'calendar_all_delete') {
                     $attendance->attendance_calendar_delete(0, $attendance_id, true);
                     $action = 'calendar_list';
                 }
             }
         }
     }
     $data['action'] = $action;
     $data['attendance_calendar'] = $attendance->get_attendance_calendar($attendance_id, 'all', null, null, true);
     $data['is_locked_attendance'] = $attendance->is_locked_attendance($attendance_id);
     // render to the view
     $this->view->set_data($data);
     $this->view->set_layout('layout');
     $this->view->set_template('attendance_calendar');
     $this->view->render();
 }
Esempio n. 16
0
 /**
  * Returns the number of days the student has left in a session when using
  * sessions durations
  * @param int $userId
  * @param int $sessionId
  * @param int $duration in days
  * @return int
  */
 public static function getDayLeftInSession($sessionId, $userId, $duration)
 {
     // Get an array with the details of the first access of the student to
     // this session
     $courseAccess = CourseManager::getFirstCourseAccessPerSessionAndUser($sessionId, $userId);
     $currentTime = time();
     // If no previous access, return false
     if (count($courseAccess) == 0) {
         return false;
     }
     $firstAccess = api_strtotime($courseAccess['login_course_date'], 'UTC');
     $endDateInSeconds = $firstAccess + $duration * 24 * 60 * 60;
     $leftDays = round(($endDateInSeconds - $currentTime) / 60 / 60 / 24);
     return $leftDays;
 }
Esempio n. 17
0
    /**
     * Prints the session and course list (user_portal.php)
     * @param int $user_id
     * @return string
     */
    public function return_courses_and_sessions($user_id)
    {
        global $_configuration;

        $load_history = (isset($_GET['history']) && intval($_GET['history']) == 1) ? true : false;
        if ($load_history) {
            // Load sessions in category in *history*
            $session_categories = UserManager::get_sessions_by_category(
                $user_id,
                true
            );
        } else {
            // Load sessions in category
            $session_categories = UserManager::get_sessions_by_category(
                $user_id,
                false
            );
        }

        $html = '';

        // Showing history title

        if ($load_history) {
            $html .= Display::page_subheader(get_lang('HistoryTrainingSession'));
            if (empty($session_categories)) {
                $html .= get_lang('YouDoNotHaveAnySessionInItsHistory');
            }
        }

        $courses_html = '';
        $special_courses = '';

        // If we're not in the history view...
        if (!isset($_GET['history'])) {
            // Display special courses.
            $special_courses = CourseManager::display_special_courses($user_id, $this->load_directories_preview);
            // Display courses.
            $courses_html .= CourseManager::display_courses($user_id, $this->load_directories_preview);
        }

        $sessions_with_category = '';
        $sessions_with_no_category = '';
        if (is_array($session_categories)) {
            foreach ($session_categories as $session_category) {
                $session_category_id = $session_category['session_category']['id'];

                // Sessions and courses that are not in a session category
                if ($session_category_id == 0 &&
                    isset($session_category['sessions'])
                ) {
                    // Independent sessions
                    foreach ($session_category['sessions'] as $session) {
                        $session_id = $session['session_id'];

                        // Don't show empty sessions.
                        if (count($session['courses']) < 1) {
                            continue;
                        }

                        // Courses inside the current session.
                        $date_session_start = $session['date_start'];
                        $date_session_end = $session['date_end'];
                        $days_access_before_beginning  = $session['nb_days_access_before_beginning'];
                        $days_access_after_end = $session['nb_days_access_after_end'];

                        $session_now = time();
                        $count_courses_session = 0;

                        // Loop course content
                        $html_courses_session = '';
                        $atLeastOneCourseIsVisible = false;

                        foreach ($session['courses'] as $course) {
                            $is_coach_course = api_is_coach($session_id, $course['code']);
                            $allowed_time = 0;
                            $dif_time_after = 0;
                            if ($date_session_start != '0000-00-00') {
                                if ($is_coach_course) {
                                    $allowed_time = api_strtotime($date_session_start.' 00:00:00') - ($days_access_before_beginning * 86400);
                                } else {
                                    $allowed_time = api_strtotime($date_session_start.' 00:00:00');
                                }
                                if (!isset($_GET['history'])) {
                                    if ($date_session_end != '0000-00-00') {
                                        $endSessionToTms = api_strtotime($date_session_end.' 23:59:59');
                                        if ($session_now > $endSessionToTms) {
                                            $dif_time_after = $session_now - $endSessionToTms;
                                            $dif_time_after = round($dif_time_after/86400);
                                        }
                                    }
                                }
                            }

                            if ($session_now > $allowed_time &&
                                $days_access_after_end > $dif_time_after - 1
                            ) {
                                // Read only and accessible.
                                $atLeastOneCourseIsVisible = true;

                                if (api_get_setting('hide_courses_in_sessions') == 'false') {
                                    $c = CourseManager::get_logged_user_course_html(
                                        $course,
                                        $session_id,
                                        'session_course_item',
                                        true,
                                        $this->load_directories_preview
                                    );
                                    $html_courses_session .= isset($c[1]) ? $c[1] : null;
                                }
                                $count_courses_session++;
                            }
                        }

                        // No courses to show.
                        if ($atLeastOneCourseIsVisible == false) {
                            if (empty($html_courses_session)) {
                                continue;
                            }
                        }

                        if ($count_courses_session > 0) {
                            $params = array();
                            $session_box = Display::get_session_title_box($session_id);
                            $params['icon'] = Display::return_icon(
                                'window_list.png',
                                $session_box['title'],
                                array('id' => 'session_img_' . $session_id),
                                ICON_SIZE_LARGE
                            );
                            $extra_info = !empty($session_box['coach']) ? $session_box['coach'] : null;
                            $extra_info .= !empty($session_box['coach']) ? ' - '.$session_box['dates'] : $session_box['dates'];
                            $extra_info .= isset($session_box['duration']) ? ' '.$session_box['duration'] : null;

                            if (api_is_drh()) {
                                $session_link = $session_box['title'];
                                $params['link'] = null;
                            } else {
                                $session_link = Display::tag(
                                    'a',
                                    $session_box['title'],
                                    array(
                                        'href' => api_get_path(
                                                WEB_CODE_PATH
                                            ) . 'session/index.php?session_id=' . $session_id
                                    )
                                );
                                $params['link'] = api_get_path(WEB_CODE_PATH).'session/index.php?session_id='.$session_id;
                            }

                            $params['title'] = $session_link;
                            $params['subtitle'] = $extra_info;

                            $params['right_actions'] = '';
                            if (api_is_platform_admin()) {
                                $params['right_actions'] .= '<a href="'.api_get_path(WEB_CODE_PATH).'admin/resume_session.php?id_session='.$session_id.'">';
                                $params['right_actions'] .= Display::return_icon('edit.png', get_lang('Edit'), array('align' => 'absmiddle'), ICON_SIZE_SMALL).'</a>';
                            }

                            if (api_get_setting('hide_courses_in_sessions') == 'false') {
                                // $params['extra'] .=  $html_courses_session;
                            }

                            $params['description'] = isset($session_box['description']) ? $session_box['description'] : null;

                            $parentInfo = CourseManager::course_item_html($params, true);

                            if (isset($_configuration['show_simple_session_info']) &&
                                $_configuration['show_simple_session_info']
                            ) {
                                $params['title'] = $session_box['title'];
                                $parentInfo = CourseManager::course_item_html_no_icon($params);
                            }
                            $sessions_with_no_category .= CourseManager::course_item_parent(
                                $parentInfo,
                                $html_courses_session
                            );
                        }
                    }
                } else {
                    // All sessions included in
                    $count_courses_session = 0;
                    $html_sessions = '';
                    if (isset($session_category['sessions'])) {
                        foreach ($session_category['sessions'] as $session) {
                            $session_id = $session['session_id'];

                            // Don't show empty sessions.
                            if (count($session['courses']) < 1) {
                                continue;
                            }
                            $date_session_start = $session['date_start'];
                            $date_session_end = $session['date_end'];
                            $days_access_before_beginning = $session['nb_days_access_before_beginning'];
                            $days_access_after_end = $session['nb_days_access_after_end'];

                            $session_now = time();
                            $html_courses_session = '';
                            $count = 0;

                            foreach ($session['courses'] as $course) {
                                $is_coach_course = api_is_coach(
                                    $session_id,
                                    $course['code']
                                );

                                $dif_time_after = 0;
                                $allowed_time = 0;
                                if ($is_coach_course) {
                                    // 24 hours = 86400
                                    if ($date_session_start != '0000-00-00') {
                                        $allowed_time = api_strtotime($date_session_start . ' 00:00:00') - ($days_access_before_beginning * 86400);
                                    }
                                    if (!isset($_GET['history'])) {
                                        if ($date_session_end != '0000-00-00') {
                                            $endSessionToTms = api_strtotime(
                                                $date_session_end . ' 23:59:59'
                                            );
                                            if ($session_now > $endSessionToTms) {
                                                $dif_time_after = $session_now - $endSessionToTms;
                                                $dif_time_after = round(
                                                    $dif_time_after / 86400
                                                );
                                            }
                                        }
                                    }
                                } else {
                                    $allowed_time = api_strtotime(
                                        $date_session_start . ' 00:00:00'
                                    );
                                }

                                if ($session_now > $allowed_time &&
                                    $days_access_after_end > $dif_time_after - 1
                                ) {
                                    if (api_get_setting('hide_courses_in_sessions') == 'false') {
                                        $c = CourseManager:: get_logged_user_course_html(
                                            $course,
                                            $session_id,
                                            'session_course_item'
                                        );
                                        $html_courses_session .= $c[1];
                                    }
                                    $count_courses_session++;
                                    $count++;
                                }
                            }

                            $params = array();

                            if ($count > 0) {
                                $session_box = Display:: get_session_title_box(
                                    $session_id
                                );
                                $params['icon'] = Display::return_icon(
                                        'window_list.png',
                                        $session_box['title'],
                                        array(
                                            'width' => '48px',
                                            'align' => 'absmiddle',
                                            'id' => 'session_img_' . $session_id
                                        )
                                    ) . ' ';

                                if (api_is_drh()) {
                                    $session_link = $session_box['title'];
                                    $params['link'] = null;
                                } else {
                                    $session_link = Display::tag(
                                        'a',
                                        $session_box['title'],
                                        array(
                                            'href' => api_get_path(WEB_CODE_PATH) . 'session/index.php?session_id=' . $session_id
                                        )
                                    );
                                    $params['link'] = api_get_path(WEB_CODE_PATH) . 'session/index.php?session_id=' . $session_id;
                                }

                                $params['title'] = $session_link;
                                $params['subtitle'] = (!empty($session_box['coach']) ? $session_box['coach'] . ' | ' : '') . $session_box['dates'];

                                if (api_is_platform_admin()) {
                                    $params['right_actions'] = '<a href="' . api_get_path(WEB_CODE_PATH) . 'admin/resume_session.php?id_session=' . $session_id . '">' .
                                        Display::return_icon(
                                            'edit.png',
                                            get_lang('Edit'),
                                            array('align' => 'absmiddle'),
                                            ICON_SIZE_SMALL
                                        ) . '</a>';
                                }

                                $parentInfo = CourseManager::course_item_html(
                                    $params,
                                    true
                                );

                                if (isset($_configuration['show_simple_session_info']) && $_configuration['show_simple_session_info']) {
                                    $params['title'] = $session_box['title'];
                                    $parentInfo = CourseManager::course_item_html_no_icon(
                                        $params
                                    );
                                }

                                $html_sessions .= $parentInfo . $html_courses_session;
                            }
                        }
                    }

                    if ($count_courses_session > 0) {
                        $params = array();
                        $params['icon'] = Display::return_icon('folder_blue.png', $session_category['session_category']['name'], array(), ICON_SIZE_LARGE);

                        if (api_is_platform_admin()) {
                            $params['right_actions'] = '<a href="'.api_get_path(WEB_CODE_PATH).'admin/session_category_edit.php?&id='.$session_category['session_category']['id'].'">'.Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).'</a>';
                        }

                        $params['title'] = $session_category['session_category']['name'];

                        if (api_is_platform_admin()) {
                            $params['link']   = api_get_path(WEB_CODE_PATH).'admin/session_category_edit.php?&id='.$session_category['session_category']['id'];
                        }

                        $session_category_start_date = $session_category['session_category']['date_start'];
                        $session_category_end_date = $session_category['session_category']['date_end'];

                        if (!empty($session_category_start_date) && $session_category_start_date != '0000-00-00' && !empty($session_category_end_date) && $session_category_end_date != '0000-00-00' ) {
                            $params['subtitle'] = sprintf(get_lang('FromDateXToDateY'), $session_category['session_category']['date_start'], $session_category['session_category']['date_end']);
                        } else {
                            if (!empty($session_category_start_date) && $session_category_start_date != '0000-00-00') {
                                 $params['subtitle'] = get_lang('From').' '.$session_category_start_date;
                            }
                            if (!empty($session_category_end_date) && $session_category_end_date != '0000-00-00') {
                                $params['subtitle'] = get_lang('Until').' '.$session_category_end_date;
                            }
                        }
                        $sessions_with_category .= CourseManager::course_item_parent(
                            CourseManager::course_item_html($params, true),
                            $html_sessions
                        );
                    }

                }
            }
        }

        return $sessions_with_category.
               $sessions_with_no_category.
               $courses_html.$special_courses;
    }
Esempio n. 18
0
    /**
     * Get tickets by userId
     * @param $from
     * @param $number_of_items
     * @param $column
     * @param $direction
     * @param null $user_id
     * @return array
     */
    public static function get_tickets_by_user_id(
        $from,
        $number_of_items,
        $column,
        $direction,
        $user_id = null
    ) {
        global $plugin;
        $table_support_category = Database::get_main_table(
            TABLE_TICKET_CATEGORY
        );
        $table_support_tickets = Database::get_main_table(TABLE_TICKET_TICKET);
        $table_support_priority = Database::get_main_table(
            TABLE_TICKET_PRIORITY
        );
        $table_support_status = Database::get_main_table(TABLE_TICKET_STATUS);
        $table_support_messages = Database::get_main_table(
            TABLE_TICKET_MESSAGE
        );
        $table_main_user = Database::get_main_table(TABLE_MAIN_USER);
        $table_main_admin = Database::get_main_table(TABLE_MAIN_ADMIN);
        if (is_null($direction)) {
            $direction = "DESC";
        }
        if (is_null($user_id) || $user_id == 0) {
            $user_id = api_get_user_id();
        }

        $isAdmin = UserManager::is_admin($user_id);
        $sql = "SELECT ticket.*,
                ticket.ticket_id AS col0,
                ticket.start_date AS col1,
                ticket.sys_lastedit_datetime AS col2,
                cat.name AS col3,
                user.username AS col4,
                priority.priority AS col5,
                priority.priority  AS col6,
                status.name AS col7,
                ticket.total_messages AS col8,
                msg.message AS col9,
                ticket.request_user AS user_id,
                ticket.assigned_last_user AS responsible
            FROM $table_support_tickets ticket,
                $table_support_category cat,
                $table_support_priority priority,
                $table_support_status status,
                $table_main_user user,
                $table_support_messages msg
            WHERE
                cat.category_id = ticket.category_id
                AND ticket.priority_id = priority.priority_id
                AND ticket.status_id = status.status_id
                AND user.user_id = ticket.request_user
                AND ticket.ticket_id= msg.ticket_id
                AND message_id=1 ";
        if (!$isAdmin) {
            $sql .= " AND request_user = '******' ";
        }
        $keyword_unread = Database::escape_string(
            trim($_GET['keyword_unread'])
        );
        //Search simple
        if (isset($_GET['submit_simple'])) {
            if ($_GET['keyword'] != '') {
                $keyword = Database::escape_string(trim($_GET['keyword']));
                $sql .= " AND (ticket.ticket_code = '$keyword'
                            OR ticket.ticket_id = '$keyword'
                            OR user.firstname LIKE '%$keyword%'
                            OR user.lastname LIKE '%$keyword%'
                            OR concat(user.firstname,' ',user.lastname) LIKE '%$keyword%'
                            OR concat(user.lastname,' ',user.firstname) LIKE '%$keyword%'
                            OR user.username LIKE '%$keyword%')";
            }
        }
        //Search advanced
        if (isset($_GET['submit_advanced'])) {
            $keyword_category = Database::escape_string(
                trim($_GET['keyword_category'])
            );
            $keyword_request_user = Database::escape_string(
                trim($_GET['keyword_request_user'])
            );
            $keyword_admin = Database::escape_string(
                trim($_GET['keyword_admin'])
            );
            $keyword_start_date_start = Database::escape_string(
                trim($_GET['keyword_start_date_start'])
            );
            $keyword_start_date_end = Database::escape_string(
                trim($_GET['keyword_start_date_end'])
            );
            $keyword_status = Database::escape_string(
                trim($_GET['keyword_status'])
            );
            $keyword_source = Database::escape_string(
                trim($_GET['keyword_source'])
            );
            $keyword_priority = Database::escape_string(
                trim($_GET['keyword_priority'])
            );
            $keyword_range = Database::escape_string(
                trim($_GET['keyword_dates'])
            );
            $keyword_course = Database::escape_string(
                trim($_GET['keyword_course'])
            );

            if ($keyword_category != '') {
                $sql .= " AND ticket.category_id = '$keyword_category'  ";
            }
            if ($keyword_request_user != '') {
                $sql .= " AND (ticket.request_user = '******'
                          OR user.firstname LIKE '%$keyword_request_user%'
                          OR user.official_code LIKE '%$keyword_request_user%'
                          OR user.lastname LIKE '%$keyword_request_user%'
                          OR concat(user.firstname,' ',user.lastname) LIKE '%$keyword_request_user%'
                          OR concat(user.lastname,' ',user.firstname) LIKE '%$keyword_request_user%'
                          OR user.username LIKE '%$keyword_request_user%') ";
            }
            if ($keyword_admin != '') {
                $sql .= " AND ticket.assigned_last_user = '******'  ";
            }
            if ($keyword_status != '') {
                $sql .= " AND ticket.status_id = '$keyword_status'  ";
            }
            if ($keyword_range == '' && $keyword_start_date_start != '') {
                $sql .= " AND DATE_FORMAT( ticket.start_date,'%d/%m/%Y') = '$keyword_start_date_start' ";
            }
            if ($keyword_range == '1' && $keyword_start_date_start != '' && $keyword_start_date_end != '') {
                $sql .= " AND DATE_FORMAT( ticket.start_date,'%d/%m/%Y') >= '$keyword_start_date_start'
                          AND DATE_FORMAT( ticket.start_date,'%d/%m/%Y') <= '$keyword_start_date_end'";
            }
            if ($keyword_priority != '') {
                $sql .= " AND ticket.priority_id = '$keyword_priority'  ";
            }
            if ($keyword_source != '') {
                $sql .= " AND ticket.source = '$keyword_source' ";
            }
            if ($keyword_priority != '') {
                $sql .= " AND ticket.priority_id = '$keyword_priority' ";
            }
            if ($keyword_course != '') {
                $course_table = Database :: get_main_table(TABLE_MAIN_COURSE);
                $sql .= " AND ticket.course_id IN ( ";
                $sql .= "SELECT id FROM $course_table
                         WHERE (title LIKE '%$keyword_course%'
                        OR code LIKE '%$keyword_course%'
                        OR visual_code LIKE '%$keyword_course%'
                    )
                )";
            }
        }
        if ($keyword_unread == 'yes') {
            $sql .= " AND ticket.ticket_id IN (SELECT ticket.ticket_id
                FROM $table_support_tickets ticket,
                    $table_support_messages message,
                    $table_main_user user
                WHERE ticket.ticket_id = message.ticket_id
                    AND message.status = 'NOL'
                    AND message.sys_insert_user_id = user.user_id
                    AND user.user_id NOT IN (SELECT user_id FROM $table_main_admin)
                    AND ticket.status_id != 'REE'
                GROUP BY ticket.ticket_id)";
        } else {
            if ($keyword_unread == 'no') {
                $sql .= " AND ticket.ticket_id NOT IN (SELECT ticket.ticket_id
                    FROM $table_support_tickets ticket,
                        $table_support_messages message,
                        $table_main_user user
                    WHERE ticket.ticket_id = message.ticket_id
                        AND message.status = 'NOL'
                        AND message.sys_insert_user_id = user.user_id
                        AND user.user_id NOT IN (
                            SELECT user_id FROM $table_main_admin
                            )
                        AND ticket.status_id != 'REE'
                    GROUP BY ticket.ticket_id)";
            }
        }
        $sql .= " ORDER BY col$column $direction";
        $sql .= " LIMIT $from,$number_of_items";

        $result = Database::query($sql);
        $tickets = array();
        $webPath = api_get_path(WEB_PATH);
        $webCodePath = api_get_path(WEB_CODE_PATH);
        while ($row = Database::fetch_assoc($result)) {
            $sql_unread = "SELECT
                              COUNT(DISTINCT message.message_id) AS unread
                           FROM $table_support_tickets  ticket,
                                $table_support_messages message,
                                $table_main_user user
                           WHERE ticket.ticket_id = message.ticket_id
                           AND ticket.ticket_id = '{$row['col0']}'
                           AND message.status = 'NOL'
                           AND message.sys_insert_user_id = user.user_id ";
            if ($isAdmin) {
                $sql_unread .= " AND user.user_id
                                 NOT IN (SELECT user_id FROM $table_main_admin)
                                 AND ticket.status_id != 'REE' ";
            } else {
                $sql_unread .= " AND user.user_id
                                 IN (SELECT user_id FROM $table_main_admin) ";
            }
            $result_unread = Database::query($sql_unread);
            $unread = Database::fetch_object($result_unread)->unread;
            $userInfo = UserManager::get_user_info_by_id($row['user_id']);
            $hrefUser = $webPath . 'main/admin/user_information.php?user_id=' . $row['user_id'];
            $name = "<a href='$hrefUser'> {$userInfo['username']} </a>";
            $actions = "";

            if ($row['responsible'] != 0) {
                $row['responsible'] = api_get_user_info($row['responsible']);
                if (!empty($row['responsible'])) {
                    $hrefResp = $webPath . 'main/admin/user_information.php?user_id=' . $row['responsible']['user_id'];
                    $row['responsible'] = "<a href='$hrefResp'> {$row['responsible']['username']} </a>";
                } else {
                    $row['responsible'] = get_lang('UnknownUser');
                }

            } else {
                if ($row['status_id'] != 'REE') {
                    $row['responsible'] = '<span style="color:#ff0000;">' . $plugin->get_lang('ToBeAssigned') . '</span>';
                } else {
                    $row['responsible'] = '<span style="color:#00ff00;">' . get_lang('MessageResent') . '</span>';
                }
            }

            switch ($row['source']) {
                case 'PRE':
                    $img_source = 'icons/32/user.png';
                    break;
                case 'MAI':
                    $img_source = 'icons/32/mail.png';
                    break;
                case 'TEL':
                    $img_source = 'icons/32/event.png';
                    break;
                default:
                    $img_source = 'icons/32/course_home.png';
                    break;
            }
            $row['col1'] = api_get_local_time($row['col1']);
            $row['col2'] = api_get_local_time($row['col2']);
            if ($isAdmin) {
                $actions .= '<a href="ticket_details.php?ticket_id=' . $row['col0'] . '">' . Display::return_icon(
                                'synthese_view.gif', get_lang('Info')
                        ) . '</a>&nbsp;&nbsp;';
                if ($row['priority_id'] == 'HGH' && $row['status_id'] != 'CLS') {
                    $actions .= '<img src="' . $webCodePath . 'img/exclamation.png" border="0" />';
                }
                $row['col0'] = Display::return_icon(
                                $img_source, get_lang('Info')
                        ) . '<a href="ticket_details.php?ticket_id=' . $row['col0'] . '">' . $row['ticket_code'] . '</a>';
                if ($row['col7'] == 'PENDIENTE') {
                    $row['col7'] = '<span style="color: #f00; font-weight:bold;">' . $row['col7'] . '</span>';
                }

                $ticket = array(
                    $row['col0'],
                    api_format_date($row['col1'], '%d/%m/%y - %I:%M:%S %p'),
                    api_format_date($row['col2'], '%d/%m/%y - %I:%M:%S %p'),
                    $row['col3'],
                    $name,
                    $row['responsible'],
                    $row['col7'],
                    $row['col8'],
                    $actions,
                    eregi_replace("[\n|\r|\n\r|\r\n]", ' ', strip_tags($row['col9']))
                );
            } else {
                $actions = "";
                $actions .= '<a href="ticket_details.php?ticket_id=' . $row['col0'] . '">' . Display::return_icon(
                                'synthese_view.gif', get_lang('Info')
                        ) . '</a>&nbsp;&nbsp;';
                $row['col0'] = Display::return_icon(
                                $img_source, get_lang('Info')
                        ) . '<a href="ticket_details.php?ticket_id=' . $row['col0'] . '">' . $row['ticket_code'] . '</a>';
                $now = api_strtotime(api_get_utc_datetime());
                $last_edit_date = api_strtotime($row['sys_lastedit_datetime']);
                $dif = $now - $last_edit_date;

                if ($dif > 172800 && $row['priority_id'] == 'NRM' && $row['status_id'] != 'CLS') {
                    $actions .= '<a href="myticket.php?ticket_id=' . $row['ticket_id'] . '&amp;action=alert">
                                 <img src="' . $webPath . 'main/img/exclamation.png" border="0" /></a>';
                }
                if ($row['priority_id'] == 'HGH') {
                    $actions .= '<img src="' . $webCodePath . 'img/admin_star.png" border="0" />';
                }
                $ticket = array(
                    $row['col0'],
                    api_format_date($row['col1'], '%d/%m/%y - %I:%M:%S %p'),
                    api_format_date($row['col2'], '%d/%m/%y - %I:%M:%S %p'),
                    $row['col3'],
                    $row['col7'],
                    $actions
                );
            }
            if ($unread > 0) {
                $ticket['0'] = $ticket['0'] . '&nbsp;&nbsp;(' . $unread . ')<a href="ticket_details.php?ticket_id=' . $row['ticket_id'] . '">
                                <img src="' . $webPath . 'main/img/message_new.png" border="0" title="' . $unread . ' ' . get_lang('Messages') . '"/>
                                </a>';
            }
            if ($isAdmin) {
                $ticket['0'] .= '&nbsp;&nbsp;<a  href="javascript:void(0)" onclick="load_history_ticket(\'div_' . $row['ticket_id'] . '\',' . $row['ticket_id'] . ')">
					<img onclick="load_course_list(\'div_' . $row['ticket_id'] . '\',' . $row['ticket_id'] . ')" onmouseover="clear_course_list (\'div_' . $row['ticket_id'] . '\')" src="' . $webPath . 'main/img/history.gif" title="' . get_lang(
                                'Historial'
                        ) . '" alt="' . get_lang('Historial') . '"/>
					<div class="blackboard_hide" id="div_' . $row['ticket_id'] . '">&nbsp;&nbsp;</div>
					</a>&nbsp;&nbsp;';
            }
            $tickets[] = $ticket;
        }

        return $tickets;
    }
Esempio n. 19
0
 /**
  * Shows the user progress (when clicking in the Progress tab)
  *
  * @param int $user_id
  * @param int $session_id
  * @param string $extra_params
  * @param bool $show_courses
  * @param bool $showAllSessions
  *
  * @return string
  */
 public static function show_user_progress($user_id, $session_id = 0, $extra_params = '', $show_courses = true, $showAllSessions = true)
 {
     $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE);
     $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
     $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER);
     $tbl_access_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
     $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
     $tbl_access_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
     $user_id = intval($user_id);
     $session_id = intval($session_id);
     if (api_is_multiple_url_enabled()) {
         $sql = "SELECT c.code, title\n                    FROM {$tbl_course_user} cu\n                    INNER JOIN {$tbl_course} c\n                    ON (cu.c_id = c.id)\n                    INNER JOIN {$tbl_access_rel_course} a\n                    ON (a.c_id = c.id)\n                    WHERE\n                        cu.user_id = {$user_id} AND\n                        relation_type<> " . COURSE_RELATION_TYPE_RRHH . " AND\n                        access_url_id = " . api_get_current_access_url_id() . "\n                    ORDER BY title";
     } else {
         $sql = "SELECT c.code, title\n                    FROM {$tbl_course_user} u\n                    INNER JOIN {$tbl_course} c ON (c_id = c.id)\n                    WHERE\n                        u.user_id= {$user_id} AND\n                        relation_type<>" . COURSE_RELATION_TYPE_RRHH . "\n                    ORDER BY title";
     }
     $rs = Database::query($sql);
     $courses = $course_in_session = $temp_course_in_session = array();
     while ($row = Database::fetch_array($rs, 'ASSOC')) {
         $courses[$row['code']] = $row['title'];
     }
     $orderBy = " ORDER BY name ";
     $extraInnerJoin = null;
     if (SessionManager::orderCourseIsEnabled() && !empty($session_id)) {
         $orderBy = " ORDER BY s.id, position ";
         $tableSessionRelCourse = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
         $extraInnerJoin = " INNER JOIN {$tableSessionRelCourse} src\n                                ON (cu.c_id = src.c_id AND src.session_id = {$session_id}) ";
     }
     $sessionCondition = '';
     if (!empty($session_id)) {
         $sessionCondition = " AND s.id = {$session_id}";
     }
     // Get the list of sessions where the user is subscribed as student
     if (api_is_multiple_url_enabled()) {
         $sql = "SELECT DISTINCT c.code, s.id as session_id, name\n                    FROM {$tbl_session_course_user} cu\n                    INNER JOIN {$tbl_access_rel_session} a\n                    ON (a.session_id = cu.session_id)\n                    INNER JOIN {$tbl_session} s\n                    ON (s.id = a.session_id)\n                    INNER JOIN {$tbl_course} c\n                    ON (c.id = cu.c_id)\n                    {$extraInnerJoin}\n                    WHERE\n                        cu.user_id = {$user_id} AND\n                        access_url_id = " . api_get_current_access_url_id() . "\n                        {$sessionCondition}\n                    {$orderBy} ";
     } else {
         $sql = "SELECT DISTINCT c.code, s.id as session_id, name\n                    FROM {$tbl_session_course_user} cu\n                    INNER JOIN {$tbl_session} s\n                    ON (s.id = cu.session_id)\n                    INNER JOIN {$tbl_course} c\n                    ON (c.id = cu.c_id)\n                    {$extraInnerJoin}\n                    WHERE\n                        cu.user_id = {$user_id}\n                        {$sessionCondition}\n                    {$orderBy} ";
     }
     $rs = Database::query($sql);
     $simple_session_array = array();
     while ($row = Database::fetch_array($rs)) {
         $course_info = CourseManager::get_course_information($row['code']);
         $temp_course_in_session[$row['session_id']]['course_list'][$course_info['real_id']] = $course_info;
         $temp_course_in_session[$row['session_id']]['name'] = $row['name'];
         $simple_session_array[$row['session_id']] = $row['name'];
     }
     foreach ($simple_session_array as $my_session_id => $session_name) {
         $course_list = $temp_course_in_session[$my_session_id]['course_list'];
         $my_course_data = array();
         foreach ($course_list as $course_data) {
             $my_course_data[$course_data['id']] = $course_data['title'];
         }
         if (empty($session_id)) {
             $my_course_data = ArrayClass::utf8_sort($my_course_data);
         }
         $final_course_data = array();
         foreach ($my_course_data as $course_id => $value) {
             $final_course_data[$course_id] = $course_list[$course_id];
         }
         $course_in_session[$my_session_id]['course_list'] = $final_course_data;
         $course_in_session[$my_session_id]['name'] = $session_name;
     }
     $html = '';
     // Course list
     if ($show_courses) {
         if (!empty($courses)) {
             $html .= Display::page_subheader(Display::return_icon('course.png', get_lang('MyCourses'), array(), ICON_SIZE_SMALL) . ' ' . get_lang('MyCourses'));
             $html .= '<table class="data_table" width="100%">';
             $html .= '<tr>
                       ' . Display::tag('th', get_lang('Course'), array('width' => '300px')) . '
                       ' . Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class' => 'head')) . '
                       ' . Display::tag('th', get_lang('Progress'), array('class' => 'head')) . '
                       ' . Display::tag('th', get_lang('Score') . Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), array('class' => 'head')) . '
                       ' . Display::tag('th', get_lang('LastConnexion'), array('class' => 'head')) . '
                       ' . Display::tag('th', get_lang('Details'), array('class' => 'head')) . '
                     </tr>';
             foreach ($courses as $course_code => $course_title) {
                 $courseInfo = api_get_course_info($course_code);
                 $courseId = $courseInfo['real_id'];
                 $total_time_login = Tracking::get_time_spent_on_the_course($user_id, $courseId);
                 $time = api_time_to_hms($total_time_login);
                 $progress = Tracking::get_avg_student_progress($user_id, $course_code);
                 $percentage_score = Tracking::get_avg_student_score($user_id, $course_code, array());
                 $last_connection = Tracking::get_last_connection_date_on_the_course($user_id, $courseInfo);
                 if (is_null($progress)) {
                     $progress = '0%';
                 } else {
                     $progress = $progress . '%';
                 }
                 if (isset($_GET['course']) && $course_code == $_GET['course'] && empty($_GET['session_id'])) {
                     $html .= '<tr class="row_odd" style="background-color:#FBF09D">';
                 } else {
                     $html .= '<tr class="row_even">';
                 }
                 $url = api_get_course_url($course_code, $session_id);
                 $course_url = Display::url($course_title, $url, array('target' => SESSION_LINK_TARGET));
                 $html .= '<td>' . $course_url . '</td>';
                 $html .= '<td align="center">' . $time . '</td>';
                 $html .= '<td align="center">' . $progress . '</td>';
                 $html .= '<td align="center">';
                 if (is_numeric($percentage_score)) {
                     $html .= $percentage_score . '%';
                 } else {
                     $html .= '0%';
                 }
                 $html .= '</td>';
                 $html .= '<td align="center">' . $last_connection . '</td>';
                 $html .= '<td align="center">';
                 if (isset($_GET['course']) && $course_code == $_GET['course'] && empty($_GET['session_id'])) {
                     $html .= '<a href="#">';
                     $html .= Display::return_icon('2rightarrow_na.png', get_lang('Details'));
                 } else {
                     $html .= '<a href="' . api_get_self() . '?course=' . $course_code . $extra_params . '">';
                     $html .= Display::return_icon('2rightarrow.png', get_lang('Details'));
                 }
                 $html .= '</a>';
                 $html .= '</td></tr>';
             }
             $html .= '</table>';
         }
     }
     // Session list
     if (!empty($course_in_session)) {
         $main_session_graph = '';
         //Load graphics only when calling to an specific session
         $session_graph = array();
         $all_exercise_graph_name_list = array();
         $my_results = array();
         $all_exercise_graph_list = array();
         $all_exercise_start_time = array();
         foreach ($course_in_session as $my_session_id => $session_data) {
             $course_list = $session_data['course_list'];
             $session_name = $session_data['name'];
             $user_count = count(SessionManager::get_users_by_session($my_session_id));
             $exercise_graph_name_list = array();
             //$user_results = array();
             $exercise_graph_list = array();
             foreach ($course_list as $course_data) {
                 $exercise_list = ExerciseLib::get_all_exercises($course_data, $my_session_id, false, null, false, 1);
                 foreach ($exercise_list as $exercise_data) {
                     $exercise_obj = new Exercise($course_data['id']);
                     $exercise_obj->read($exercise_data['id']);
                     //Exercise is not necessary to be visible to show results check the result_disable configuration instead
                     //$visible_return = $exercise_obj->is_visible();
                     if ($exercise_data['results_disabled'] == 0 || $exercise_data['results_disabled'] == 2) {
                         $best_average = intval(ExerciseLib::get_best_average_score_by_exercise($exercise_data['id'], $course_data['id'], $my_session_id, $user_count));
                         $exercise_graph_list[] = $best_average;
                         $all_exercise_graph_list[] = $best_average;
                         $user_result_data = ExerciseLib::get_best_attempt_by_user(api_get_user_id(), $exercise_data['id'], $course_data['real_id'], $my_session_id);
                         $score = 0;
                         if (!empty($user_result_data['exe_weighting']) && intval($user_result_data['exe_weighting']) != 0) {
                             $score = intval($user_result_data['exe_result'] / $user_result_data['exe_weighting'] * 100);
                         }
                         $time = api_strtotime($exercise_data['start_time']) ? api_strtotime($exercise_data['start_time'], 'UTC') : 0;
                         $all_exercise_start_time[] = $time;
                         $my_results[] = $score;
                         if (count($exercise_list) <= 10) {
                             $title = cut($course_data['title'], 30) . " \n " . cut($exercise_data['title'], 30);
                             $exercise_graph_name_list[] = $title;
                             $all_exercise_graph_name_list[] = $title;
                         } else {
                             // if there are more than 10 results, space becomes difficult to find, so only show the title of the exercise, not the tool
                             $title = cut($exercise_data['title'], 30);
                             $exercise_graph_name_list[] = $title;
                             $all_exercise_graph_name_list[] = $title;
                         }
                     }
                 }
             }
         }
         // Complete graph
         if (!empty($my_results) && !empty($all_exercise_graph_list)) {
             asort($all_exercise_start_time);
             //Fix exams order
             $final_all_exercise_graph_name_list = array();
             $my_results_final = array();
             $final_all_exercise_graph_list = array();
             foreach ($all_exercise_start_time as $key => $time) {
                 $label_time = '';
                 if (!empty($time)) {
                     $label_time = date('d-m-y', $time);
                 }
                 $final_all_exercise_graph_name_list[] = $all_exercise_graph_name_list[$key] . ' ' . $label_time;
                 $my_results_final[] = $my_results[$key];
                 $final_all_exercise_graph_list[] = $all_exercise_graph_list[$key];
             }
             $main_session_graph = self::generate_session_exercise_graph($final_all_exercise_graph_name_list, $my_results_final, $final_all_exercise_graph_list);
         }
         $html .= Display::page_subheader(Display::return_icon('session.png', get_lang('Sessions'), array(), ICON_SIZE_SMALL) . ' ' . get_lang('Sessions'));
         $html .= '<table class="data_table" width="100%">';
         $html .= '<tr>
               ' . Display::tag('th', get_lang('Session'), array('width' => '300px')) . '
               ' . Display::tag('th', get_lang('PublishedExercises'), array('width' => '300px')) . '
               ' . Display::tag('th', get_lang('NewExercises'), array('class' => 'head')) . '
               ' . Display::tag('th', get_lang('AverageExerciseResult'), array('class' => 'head')) . '
               ' . Display::tag('th', get_lang('Details'), array('class' => 'head')) . '
               </tr>';
         foreach ($course_in_session as $my_session_id => $session_data) {
             $course_list = $session_data['course_list'];
             $session_name = $session_data['name'];
             if ($showAllSessions == false) {
                 if (isset($session_id) && !empty($session_id)) {
                     if ($session_id != $my_session_id) {
                         continue;
                     }
                 }
             }
             $all_exercises = 0;
             $all_unanswered_exercises_by_user = 0;
             $all_average = 0;
             $stats_array = array();
             foreach ($course_list as $course_data) {
                 //All exercises in the course @todo change for a real count
                 $exercises = ExerciseLib::get_all_exercises($course_data, $my_session_id);
                 $count_exercises = 0;
                 if (is_array($exercises) && !empty($exercises)) {
                     $count_exercises = count($exercises);
                 }
                 // Count of user results
                 $done_exercises = null;
                 $courseInfo = api_get_course_info($course_data['code']);
                 $answered_exercises = 0;
                 if (!empty($exercises)) {
                     foreach ($exercises as $exercise_item) {
                         $attempts = Event::count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $courseInfo['real_id'], $my_session_id);
                         if ($attempts > 1) {
                             $answered_exercises++;
                         }
                     }
                 }
                 // Average
                 $average = ExerciseLib::get_average_score_by_course($courseInfo['real_id'], $my_session_id);
                 $all_exercises += $count_exercises;
                 $all_unanswered_exercises_by_user += $count_exercises - $answered_exercises;
                 $all_average += $average;
             }
             $all_average = $all_average / count($course_list);
             if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
                 $html .= '<tr style="background-color:#FBF09D">';
             } else {
                 $html .= '<tr>';
             }
             $url = api_get_path(WEB_CODE_PATH) . "session/index.php?session_id={$my_session_id}";
             $html .= Display::tag('td', Display::url($session_name, $url, array('target' => SESSION_LINK_TARGET)));
             $html .= Display::tag('td', $all_exercises);
             $html .= Display::tag('td', $all_unanswered_exercises_by_user);
             //$html .= Display::tag('td', $all_done_exercise);
             $html .= Display::tag('td', ExerciseLib::convert_to_percentage($all_average));
             if (isset($_GET['session_id']) && $my_session_id == $_GET['session_id']) {
                 $icon = Display::url(Display::return_icon('2rightarrow_na.png', get_lang('Details')), '?session_id=' . $my_session_id);
             } else {
                 $icon = Display::url(Display::return_icon('2rightarrow.png', get_lang('Details')), '?session_id=' . $my_session_id);
             }
             $html .= Display::tag('td', $icon);
             $html .= '</tr>';
         }
         $html .= '</table><br />';
         $html .= Display::div($main_session_graph, array('id' => 'session_graph', 'class' => 'chart-session', 'style' => 'position:relative; text-align: center;'));
         // Checking selected session.
         if (isset($_GET['session_id'])) {
             $session_id_from_get = intval($_GET['session_id']);
             $session_data = $course_in_session[$session_id_from_get];
             $course_list = $session_data['course_list'];
             $html .= Display::tag('h3', $session_data['name'] . ' - ' . get_lang('CourseList'));
             $html .= '<table class="data_table" width="100%">';
             //'.Display::tag('th', get_lang('DoneExercises'),         array('class'=>'head')).'
             $html .= '
                 <tr>
                   <th width="300px">' . get_lang('Course') . '</th>
                   ' . Display::tag('th', get_lang('PublishedExercises'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('NewExercises'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('MyAverage'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('AverageExerciseResult'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('TimeSpentInTheCourse'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('LPProgress'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('Score') . Display::return_icon('info3.gif', get_lang('ScormAndLPTestTotalAverage'), array('align' => 'absmiddle', 'hspace' => '3px')), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('LastConnexion'), array('class' => 'head')) . '
                   ' . Display::tag('th', get_lang('Details'), array('class' => 'head')) . '
                 </tr>';
             foreach ($course_list as $course_data) {
                 $course_code = $course_data['code'];
                 $course_title = $course_data['title'];
                 $courseInfo = api_get_course_info($course_code);
                 $courseId = $courseInfo['real_id'];
                 // All exercises in the course @todo change for a real count
                 $exercises = ExerciseLib::get_all_exercises($course_data, $session_id_from_get);
                 $count_exercises = 0;
                 if (!empty($exercises)) {
                     $count_exercises = count($exercises);
                 }
                 $answered_exercises = 0;
                 foreach ($exercises as $exercise_item) {
                     $attempts = Event::count_exercise_attempts_by_user(api_get_user_id(), $exercise_item['id'], $courseId, $session_id_from_get);
                     if ($attempts > 1) {
                         $answered_exercises++;
                     }
                 }
                 $unanswered_exercises = $count_exercises - $answered_exercises;
                 // Average
                 $average = ExerciseLib::get_average_score_by_course($courseId, $session_id_from_get);
                 $my_average = ExerciseLib::get_average_score_by_course_by_user(api_get_user_id(), $courseId, $session_id_from_get);
                 $stats_array[$course_code] = array('exercises' => $count_exercises, 'unanswered_exercises_by_user' => $unanswered_exercises, 'done_exercises' => $done_exercises, 'average' => $average, 'my_average' => $my_average);
                 $weighting = 0;
                 $last_connection = Tracking::get_last_connection_date_on_the_course($user_id, $courseInfo, $session_id_from_get);
                 $progress = Tracking::get_avg_student_progress($user_id, $course_code, array(), $session_id_from_get);
                 $total_time_login = Tracking::get_time_spent_on_the_course($user_id, $courseId, $session_id_from_get);
                 $time = api_time_to_hms($total_time_login);
                 $percentage_score = Tracking::get_avg_student_score($user_id, $course_code, array(), $session_id_from_get);
                 $courseCodeFromGet = isset($_GET['course']) ? $_GET['course'] : null;
                 if ($course_code == $courseCodeFromGet && $_GET['session_id'] == $session_id_from_get) {
                     $html .= '<tr class="row_odd" style="background-color:#FBF09D" >';
                 } else {
                     $html .= '<tr class="row_even">';
                 }
                 $url = api_get_course_url($course_code, $session_id_from_get);
                 $course_url = Display::url($course_title, $url, array('target' => SESSION_LINK_TARGET));
                 $html .= Display::tag('td', $course_url);
                 $html .= Display::tag('td', $stats_array[$course_code]['exercises']);
                 $html .= Display::tag('td', $stats_array[$course_code]['unanswered_exercises_by_user']);
                 //$html .= Display::tag('td', $stats_array[$course_code]['done_exercises']);
                 $html .= Display::tag('td', ExerciseLib::convert_to_percentage($stats_array[$course_code]['my_average']));
                 $html .= Display::tag('td', $stats_array[$course_code]['average'] == 0 ? '-' : '(' . ExerciseLib::convert_to_percentage($stats_array[$course_code]['average']) . ')');
                 $html .= Display::tag('td', $time, array('align' => 'center'));
                 if (is_numeric($progress)) {
                     $progress = $progress . '%';
                 } else {
                     $progress = '0%';
                 }
                 //Progress
                 $html .= Display::tag('td', $progress, array('align' => 'center'));
                 if (is_numeric($percentage_score)) {
                     $percentage_score = $percentage_score . '%';
                 } else {
                     $percentage_score = '0%';
                 }
                 //Score
                 $html .= Display::tag('td', $percentage_score, array('align' => 'center'));
                 $html .= Display::tag('td', $last_connection, array('align' => 'center'));
                 if ($course_code == $courseCodeFromGet && $_GET['session_id'] == $session_id_from_get) {
                     $details = '<a href="#">';
                     $details .= Display::return_icon('2rightarrow_na.png', get_lang('Details'));
                 } else {
                     $details = '<a href="' . api_get_self() . '?course=' . $course_code . '&session_id=' . $session_id_from_get . $extra_params . '">';
                     $details .= Display::return_icon('2rightarrow.png', get_lang('Details'));
                 }
                 $details .= '</a>';
                 $html .= Display::tag('td', $details, array('align' => 'center'));
                 $html .= '</tr>';
             }
             $html .= '</table>';
         }
     }
     return $html;
 }
Esempio n. 20
0
 /**
  * Prepares a block with all the pending exercises in all courses
  * @param array Array of courses (arrays) of the user
  * @return void Doesn't return anything but prepares and HTML block for use in templates
  * @assert () !== 1
  */
 public function return_exercise_block($personal_course_list, $tpl)
 {
     $exercise_list = array();
     if (!empty($personal_course_list)) {
         foreach ($personal_course_list as $course_item) {
             $course_code = $course_item['c'];
             $session_id = $course_item['id_session'];
             $exercises = ExerciseLib::get_exercises_to_be_taken($course_code, $session_id);
             foreach ($exercises as $exercise_item) {
                 $exercise_item['course_code'] = $course_code;
                 $exercise_item['session_id'] = $session_id;
                 $exercise_item['tms'] = api_strtotime($exercise_item['end_time'], 'UTC');
                 $exercise_list[] = $exercise_item;
             }
         }
         if (!empty($exercise_list)) {
             $exercise_list = ArrayClass::msort($exercise_list, 'tms');
             $my_exercise = $exercise_list[0];
             $url = Display::url($my_exercise['title'], api_get_path(WEB_CODE_PATH) . 'exercice/overview.php?exerciseId=' . $my_exercise['id'] . '&cidReq=' . $my_exercise['course_code'] . '&id_session=' . $my_exercise['session_id']);
             $tpl->assign('exercise_url', $url);
             $tpl->assign('exercise_end_date', api_convert_and_format_date($my_exercise['end_time'], DATE_FORMAT_SHORT));
         }
     }
 }
 /**
  * Gets all the course meetings saved in the plugin_openmeetings table
  * @return array Array of current open meeting rooms
  */
 public function getCourseMeetings()
 {
     $newMeetingsList = array();
     $item = array();
     $meetingsList = \Database::select('*', $this->table, array('where' => array('c_id = ? ' => api_get_course_int_id(), ' AND session_id = ? ' => api_get_session_id(), ' AND status <> ? ' => 2)));
     /*$urlWsdl = $this->url."/services/RoomService?wsdl";
       $omServices = new \SoapClient($urlWsdl);*/
     $room = new Room();
     /*
     try {
         $rooms = $this->gateway->getRoomsWithCurrentUsersByType();
         //$rooms = $omServices->getRoomsPublic(array(
             //'SID' => $this->sessionId,
             //'start' => 0,
             //'max' => 10,
             //'orderby' => 'name',
             //'asc' => 'true',
             //'externalRoomType' => 'chamilo',
             //'roomtypes_id' => 'chamilo',
             //)
         //);
     } catch (SoapFault $e) {
         error_log(__FILE__.'+'.__LINE__.' '.$e->faultstring);
         //error_log($rooms->getDebug());
         return false;
     }
     */
     $room->SID = $this->sessionId;
     //error_log(__FILE__.'+'.__LINE__.' Meetings found: '.print_r($room->SID,1));
     if (!empty($meetingsList)) {
         foreach ($meetingsList as $meetingDb) {
             //$room->rooms_id = $meetingDb['room_id'];
             error_log(__FILE__ . '+' . __LINE__ . ' Meetings found: ' . print_r($meetingDb, 1));
             $remoteMeeting = array();
             $meetingDb['created_at'] = api_get_local_time($meetingDb['created_at']);
             $meetingDb['closed_at'] = !empty($meetingDb['closed_at']) ? api_get_local_time($meetingDb['closed_at']) : '';
             // Fixed value for now
             $meetingDb['participantCount'] = 40;
             $rec = $this->gateway->getFlvRecordingByRoomId($meetingDb['room_id']);
             $links = array();
             // Links to videos look like these:
             // http://video2.openmeetings.com:5080/openmeetings/DownloadHandler?fileName=flvRecording_4.avi&moduleName=lzRecorderApp&parentPath=&room_id=&sid=dfc0cac396d384f59242aa66e5a9bbdd
             $link = $this->url . '/DownloadHandler?fileName=%s&moduleName=lzRecorderApp&parentPath=&room_id=%s&sid=%s';
             if (!empty($rec)) {
                 $link1 = sprintf($link, $rec['fileHash'], $meetingDb['room_id'], $this->sessionId);
                 $link2 = sprintf($link, $rec['alternateDownload'], $meetingDb['room_id'], $this->sessionId);
                 $links[] = $rec['fileName'] . ' ' . \Display::url('[.flv]', $link1, array('target' => '_blank')) . ' ' . \Display::url('[.avi]', $link2, array('target' => '_blank'));
             }
             $item['show_links'] = implode('<br />', $links);
             // The following code is currently commented because the web service
             // says this is not allowed by the SOAP user.
             /*
             try {
                 // Get the conference room object from OpenMeetings server - requires SID and rooms_id to be defined
                 $objRoomId = $this->gateway->getRoomById($meetingDb['room_id']);
                 if (empty($objRoomId->return)) {
                     error_log(__FILE__.'+'.__LINE__.' Emptyyyyy ');
                     //\Database::delete($this->table, "id = {$meetingDb['id']}");
                     // Don't delete expired rooms, just mark as closed
                     \Database::update($this->table, array('status' => 0, 'closed_at' => api_get_utc_datetime()), array('id = ? ' => $meetingDb['id']));
                     continue;
                 }
                 //$objCurUs = $omServices->getRoomWithCurrentUsersById($objCurrentUsers);
             } catch  (SoapFault $e) {
                 error_log(__FILE__.'+'.__LINE__.' '.$e->faultstring);
                 exit;
             }
             //if( empty($objCurUs->returnMeetingID) ) continue;
             
             $current_room = array(
                 'roomtype' => $objRoomId->return->roomtype->roomtypes_id,
                 'meetingName' => $objRoomId->return->name,
                 'meetingId' => $objRoomId->return->meetingID,
                 'createTime' => $objRoomId->return->rooms_id,
                 'showMicrophoneStatus' => $objRoomId->return->showMicrophoneStatus,
                 'attendeePw' => $objRoomId->return->attendeePW,
                 'moderatorPw' => $objRoomId->return->moderators,
                 'isClosed' => $objRoomId->return->isClosed,
                 'allowRecording' => $objRoomId->return->allowRecording,
                 'startTime' => $objRoomId->return->startTime,
                 'endTime' => $objRoomId->return->updatetime,
                 'participantCount' => count($objRoomId->return->currentusers),
                 'maxUsers' => $objRoomId->return->numberOfPartizipants,
                 'moderatorCount' => count($objRoomId->return->moderators)
             );
                 // Then interate through attendee results and return them as part of the array:
             if (!empty($objRoomId->return->currentusers)) {
                     foreach ($objRoomId->return->currentusers as $a)
                       $current_room[] = array(
                                 'userId' => $a->username,
                                 'fullName' => $a->firstname . " " . $a->lastname,
                                 'isMod' => $a->isMod
                       );
             }
             $remoteMeeting = $current_room;
             */
             if (empty($remoteMeeting)) {
                 /*
                     error_log(__FILE__.'+'.__LINE__.' Empty remote Meeting for now');
                     if ($meetingDb['status'] == 1 && $this->isTeacher()) {
                         $this->endMeeting($meetingDb['id']);
                     }
                 */
             } else {
                 $remoteMeeting['add_to_calendar_url'] = api_get_self() . '?action=add_to_calendar&id=' . $meetingDb['id'] . '&start=' . api_strtotime($meetingDb['startTime']);
             }
             $remoteMeeting['end_url'] = api_get_self() . '?action=end&id=' . $meetingDb['id'];
             $remoteMeeting['delete_url'] = api_get_self() . '?action=delete&id=' . $meetingDb['id'];
             //$record_array = array();
             //            if ($meetingDb['record'] == 1) {
             //                $recordingParams = array(
             //                    'meetingId' => $meetingDb['id'],        //-- OPTIONAL - comma separate if multiple ids
             //                );
             //
             //                $records = $this->api->getRecordingsWithXmlResponseArray($recordingParams);
             //                if (!empty($records)) {
             //                    $count = 1;
             //                    if (isset($records['message']) && !empty($records['message'])) {
             //                        if ($records['messageKey'] == 'noRecordings') {
             //                            $record_array[] = get_lang('NoRecording');
             //                        } else {
             //                            //$record_array[] = $records['message'];
             //                        }
             //                    } else {
             //                        foreach ($records as $record) {
             //                            if (is_array($record) && isset($record['recordId'])) {
             //                                $url = Display::url(get_lang('ViewRecord'), $record['playbackFormatUrl'], array('target' => '_blank'));
             //                                if ($this->is_teacher()) {
             //                                    $url .= Display::url(Display::return_icon('link.gif',get_lang('CopyToLinkTool')), api_get_self().'?action=copy_record_to_link_tool&id='.$meetingDb['id'].'&record_id='.$record['recordId']);
             //                                    $url .= Display::url(Display::return_icon('agenda.png',get_lang('AddToCalendar')), api_get_self().'?action=add_to_calendar&id='.$meetingDb['id'].'&start='.api_strtotime($meetingDb['created_at']).'&url='.$record['playbackFormatUrl']);
             //                                    $url .= Display::url(Display::return_icon('delete.png',get_lang('Delete')), api_get_self().'?action=delete_record&id='.$record['recordId']);
             //                                }
             //                                //$url .= api_get_self().'?action=publish&id='.$record['recordID'];
             //                                $count++;
             //                                $record_array[] = $url;
             //                            } else {
             //
             //                            }
             //                        }
             //                    }
             //                }
             //                //var_dump($record_array);
             //                $item['show_links']  = implode('<br />', $record_array);
             //
             //            }
             //
             //$item['created_at'] = api_convert_and_format_date($meetingDb['created_at']);
             //            //created_at
             //
             //            $item['publish_url'] = api_get_self().'?action=publish&id='.$meetingDb['id'];
             //            $item['unpublish_url'] = api_get_self().'?action=unpublish&id='.$meetingDb['id'];
             //
             //if ($meetingDb['status'] == 1) {
             //                $joinParams = array(
             //                    'meetingId' => $meetingDb['id'],        //-- REQUIRED - A unique id for the meeting
             //                    'username' => $this->user_complete_name,    //-- REQUIRED - The name that will display for the user in the meeting
             //                    'password' => $pass,            //-- REQUIRED - The attendee or moderator password, depending on what's passed here
             //                    'createTime' => '',            //-- OPTIONAL - string. Leave blank ('') unless you set this correctly.
             //                    'userID' => '',            //    -- OPTIONAL - string
             //                    'webVoiceConf' => ''    //    -- OPTIONAL - string
             //                );
             //                $returnVal = $this->setUserObjectAndGenerateRoomHashByURLAndRecFlag( array('room_id' => $meetingDb['id']) );
             //                $joinUrl = CONFIG_OPENMEETINGS_SERVER_URL . "?" .
             //                           "secureHash=" . $returnVal;
             //
             //                $item['go_url'] = $joinUrl;
             //}
             $item = array_merge($item, $meetingDb, $remoteMeeting);
             //error_log(__FILE__.'+'.__LINE__.'  Item: '.print_r($item,1));
             $newMeetingsList[] = $item;
         }
         //end foreach $meetingsList
     }
     return $newMeetingsList;
 }
Esempio n. 22
0
/**
 * This function retrieves all the personal agenda items and add them to the agenda items found by the other functions.
 */
function get_personal_agenda_items($user_id, $agendaitems, $day = "", $month = "", $year = "", $week = "", $type)
{
    $tbl_personal_agenda = Database::get_main_table(TABLE_PERSONAL_AGENDA);
    $user_id = intval($user_id);
    // 1. creating the SQL statement for getting the personal agenda items in MONTH view
    if ($type == "month_view" or $type == "") {
        // we are in month view
        $sql = "SELECT * FROM " . $tbl_personal_agenda . " WHERE user='******' and MONTH(date)='" . $month . "' AND YEAR(date) = '" . $year . "'  ORDER BY date ASC";
    }
    // 2. creating the SQL statement for getting the personal agenda items in WEEK view
    // we are in week view
    if ($type == "week_view") {
        $start_end_day_of_week = calculate_start_end_of_week($week, $year);
        $start_day = $start_end_day_of_week['start']['day'];
        $start_month = $start_end_day_of_week['start']['month'];
        $start_year = $start_end_day_of_week['start']['year'];
        $end_day = $start_end_day_of_week['end']['day'];
        $end_month = $start_end_day_of_week['end']['month'];
        $end_year = $start_end_day_of_week['end']['year'];
        // in sql statements you have to use year-month-day for date calculations
        $start_filter = $start_year . "-" . $start_month . "-" . $start_day . " 00:00:00";
        $start_filter = api_get_utc_datetime($start_filter);
        $end_filter = $end_year . "-" . $end_month . "-" . $end_day . " 23:59:59";
        $end_filter = api_get_utc_datetime($end_filter);
        $sql = " SELECT * FROM " . $tbl_personal_agenda . " WHERE user='******' AND date>='" . $start_filter . "' AND date<='" . $end_filter . "'";
    }
    // 3. creating the SQL statement for getting the personal agenda items in DAY view
    if ($type == "day_view") {
        // we are in day view
        // we could use mysql date() function but this is only available from 4.1 and higher
        $start_filter = $year . "-" . $month . "-" . $day . " 00:00:00";
        $start_filter = api_get_utc_datetime($start_filter);
        $end_filter = $year . "-" . $month . "-" . $day . " 23:59:59";
        $end_filter = api_get_utc_datetime($end_filter);
        $sql = " SELECT * FROM " . $tbl_personal_agenda . " WHERE user='******' AND date>='" . $start_filter . "' AND date<='" . $end_filter . "'";
    }
    $result = Database::query($sql);
    while ($item = Database::fetch_array($result, 'ASSOC')) {
        $time_minute = api_convert_and_format_date($item['date'], TIME_NO_SEC_FORMAT);
        $item['date'] = api_get_local_time($item['date']);
        $item['start_date_tms'] = api_strtotime($item['date']);
        $item['content'] = $item['text'];
        // we break the date field in the database into a date and a time part
        $agenda_db_date = explode(" ", $item['date']);
        $date = $agenda_db_date[0];
        $time = $agenda_db_date[1];
        // we divide the date part into a day, a month and a year
        $agendadate = explode("-", $item['date']);
        $year = intval($agendadate[0]);
        $month = intval($agendadate[1]);
        $day = intval($agendadate[2]);
        // we divide the time part into hour, minutes, seconds
        $agendatime = explode(":", $time);
        $hour = $agendatime[0];
        $minute = $agendatime[1];
        $second = $agendatime[2];
        if ($type == 'month_view') {
            $item['calendar_type'] = 'personal';
            $item['start_date'] = $item['date'];
            $agendaitems[$day][] = $item;
            continue;
        }
        // if the student has specified a course we a add a link to that course
        if ($item['course'] != "") {
            $url = api_get_path(WEB_CODE_PATH) . "calendar/agenda.php?cidReq=" . urlencode($item['course']) . "&amp;day={$day}&amp;month={$month}&amp;year={$year}#{$day}";
            // RH  //Patrick Cool: to highlight the relevant agenda item
            $course_link = "<a href=\"{$url}\" title=\"" . $item['course'] . "\">" . $item['course'] . "</a>";
        } else {
            $course_link = "";
        }
        // Creating the array that will be returned. If we have week or month view we have an array with the date as the key
        // if we have a day_view we use a half hour as index => key 33 = 16h30
        if ($type !== "day_view") {
            // This is the array construction for the WEEK or MONTH view
            //Display events in agenda
            $agendaitems[$day] .= "<div><i>{$time_minute}</i> {$course_link} <a href=\"myagenda.php?action=view&amp;view=personal&amp;day={$day}&amp;month={$month}&amp;year={$year}&amp;id=" . $item['id'] . "#" . $item['id'] . "\" class=\"personal_agenda\">" . $item['title'] . "</a></div><br />";
        } else {
            // this is the array construction for the DAY view
            $halfhour = 2 * $agendatime['0'];
            if ($agendatime['1'] >= '30') {
                $halfhour = $halfhour + 1;
            }
            //Display events by list
            $agendaitems[$halfhour] .= "<div><i>{$time_minute}</i> {$course_link} <a href=\"myagenda.php?action=view&amp;view=personal&amp;day={$day}&amp;month={$month}&amp;year={$year}&amp;id=" . $item['id'] . "#" . $item['id'] . "\" class=\"personal_agenda\">" . $item['title'] . "</a></div>";
        }
    }
    return $agendaitems;
}
 /**
  * It's used for controlling attendace calendar (list, add, edit, delete),
  * render to attendance_calendar view
  * @param string action (optional, by default 'calendar_list')
  * @param int	 attendance id (optional)
  * @param int	 calendar id (optional)
  */
 public function attendance_calendar($action = 'calendar_list', $attendance_id = 0, $calendar_id = 0)
 {
     $attendance = new Attendance();
     $calendar_id = intval($calendar_id);
     $data = array();
     $data['attendance_id'] = $attendance_id;
     $attendance_id = intval($attendance_id);
     if ($action == 'calendar_add') {
         if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
             if (!isset($_POST['cancel'])) {
                 if (isset($_POST['repeat'])) {
                     //@todo  check this error_logs
                     $start_datetime = api_strtotime(api_get_utc_datetime($attendance->build_datetime_from_array($_POST['date_time'])), 'UTC');
                     //error_log('$start_datetime '.$start_datetime);
                     $_POST['end_date_time']['H'] = $_POST['date_time']['H'];
                     $_POST['end_date_time']['i'] = $_POST['date_time']['i'];
                     //error_log($attendance->build_datetime_from_array($_POST['end_date_time']));
                     $end_datetime = api_strtotime(api_get_utc_datetime($attendance->build_datetime_from_array($_POST['end_date_time'])), 'UTC');
                     //error_log('$end_datetime '.$end_datetime);
                     $checkdate = checkdate($_POST['end_date_time']['F'], $_POST['end_date_time']['d'], $_POST['end_date_time']['Y']);
                     $repeat_type = $_POST['repeat_type'];
                     if ($end_datetime > $start_datetime && $checkdate) {
                         $affected_rows = $attendance->attendance_repeat_calendar_add($attendance_id, $start_datetime, $end_datetime, $repeat_type);
                         $action = 'calendar_list';
                     } else {
                         if (!$checkdate) {
                             $data['error_checkdate'] = true;
                         } else {
                             $data['error_repeat_date'] = true;
                         }
                         $data['repeat'] = true;
                         $action = 'calendar_add';
                     }
                 } else {
                     $datetime = $attendance->build_datetime_from_array($_POST['date_time']);
                     $datetimezone = api_get_utc_datetime($datetime);
                     if (!empty($datetime)) {
                         $attendance->set_date_time($datetimezone);
                         $affected_rows = $attendance->attendance_calendar_add($attendance_id);
                         $action = 'calendar_list';
                     } else {
                         $data['error_date'] = true;
                         $action = 'calendar_add';
                     }
                 }
             } else {
                 $action = 'calendar_list';
             }
         }
     } else {
         if ($action == 'calendar_edit') {
             $data['calendar_id'] = $calendar_id;
             if (strtoupper($_SERVER['REQUEST_METHOD']) == "POST") {
                 if (!isset($_POST['cancel'])) {
                     $datetime = $attendance->build_datetime_from_array($_POST['date_time']);
                     $datetimezone = api_get_utc_datetime($datetime);
                     $attendance->set_date_time($datetimezone);
                     $affected_rows = $attendance->attendance_calendar_edit($calendar_id, $attendance_id);
                     $data['calendar_id'] = 0;
                     $action = 'calendar_list';
                 } else {
                     $action = 'calendar_list';
                 }
             }
         } else {
             if ($action == 'calendar_delete') {
                 $affected_rows = $attendance->attendance_calendar_delete($calendar_id, $attendance_id);
                 $action = 'calendar_list';
             } else {
                 if ($action == 'calendar_all_delete') {
                     $affected_rows = $attendance->attendance_calendar_delete(0, $attendance_id, true);
                     $action = 'calendar_list';
                 }
             }
         }
     }
     $data['action'] = $action;
     $data['attendance_calendar'] = $attendance->get_attendance_calendar($attendance_id);
     $data['is_locked_attendance'] = $attendance->is_locked_attendance($attendance_id);
     // render to the view
     $this->view->set_data($data);
     $this->view->set_layout('layout');
     $this->view->set_template('attendance_calendar');
     $this->view->render();
 }
Esempio n. 24
0
 /**
  * @param $user_id
  * @param $course_list
  * @param int $session_id
  * @return array|bool
  */
 static function get_connections_from_course_list($user_id, $course_list, $session_id = 0)
 {
     // Database table definitions
     $tbl_track_course = Database::get_main_table(TABLE_STATISTIC_TRACK_E_COURSE_ACCESS);
     if (empty($course_list)) {
         return false;
     }
     // protect data
     $user_id = intval($user_id);
     $session_id = intval($session_id);
     $new_course_list = array();
     foreach ($course_list as $course_item) {
         $courseInfo = api_get_course_info($course_item['code']);
         $courseId = $courseInfo['real_id'];
         $new_course_list[] = '"' . $courseId . '"';
     }
     $course_list = implode(', ', $new_course_list);
     if (empty($course_list)) {
         return false;
     }
     $sql = 'SELECT login_course_date, logout_course_date, c_id
             FROM ' . $tbl_track_course . '
             WHERE
                 user_id = ' . $user_id . ' AND
                 c_id IN (' . $course_list . ') AND
                 session_id = ' . $session_id . '
             ORDER BY login_course_date ASC';
     $rs = Database::query($sql);
     $connections = array();
     while ($row = Database::fetch_array($rs)) {
         $timestamp_login_date = api_strtotime($row['login_course_date'], 'UTC');
         $timestamp_logout_date = api_strtotime($row['logout_course_date'], 'UTC');
         $connections[] = array('login' => $timestamp_login_date, 'logout' => $timestamp_logout_date, 'c_id' => $row['c_id']);
     }
     return $connections;
 }
Esempio n. 25
0
 /**
  * @param string $file
  * @param bool $moveFile
  */
 private function importStudents($file, $moveFile = true)
 {
     $data = Import::csv_to_array($file);
     /*
     * Another users import.
             Unique identifier: official code and username . ok
             Password should never get updated. ok
             If an update should need to occur (because it changed in the .csv),
             we’ll want that logged. We will handle this manually in that case.
             All other fields should be updateable, though passwords should of course not get updated. ok
             If a user gets deleted (not there anymore),
             He should be set inactive one year after the current date.
             So I presume you’ll just update the expiration date.
             We want to grant access to courses up to a year after deletion.
     */
     if (!empty($data)) {
         $language = $this->defaultLanguage;
         $this->logger->addInfo(count($data) . " records found.");
         foreach ($data as $row) {
             $row = $this->cleanUserRow($row);
             $user_id = UserManager::get_user_id_from_original_id($row['extra_' . $this->extraFieldIdNameList['user']], $this->extraFieldIdNameList['user']);
             $userInfo = array();
             $userInfoByOfficialCode = null;
             if (!empty($user_id)) {
                 $userInfo = api_get_user_info($user_id);
                 $userInfoByOfficialCode = api_get_user_info_from_official_code($row['official_code']);
             }
             $expirationDate = api_get_utc_datetime(strtotime("+" . intval($this->expirationDateInUserCreation) . "years"));
             if (empty($userInfo) && empty($userInfoByOfficialCode)) {
                 // Create user
                 $result = UserManager::create_user($row['firstname'], $row['lastname'], STUDENT, $row['email'], $row['username'], $row['password'], $row['official_code'], $language, $row['phone'], null, $row['auth_source'], $expirationDate, 1, 0, null, null, false);
                 if ($result) {
                     foreach ($row as $key => $value) {
                         if (substr($key, 0, 6) == 'extra_') {
                             //an extra field
                             UserManager::update_extra_field_value($result, substr($key, 6), $value);
                         }
                     }
                     $this->logger->addInfo("Students - User created: " . $row['username']);
                 } else {
                     $this->logger->addError("Students - User NOT created: " . $row['username'] . " " . $row['firstname'] . " " . $row['lastname']);
                 }
             } else {
                 if (empty($userInfo)) {
                     $this->logger->addError("Students - Can't update user :"******"Students - User email is not updated : " . $row['username'] . " because the avoid conditions (email).");
                             // Do not change email keep the old email.
                             $email = $userInfo['email'];
                         }
                         // 2. Condition
                         if (!in_array($userInfo['email'], $avoidUsersWithEmail) && !in_array($row['email'], $avoidUsersWithEmail)) {
                             $email = $userInfo['email'];
                         }
                         // 3. Condition
                         if (in_array($userInfo['email'], $avoidUsersWithEmail) && !in_array($row['email'], $avoidUsersWithEmail)) {
                             $email = $row['email'];
                         }
                         // Blocking password update
                         $avoidUsersWithPassword = $this->conditions['importStudents']['update']['avoid']['password'];
                         if ($userInfo['password'] != api_get_encrypted_password($row['password']) && in_array($row['password'], $avoidUsersWithPassword)) {
                             $this->logger->addInfo("Students - User password is not updated: " . $row['username'] . " because the avoid conditions (password).");
                             $password = null;
                             $resetPassword = 0;
                             // disallow password change
                         }
                     }
                 }
                 $expirationDate = api_get_utc_datetime(strtotime("+" . intval($this->expirationDateInUserUpdate) . "years"));
                 // Update user
                 $result = UserManager::update_user($userInfo['user_id'], $row['firstname'], $row['lastname'], $row['username'], $password, $row['auth_source'], $email, STUDENT, $userInfo['official_code'], $userInfo['phone'], $userInfo['picture_uri'], $expirationDate, $userInfo['active'], null, 0, null, null, null, false, $resetPassword);
                 if ($result) {
                     if ($row['username'] != $userInfo['username']) {
                         $this->logger->addInfo("Students - Username was changes from '" . $userInfo['username'] . "' to '" . $row['username'] . "' ");
                     }
                     foreach ($row as $key => $value) {
                         if (substr($key, 0, 6) == 'extra_') {
                             //an extra field
                             UserManager::update_extra_field_value($userInfo['user_id'], substr($key, 6), $value);
                         }
                     }
                     $this->logger->addInfo("Students - User updated: " . $row['username']);
                 } else {
                     $this->logger->addError("Students - User NOT updated: " . $row['username'] . " " . $row['firstname'] . " " . $row['lastname']);
                 }
             }
         }
     }
     if ($moveFile) {
         $this->moveFile($file);
     }
 }
Esempio n. 26
0
 global $src;
 $learnPath->items[$learnPath->current]->write_to_db();
 $TBL_TRACK_EXERCICES = Database::get_main_table(TABLE_STATISTIC_TRACK_E_EXERCISES);
 $TBL_LP_ITEM_VIEW = Database::get_course_table(TABLE_LP_ITEM_VIEW);
 $TBL_LP_ITEM = Database::get_course_table(TABLE_LP_ITEM);
 $safe_item_id = intval($_GET['lp_item_id']);
 $safe_id = $lp_id;
 $safe_exe_id = intval($_REQUEST['exeId']);
 if ($safe_id == strval(intval($safe_id)) && $safe_item_id == strval(intval($safe_item_id))) {
     $sql = 'SELECT start_date, exe_date, exe_result, exe_weighting, exe_exo_id
             FROM ' . $TBL_TRACK_EXERCICES . '
             WHERE exe_id = ' . $safe_exe_id;
     $res = Database::query($sql);
     $row_dates = Database::fetch_array($res);
     $time_start_date = api_strtotime($row_dates['start_date'], 'UTC');
     $time_exe_date = api_strtotime($row_dates['exe_date'], 'UTC');
     $mytime = (int) $time_exe_date - (int) $time_start_date;
     $score = (double) $row_dates['exe_result'];
     $max_score = (double) $row_dates['exe_weighting'];
     $sql = "UPDATE {$TBL_LP_ITEM} SET\n                    max_score = '{$max_score}'\n                WHERE c_id = {$course_id} AND id = '" . $safe_item_id . "'";
     Database::query($sql);
     $sql = "SELECT id FROM {$TBL_LP_ITEM_VIEW}\n                WHERE\n                    c_id = {$course_id} AND\n                    lp_item_id = '{$safe_item_id}' AND\n                    lp_view_id = '" . $learnPath->lp_view_id . "'\n                ORDER BY id DESC\n                LIMIT 1";
     $res_last_attempt = Database::query($sql);
     if (Database::num_rows($res_last_attempt) && !api_is_invitee()) {
         $row_last_attempt = Database::fetch_row($res_last_attempt);
         $lp_item_view_id = $row_last_attempt[0];
         $exercise = new Exercise(api_get_course_int_id());
         $exercise->read($row_dates['exe_exo_id']);
         $status = 'completed';
         if (!empty($exercise->pass_percentage)) {
             $status = 'failed';
Esempio n. 27
0
             echo '<script> datetime_by_attendance("' . $attendance_select_item_id . '", "' . $thematic_advance_id . '"); </script>';
         } else {
             echo '<script> datetime_by_attendance("' . $attendance_select_item_id . '", 0); </script>';
         }
     }
 }
 $default['start_date_type'] = 1;
 $default['custom_start_date'] = date('d-F-Y H:i', api_strtotime(api_get_local_time()));
 $default['duration_in_hours'] = 1;
 if (!empty($thematic_advance_data)) {
     // set default values
     $default['content'] = $thematic_advance_data['content'];
     $default['duration_in_hours'] = $thematic_advance_data['duration'];
     if (empty($thematic_advance_data['attendance_id'])) {
         $default['start_date_type'] = 2;
         $default['custom_start_date'] = date('d-F-Y H:i', api_strtotime(api_get_local_time($thematic_advance_data['start_date'])));
     } else {
         $default['start_date_type'] = 1;
         if (!empty($thematic_advance_data['start_date'])) {
             $default['start_date_by_attendance'] = api_get_local_time($thematic_advance_data['start_date']);
         }
         $default['attendance_select'] = $thematic_advance_data['attendance_id'];
     }
 }
 $form->setDefaults($default);
 // error messages
 $msg_error = '';
 if ($start_date_error) {
     $msg_error .= get_lang('YouMustSelectAtleastAStartDate') . '<br />';
 }
 if ($duration_error) {
Esempio n. 28
0
 /**
  * Return true if coach is allowed to access this session
  * @param int $sessionId
  * @return bool
  */
 public static function isSessionDateOkForCoach($sessionId)
 {
     return api_get_session_visibility($sessionId);
     $listSessionInfo = api_get_session_info($sessionId);
     $dateStart = $listSessionInfo['date_start'];
     $dateEnd = $listSessionInfo['date_end'];
     $nbDaysAccessBeforeBeginning = $listSessionInfo['nb_days_access_before_beginning'];
     $nbDaysAccessAfterEnd = $listSessionInfo['nb_days_access_after_end'];
     // no start date
     if ($dateStart == '0000-00-00') {
         return true;
     }
     $now = time();
     $dateStartForCoach = api_strtotime($dateStart . ' 00:00:00') - $nbDaysAccessBeforeBeginning * 86400;
     $dateEndForCoach = api_strtotime($dateEnd . ' 00:00:00') + $nbDaysAccessAfterEnd * 86400;
     if ($dateEnd == '0000-00-00') {
         // start date but no end date
         if ($dateStartForCoach <= $now) {
             return true;
         }
     } else {
         // start date and end date
         if ($dateStartForCoach <= $now && $now <= $dateEndForCoach) {
             return true;
         }
     }
     return false;
 }
Esempio n. 29
0
/**
 * Gets the week from a day
 * @param   string   Date in UTC (2010-01-01 12:12:12)
 * @return  int      Returns an integer with the week number of the year
 */
function get_week_from_day($date)
{
    if (!empty($date)) {
        $time = api_strtotime($date, 'UTC');
        return date('W', $time);
    } else {
        return date('W');
    }
}
Esempio n. 30
0
 /**
  * @param string $course_code
  * @param int $session_id
  *
  * @return array
  */
 public static function get_exercises_to_be_taken($course_code, $session_id)
 {
     $course_info = api_get_course_info($course_code);
     $exercises = self::get_all_exercises($course_info, $session_id);
     $result = array();
     $now = time() + 15 * 24 * 60 * 60;
     foreach ($exercises as $exercise_item) {
         if (isset($exercise_item['end_time']) && !empty($exercise_item['end_time']) && $exercise_item['end_time'] != '0000-00-00 00:00:00' && api_strtotime($exercise_item['end_time'], 'UTC') < $now) {
             $result[] = $exercise_item;
         }
     }
     return $result;
 }