/** * Edits a question for the question manager * * @param Application $app * @param int $id * @return Response */ public function editQuestionAction(Application $app, $id) { $extraJS = array(); //@todo improve this JS includes should be added using twig $extraJS[] = '<link href="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/style.css" rel="stylesheet" type="text/css" />'; $extraJS[] = '<script src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>'; $app['extraJS'] = $extraJS; // Setting exercise obj. $exercise = new \Exercise(); $exercise->edit_exercise_in_lp = true; // Setting question obj. /** @var \Question $question */ $question = \Question::read($id, null, $exercise); $question->submitClass = "btn save"; $question->submitText = get_lang('ModifyQuestion'); $question->setDefaultValues = true; // Generating edit URL. $url = $app['url_generator']->generate('admin_questions_edit', array('id' => $id)); // Creating a new form $form = new \FormValidator('edit_question', 'post', $url); $extraFields = new \ExtraField('question'); $extraFields->addElements($form, $id); // Validating if there are extra fields to modify. if (count($form->_elements) > 1) { $form->addElement('button', 'submit', get_lang('Update')); $app['template']->assign('question', $question); $app['template']->assign('form', $form->toHtml()); } else { $app['template']->assign('message', \Display::return_message(get_lang('ThereAreNotExtrafieldsAvailable'), 'warning')); } // If form was submitted. if ($form->validate()) { $field_value = new \ExtraFieldValue('question'); $params = $form->exportValues(); $params['question_id'] = $id; $field_value->save_field_values($params); $app['template']->assign('message', \Display::return_message(get_lang('ItemUpdated'), 'success')); $url = $app['url_generator']->generate('admin_questions_edit', array('id' => $id)); return $app->redirect($url); } $response = $app['template']->render_template('admin/questionmanager/edit_question.tpl'); return new Response($response, 200, array()); }
/** * Edits a question for the question manager * * @Route("/edit") * @Method({"GET"}) * @param int $id * @return Response */ public function editQuestionAction($id) { // Setting exercise obj. $exercise = new \Exercise(); $exercise->edit_exercise_in_lp = true; // Setting question obj. /** @var \Question $question */ $question = \Question::read($id, null, $exercise); $question->submitClass = "btn save"; $question->submitText = get_lang('ModifyQuestion'); $question->setDefaultValues = true; // Generating edit URL. $url = $this->generateControllerUrl('editQuestionAction', array('id' => $id)); // Creating a new form $form = new \FormValidator('edit_question', 'post', $url); $extraFields = new \ExtraField('question'); $extraFields->addElements($form, $id); // Validating if there are extra fields to modify. if (count($form->_elements) > 1) { $form->addElement('button', 'submit', get_lang('Update')); $this->getTemplate()->assign('question', $question); $this->getTemplate()->assign('form', $form->toHtml()); } else { $this->addFlash('warning', get_lang('ThereAreNotExtrafieldsAvailable')); } // If form was submitted. if ($form->validate()) { $field_value = new \ExtraFieldValue('question'); $params = $form->exportValues(); $params['question_id'] = $id; $field_value->save_field_values($params); $this->addFlash('success', get_lang('ItemUpdated')); $url = $this->generateControllerUrl('editQuestionAction', array('id' => $id)); return $this->redirect($url); } $response = $this->renderTemplate('edit_question.tpl'); return new Response($response, 200, array()); }
/** * Checks whether we already approved the last version term and condition * @param int user id * @return bool true if we pass false otherwise */ function api_check_term_condition($user_id) { if (api_get_setting('registration.allow_terms_conditions') == 'true') { //check if exists terms and conditions if (LegalManager::count() == 0) { return true; } $extraFieldValue = new ExtraFieldValue('user'); $data = $extraFieldValue->get_values_by_handler_and_field_variable($user_id, 'legal_accept'); if (!empty($data) && isset($data['value'])) { $rowv = $data['value']; $user_conditions = explode(':', $rowv); $version = $user_conditions[0]; $lang_id = $user_conditions[1]; $real_version = LegalManager::get_last_version($lang_id); return $version >= $real_version; } return false; } return false; }
/** * Generate the URL for profile editing for a any user or the current user * @param int $userId Optional. The user id * @param boolean $asAdmin Optional. Whether get the URL for the platform admin * @return string If the URL is obtained return the drupal_user_id. Otherwise return false */ public function generateProfileEditingURL($userId = 0, $asAdmin = false) { $userId = intval($userId); if (empty($userId)) { $userId = api_get_user_id(); } $userExtraFieldValue = new ExtraFieldValue('user'); $drupalUserIdData = $userExtraFieldValue->get_values_by_handler_and_field_variable($userId, 'drupal_user_id'); // If this is an administrator, allow him to make some changes in // the Chamilo profile if ($asAdmin && api_is_platform_admin(true)) { return api_get_path(WEB_CODE_PATH) . "admin/user_edit.php?user_id={$userId}"; } // If the user doesn't match a Drupal user, give the normal profile // link if ($drupalUserIdData === false) { return api_get_path(WEB_CODE_PATH) . 'auth/profile.php'; } // In all other cases, generate a link to the Drupal profile edition $drupalUserId = $drupalUserIdData['value']; $url = "{$this->protocol}{$this->domain}/user/{$drupalUserId}/edit"; return $url; }
if (isset($fields[$sessionFieldValue['field_id']])) { $var = $fields[$sessionFieldValue['field_id']]; $val = $sessionFieldValue['value']; // Assign session field value to session $sessionArray[$var] = $val; } } $adminsArray = UserManager::get_all_administrators(); $data['action'] = 'confirm'; $data['sessionId'] = $sessionId; $data['currentUserId'] = api_get_user_id(); $isWesternNameOrder = api_is_western_name_order(); foreach ($studentList['students'] as &$student) { $studentId = intval($student['user_id']); $data['studentUserId'] = $studentId; $fieldValue = new ExtraFieldValue('user'); $areaField = $fieldValue->get_values_by_handler_and_field_variable($studentId, 'area', true); $student['area'] = $areaField['value']; $student['userLink'] = api_get_path(WEB_CODE_PATH) . 'social/profile.php?u=' . $studentId; $data['queueId'] = intval($student['queue_id']); $data['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_APPROVED; $data['profile_completed'] = 100; $student['acceptUrl'] = $plugin->getQueueUrl($data); $data['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_DISAPPROVED; $student['rejectUrl'] = $plugin->getQueueUrl($data); $student['complete_name'] = $isWesternNameOrder ? $student['firstname'] . ', ' . $student['lastname'] : $student['lastname'] . ', ' . $student['firstname']; } $tpl->assign('session', $sessionArray); $tpl->assign('students', $studentList['students']); } // Assign variables
/** * Get the users to display on the current page. */ function get_user_data($from, $number_of_items, $column, $direction) { global $is_western_name_order; global $extraFields; $type = isset($_REQUEST['type']) ? intval($_REQUEST['type']) : STUDENT; $course_info = api_get_course_info(); $sessionId = api_get_session_id(); $course_code = $course_info['code']; $a_users = array(); // limit if (!isset($_GET['keyword']) || empty($_GET['keyword'])) { $limit = 'LIMIT ' . intval($from) . ',' . intval($number_of_items); } if (!in_array($direction, array('ASC', 'DESC'))) { $direction = 'ASC'; } switch ($column) { case 2: //official code $order_by = 'ORDER BY user.official_code ' . $direction; break; case 3: if ($is_western_name_order) { $order_by = 'ORDER BY user.firstname ' . $direction . ', user.lastname ' . $direction; } else { $order_by = 'ORDER BY user.lastname ' . $direction . ', user.firstname ' . $direction; } break; case 4: if ($is_western_name_order) { $order_by = 'ORDER BY user.lastname ' . $direction . ', user.firstname ' . $direction; } else { $order_by = 'ORDER BY user.firstname ' . $direction . ', user.lastname ' . $direction; } break; case 5: //username $order_by = 'ORDER BY user.username ' . $direction; break; default: if ($is_western_name_order) { $order_by = 'ORDER BY user.lastname ' . $direction . ', user.firstname ' . $direction; } else { $order_by = 'ORDER BY user.firstname ' . $direction . ', user.lastname ' . $direction; } break; } $active = isset($_GET['active']) ? $_GET['active'] : null; if (empty($sessionId)) { $status = $type; } else { if ($type == COURSEMANAGER) { $status = 2; } else { $status = 0; } } $a_course_users = CourseManager::get_user_list_from_course_code($course_code, $sessionId, $limit, $order_by, $status, null, false, false, null, array(), array(), $active); foreach ($a_course_users as $user_id => $o_course_user) { if (isset($_GET['keyword']) && searchUserKeyword($o_course_user['firstname'], $o_course_user['lastname'], $o_course_user['username'], $o_course_user['official_code'], $_GET['keyword']) || !isset($_GET['keyword']) || empty($_GET['keyword'])) { $groupsNameList = GroupManager::getAllGroupPerUserSubscription($user_id); $groupsNameListParsed = []; if (!empty($groupsNameList)) { $groupsNameListParsed = array_column($groupsNameList, 'name'); } $temp = array(); if (api_is_allowed_to_edit(null, true)) { $userInfo = api_get_user_info($user_id); $photo = '<img src="' . $userInfo['avatar_small'] . '" alt="' . $userInfo['complete_name'] . '" title="' . $userInfo['complete_name'] . '" />'; $temp[] = $user_id; $temp[] = $photo; $temp[] = $o_course_user['official_code']; if ($is_western_name_order) { $temp[] = $o_course_user['firstname']; $temp[] = $o_course_user['lastname']; } else { $temp[] = $o_course_user['lastname']; $temp[] = $o_course_user['firstname']; } $temp[] = $o_course_user['username']; // Groups. $temp[] = implode(', ', $groupsNameListParsed); // Status $default_status = get_lang('Student'); if (isset($o_course_user['status_rel']) && $o_course_user['status_rel'] == 1 || isset($o_course_user['status_session']) && $o_course_user['status_session'] == 2) { $default_status = get_lang('CourseManager'); } elseif (isset($o_course_user['is_tutor']) && $o_course_user['is_tutor'] == 1) { $default_status = get_lang('Tutor'); } $temp[] = $default_status; // Active $temp[] = $o_course_user['active']; if (!empty($extraFields)) { foreach ($extraFields as $extraField) { $extraFieldValue = new ExtraFieldValue('user'); $data = $extraFieldValue->get_values_by_handler_and_field_id($user_id, $extraField['id']); $temp[] = $data['value']; } } // User id for actions $temp[] = $user_id; $temp['is_tutor'] = isset($o_course_user['is_tutor']) ? $o_course_user['is_tutor'] : ''; $temp['user_status_in_course'] = isset($o_course_user['status_rel']) ? $o_course_user['status_rel'] : ''; } else { $userInfo = api_get_user_info($user_id); $userPicture = $userInfo['avatar']; $photo = '<img src="' . $userPicture . '" alt="' . $userInfo['complete_name'] . '" width="22" height="22" title="' . $userInfo['complete_name'] . '" />'; $temp[] = $user_id; $temp[] = $photo; $temp[] = $o_course_user['official_code']; if ($is_western_name_order) { $temp[] = $o_course_user['firstname']; $temp[] = $o_course_user['lastname']; } else { $temp[] = $o_course_user['lastname']; $temp[] = $o_course_user['firstname']; } $temp[] = $o_course_user['username']; // Group. $temp[] = implode(', ', $groupsNameListParsed); if ($course_info['unsubscribe'] == 1) { //User id for actions $temp[] = $user_id; } } $a_users[$user_id] = $temp; } } return $a_users; }
function WSDeleteSession($params) { if (!WSHelperVerifyKey($params)) { return return_error(WS_ERROR_SECRET_KEY); } $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $session_params = $params['sessions']; $results = array(); $orig_session_id_value = array(); foreach ($session_params as $session_param) { $original_session_id_value = $session_param['original_session_id_value']; $original_session_id_name = $session_param['original_session_id_name']; $orig_session_id_value[] = $original_session_id_name; $idChecked = SessionManager::getSessionIdFromOriginalId($original_session_id_value, $original_session_id_name); if (empty($idChecked)) { $results[] = 0; continue; } $session_ids[] = $idChecked; $sql = "DELETE FROM {$tbl_session} WHERE id = '{$idChecked}'"; Database::query($sql); $sql = "DELETE FROM {$tbl_session_rel_course} WHERE session_id = '{$idChecked}'"; Database::query($sql); $sql = "DELETE FROM {$tbl_session_rel_course_rel_user} WHERE session_id = '{$idChecked}'"; Database::query($sql); $sql = "DELETE FROM {$tbl_session_rel_user} WHERE session_id = '{$idChecked}'"; Database::query($sql); $results[] = 1; continue; } $extraFieldValue = new ExtraFieldValue('session'); //delete from table_session_field_value from a given session_id foreach ($session_ids as $session_id) { $extraFieldValue->deleteValuesByItem($session_id); } // Preparing output. $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; }
/** * Get the course id based on the original id and field name in the extra fields. * Returns 0 if course was not found * * @param string $value Original course code * @param string $variable Original field name * @return int Course id */ public static function getCourseInfoFromOriginalId($value, $variable) { $extraFieldValue = new ExtraFieldValue('course'); $result = $extraFieldValue->get_item_id_from_field_variable_and_field_value($variable, $value); if (!empty($result)) { $courseInfo = api_get_course_info_by_id($result['item_id']); return $courseInfo; } return 0; }
/** * Executes a fields match * @param array List of fields that must be matched ('fields_match' => array(0=>array('orig'=>'...','dest'=>'...',...))) * @param array Row of data * @param array Extra fields table definition */ function execute_field_match($table, $row, $extra_fields = array()) { //error_log('execute_field_match'); $dest_row = array(); $first_field = ''; // If a dest table has been defined, fill $my_extra_fields with the // extra_fields defined for that table $my_extra_fields = isset($table['dest_table']) && isset($extra_fields[$table['dest_table']]) ? $extra_fields[$table['dest_table']] : null; $extra_field_obj = null; $extra_field_value_obj = null; if (!empty($table['dest_table'])) { $extra_field_obj = new ExtraField($table['dest_table']); $extra_field_value_obj = new ExtraFieldValue($table['dest_table']); } $extra_fields_to_insert = array(); global $data_list; // Fill the data list, if possible if (count($data_list['users']) < 1) { MigrationCustom::fill_data_list($data_list); } foreach ($table['fields_match'] as $id_field => $details) { //if ($table['dest_table'] == 'session') {error_log('Processing field '.$details['orig']);} $params = array(); // Remove the table name prefix if any (in the orig field) if (isset($details['orig'])) { $field_exploded = explode('.', $details['orig']); if (isset($field_exploded[1])) { $details['orig'] = $field_exploded[1]; } } // process the fields one by one if ($details['func'] == 'none' || empty($details['func'])) { // if no function is defined to alter the field, take it as is $dest_data = $row[$details['orig']]; } else { // if an alteration function is defined, run it on the field //error_log(__FILE__.' '.__LINE__.' Preparing to treat field with '.$details['func']); $dest_data = MigrationCustom::$details['func']($row[$details['orig']], $data_list, $row); } if (isset($dest_row[$details['dest']])) { $dest_row[$details['dest']] .= ' ' . $dest_data; } else { $dest_row[$details['dest']] = $dest_data; } //Extra field values $extra_field = isset($my_extra_fields) && isset($my_extra_fields[$details['dest']]) ? $my_extra_fields[$details['dest']] : null; // Check the array is there //if($table['dest_table'] == 'session') error_log('Extra field: '.print_r($extra_field,1)); if (!empty($extra_field) && $extra_field_obj) { //if($table['dest_table'] == 'session') error_log('Extra_field no es vacío'); // Check the "options" array is defined for this field (checking is_array is crucial here, see BT#5215) if (is_array($extra_field['options']) && count($extra_field['options']) > 0) { //if($table['dest_table'] == 'session') error_log('...y sus opciones son: '.print_r($extra_field['options'],1)); //if($details['orig']=='uidIdPrograma') { error_log('Eso era lo inicial, del cual se tomó '.$details['dest'].': '.print_r($my_extra_fields,1));} $options = $extra_field['options']; $field_type = $extra_field['field_type']; //if ($table['dest_table'] == 'session') {error_log('Field orig: '.$details['orig']);} if (!empty($options)) { //if ($table['dest_table'] == 'session') {error_log('Options not empty');} if (!is_array($options)) { $options = array($options); } foreach ($options as $option) { if (is_array($option)) { foreach ($option as $key => $value) { //error_log("$key $value --> {$dest_row[$details['dest']]} "); if ($key == 'option_value' && $value == $dest_row[$details['dest']]) { $value = $option['option_display_text']; if ($field_type == Extrafield::FIELD_TYPE_SELECT) { $value = $option['option_value']; } $params = array('field_id' => $option['field_id'], 'field_value' => $value); break 2; } } } } } } else { $params = array('field_id' => $extra_field, 'field_value' => $dest_row[$details['dest']]); } if (!empty($params)) { $extra_fields_to_insert[] = $params; } unset($dest_row[$details['dest']]); } unset($extra_field); } //if ($table['dest_table']=='session') { error_log('Params: '.print_r($params,1)); } // If a dest_func entry has been defind, use this entry as the main // operation to execute when inserting the item if (!empty($table['dest_func'])) { //error_log('Calling '.$table['dest_func'].' on data recovered: '.print_r($dest_row, 1)); $dest_row['return_item_if_already_exists'] = true; $item_result = false; // Using call_user_func_array() has a serious impact on performance switch ($table['dest_func']) { case USER_FUNC_EXCEPTION_GRADEBOOK: MigrationCustom::add_gradebook_result_with_evaluation($dest_row); break; case USER_FUNC_EXCEPTION_ATTENDANCE: MigrationCustom::create_attendance($dest_row); break; default: $item_result = call_user_func_array($table['dest_func'], array($dest_row, $data_list)); } //After the function was executed fill the $data_list array switch ($table['dest_table']) { case 'course': //Saving courses in array if ($item_result) { //$data_list['courses'][$dest_row['uidIdCurso']] = $item_result; } else { error_log('Course Not FOUND'); error_log(print_r($item_result, 1)); return false; } $handler_id = $item_result['code']; break; case 'user': if (!empty($item_result)) { $handler_id = $item_result['user_id']; //error_log($dest_row['email'].' '.$dest_row['uidIdPersona']); if (isset($dest_row['uidIdAlumno'])) { //$data_list['users_alumno'][$dest_row['uidIdAlumno']]['extra'] = $item_result; } if (isset($dest_row['uidIdEmpleado'])) { //print_r($dest_row['uidIdEmpleado']);exit; //$data_list['users_empleado'][$dest_row['uidIdEmpleado']]['extra'] = $item_result; } } else { global $api_failureList; error_log('Empty user details'); error_log(print_r($api_failureList, 1)); } break; case 'session': //$data_list['sessions'][$dest_row['uidIdPrograma']] = $item_result; $handler_id = $item_result; //session_id break; } //Saving extra fields of the element //error_log('Checking extra fields for '.$extra_field_value_obj->handler_id.' '.$handler_id); if (!empty($extra_fields_to_insert)) { foreach ($extra_fields_to_insert as $params) { //error_log('Trying to save '.print_r($params,1)); $params[$extra_field_value_obj->handler_id] = $handler_id; $extra_field_value_obj->save($params); } } } else { // $this->errors_stack[] = "No destination data dest_func found. Abandoning data with first field $first_field = " . $dest_row[$first_field]; } unset($extra_fields_to_insert); //remove to free up memory return $dest_row; }
static function get_horario_value($session_id) { $extra_field_value = new ExtraFieldValue('session'); //Getting horario info $extra_field = new ExtraField('session'); $extra_field_info = $extra_field->get_handler_field_info_by_field_variable('horario'); $horario_info = $extra_field_value->get_values_by_handler_and_field_id($session_id, $extra_field_info['id']); $extra_field_option = new ExtraFieldOption('session'); $horario_info = $extra_field_option->get_field_option_by_field_and_option($extra_field_info['id'], $horario_info['field_value']); $time = "08:00"; if (isset($horario_info) && isset($horario_info[0])) { $horario = $horario_info[0]['option_display_text']; $horario_array = explode(' ', $horario); //Schedule format is "(01) 07:00 09:00" in this case. Adapt to your case if (isset($horario_array[1])) { $time = $horario_array[1]; } } return $time; }
/** * * @param int $start * @param int $limit * @param int $sidx * @param string $sord * @param array $where_condition * @param array $extraFields */ public function getQuestionListPagination($start, $limit, $sidx, $sord, $where_condition = array(), $extraFields = array()) { if (!empty($this->id)) { $category_list = TestCategory::getListOfCategoriesNameForTest($this->id, false); $TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); $TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION); $sql = "SELECT q.iid\n FROM {$TBL_EXERCICE_QUESTION} e INNER JOIN {$TBL_QUESTIONS} q\n ON (e.question_id = q.iid AND e.c_id = " . $this->course_id . " )\n\t\t\t\t\tWHERE e.exercice_id\t= '" . Database::escape_string($this->id) . "'\n\t\t\t\t\t"; $orderCondition = "ORDER BY question_order"; if (!empty($sidx) && !empty($sord)) { if ($sidx == 'question') { if (in_array(strtolower($sord), array('desc', 'asc'))) { $orderCondition = " ORDER BY q.{$sidx} {$sord}"; } } } $sql .= $orderCondition; $limitCondition = null; if (isset($start) && isset($limit)) { $start = intval($start); $limit = intval($limit); $limitCondition = " LIMIT {$start}, {$limit}"; } $sql .= $limitCondition; $result = Database::query($sql); $questions = array(); if (Database::num_rows($result)) { if (!empty($extraFields)) { $extraFieldValue = new ExtraFieldValue('question'); } while ($question = Database::fetch_array($result, 'ASSOC')) { /** @var Question $objQuestionTmp */ $objQuestionTmp = Question::read($question['iid']); $category_labels = TestCategory::return_category_labels($objQuestionTmp->category_list, $category_list); if (empty($category_labels)) { $category_labels = "-"; } // Question type list($typeImg, $typeExpl) = $objQuestionTmp->get_type_icon_html(); $question_media = null; if (!empty($objQuestionTmp->parent_id)) { $objQuestionMedia = Question::read($objQuestionTmp->parent_id); $question_media = Question::getMediaLabel($objQuestionMedia->question); } $questionType = Display::tag('div', Display::return_icon($typeImg, $typeExpl, array(), ICON_SIZE_MEDIUM) . $question_media); $question = array('id' => $question['iid'], 'question' => $objQuestionTmp->selectTitle(), 'type' => $questionType, 'category' => Display::tag('div', '<a href="#" style="padding:0px; margin:0px;">' . $category_labels . '</a>'), 'score' => $objQuestionTmp->selectWeighting(), 'level' => $objQuestionTmp->level); if (!empty($extraFields)) { foreach ($extraFields as $extraField) { $value = $extraFieldValue->get_values_by_handler_and_field_id($question['id'], $extraField['id']); $stringValue = null; if ($value) { $stringValue = $value['field_value']; } $question[$extraField['field_variable']] = $stringValue; } } $questions[] = $question; } } return $questions; } }
$hash = Security::remove_XSS($_REQUEST['v']); // Get data from request (GET or POST) $data['action'] = 'confirm'; $data['currentUserId'] = 1; $data['queueId'] = 0; $data['is_connected'] = true; $data['profile_completed'] = 90.0; // Init result array $data['sessionId'] = 1; $data['studentUserId'] = 4; // Prepare data // Get session data // Assign variables $fieldsArray = array('description', 'target', 'mode', 'publication_end_date', 'recommended_number_of_participants'); $sessionArray = api_get_session_info($data['sessionId']); $extraSession = new ExtraFieldValue('session'); $extraField = new ExtraField('session'); // Get session fields $fieldList = $extraField->get_all(array('variable IN ( ?, ?, ?, ?, ?)' => $fieldsArray)); $fields = array(); // Index session fields foreach ($fieldList as $field) { $fields[$field['id']] = $field['variable']; } $mergedArray = array_merge(array($data['sessionId']), array_keys($fields)); $sessionFieldValueList = $extraSession->get_all(array('item_id = ? field_id IN ( ?, ?, ?, ?, ?, ?, ? )' => $mergedArray)); foreach ($sessionFieldValueList as $sessionFieldValue) { // Check if session field value is set in session field list if (isset($fields[$sessionFieldValue['field_id']])) { $var = $fields[$sessionFieldValue['field_id']]; $val = $sessionFieldValue['value'];
/** * Get the users to display on the current page. */ function get_user_data($from, $number_of_items, $column, $direction) { global $origin; global $course_info; global $is_western_name_order; global $session_id; global $extraFields; $a_users = array(); // limit if (!isset($_GET['keyword']) || empty($_GET['keyword'])) { $limit = 'LIMIT '.intval($from).','.intval($number_of_items); } if (!in_array($direction, array('ASC', 'DESC'))) { $direction = 'ASC'; } switch ($column) { case 2: //official code $order_by = 'ORDER BY user.official_code '.$direction; break; case 3: if ($is_western_name_order) { $order_by = 'ORDER BY user.firstname '.$direction.', user.lastname '.$direction; } else { $order_by = 'ORDER BY user.lastname '.$direction.', user.firstname '.$direction; } break; case 4: if ($is_western_name_order) { $order_by = 'ORDER BY user.lastname '.$direction.', user.firstname '.$direction; } else { $order_by = 'ORDER BY user.firstname '.$direction.', user.lastname '.$direction; } break; case 5: //username $order_by = 'ORDER BY user.username '.$direction; break; default: if ($is_western_name_order) { $order_by = 'ORDER BY user.lastname '.$direction.', user.firstname '.$direction; } else { $order_by = 'ORDER BY user.firstname '.$direction.', user.lastname '.$direction; } break; } $session_id = api_get_session_id(); $course_code = api_get_course_id(); $active = isset($_GET['active']) ? $_GET['active'] : null; $a_course_users = CourseManager :: get_user_list_from_course_code( $course_code, $session_id, $limit, $order_by, null, null, false, false, null, array(), array(), $active ); foreach ($a_course_users as $user_id => $o_course_user) { if (( isset($_GET['keyword']) && searchUserKeyword( $o_course_user['firstname'], $o_course_user['lastname'], $o_course_user['username'], $o_course_user['official_code'], $_GET['keyword']) ) || !isset($_GET['keyword']) || empty($_GET['keyword']) ) { $groupsNameList = GroupManager::getAllGroupPerUserSubscription($user_id); $temp = array(); if (api_is_allowed_to_edit(null, true)) { $temp[] = $user_id; $image_path = UserManager::get_user_picture_path_by_id( $user_id, 'web', false, true ); $user_profile = UserManager::get_picture_user( $user_id, $image_path['file'], 22, USER_IMAGE_SIZE_SMALL, ' width="22" height="22" ' ); if (!api_is_anonymous()) { $photo = '<a href="userInfo.php?'.api_get_cidreq().'&origin='.$origin.'&uInfo='.$user_id.'" title="'.get_lang('Info').'" ><img src="'.$user_profile['file'].'" '.$user_profile['style'].' alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" /></a>'; } else { $photo = '<img src="'.$user_profile['file'].'" '.$user_profile['style'].' alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" />'; } $temp[] = $photo; $temp[] = $o_course_user['official_code']; if ($is_western_name_order) { $temp[] = $o_course_user['firstname']; $temp[] = $o_course_user['lastname']; } else { $temp[] = $o_course_user['lastname']; $temp[] = $o_course_user['firstname']; } $temp[] = $o_course_user['username']; // Description. $temp[] = isset($o_course_user['role']) ? $o_course_user['role'] : null; // Groups. $temp[] = implode(', ', $groupsNameList); // Status $default_status = '-'; if ((isset($o_course_user['status_rel']) && $o_course_user['status_rel'] == 1) || (isset($o_course_user['status_session']) && $o_course_user['status_session'] == 2) ) { $default_status = get_lang('CourseManager'); } elseif (isset($o_course_user['tutor_id']) && $o_course_user['tutor_id'] == 1) { $default_status = get_lang('Tutor'); } $temp[] = $default_status; // Active $temp[] = $o_course_user['active']; if (!empty($extraFields)) { foreach ($extraFields as $extraField) { $extraFieldValue = new ExtraFieldValue('user'); $data = $extraFieldValue->get_values_by_handler_and_field_id( $user_id, $extraField['id'] ); $temp[] = $data['field_value']; } } // User id for actions $temp[] = $user_id; } else { $image_path = UserManager::get_user_picture_path_by_id($user_id, 'web', false, true); $image_repository = $image_path['dir']; $existing_image = $image_path['file']; if (!api_is_anonymous()) { $photo= '<a href="userInfo.php?'.api_get_cidreq().'&origin='.$origin.'&uInfo='.$user_id.'" title="'.get_lang('Info').'" ><img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" width="22" height="22" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" /></a>'; } else { $photo= '<img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" width="22" height="22" title="'.api_get_person_name($o_course_user['firstname'], $o_course_user['lastname']).'" />'; } $temp[] = $user_id; $temp[] = $photo; $temp[] = $o_course_user['official_code']; if ($is_western_name_order) { $temp[] = $o_course_user['firstname']; $temp[] = $o_course_user['lastname']; } else { $temp[] = $o_course_user['lastname']; $temp[] = $o_course_user['firstname']; } $temp[] = $o_course_user['username']; $temp[] = $o_course_user['role']; // Group. $temp[] = implode(', ', $groupsNameList); if ($course_info['unsubscribe'] == 1) { //User id for actions $temp[] = $user_id; } } $a_users[$user_id] = $temp; } } return $a_users; }
<?php /* For licensing terms, see /license.txt */ /** * Session view * @package chamilo.session * @author Julio Montoya <*****@*****.**> Beeznest */ use ChamiloSession as Session; $cidReset = true; //require_once '../inc/global.inc.php'; if (empty($_GET['session_id'])) { api_not_allowed(); } $session_id = isset($_GET['session_id']) ? intval($_GET['session_id']) : null; $sessionField = new ExtraFieldValue('session'); $valueAllowVisitors = $sessionField->get_values_by_handler_and_field_variable($session_id, 'allow_visitors'); $allowVisitors = $valueAllowVisitors != false; if (!$allowVisitors) { // Only users who are logged in can proceed. api_block_anonymous_users(); } $this_section = SECTION_COURSES; $htmlHeadXtra[] = api_get_jqgrid_js(); $course_id = isset($_GET['course_id']) ? intval($_GET['course_id']) : null; Session::write('id_session', $session_id); // Clear the exercise session just in case Session::erase('objExercise'); $userId = api_get_user_id(); $session_info = SessionManager::fetch($session_id); $session_list = SessionManager::get_sessions_by_coach(api_get_user_id());
/** * Updates a course with the given array of attributes * @param array Array of attributes * @return array Array of course attributes * @assert () === false */ public static function update($params) { if (!is_array($params) or count($params) < 1) { return false; } $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); $course_table = Database::get_main_table(TABLE_MAIN_COURSE); $course_code = $params['code']; $courseInfo = api_get_course_info($course_code); $visual_code = $params['visual_code']; $field_value = new ExtraFieldValue('course'); $params['course_code'] = $course_code; $field_value->save_field_values($params); /*$tutor_id = $params['tutor_name']; $tutor_name=$platform_teachers[$tutor_id];*/ $teachers = $params['group']['course_teachers']; $title = $params['title']; $category_code = $params['category_code']; $department_name = $params['department_name']; $department_url = $params['department_url']; $course_language = $params['course_language']; $course['disk_quota'] = $params['disk_quota'] * 1024 * 1024; $disk_quota = $params['disk_quota']; $visibility = $params['visibility']; $subscribe = $params['subscribe']; $unsubscribe = $params['unsubscribe']; if (!stristr($department_url, 'http://')) { $department_url = 'http://' . $department_url; } //tutor_name='".Database::escape_string($tutor_name)."', $sql = "UPDATE {$course_table} SET\n course_language='" . Database::escape_string($course_language) . "',\n title='" . Database::escape_string($title) . "',\n category_code='" . Database::escape_string($category_code) . "',\n visual_code='" . Database::escape_string($visual_code) . "',\n department_name='" . Database::escape_string($department_name) . "',\n department_url='" . Database::escape_string($department_url) . "',\n disk_quota='" . Database::escape_string($disk_quota) . "',\n visibility = '" . Database::escape_string($visibility) . "',\n subscribe = '" . Database::escape_string($subscribe) . "',\n unsubscribe='" . Database::escape_string($unsubscribe) . "'\n WHERE code='" . Database::escape_string($course_code) . "'"; Database::query($sql); //Delete only teacher relations that doesn't match the selected teachers $cond = ''; if (count($teachers) > 0) { foreach ($teachers as $key) { $cond .= " AND user_id<>'" . $key . "'"; } } $sql = 'DELETE FROM ' . $course_user_table . ' WHERE c_id = "' . Database::escape_string($courseInfo['real_id']) . '" AND status="1"' . $cond; Database::query($sql); if (count($teachers) > 0) { foreach ($teachers as $key) { //We check if the teacher is already subscribed in this course $sql_select_teacher = 'SELECT 1 FROM ' . $course_user_table . ' WHERE user_id = "' . $key . '" AND c_id = "' . $courseInfo['real_id'] . '" '; $result = Database::query($sql_select_teacher); if (Database::num_rows($result) == 1) { $sql = 'UPDATE ' . $course_user_table . ' SET status = "1" WHERE c_id = "' . $courseInfo['real_id'] . '" AND user_id = "' . $key . '" '; } else { $sql = "INSERT INTO " . $course_user_table . " SET\n c_id = '" . Database::escape_string($courseInfo['real_id']) . "',\n user_id = '" . $key . "',\n status = '1',\n role = '',\n tutor_id = '0',\n sort = '0',\n user_course_cat = '0'"; } Database::query($sql); } } //user_id = '".$tutor_id . "', $sql = "INSERT IGNORE INTO " . $course_user_table . " SET\n course_code = '" . Database::escape_string($course_code) . "',\n status = '1',\n role = '',\n tutor_id='0',\n sort='0',\n user_course_cat='0'"; Database::query($sql); $course_info = api_get_course_info($course_code); return $course_info; }
/** * Generate the URL for profile editing * @return string If the URL is obtained return the drupal_user_id. Otherwise return false */ public function generateProfileEditingURL() { $userId = api_get_user_id(); $userExtraFieldValue = new ExtraFieldValue('user'); $drupalUserIdData = $userExtraFieldValue->get_values_by_handler_and_field_variable($userId, 'drupal_user_id'); if ($drupalUserIdData === false) { return false; } $drupalUserId = $drupalUserIdData['field_value']; $url = "{$this->protocol}{$this->domain}/user/{$drupalUserId}/edit"; return $url; }
$subscribe = $course['subscribe']; $unsubscribe = isset($course['unsubscribe']) ? $course['unsubscribe'] : ''; $course['course_code'] = $course_code; if (!stristr($department_url, 'http://')) { $department_url = 'http://' . $department_url; } $manager = Database::getManager(); $courseObj = $manager->getRepository('ChamiloCoreBundle:Course')->find($courseId); if ($courseObj) { $url = $manager->getRepository('ChamiloCoreBundle:AccessUrl')->find(api_get_current_access_url_id()); $courseObj->setTitle($title)->setCourseLanguage($course_language)->setCategoryCode($category_code)->setVisualCode($visual_code)->setDepartmentName($department_name)->setDepartmentUrl($department_url)->setDiskQuota(intval($disk_quota))->setVisibility($visibility)->setSubscribe(intval($subscribe))->setUnsubscribe(intval($unsubscribe))->setCurrentUrl($url); $manager->persist($courseObj); $manager->flush(); } // update the extra fields $courseFieldValue = new ExtraFieldValue('course'); $courseFieldValue->saveFieldValues($course); $addTeacherToSessionCourses = isset($course['add_teachers_to_sessions_courses']) && !empty($course['add_teachers_to_sessions_courses']) ? 1 : 0; $sessionCoaches = isset($course['session_coaches']) ? $course['session_coaches'] : ''; // Updating teachers if ($addTeacherToSessionCourses) { if (!empty($sessionCoaches)) { foreach ($sessionCoaches as $sessionId => $teacherInfo) { $coachesToSubscribe = $teacherInfo['coaches_by_session']; SessionManager::updateCoaches($sessionId, $courseId, $coachesToSubscribe, true); } } CourseManager::updateTeachers($courseId, $teachers, true, true, false); } else { // Normal behaviour CourseManager::updateTeachers($courseId, $teachers, true, false);
/** * Get the extra fields and their formatted values * @param int|string $itemId The item ID (It could be a session_id, course_id or user_id) * @return array The extra fields data */ public function getDataAndFormattedValues($itemId) { $valuesData = array(); $fields = $this->get_all(); foreach ($fields as $field) { if ($field['visible'] != '1') { continue; } $fieldValue = new ExtraFieldValue($this->type); $valueData = $fieldValue->get_values_by_handler_and_field_id($itemId, $field['id'], true); if (!$valueData) { continue; } $displayedValue = get_lang('None'); switch ($field['field_type']) { case ExtraField::FIELD_TYPE_CHECKBOX: if ($valueData !== false && $valueData['value'] == '1') { $displayedValue = get_lang('Yes'); } else { $displayedValue = get_lang('No'); } break; case ExtraField::FIELD_TYPE_DATE: if ($valueData !== false && !empty($valueData['value'])) { $displayedValue = api_format_date($valueData['value'], DATE_FORMAT_LONG_NO_DAY); } break; case ExtraField::FIELD_TYPE_FILE_IMAGE: if ($valueData === false || empty($valueData['value'])) { break; } if (!file_exists(api_get_path(SYS_UPLOAD_PATH) . $valueData['value'])) { break; } $image = Display::img(api_get_path(WEB_UPLOAD_PATH) . $valueData['value'], $field['display_text'], array('width' => '300')); $displayedValue = Display::url($image, api_get_path(WEB_UPLOAD_PATH) . $valueData['value'], array('target' => '_blank')); break; case ExtraField::FIELD_TYPE_FILE: if ($valueData === false || empty($valueData['value'])) { break; } if (!file_exists(api_get_path(SYS_UPLOAD_PATH) . $valueData['value'])) { break; } $displayedValue = Display::url(get_lang('Download'), api_get_path(WEB_UPLOAD_PATH) . $valueData['value'], array('title' => $field['display_text'], 'target' => '_blank')); break; default: $displayedValue = $valueData['value']; break; } $valuesData[] = array('text' => $field['display_text'], 'value' => $displayedValue); } return $valuesData; }
$entityManager = Database::getManager(); $session = $entityManager->find('ChamiloCoreBundle:Session', $sessionId); if (!$session) { api_not_allowed(true); } $sessionCourses = $entityManager->getRepository('ChamiloCoreBundle:Session')->getCoursesOrderedByPosition($session); $courses = []; $entityManager = Database::getManager(); $fieldsRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraField'); $fieldTagsRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraFieldRelTag'); $userRepo = $entityManager->getRepository('ChamiloUserBundle:User'); $sequenceResourceRepo = $entityManager->getRepository('ChamiloCoreBundle:SequenceResource'); $tagField = $fieldsRepo->findOneBy(['extraFieldType' => ExtraField::COURSE_FIELD_TYPE, 'variable' => 'tags']); $courseValues = new ExtraFieldValue('course'); $userValues = new ExtraFieldValue('user'); $sessionValues = new ExtraFieldValue('session'); foreach ($sessionCourses as $sessionCourse) { $courseTags = []; if (!is_null($tagField)) { $courseTags = $fieldTagsRepo->getTags($tagField, $sessionCourse->getId()); } $courseCoaches = $userRepo->getCoachesForSessionCourse($session, $sessionCourse); $coachesData = []; foreach ($courseCoaches as $courseCoach) { $coachData = ['complete_name' => $courseCoach->getCompleteName(), 'image' => UserManager::getUserPicture($courseCoach->getId(), USER_IMAGE_SIZE_ORIGINAL), 'extra_fields' => $userValues->getAllValuesForAnItem($courseCoach->getId(), true)]; $coachesData[] = $coachData; } $courseDescriptionTools = $entityManager->getRepository('ChamiloCourseBundle:CCourseDescription')->findBy(['cId' => $sessionCourse->getId(), 'sessionId' => 0], ['id' => 'DESC', 'descriptionType' => 'ASC']); $courseDescription = $courseObjectives = $courseTopics = null; foreach ($courseDescriptionTools as $descriptionTool) { switch ($descriptionTool->getDescriptionType()) {
/** * Get extra user data by field variable * @param string field variable * @return array data */ public static function get_extra_user_data_by_field_variable($field_variable) { $extra_information_by_variable = self::get_extra_field_information_by_name($field_variable); $field_id = intval($extra_information_by_variable['id']); $extraField = new ExtraFieldValue('user'); $data = $extraField->getValuesByFieldId($field_id); if (!empty($data) > 0) { foreach ($data as $row) { $user_id = $row['item_id']; $data[$user_id] = $row; } } return $data; }
if (api_get_setting('login_is_email') == 'true') { $username = $email; } UserManager::update_user($user_id, $firstname, $lastname, $username, $password, $auth_source, $email, $status, $official_code, $phone, $picture_uri, $expiration_date, $active, null, $hr_dept_id, null, $language, null, $send_mail, $reset_password); if (api_get_setting('openid_authentication') == 'true' && !empty($user['openid'])) { $up = UserManager::update_openid($user_id, $user['openid']); } $currentUserId = api_get_user_id(); if ($user_id != $currentUserId) { if ($platform_admin == 1) { UserManager::add_user_as_admin($user_id); } else { UserManager::remove_user_admin($user_id); } } $extraFieldValue = new ExtraFieldValue('user'); $extraFieldValue->saveFieldValues($user); $tok = Security::get_token(); header('Location: user_list.php?action=show_message&message=' . urlencode(get_lang('UserUpdated')) . '&sec_token=' . $tok); exit; } } $message = null; if ($error_drh) { $err_msg = get_lang('StatusCanNotBeChangedToHumanResourcesManager'); $message = Display::return_message($err_msg, 'error'); } $content = null; $bigImage = Usermanager::getUserPicture(api_get_user_id(), USER_IMAGE_SIZE_BIG); $normalImage = Usermanager::getUserPicture(api_get_user_id(), USER_IMAGE_SIZE_ORIGINAL); $content .= '<a class="expand-image" href="' . $bigImage . '" /><img src="' . $normalImage . '"></a>';
/** * Get session info * @param array $sessionId The session ID * @return array */ public function getSessionInfo($sessionId) { $entityManager = Database::getManager(); $session = $entityManager->find('ChamiloCoreBundle:Session', $sessionId); if (empty($session)) { return []; } $item = $this->getItemByProduct($session->getId(), self::PRODUCT_TYPE_SESSION); if (empty($item)) { return []; } $sessionDates = SessionManager::parseSessionDates(['display_start_date' => $session->getDisplayStartDate(), 'display_end_date' => $session->getDisplayEndDate(), 'access_start_date' => $session->getAccessStartDate(), 'access_end_date' => $session->getAccessEndDate(), 'coach_access_start_date' => $session->getCoachAccessStartDate(), 'coach_access_end_date' => $session->getCoachAccessEndDate()]); $sessionInfo = ['id' => $session->getId(), 'name' => $session->getName(), 'dates' => $sessionDates, 'courses' => [], 'price' => $item['price'], 'currency' => $item['iso_code'], 'image' => null]; $fieldValue = new ExtraFieldValue('session'); $sessionImage = $fieldValue->get_values_by_handler_and_field_variable($session->getId(), 'image'); if (!empty($sessionImage)) { $sessionInfo['image'] = api_get_path(WEB_UPLOAD_PATH) . $sessionImage['value']; } $sessionCourses = $session->getCourses(); foreach ($sessionCourses as $sessionCourse) { $course = $sessionCourse->getCourse(); $sessionCourseData = ['title' => $course->getTitle(), 'coaches' => []]; $userCourseSubscriptions = $session->getUserCourseSubscriptionsByStatus($course, Chamilo\CoreBundle\Entity\Session::COACH); foreach ($userCourseSubscriptions as $userCourseSubscription) { $user = $userCourseSubscription->getUser(); $sessionCourseData['coaches'][] = $user->getCompleteName(); } $sessionInfo['courses'][] = $sessionCourseData; } return $sessionInfo; }
/** * @param FormValidator $form * @param array $extraData * @param string $form_name * @param bool $admin_permissions * @param int $user_id * @param array $extra * @param int $itemId * * @return array */ public function set_extra_fields_in_form($form, $extraData, $form_name, $admin_permissions = false, $user_id = null, $extra = array(), $itemId = null) { $user_id = intval($user_id); $type = $this->type; // User extra fields if ($type == 'user') { $extra = UserManager::get_extra_fields(0, 50, 5, 'ASC', true, null, true); } $jquery_ready_content = null; if (!empty($extra)) { foreach ($extra as $field_details) { // Getting default value id if is set $defaultValueId = null; if (isset($field_details['options']) && !empty($field_details['options'])) { $valueToFind = null; if (isset($field_details['field_default_value'])) { $valueToFind = $field_details['field_default_value']; } // If a value is found we override the default value if (isset($extraData['extra_' . $field_details['field_variable']])) { $valueToFind = $extraData['extra_' . $field_details['field_variable']]; } foreach ($field_details['options'] as $option) { if ($option['option_value'] == $valueToFind) { $defaultValueId = $option['id']; } } } if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { continue; } } switch ($field_details['field_type']) { case ExtraField::FIELD_TYPE_TEXT: $form->addElement('text', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], array('class' => 'span4')); $form->applyFilter('extra_' . $field_details['field_variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['field_variable'], 'trim'); if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_TEXTAREA: $form->add_html_editor('extra_' . $field_details['field_variable'], $field_details['field_display_text'], false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130')); $form->applyFilter('extra_' . $field_details['field_variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['field_variable'], 'trim'); if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_RADIO: $group = array(); if (isset($field_details['options']) && !empty($field_details['options'])) { foreach ($field_details['options'] as $option_details) { $options[$option_details['option_value']] = $option_details['option_display_text']; $group[] = $form->createElement('radio', 'extra_' . $field_details['field_variable'], $option_details['option_value'], $option_details['option_display_text'] . '<br />', $option_details['option_value']); } } $form->addGroup($group, 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], ''); if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_CHECKBOX: $group = array(); if (isset($field_details['options']) && !empty($field_details['options'])) { foreach ($field_details['options'] as $option_details) { $options[$option_details['option_value']] = $option_details['option_display_text']; $group[] = $form->createElement('checkbox', 'extra_' . $field_details['field_variable'], $option_details['option_value'], $option_details['option_display_text'] . '<br />', $option_details['option_value']); } } else { // We assume that is a switch on/off with 1 and 0 as values $group[] = $form->createElement('checkbox', 'extra_' . $field_details['field_variable'], null, 'Yes <br />', null); } $form->addGroup($group, 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], ''); if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_SELECT: $get_lang_variables = false; if (in_array($field_details['field_variable'], array('mail_notify_message', 'mail_notify_invitation', 'mail_notify_group_message'))) { $get_lang_variables = true; } // Get extra field workflow $userInfo = api_get_user_info(); $addOptions = array(); $optionsExists = Database::getManager()->getRepository('ChamiloCoreBundle:ExtraFieldOptionRelFieldOption')->findOneBy(array('fieldId' => $field_details['id'])); if ($optionsExists) { if (isset($userInfo['status']) && !empty($userInfo['status'])) { $fieldWorkFlow = Database::getManager()->getRepository('ChamiloCoreBundle:ExtraFieldOptionRelFieldOption')->findBy(array('fieldId' => $field_details['id'], 'relatedFieldOptionId' => $defaultValueId, 'roleId' => $userInfo['status'])); foreach ($fieldWorkFlow as $item) { $addOptions[] = $item->getFieldOptionId(); } } } $options = array(); if (empty($defaultValueId)) { $options[''] = get_lang('SelectAnOption'); } $optionList = array(); if (!empty($field_details['options'])) { foreach ($field_details['options'] as $option_details) { $optionList[$option_details['id']] = $option_details; if ($get_lang_variables) { $options[$option_details['option_value']] = get_lang($option_details['option_display_text']); } else { if ($optionsExists) { // Adding always the default value if ($option_details['id'] == $defaultValueId) { $options[$option_details['option_value']] = $option_details['option_display_text']; } else { if (isset($addOptions) && !empty($addOptions)) { // Parsing filters if (in_array($option_details['id'], $addOptions)) { $options[$option_details['option_value']] = $option_details['option_display_text']; } } } } else { // Normal behaviour $options[$option_details['option_value']] = $option_details['option_display_text']; } } } if (isset($optionList[$defaultValueId])) { if (isset($optionList[$defaultValueId]['option_value']) && $optionList[$defaultValueId]['option_value'] == 'aprobada') { if (api_is_question_manager() == false) { $form->freeze(); } } } // Setting priority message if (isset($optionList[$defaultValueId]) && isset($optionList[$defaultValueId]['priority'])) { if (!empty($optionList[$defaultValueId]['priority'])) { $priorityId = $optionList[$defaultValueId]['priority']; $option = new ExtraFieldOption($this->type); $messageType = $option->getPriorityMessageType($priorityId); $form->addElement('label', null, Display::return_message($optionList[$defaultValueId]['priority_message'], $messageType)); } } } if ($get_lang_variables) { $field_details['field_display_text'] = get_lang($field_details['field_display_text']); } // chzn-select doesn't work for sessions?? $form->addElement('select', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], $options, array('id' => 'extra_' . $field_details['field_variable'])); if ($optionsExists && $field_details['field_loggeable'] && !empty($defaultValueId)) { $form->addElement('textarea', 'extra_' . $field_details['field_variable'] . '_comment', $field_details['field_display_text'] . ' ' . get_lang('Comment')); $em = Database::getManager(); $extraFieldValue = new ExtraFieldValue($this->type); $repo = $em->getRepository($extraFieldValue->entityName); $repoLog = $em->getRepository('Gedmo\\Loggable\\Entity\\LogEntry'); $newEntity = $repo->findOneBy(array($this->handlerEntityId => $itemId, 'fieldId' => $field_details['id'])); // @todo move this in a function inside the class if ($newEntity) { $logs = $repoLog->getLogEntries($newEntity); if (!empty($logs)) { $html = '<b>' . get_lang('LatestChanges') . '</b><br /><br />'; $table = new HTML_Table(array('class' => 'data_table')); $table->setHeaderContents(0, 0, get_lang('Value')); $table->setHeaderContents(0, 1, get_lang('Comment')); $table->setHeaderContents(0, 2, get_lang('ModifyDate')); $table->setHeaderContents(0, 3, get_lang('Username')); $row = 1; foreach ($logs as $log) { $column = 0; $data = $log->getData(); $fieldValue = isset($data['fieldValue']) ? $data['fieldValue'] : null; $comment = isset($data['comment']) ? $data['comment'] : null; $table->setCellContents($row, $column, $fieldValue); $column++; $table->setCellContents($row, $column, $comment); $column++; $table->setCellContents($row, $column, api_get_local_time($log->getLoggedAt()->format('Y-m-d H:i:s'))); $column++; $table->setCellContents($row, $column, $log->getUsername()); $row++; } $form->addElement('label', null, $html . $table->toHtml()); } } } if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_SELECT_MULTIPLE: $options = array(); foreach ($field_details['options'] as $option_id => $option_details) { $options[$option_details['option_value']] = $option_details['option_display_text']; } $form->addElement('select', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], $options, array('multiple' => 'multiple')); if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_DATE: $form->addElement('datepickerdate', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], array('form_name' => $form_name)); $form->_elements[$form->_elementIndex['extra_' . $field_details['field_variable']]]->setLocalOption('minYear', 1900); $defaults['extra_' . $field_details['field_variable']] = date('Y-m-d 12:00:00'); if (!isset($form->_defaultValues['extra_' . $field_details['field_variable']])) { $form->setDefaults($defaults); } if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } $form->applyFilter('theme', 'trim'); break; case ExtraField::FIELD_TYPE_DATETIME: $form->addElement('datepicker', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], array('form_name' => $form_name)); $form->_elements[$form->_elementIndex['extra_' . $field_details['field_variable']]]->setLocalOption('minYear', 1900); $defaults['extra_' . $field_details['field_variable']] = date('Y-m-d 12:00:00'); if (!isset($form->_defaultValues['extra_' . $field_details['field_variable']])) { $form->setDefaults($defaults); } if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } $form->applyFilter('theme', 'trim'); break; case ExtraField::FIELD_TYPE_DOUBLE_SELECT: $first_select_id = 'first_extra_' . $field_details['field_variable']; $url = api_get_path(WEB_AJAX_PATH) . 'extra_field.ajax.php?1=1'; $jquery_ready_content .= ' $("#' . $first_select_id . '").on("change", function() { var id = $(this).val(); if (id) { $.ajax({ url: "' . $url . '&a=get_second_select_options", dataType: "json", data: "type=' . $type . '&field_id=' . $field_details['id'] . '&option_value_id="+id, success: function(data) { $("#second_extra_' . $field_details['field_variable'] . '").empty(); $.each(data, function(index, value) { $("#second_extra_' . $field_details['field_variable'] . '").append($("<option/>", { value: index, text: value })); }); }, }); } else { $("#second_extra_' . $field_details['field_variable'] . '").empty(); } });'; $first_id = null; $second_id = null; if (!empty($extraData)) { $first_id = $extraData['extra_' . $field_details['field_variable']]['extra_' . $field_details['field_variable']]; $second_id = $extraData['extra_' . $field_details['field_variable']]['extra_' . $field_details['field_variable'] . '_second']; } $options = ExtraField::extra_field_double_select_convert_array_to_ordered_array($field_details['options']); $values = array('' => get_lang('Select')); $second_values = array(); if (!empty($options)) { foreach ($options as $option) { foreach ($option as $sub_option) { if ($sub_option['option_value'] == '0') { $values[$sub_option['id']] = $sub_option['option_display_text']; } else { if ($first_id === $sub_option['option_value']) { $second_values[$sub_option['id']] = $sub_option['option_display_text']; } } } } } $group = array(); $group[] = $form->createElement('select', 'extra_' . $field_details['field_variable'], null, $values, array('id' => $first_select_id)); $group[] = $form->createElement('select', 'extra_' . $field_details['field_variable'] . '_second', null, $second_values, array('id' => 'second_extra_' . $field_details['field_variable'])); $form->addGroup($group, 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], ' '); if (!$admin_permissions) { if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } } break; case ExtraField::FIELD_TYPE_DIVIDER: $form->addElement('static', $field_details['field_variable'], '<br /><strong>' . $field_details['field_display_text'] . '</strong>'); break; case ExtraField::FIELD_TYPE_TAG: $field_variable = $field_details['field_variable']; $field_id = $field_details['id']; if ($this->type == 'user') { // The magic should be here $user_tags = UserManager::get_user_tags($user_id, $field_details['id']); $tag_list = ''; if (is_array($user_tags) && count($user_tags) > 0) { foreach ($user_tags as $tag) { $tag_list .= '<option value="' . $tag['tag'] . '" class="selected">' . $tag['tag'] . '</option>'; } } $url = api_get_path(WEB_AJAX_PATH) . 'user_manager.ajax.php?'; } else { $extraFieldValue = new ExtraFieldValue($this->type); $tags = array(); if (!empty($itemId)) { $tags = $extraFieldValue->getAllValuesByItemAndField($itemId, $field_id); } $tag_list = ''; if (is_array($tags) && count($tags) > 0) { $extraFieldOption = new ExtraFieldOption($this->type); foreach ($tags as $tag) { $option = $extraFieldOption->get($tag['field_value']); $tag_list .= '<option value="' . $option['id'] . '" class="selected">' . $option['option_display_text'] . '</option>'; } } $url = api_get_path(WEB_AJAX_PATH) . 'extra_field.ajax.php'; } $form->addElement('hidden', 'extra_' . $field_details['field_variable'] . '__persist__', 1); $multiSelect = '<select id="extra_' . $field_details['field_variable'] . '" name="extra_' . $field_details['field_variable'] . '"> ' . $tag_list . ' </select>'; $form->addElement('label', $field_details['field_display_text'], $multiSelect); $complete_text = get_lang('StartToType'); //if cache is set to true the jquery will be called 1 time $jquery_ready_content .= <<<EOF \$("#extra_{$field_variable}").fcbkcomplete({ json_url: "{$url}?a=search_tags&field_id={$field_id}&type={$this->type}", cache: false, filter_case: true, filter_hide: true, complete_text:"{$complete_text}", firstselected: false, filter_selected: true, newel: true }); EOF; $jquery_ready_content = null; break; case ExtraField::FIELD_TYPE_TIMEZONE: $form->addElement('select', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], api_get_timezones(), ''); if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } break; case ExtraField::FIELD_TYPE_SOCIAL_PROFILE: // get the social network's favicon $icon_path = UserManager::get_favicon_from_url($extraData['extra_' . $field_details['field_variable']], $field_details['field_default_value']); // special hack for hi5 $leftpad = '1.7'; $top = '0.4'; $domain = parse_url($icon_path, PHP_URL_HOST); if ($domain == 'www.hi5.com' or $domain == 'hi5.com') { $leftpad = '3'; $top = '0'; } // print the input field $form->addElement('text', 'extra_' . $field_details['field_variable'], $field_details['field_display_text'], array('size' => 60, 'style' => 'background-image: url(\'' . $icon_path . '\'); background-repeat: no-repeat; background-position: 0.4em ' . $top . 'em; padding-left: ' . $leftpad . 'em; ')); $form->applyFilter('extra_' . $field_details['field_variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['field_variable'], 'trim'); if ($field_details['field_visible'] == 0) { $form->freeze('extra_' . $field_details['field_variable']); } break; } } } $return = array(); $return['jquery_ready_content'] = $jquery_ready_content; return $return; }
/** * @param $sessionId * @param array $extraFieldsToInclude * @return array */ public static function getFilteredExtraFields($sessionId, $extraFieldsToInclude = array()) { $extraData = array(); $variables = array(); $variablePlaceHolders = array(); foreach ($extraFieldsToInclude as $sessionExtraField) { $variablePlaceHolders[] = "?"; $variables[] = Database::escape_string($sessionExtraField); } $sessionExtraField = new ExtraField('session'); $fieldList = $sessionExtraField->get_all(array("variable IN ( " . implode(", ", $variablePlaceHolders) . " ) " => $variables)); $fields = array(); // Index session fields foreach ($fieldList as $field) { $fields[$field['id']] = $field['variable']; } // Get session field values $extra = new ExtraFieldValue('session'); $sessionFieldValueList = $extra->get_all(array("field_id IN ( " . implode(", ", $variablePlaceHolders) . " )" => array_keys($fields))); foreach ($sessionFieldValueList as $sessionFieldValue) { // Match session field values to session if ($sessionFieldValue['item_id'] != $sessionId) { continue; } // Check if session field value is set in session field list if (!isset($fields[$sessionFieldValue['field_id']])) { continue; } $extrafieldVariable = $fields[$sessionFieldValue['field_id']]; $extrafieldValue = $sessionFieldValue['value']; $extraData[] = array('variable' => $extrafieldVariable, 'value' => $extrafieldValue); } return $extraData; }
/** * @param string $file * @param bool $moveFile * * @return int */ private function importCalendarStatic($file, $moveFile = true) { $data = Import::csv_to_array($file); if (!empty($data)) { $this->logger->addInfo(count($data) . " records found."); $eventsToCreate = array(); $errorFound = false; foreach ($data as $row) { $sessionId = null; $externalSessionId = null; if (isset($row['external_sessionID'])) { $externalSessionId = $row['external_sessionID']; $sessionId = SessionManager::get_session_id_from_original_id($externalSessionId, $this->extraFieldIdNameList['session']); } $courseCode = null; if (isset($row['coursecode'])) { $courseCode = $row['coursecode']; } $courseInfo = api_get_course_info($courseCode); if (empty($courseInfo)) { $this->logger->addInfo("Course '{$courseCode}' does not exists"); } if (empty($sessionId)) { $this->logger->addInfo("external_sessionID: " . $externalSessionId . " does not exists."); } $teacherId = null; if (!empty($sessionId) && !empty($courseInfo)) { $courseIncluded = SessionManager::relation_session_course_exist($sessionId, $courseInfo['code']); if ($courseIncluded == false) { $this->logger->addInfo("Course '{$courseCode}' is not included in session: {$sessionId}"); $errorFound = true; } else { $teachers = CourseManager::get_coach_list_from_course_code($courseInfo['code'], $sessionId); // Getting first teacher. if (!empty($teachers)) { $teacher = current($teachers); $teacherId = $teacher['user_id']; } else { $sessionInfo = api_get_session_info($sessionId); $teacherId = $sessionInfo['id_coach']; } } } else { $errorFound = true; } if (empty($teacherId)) { $errorFound = true; $this->logger->addInfo("No teacher found in course code : '{$courseCode}' and session: '{$sessionId}'"); } $date = $row['date']; $startTime = $row['time_start']; $endTime = $row['time_end']; $title = $row['title']; $comment = $row['comment']; $color = isset($row['color']) ? $row['color'] : ''; $startDateYear = substr($date, 0, 4); $startDateMonth = substr($date, 4, 2); $startDateDay = substr($date, 6, 8); $startDate = $startDateYear . '-' . $startDateMonth . '-' . $startDateDay . ' ' . $startTime . ":00"; $endDate = $startDateYear . '-' . $startDateMonth . '-' . $startDateDay . ' ' . $endTime . ":00"; if (!api_is_valid_date($startDate) || !api_is_valid_date($endDate)) { $this->logger->addInfo("Verify your dates: '{$startDate}' : '{$endDate}' "); $errorFound = true; } // If old events do nothing. /*if (api_strtotime($startDate) < time()) { continue; }*/ if ($errorFound == false) { $eventsToCreate[] = array('start' => $startDate, 'end' => $endDate, 'title' => $title, 'sender_id' => $teacherId, 'course_id' => $courseInfo['real_id'], 'session_id' => $sessionId, 'comment' => $comment, 'color' => $color, $this->extraFieldIdNameList['calendar_event'] => $row['external_calendar_itemID']); } } if (empty($eventsToCreate)) { $this->logger->addInfo("No events to add"); return 0; } $this->logger->addInfo("Ready to insert events"); $agenda = new Agenda(); $extraFieldValue = new ExtraFieldValue('calendar_event'); $extraFieldName = $this->extraFieldIdNameList['calendar_event']; $externalEventId = null; $extraField = new ExtraField('calendar_event'); $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable($extraFieldName); if (empty($extraFieldInfo)) { $this->logger->addInfo("No calendar event extra field created: {$extraFieldName}"); return 0; } foreach ($eventsToCreate as $event) { $update = false; $item = null; if (!isset($event[$extraFieldName])) { $this->logger->addInfo("No external_calendar_itemID found. Skipping ..."); continue; } else { $externalEventId = $event[$extraFieldName]; if (empty($externalEventId)) { $this->logger->addInfo("external_calendar_itemID was set but empty. Skipping ..."); continue; } $items = $extraFieldValue->get_item_id_from_field_variable_and_field_value($extraFieldName, $externalEventId, false, false, true); $item = null; foreach ($items as $tempItem) { if ($tempItem['c_id'] == $event['course_id']) { $item = $tempItem; } } if (!empty($item)) { $this->logger->addInfo("Event #{$externalEventId} was already added. Updating ..."); $update = true; //continue; } } $courseInfo = api_get_course_info_by_id($event['course_id']); $agenda->set_course($courseInfo); $agenda->setType('course'); $agenda->setSessionId($event['session_id']); $agenda->setSenderId($event['sender_id']); $agenda->setIsAllowedToEdit(true); $eventComment = $event['comment']; $color = $event['color']; // To use the event comment you need // ALTER TABLE c_calendar_event ADD COLUMN comment TEXT; // add in configuration.php allow_agenda_event_comment = true if (empty($courseInfo)) { $this->logger->addInfo("No course found for added: #" . $event['course_id'] . " Skipping ..."); continue; } if (empty($event['sender_id'])) { $this->logger->addInfo("No sender found: #" . $event['sender_id'] . " Skipping ..."); continue; } $content = ''; if ($update && isset($item['calendar_event_id'])) { //the event already exists, just update $eventId = $agenda->edit_event($item['calendar_event_id'], $event['start'], $event['end'], false, $event['title'], $content, array('everyone'), array(), null, $eventComment, $color); if ($eventId !== false) { $this->logger->addInfo("Event updated: #{$eventId}"); } else { $this->logger->addInfo("Error while updating event."); } } else { // New event. Create it. $eventId = $agenda->add_event($event['start'], $event['end'], false, $event['title'], $content, array('everyone'), false, null, array(), null, $eventComment, $color); if (!empty($eventId)) { $extraFieldValue->is_course_model = true; $extraFieldValue->save(array('field_value' => $externalEventId, 'field_id' => $extraFieldInfo['id'], 'calendar_event_id' => $eventId, 'c_id' => $event['course_id'])); $this->logger->addInfo("Event added: #{$eventId}"); } else { $this->logger->addInfo("Error while creating event."); } } } } if ($moveFile) { $this->moveFile($file); } }
if ($changePassword && !empty($password)) { UserManager::updatePassword(api_get_user_id(), $password); } if (api_get_setting('profile', 'officialcode') == 'true' && isset($user_data['official_code'])) { $sql .= ", official_code = '" . Database::escape_string($user_data['official_code']) . "'"; } $sql .= " WHERE user_id = '" . api_get_user_id() . "'"; Database::query($sql); if ($passwordWasChecked == false) { Display::addFlash(Display::return_message(get_lang('ProfileReg'), 'normal', false)); } else { if ($validPassword) { Display::addFlash(Display::return_message(get_lang('ProfileReg'), 'normal', false)); } } $extraField = new ExtraFieldValue('user'); $extraField->saveFieldValues($user_data); $userInfo = api_get_user_info(); Session::write('_user', $userInfo); // re-init the system to take new settings into account //$_SESSION['_user']['uidReset'] = true; //$_SESSION['noredirection'] = true; $url = api_get_self(); header("Location: " . $url); exit; } // the header $actions = null; if (api_get_setting('social.allow_social_tool') != 'true') { if (api_get_setting('profile.extended_profile') == 'true') { $actions .= '<div class="actions">';
if (isset($_REQUEST['activate_end_date_check']) && $_REQUEST['activate_end_date_check'] == 1) { $expired_on = $_REQUEST['expired_on']; $expired_on = $expired_on['Y'].'-'.$expired_on['F'].'-'.$expired_on['d'].' '.$expired_on['H'].':'.$expired_on['i'].':00'; } else { $expired_on = null; } $_SESSION['oLP']->set_modified_on(); $_SESSION['oLP']->set_publicated_on($publicated_on); $_SESSION['oLP']->set_expired_on($expired_on); if (isset($_REQUEST['remove_picture']) && $_REQUEST['remove_picture']) { $_SESSION['oLP']->delete_lp_image(); } $extraFieldValue = new ExtraFieldValue('lp'); $params = array( 'lp_id' => $_SESSION['oLP']->id ); $extraFieldValue->save_field_values($_REQUEST); if ($_FILES['lp_preview_image']['size'] > 0) $_SESSION['oLP']->upload_image($_FILES['lp_preview_image']); if (api_get_setting('search_enabled') === 'true') { require_once api_get_path(LIBRARY_PATH).'specific_fields_manager.lib.php'; $specific_fields = get_specific_field_list(); foreach ($specific_fields as $specific_field) { $_SESSION['oLP']->set_terms_by_prefix($_REQUEST[$specific_field['code']], $specific_field['code']); $new_values = explode(',', trim($_REQUEST[$specific_field['code']])); if (!empty($new_values)) {
/** * Get the course id based on the original id and field name in the extra fields. * Returns 0 if course was not found * * @param string $original_course_id_value Original course id * @param string $original_course_id_name Original field name * @return int Course id */ public static function get_course_id_from_original_id($original_course_id_value, $original_course_id_name) { $extraFieldValue = new ExtraFieldValue('course'); $value = $extraFieldValue->get_item_id_from_field_variable_and_field_value($original_course_id_name, $original_course_id_value); if ($value) { return $value['item_id']; } return 0; }
/** * function which process the creation of questions * @param FormValidator $form the formvalidator instance * @param Exercise $objExercise the Exercise instance */ public function processCreation($form, $objExercise = null) { $this->updateParentId($form->getSubmitValue('parent_id')); $this->updateTitle($form->getSubmitValue('questionName')); $this->updateDescription($form->getSubmitValue('questionDescription')); $this->updateLevel($form->getSubmitValue('questionLevel')); $this->updateCategory($form->getSubmitValue('questionCategory')); // Save normal question if NOT media if ($this->type != MEDIA_QUESTION) { $this->save($objExercise->id); $field_value = new ExtraFieldValue('question'); $params = $form->getSubmitValues(); $params['question_id'] = $this->id; $field_value->save_field_values($params); if ($objExercise) { // modify the exercise $objExercise->addToList($this->id); $objExercise->update_question_positions(); } } }
/** * Get the formated data for sessions block to be displayed on Session Catalog page * @param array $sessions The session list * @return array */ private function getFormatedSessionsBlock(array $sessions) { $extraFieldValue = new ExtraFieldValue('session'); $userId = api_get_user_id(); $sessionsBlocks = []; $entityManager = Database::getManager(); $sessionRelCourseRepo = $entityManager->getRepository('ChamiloCoreBundle:SessionRelCourse'); $extraFieldRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraField'); $extraFieldRelTagRepo = $entityManager->getRepository('ChamiloCoreBundle:ExtraFieldRelTag'); $tagsField = $extraFieldRepo->findOneBy(['extraFieldType' => Chamilo\CoreBundle\Entity\ExtraField::COURSE_FIELD_TYPE, 'variable' => 'tags']); /** @var \Chamilo\CoreBundle\Entity\Session $session */ foreach ($sessions as $session) { $sessionDates = SessionManager::parseSessionDates(['display_start_date' => $session->getDisplayStartDate(), 'display_end_date' => $session->getDisplayEndDate(), 'access_start_date' => $session->getAccessStartDate(), 'access_end_date' => $session->getAccessEndDate(), 'coach_access_start_date' => $session->getCoachAccessStartDate(), 'coach_access_end_date' => $session->getCoachAccessEndDate()]); $imageField = $extraFieldValue->get_values_by_handler_and_field_variable($session->getId(), 'image'); $sessionCourseTags = []; if (!is_null($tagsField)) { $sessionRelCourses = $sessionRelCourseRepo->findBy(['session' => $session]); foreach ($sessionRelCourses as $sessionRelCourse) { $courseTags = $extraFieldRelTagRepo->getTags($tagsField, $sessionRelCourse->getCourse()->getId()); foreach ($courseTags as $tag) { $sessionCourseTags[] = $tag->getTag(); } } } if (!empty($sessionCourseTags)) { $sessionCourseTags = array_unique($sessionCourseTags); } $repo = $entityManager->getRepository('ChamiloCoreBundle:SequenceResource'); $sequences = $repo->getRequirementsAndDependenciesWithinSequences($session->getId(), SequenceResource::SESSION_TYPE); $hasRequirements = false; foreach ($sequences['sequences'] as $sequence) { if (count($sequence['requirements']) === 0) { continue; } $hasRequirements = true; break; } $sessionsBlock = array('id' => $session->getId(), 'name' => $session->getName(), 'image' => isset($imageField['value']) ? $imageField['value'] : null, 'nbr_courses' => $session->getNbrCourses(), 'nbr_users' => $session->getNbrUsers(), 'coach_name' => $session->getGeneralCoach()->getCompleteName(), 'is_subscribed' => SessionManager::isUserSubscribedAsStudent($session->getId(), $userId), 'icon' => $this->getSessionIcon($session->getName()), 'date' => $sessionDates['display'], 'subscribe_button' => $this->getRegisteredInSessionButton($session->getId(), $session->getName(), $hasRequirements), 'show_description' => $session->getShowDescription(), 'tags' => $sessionCourseTags); $sessionsBlock = array_merge($sessionsBlock, $sequences); $sessionsBlocks[] = $sessionsBlock; } return $sessionsBlocks; }