/**
  * Creates a session (helper method)
  *
  * @param string Name of the session
  * @param string Start date, use the 'YYYY-MM-DD' format
  * @param string End date, use the 'YYYY-MM-DD' format
  * @param int Access delays of the coach (days before)
  * @param int Access delays of the coach (days after)
  * @param int Nolimit (0 = no limit of time, 1 = limit of time)
  * @param int Visibility
  * @param string User id field name for the coach
  * @param string User id value for the coach
  * @param string Original session id field name (use "chamilo_session_id" to use internal id)
  * @param string Original session id value
  * @param array Array of extra fields
  * @return mixed Generated id in case of success, WSError otherwise
  */
 protected function createSessionHelper($name, $start_date, $end_date, $coach_access_start_date, $coach_access_end_date, $nolimit, $visibility, $user_id_field_name, $user_id_value, $session_id_field_name, $session_id_value, $extras)
 {
     // Verify that coach exists and get its id
     $user_id = $this->getUserId($user_id_field_name, $user_id_value);
     if ($user_id instanceof WSError) {
         return $user_id;
     }
     // Build the date
     $start_date_array = explode('-', $start_date);
     foreach ($start_date_array as &$sd_element) {
         $sd_element = intval($sd_element);
     }
     $end_date_array = explode('-', $end_date);
     foreach ($end_date_array as &$ed_element) {
         $ed_element = intval($ed_element);
     }
     // Try to create the session
     $params = array('name' => $name, 'access_start_date' => $start_date, 'access_end_date' => $end_date, 'coach_access_start_date' => $coach_access_start_date, 'coach_access_end_date' => $coach_access_end_date, 'visibility' => $visibility);
     $session_id = SessionManager::add($params);
     if (!is_int($session_id)) {
         return new WSError(301, 'Could not create the session');
     } else {
         // Add the Original session id to the extra fields
         $extras_associative = array();
         if ($session_id_field_name != "chamilo_session_id") {
             $extras_associative[$session_id_field_name] = $session_id_value;
         }
         foreach ($extras as $extra) {
             $extras_associative[$extra['field_name']] = $extra['field_value'];
         }
         // Create the extra fields
         foreach ($extras_associative as $fname => $fvalue) {
             SessionManager::create_session_extra_field($fname, 1, $fname);
             SessionManager::update_session_extra_field_value($session_id, $fname, $fvalue);
         }
         return $session_id;
     }
 }
 /**
  * @param string $file
  * @param bool $updatesession options:
  * true: if the session exists it will be updated
  * false: if session exists a new session will be created adding a counter session1, session2, etc
  * @param int $user_id
  * @param $logger
  * @param array convert a file row to an extra field. Example in CSV file there's a SessionID then it will
  * converted to extra_external_session_id if you set this: array('SessionId' => 'extra_external_session_id')
  * @param array extra fields
  * @param string extra field id
  * @param int $daysCoachAccessBeforeBeginning
  * @param int $daysCoachAccessAfterBeginning
  * @param int $sessionVisibility
  * @return array
  */
 static function importCSV($file, $updatesession, $defaultUserId = null, $logger = null, $extraFields = array(), $extraFieldId = null, $daysCoachAccessBeforeBeginning = null, $daysCoachAccessAfterBeginning = null, $sessionVisibility = 1, $fieldsToAvoidUpdate = array())
 {
     $content = file($file);
     $error_message = null;
     $session_counter = 0;
     if (empty($defaultUserId)) {
         $defaultUserId = api_get_user_id();
     }
     $eol = PHP_EOL;
     if (PHP_SAPI != 'cli') {
         $eol = '<br />';
     }
     $debug = false;
     if (isset($logger)) {
         $debug = true;
     }
     $extraParameters = null;
     if (!empty($daysCoachAccessBeforeBeginning) && !empty($daysCoachAccessAfterBeginning)) {
         $extraParameters .= ' , nb_days_access_before_beginning = ' . intval($daysCoachAccessBeforeBeginning);
         $extraParameters .= ' , nb_days_access_after_end = ' . intval($daysCoachAccessAfterBeginning);
     }
     $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
     $tbl_session_user = Database::get_main_table(TABLE_MAIN_SESSION_USER);
     $tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
     $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
     $sessions = array();
     if (!api_strstr($content[0], ';')) {
         $error_message = get_lang('NotCSV');
     } else {
         $tag_names = array();
         foreach ($content as $key => $enreg) {
             $enreg = explode(';', trim($enreg));
             if ($key) {
                 foreach ($tag_names as $tag_key => $tag_name) {
                     $sessions[$key - 1][$tag_name] = $enreg[$tag_key];
                 }
             } else {
                 foreach ($enreg as $tag_name) {
                     $tag_names[] = api_preg_replace('/[^a-zA-Z0-9_\\-]/', '', $tag_name);
                 }
                 if (!in_array('SessionName', $tag_names) || !in_array('DateStart', $tag_names) || !in_array('DateEnd', $tag_names)) {
                     $error_message = get_lang('NoNeededData');
                     break;
                 }
             }
         }
         // Looping the sessions.
         foreach ($sessions as $enreg) {
             $user_counter = 0;
             $course_counter = 0;
             if (isset($extraFields) && !empty($extraFields)) {
                 foreach ($extraFields as $original => $to) {
                     $enreg[$to] = $enreg[$original];
                 }
             }
             $session_name = Database::escape_string($enreg['SessionName']);
             $date_start = $enreg['DateStart'];
             $date_end = $enreg['DateEnd'];
             $visibility = isset($enreg['Visibility']) ? $enreg['Visibility'] : $sessionVisibility;
             $session_category_id = isset($enreg['SessionCategory']) ? $enreg['SessionCategory'] : null;
             // Searching a general coach.
             if (!empty($enreg['Coach'])) {
                 $coach_id = UserManager::get_user_id_from_username($enreg['Coach']);
                 if ($coach_id === false) {
                     // If the coach-user does not exist - I'm the coach.
                     $coach_id = $defaultUserId;
                 }
             } else {
                 $coach_id = $defaultUserId;
             }
             if (!$updatesession) {
                 // Always create a session.
                 $unique_name = false;
                 // This MUST be initializead.
                 $i = 0;
                 // Change session name, verify that session doesn't exist.
                 $suffix = null;
                 while (!$unique_name) {
                     if ($i > 1) {
                         $suffix = ' - ' . $i;
                     }
                     $sql = 'SELECT 1 FROM ' . $tbl_session . ' WHERE name="' . $session_name . $suffix . '"';
                     $rs = Database::query($sql);
                     if (Database::result($rs, 0, 0)) {
                         $i++;
                     } else {
                         $unique_name = true;
                         $session_name .= $suffix;
                     }
                 }
                 // Creating the session.
                 /*$sql_session = "INSERT IGNORE INTO $tbl_session SET
                           name = '".$session_name."',
                           id_coach = '$coach_id',
                           date_start = '$date_start',
                           date_end = '$date_end',
                           visibility = '$visibility',
                           session_category_id = '$session_category_id',
                           session_admin_id=".intval($defaultUserId).$extraParameters;
                   Database::query($sql_session);*/
                 $params = array('id_coach' => $coach_id, 'visibility' => $visibility, 'name' => $session_name, 'access_start_date' => $date_start, 'access_end_date' => $date_end, 'session_category_id' => $session_category_id, 'session_admin_id' => $defaultUserId);
                 $session_id = SessionManager::add($params);
                 if ($debug) {
                     if ($session_id) {
                         foreach ($enreg as $key => $value) {
                             if (substr($key, 0, 6) == 'extra_') {
                                 //an extra field
                                 self::update_session_extra_field_value($session_id, substr($key, 6), $value);
                             }
                         }
                         $logger->addInfo("Sessions - Session created: #{$session_id} - {$session_name}");
                     } else {
                         $logger->addError("Sessions - Session NOT created: {$session_name}");
                     }
                 }
                 $session_counter++;
             } else {
                 $sessionId = null;
                 if (isset($extraFields) && !empty($extraFields)) {
                     $sessionId = self::get_session_id_from_original_id($enreg['extra_' . $extraFieldId], $extraFieldId);
                     if (empty($sessionId)) {
                         $my_session_result = false;
                     } else {
                         $my_session_result = true;
                     }
                 } else {
                     $my_session_result = self::get_session_by_name($enreg['SessionName']);
                 }
                 if ($my_session_result === false) {
                     // Creating a session.
                     /*$sql_session = "INSERT IGNORE INTO $tbl_session SET
                       name = '$session_name',
                       id_coach = '$coach_id',
                       date_start = '$date_start',
                       date_end = '$date_end',
                       visibility = '$visibility',
                       session_category_id = '$session_category_id' ".$extraParameters;*/
                     $params = array('id_coach' => $coach_id, 'visibility' => $visibility, 'name' => $session_name, 'access_start_date' => $date_start, 'access_end_date' => $date_end, 'session_category_id' => $session_category_id, 'session_admin_id' => $defaultUserId);
                     $session_id = SessionManager::add($params);
                     // We get the last insert id.
                     /*$my_session_result = SessionManager::get_session_by_name($enreg['SessionName']);
                       $session_id = $my_session_result['id'];*/
                     if ($debug) {
                         if ($session_id) {
                             foreach ($enreg as $key => $value) {
                                 if (substr($key, 0, 6) == 'extra_') {
                                     //an extra field
                                     self::update_session_extra_field_value($session_id, substr($key, 6), $value);
                                 }
                             }
                             $logger->addInfo("Sessions - #{$session_id} created: {$session_name}");
                         } else {
                             $logger->addError("Sessions - Session NOT created: {$session_name}");
                         }
                     }
                 } else {
                     $params = array('id_coach' => $coach_id, 'date_start' => $date_start, 'date_end' => $date_end, 'visibility' => $visibility, 'session_category_id' => $session_category_id);
                     if (!empty($fieldsToAvoidUpdate)) {
                         foreach ($fieldsToAvoidUpdate as $field) {
                             unset($params[$field]);
                         }
                     }
                     if (isset($sessionId) && !empty($sessionId)) {
                         // The session already exists, update it then.
                         Database::update($tbl_session, $params, array('id = ?' => $sessionId));
                         $session_id = $sessionId;
                     } else {
                         Database::update($tbl_session, $params, array("name = '?' " => $enreg['SessionName']));
                         $row = Database::query("SELECT id FROM {$tbl_session} WHERE name = '{$session_name}'");
                         list($session_id) = Database::fetch_array($row);
                     }
                     foreach ($enreg as $key => $value) {
                         if (substr($key, 0, 6) == 'extra_') {
                             //an extra field
                             self::update_session_extra_field_value($session_id, substr($key, 6), $value);
                         }
                     }
                     Database::query("DELETE FROM {$tbl_session_user} WHERE id_session='{$session_id}'");
                     Database::query("DELETE FROM {$tbl_session_course} WHERE id_session='{$session_id}'");
                     Database::query("DELETE FROM {$tbl_session_course_user} WHERE id_session='{$session_id}'");
                 }
                 $session_counter++;
             }
             $users = explode('|', $enreg['Users']);
             // Adding the relationship "Session - User".
             if (is_array($users)) {
                 foreach ($users as $user) {
                     $user_id = UserManager::get_user_id_from_username($user);
                     if ($user_id !== false) {
                         // Insert new users.
                         $sql = "INSERT IGNORE INTO {$tbl_session_user} SET\n                                    id_user = '******',\n                                    id_session = '{$session_id}'";
                         Database::query($sql);
                         if ($debug) {
                             $logger->addInfo("Sessions - Adding User #{$user_id} ({$user}) to session #{$session_id}");
                         }
                         $user_counter++;
                     }
                 }
             }
             $courses = explode('|', $enreg['Courses']);
             foreach ($courses as $course) {
                 $course_code = api_strtoupper(api_substr($course, 0, api_strpos($course, '[')));
                 if (CourseManager::course_exists($course_code)) {
                     $courseInfo = api_get_course_info($course_code);
                     $courseId = $courseInfo['real_id'];
                     // Adding the course to a session.
                     $sql_course = "INSERT IGNORE INTO {$tbl_session_course}\n                                       SET c_id = '" . $courseId . "', id_session = '{$session_id}'";
                     Database::query($sql_course);
                     if ($debug) {
                         $logger->addInfo("Sessions - Adding course '{$course_code}' to session #{$session_id}");
                     }
                     $course_counter++;
                     $pattern = "/\\[(.*?)\\]/";
                     preg_match_all($pattern, $course, $matches);
                     if (isset($matches[1])) {
                         $course_coaches = $matches[1][0];
                         $course_users = $matches[1][1];
                     }
                     $course_users = explode(',', $course_users);
                     $course_coaches = explode(',', $course_coaches);
                     // Adding coaches to session course user
                     if (!empty($course_coaches)) {
                         foreach ($course_coaches as $course_coach) {
                             $coach_id = UserManager::get_user_id_from_username($course_coach);
                             if ($coach_id !== false) {
                                 $sql = "INSERT IGNORE INTO {$tbl_session_course_user} SET\n                                            id_user='******',\n                                            c_id ='{$courseId}',\n                                            id_session = '{$session_id}',\n                                            status = 2 ";
                                 Database::query($sql);
                                 if ($debug) {
                                     $logger->addInfo("Sessions - Adding course coach: user #{$coach_id} ({$course_coach}) to course: '{$course_code}' and session #{$session_id}");
                                 }
                             } else {
                                 $error_message .= get_lang('UserDoesNotExist') . ' : ' . $course_coach . $eol;
                             }
                         }
                     }
                     $users_in_course_counter = 0;
                     // Adding the relationship "Session - Course - User".
                     foreach ($course_users as $user) {
                         $user_id = UserManager::get_user_id_from_username($user);
                         if ($user_id !== false) {
                             $sql = "INSERT IGNORE INTO {$tbl_session_course_user} SET\n                                        id_user='******',\n                                        c_id = '{$courseId}',\n                                        id_session = '{$session_id}'";
                             Database::query($sql);
                             if ($debug) {
                                 $logger->addInfo("Sessions - Adding student: user #{$user_id} ({$user}) to course: '{$course_code}' and session #{$session_id}");
                             }
                             $users_in_course_counter++;
                         } else {
                             $error_message .= get_lang('UserDoesNotExist') . ': ' . $user . $eol;
                         }
                     }
                     $sql = "UPDATE {$tbl_session_course} SET nbr_users='{$users_in_course_counter}' WHERE c_id ='{$courseId}'";
                     Database::query($sql);
                     $course_info = CourseManager::get_course_information($course_code);
                     $inserted_in_course[$course_code] = $course_info['title'];
                 }
             }
             $access_url_id = api_get_current_access_url_id();
             UrlManager::add_session_to_url($session_id, $access_url_id);
             $sql_update_users = "UPDATE {$tbl_session} SET nbr_users ='{$user_counter}', nbr_courses='{$course_counter}' WHERE id='{$session_id}'";
             Database::query($sql_update_users);
         }
     }
     return array('error_message' => $error_message, 'session_counter' => $session_counter);
 }
示例#3
0
    $session_info['display_start_date'] = api_get_local_time($session_info['display_start_date'], null, null, true);
    $session_info['display_end_date'] = api_get_local_time($session_info['display_end_date'], null, null, true);
    $session_info['access_start_date'] = api_get_local_time($session_info['access_start_date'], null, null, true);
    $session_info['access_end_date'] = api_get_local_time($session_info['access_end_date'], null, null, true);
    $session_info['coach_access_start_date'] = api_get_local_time($session_info['coach_access_start_date'], null, null, true);
    $session_info['coach_access_end_date'] = api_get_local_time($session_info['coach_access_end_date'], null, null, true);
    $form->setDefaults($session_info);
}
if ($form->validate()) {
    $params = $form->getSubmitValues();
    if (isset($params['id'])) {
        SessionManager::update($params);
        header('Location: resume_session.php?id_session=' . $params['id']);
        exit;
    } else {
        $session_id = SessionManager::add($params);
        if ($session_id) {
            // integer => no error on session creation
            header('Location: add_courses_to_session.php?id_session=' . $session_id . '&add=true&msg=');
            exit;
        }
    }
}
function check_session_name($name)
{
    $session = SessionManager::get_session_by_name($name);
    return empty($session) ? true : false;
}
Display::display_header($tool_name);
echo '<div class="actions">';
echo '<a href="' . api_get_path(WEB_CODE_PATH) . 'session/session_list.php">' . Display::return_icon('back.png', get_lang('BackTo') . ' ' . get_lang('PlatformAdmin'), '', ICON_SIZE_MEDIUM) . '</a>';
 static function transaction_8($data, $web_service_details)
 {
     global $data_list;
     $session_info = Migration::soap_call($web_service_details, 'programaDetalles', array('intIdSede' => $data['branch_id'], 'uididprograma' => $data['item_id']));
     if ($session_info['error'] == false) {
         unset($session_info['error']);
         // check dates (only do this at session creation)
         self::fix_access_dates($session_info);
         $session_id = SessionManager::add($session_info);
         $session_info = api_get_session_info($session_id, true);
         if ($session_id) {
             $data_list['sessions'][$data['item_id']] = $session_id;
             return array('entity' => 'session', 'before' => null, 'after' => $session_info, 'message' => "Session was created. Id: {$session_id} session data: " . print_r($session_info, 1), 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL);
         } else {
             return array('message' => "Session was NOT created: {$data['item_id']} session data: " . print_r($session_info, 1), 'status_id' => self::TRANSACTION_STATUS_FAILED);
         }
     } else {
         //Return error
         return $session_info;
     }
 }
function WSCreateSession($params)
{
    global $_user;
    if (!WSHelperVerifyKey($params)) {
        return return_error(WS_ERROR_SECRET_KEY);
    }
    $tbl_user = Database::get_main_table(TABLE_MAIN_USER);
    $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
    $t_sf = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
    $t_sfv = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
    $sessions_params = $params['sessions'];
    $results = array();
    $orig_session_id_value = array();
    foreach ($sessions_params as $session_param) {
        $name = trim($session_param['name']);
        $access_start_date = $session_param['access_start_date'];
        $access_end_date = $session_param['access_end_date'];
        /*
                $year_start = intval($session_param['year_start']);
                $month_start = intval($session_param['month_start']);
                $day_start = intval($session_param['day_start']);
                $year_end = intval($session_param['year_end']);
                $month_end = intval($session_param['month_end']);
                $day_end = intval($session_param['day_end']);*/
        //$nb_days_acess_before = intval($session_param['nb_days_access_before']);
        //$nb_days_acess_after = intval($session_param['nb_days_access_after']);
        $id_coach = $session_param['user_id'];
        $nolimit = $session_param['nolimit'];
        $original_session_id_name = $session_param['original_session_id_name'];
        $original_session_id_value = $session_param['original_session_id_value'];
        $orig_session_id_value[] = $session_param['original_session_id_value'];
        $extra_list = $session_param['extra'];
        // Check if exits remote system's session id into session_field_values table.
        $sql = "SELECT field_value\tFROM {$t_sf} sf,{$t_sfv} sfv WHERE sfv.field_id=sf.id AND field_variable='{$original_session_id_name}' AND field_value='{$original_session_id_value}'";
        $res = Database::query($sql);
        $row = Database::fetch_row($res);
        if (Database::num_rows($res) > 0) {
            $results[] = 0;
            continue;
        }
        if (empty($name)) {
            $results[] = 0;
            continue;
            /*} elseif (empty($nolimit) && (!$month_start || !$day_start || !$year_start || !checkdate($month_start, $day_start, $year_start))) {
                  $results[] = 0;
                  continue;
              } elseif (empty($nolimit) && (!$month_end || !$day_end || !$year_end || !checkdate($month_end,$day_end,$year_end))) {
                  $results[] = 0;
                  continue;
              } elseif (empty($nolimit) && $date_start >= $date_end) {
                  $results[] = 0;
                  continue;*/
        } else {
            $rs = Database::query("SELECT 1 FROM {$tbl_session} WHERE name='" . Datanbase::escape_string($name) . "'");
            if (Database::num_rows($rs)) {
                $results[] = 0;
                continue;
            } else {
                $params = array('name' => $name, 'id_coach' => $id_coach, 'session_admin_id' => $_user['user_id'], 'access_start_date' => $access_start_date, 'access_end_date' => $access_end_date);
                $id_session = SessionManager::add($params);
                //Database::query("INSERT INTO $tbl_session(name,date_start,date_end,id_coach,session_admin_id, VALUES('".addslashes($name)."','$date_start','$date_end','$id_coach',".intval($_user['user_id']).",".$nb_days_acess_before.", ".$nb_days_acess_after.")");
                //$id_session = Database::insert_id();
                // Save new fieldlabel into course_field table.
                $field_id = SessionManager::create_session_extra_field($original_session_id_name, 1, $original_session_id_name);
                // Save the external system's id into user_field_value table.
                $res = SessionManager::update_session_extra_field_value($id_session, $original_session_id_name, $original_session_id_value);
                if (is_array($extra_list) && count($extra_list) > 0) {
                    foreach ($extra_list as $extra) {
                        $extra_field_name = $extra['field_name'];
                        $extra_field_value = $extra['field_value'];
                        // Save new fieldlabel into course_field table.
                        $field_id = SessionManager::create_session_extra_field($extra_field_name, 1, $extra_field_name);
                        // Save the external system's id into course_field_value table.
                        $res = SessionManager::update_session_extra_field_value($id_session, $extra_field_name, $extra_field_value);
                    }
                }
                $results[] = $id_session;
                continue;
            }
        }
    }
    // end principal foreach
    $count_results = count($results);
    $output = array();
    for ($i = 0; $i < $count_results; $i++) {
        $output[] = array('original_session_id_value' => $orig_session_id_value[$i], 'result' => $results[$i]);
    }
    return $output;
}