/** * addMobilePhoneNumberField (adds a mobile phone number field if it is not * already created) * @return void */ private function addMobilePhoneNumberField() { $extraField = new ExtraField('user'); $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable('mobile_phone_number'); if (empty($extraFieldInfo)) { $extraField->save(array('field_type' => 1, 'variable' => 'mobile_phone_number', 'display_text' => $this->get_lang('mobile_phone_number'), 'default_value' => null, 'field_order' => 2, 'visible' => 1, 'changeable' => 1, 'filter' => null)); } }
/** * Install the plugin */ public function install() { $this->installHook(); $result = Database::select('variable', Database::get_main_table(TABLE_EXTRA_FIELD), array('where' => array('variable = ?' => array('skype')))); if (empty($result)) { $extraField = new ExtraField('user'); $extraField->save(array('field_type' => ExtraField::FIELD_TYPE_TEXT, 'variable' => 'skype', 'display_text' => 'Skype', 'visible' => 1, 'changeable' => 1)); } }
/** * 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()); }
/** * Get all questions * @param Application $app * @param int $categoryId * @param int $exerciseId * @param int $courseId * @param array $options * @param bool $get_count * @return array */ public static function getQuestions($app, $categoryId, $exerciseId, $courseId, $options, $get_count = false) { $questionTable = Database::get_course_table(TABLE_QUIZ_QUESTION); $questionPoolFields = array('question_session_id' => array('innerjoin' => " INNER JOIN " . Database::get_course_table(TABLE_QUIZ_TEST_QUESTION) . " as quiz_rel_question_session ON (quiz_rel_question_session.question_id = s.iid)\n INNER JOIN " . Database::get_course_table(TABLE_QUIZ_TEST) . " as quizsession ON (quizsession.iid = quiz_rel_question_session.exercice_id)\n INNER JOIN " . Database::get_main_table(TABLE_MAIN_SESSION) . " session ON (session.id = quizsession.session_id)", 'where' => 'session_id', 'inject_fields' => 'session.name as question_session_id, '), 'question_category_id' => array('innerjoin' => " INNER JOIN " . Database::get_course_table(TABLE_QUIZ_QUESTION_REL_CATEGORY) . " as quiz_rel_cat ON (quiz_rel_cat.question_id = s.iid)\n INNER JOIN " . Database::get_course_table(TABLE_QUIZ_CATEGORY) . " as cat ON (cat.iid = quiz_rel_cat.category_id)", 'where' => 'quiz_rel_cat.category_id', 'inject_fields' => 'cat.title as question_category_id, '), 'question_exercise_id' => array('innerjoin' => " INNER JOIN " . Database::get_course_table(TABLE_QUIZ_TEST_QUESTION) . " as quiz_rel_question ON (quiz_rel_question.question_id = s.iid)\n INNER JOIN " . Database::get_course_table(TABLE_QUIZ_TEST) . " as quizexercise ON (quizexercise.iid = quiz_rel_question.exercice_id) ", 'where' => 'quiz_rel_question.exercice_id', 'inject_fields' => 'quizexercise.title as question_exercise_id, '), 'question_c_id' => array('where' => 's.c_id', 'innerjoin' => " INNER JOIN " . Database::get_main_table(TABLE_MAIN_COURSE) . " as course ON (course.id = s.c_id) ", 'inject_fields' => 'course.title as question_c_id, '), 'question_question_type' => array('where' => 's.type ', 'inject_fields' => 's.type as question_question_type,'), 'question_difficulty' => array('where' => 's.level', 'inject_fields' => 's.level as question_difficulty, ')); // Checking if you're looking for orphan questions. $isOrphanQuestion = false; if (isset($options['question'])) { foreach ($options['question'] as $option) { if (isset($option['field']) && $option['field'] == 'question_exercise_id') { if ($option['data'] == 0) { $isOrphanQuestion = true; break; } } } } // Special case for orphan questions. if ($isOrphanQuestion) { $questionPoolFields['question_exercise_id'] = array('innerjoin' => " LEFT JOIN " . Database::get_course_table(TABLE_QUIZ_TEST_QUESTION) . " as quiz_rel_question ON (quiz_rel_question.question_id = s.iid)\n LEFT JOIN " . Database::get_course_table(TABLE_QUIZ_TEST) . " as quizexercise ON (quizexercise.iid = quiz_rel_question.exercice_id) ", 'where' => 'quiz_rel_question.exercice_id', 'inject_fields' => 'quizexercise.title as question_exercise_id, '); } $inject_extra_fields = null; $inject_joins = null; $where = $options['where']; $newQuestionPoolField = array(); if (isset($options['question'])) { foreach ($options['question'] as $question) { if (isset($questionPoolFields[$question['field']])) { $newQuestionPoolField[$question['field']] = $questionPoolFields[$question['field']]; } } } $inject_question_fields = null; $questionPoolFields = $newQuestionPoolField; // Injecting inner joins. foreach ($questionPoolFields as $field => $option) { $where = str_replace($field, $option['where'], $where); if (isset($option['innerjoin']) && !empty($option['innerjoin'])) { $inject_joins .= $option['innerjoin']; } if (isset($option['inject_fields']) && !empty($option['inject_fields'])) { $inject_question_fields .= $option['inject_fields']; } } $options['where'] = $where; $extra_field = new ExtraField('question'); $conditions = $extra_field->parseConditions($options); $inject_joins .= $conditions['inject_joins']; $where = $conditions['where']; $inject_where = $conditions['inject_where']; $inject_extra_fields = $conditions['inject_extra_fields']; $order = $conditions['order']; $limit = $conditions['limit']; if ($get_count == true) { $select = " SELECT count(*) as total_rows"; } else { $select = " SELECT s.*, {$inject_extra_fields} {$inject_question_fields} 1 "; } $extraCondition = null; // Used by the question manager if (!empty($categoryId)) { $categoryRelQuestionTable = Database::get_course_table(TABLE_QUIZ_QUESTION_REL_CATEGORY); $extraCondition = " INNER JOIN {$categoryRelQuestionTable} c ON (s.iid = c.question_id)"; $categoryId = intval($categoryId); $where .= " AND category_id = {$categoryId} "; } /*if (!empty($exerciseId)) { $exerciseRelQuestionTable = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); $extraCondition .= " INNER JOIN $exerciseRelQuestionTable e ON (s.iid = e.question_id)"; $exerciseId = intval($exerciseId); $where .= " AND exercice_id = $exerciseId "; }*/ // Orphan questions if ($isOrphanQuestion) { //$exerciseRelQuestionTable = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); //$extraCondition .= " INNER JOIN $exerciseRelQuestionTable e ON (s.iid = e.question_id)"; $where .= " OR quizexercise.active = -1 OR quiz_rel_question.exercice_id IS NULL"; } if (!empty($courseId)) { $courseId = intval($courseId); $where .= " AND s.c_id = {$courseId} "; } if (isset($options['question'])) { $courseList = CourseManager::get_course_list_of_user_as_course_admin(api_get_user_id()); foreach ($options['question'] as $questionOption) { if ($questionOption['field'] == 'question_c_id') { if (isset($questionOption['data'])) { if (!isset($courseList[$questionOption['data']])) { return array(); } } } } } //var_dump(CourseManager::get_teacher_list_from_course_code()) //var_dump($inject_joins); $query = " {$select} FROM {$questionTable} s {$inject_joins} {$extraCondition} WHERE 1=1 {$where} {$inject_where} {$order} {$limit}"; //echo $query.'<br />'; //var_dump($extraCondition); //var_dump($where); $result = Database::query($query); $questions = array(); $exerciseList = null; if (!empty($exerciseId)) { $exercise = new Exercise(); $exercise->read($exerciseId); $exerciseList = $exercise->questionList; } if (Database::num_rows($result)) { $questions = Database::store_result($result, 'ASSOC'); if ($get_count) { return $questions[0]['total_rows']; } $previewIcon = Display::return_icon('preview.gif', get_lang('View'), array(), ICON_SIZE_SMALL); $copyIcon = Display::return_icon('copy.png', get_lang('Copy'), array(), ICON_SIZE_SMALL); $reuseIcon = Display::return_icon('view_more_stats.gif', get_lang('InsertALinkToThisQuestionInTheExercise'), array(), ICON_SIZE_SMALL); $editIcon = Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL); //$deleteIcon = Display::return_icon('delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL); //var_dump($exerciseId); // Including actions foreach ($questions as &$question) { $type = self::get_question_type($question['type']); $question['type'] = get_lang($type[1]); $question['question_question_type'] = get_lang($type[1]); if (empty($exerciseId)) { // View. $actions = Display::url($previewIcon, $app['url_generator']->generate('admin_questions_show', array('id' => $question['iid']))); // Edit. $actions .= Display::url($editIcon, $app['url_generator']->generate('admin_questions_edit', array('id' => $question['iid']))); } else { // View. $actions = Display::url($previewIcon, $app['url_generator']->generate('question_show', array('cidReq' => api_get_course_id(), 'id_session' => api_get_session_id(), 'exerciseId' => $exerciseId, 'id' => $question['iid']))); if (isset($exerciseList) && !empty($exerciseList) && in_array($question['iid'], $exerciseList)) { // Copy. //$actions .= $copyIconDisabled; } else { // Copy. $actions .= Display::url($copyIcon, 'javascript:void(0);', array('onclick' => 'ajaxAction(this);', 'data-url' => $app['url_generator']->generate('exercise_copy_question', array('cidReq' => api_get_course_id(), 'id_session' => api_get_session_id(), 'questionId' => $question['iid'], 'exerciseId' => $exerciseId)))); // Reuse. $actions .= Display::url($reuseIcon, 'javascript:void(0);', array('onclick' => 'ajaxAction(this);', 'data-url' => $app['url_generator']->generate('exercise_reuse_question', array('cidReq' => api_get_course_id(), 'id_session' => api_get_session_id(), 'questionId' => $question['iid'], 'exerciseId' => $exerciseId)))); } // Edit. $actions .= Display::url($editIcon, $app['url_generator']->generate('exercise_question_edit', array('cidReq' => api_get_course_id(), 'id_session' => api_get_session_id(), 'id' => $question['iid']))); } $question['actions'] = $actions; } } return $questions; }
if (isset($_POST['action'])) { switch ($_POST['action']) { case 'unsubscribe': // Make sure we don't unsubscribe current user from the course if (is_array($_POST['user'])) { $user_ids = array_diff($_POST['user'], array($user_id)); if (count($user_ids) > 0) { CourseManager::unsubscribe_user($user_ids, $courseCode); Display::addFlash(Display::return_message(get_lang('UsersUnsubscribed'))); } } } } } // Getting extra fields that have the filter option "on" $extraField = new ExtraField('user'); $extraFields = $extraField->get_all(array('filter = ?' => 1)); $user_image_pdf_size = 80; if (api_is_allowed_to_edit(null, true)) { if (isset($_GET['action'])) { switch ($_GET['action']) { case 'set_tutor': $userId = isset($_GET['user_id']) ? intval($_GET['user_id']) : null; $isTutor = isset($_GET['is_tutor']) ? intval($_GET['is_tutor']) : 0; if (!empty($userId)) { if ($sessionId) { /*$res = SessionManager::set_coach_to_course_session( $userId, $sessionId, $courseCode, true
require_once '../inc/global.inc.php'; $extraFieldType = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; $this_section = SECTION_PLATFORM_ADMIN; api_protect_admin_script(); //Add the JS needed to use the jqgrid $htmlHeadXtra[] = api_get_jqgrid_js(); // setting breadcrumbs $interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); $tool_name = null; $action = isset($_GET['action']) ? $_GET['action'] : null; if (!in_array($extraFieldType, ExtraField::getValidExtraFieldTypes())) { api_not_allowed(); } $check = Security::check_token('request'); $token = Security::get_token(); $obj = new ExtraField($extraFieldType); $obj->setupBreadcrumb($interbreadcrumb, $action); //jqgrid will use this URL to do the selects $url = api_get_path(WEB_AJAX_PATH) . 'model.ajax.php?a=get_extra_fields&type=' . $extraFieldType; //The order is important you need to check the the $column variable in the model.ajax.php file $columns = $obj->getJqgridColumnNames(); //Column config $column_model = $obj->getJqgridColumnModel(); //Autowidth $extra_params['autowidth'] = 'true'; //height auto $extra_params['height'] = 'auto'; $extra_params['sortname'] = 'field_order'; $action_links = $obj->getJqgridActionLinks($token); $htmlHeadXtra[] = '<script> $(function() {
$whereCondition .= ' AND ' . $whereConditionInForm; } $filters = isset($_REQUEST['filters']) && !is_array($_REQUEST['filters']) ? json_decode($_REQUEST['filters']) : false; if (!empty($filters)) { if (in_array($action, ['get_questions', 'get_sessions'])) { switch ($action) { case 'get_questions': $type = 'question'; break; case 'get_sessions': $type = 'session'; break; } if (!empty($type)) { // Extra field. $extraField = new ExtraField($type); $result = $extraField->getExtraFieldRules($filters, 'extra_'); $extra_fields = $result['extra_fields']; $condition_array = $result['condition_array']; $extraCondition = ''; if (!empty($condition_array)) { $extraCondition = ' AND ( '; $extraCondition .= implode($filters->groupOp, $condition_array); $extraCondition .= ' ) '; } $whereCondition .= $extraCondition; // Question field $resultQuestion = $extraField->getExtraFieldRules($filters, 'question_'); $questionFields = $resultQuestion['extra_fields']; $condition_array = $resultQuestion['condition_array']; if (!empty($condition_array)) {
/** * Gets the admin session list callback of the session/session_list.php * page with all user/details in the right fomat * @param array * @result array Array of rows results * @asset ('a') === false */ public static function get_sessions_admin_complete($options = array()) { if (!is_array($options)) { return false; } $tbl_session = Database::get_main_table(TABLE_MAIN_SESSION); $tbl_session_category = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); $tbl_session_rel_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE); $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_session_field_values = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES); $tbl_session_field_options = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_OPTIONS); $where = 'WHERE 1 = 1 '; $user_id = api_get_user_id(); if (!api_is_platform_admin()) { if (api_is_session_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') == 'false') { $where .= " AND s.session_admin_id = {$user_id} "; } } $coach_name = " CONCAT(u.lastname , ' ', u.firstname) as coach_name "; if (api_is_western_name_order()) { $coach_name = " CONCAT(u.firstname, ' ', u.lastname) as coach_name "; } $today = api_get_utc_datetime(); $inject_extra_fields = null; $extra_fields = array(); $extra_fields_info = array(); //for now only sessions $extra_field = new ExtraField('session'); $double_fields = array(); $extra_field_option = new ExtraFieldOption('session'); if (isset($options['extra'])) { $extra_fields = $options['extra']; if (!empty($extra_fields)) { foreach ($extra_fields as $extra) { $inject_extra_fields .= " IF (fv.field_id = {$extra['id']}, fvo.option_display_text, NULL ) as {$extra['field']} , "; if (isset($extra_fields_info[$extra['id']])) { $info = $extra_fields_info[$extra['id']]; } else { $info = $extra_field->get($extra['id']); $extra_fields_info[$extra['id']] = $info; } if ($info['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) { $double_fields[$info['id']] = $info; } } } } $options_by_double = array(); foreach ($double_fields as $double) { $my_options = $extra_field_option->get_field_options_by_field($double['id'], true); $options_by_double['extra_' . $double['field_variable']] = $my_options; } //sc.name as category_name, $select = "\n SELECT * FROM (\n SELECT DISTINCT\n IF (\n (s.access_start_date <= '{$today}' AND '{$today}' < s.access_end_date) OR\n (s.access_start_date = '0000-00-00 00:00:00' AND s.access_end_date = '0000-00-00 00:00:00' ) OR\n (s.access_start_date IS NULL AND s.access_end_date IS NULL) OR\n (s.access_start_date <= '{$today}' AND ('0000-00-00 00:00:00' = s.access_end_date OR s.access_end_date IS NULL )) OR\n ('{$today}' < s.access_end_date AND ('0000-00-00 00:00:00' = s.access_start_date OR s.access_start_date IS NULL) )\n , 1, 0) as session_active,\n s.name,\n s.nbr_courses,\n s.nbr_users,\n s.display_start_date,\n s.display_end_date,\n {$coach_name},\n access_start_date,\n access_end_date,\n s.visibility,\n u.user_id,\n {$inject_extra_fields}\n c.title as course_title,\n s.id "; if (!empty($options['where'])) { if (!empty($options['extra'])) { $options['where'] = str_replace(' 1 = 1 AND', '', $options['where']); $options['where'] = str_replace('AND', 'OR', $options['where']); foreach ($options['extra'] as $extra) { $options['where'] = str_replace($extra['field'], 'fv.field_id = ' . $extra['id'] . ' AND fvo.option_value', $options['where']); } } $options['where'] = str_replace('course_title', 'c.title', $options['where']); $where .= ' AND ' . $options['where']; } if (!empty($options['limit'])) { $where .= " LIMIT " . $options['limit']; } $query = "{$select} FROM {$tbl_session} s\n LEFT JOIN {$tbl_session_field_values} fv ON (fv.session_id = s.id)\n LEFT JOIN {$tbl_session_field_options} fvo ON (fv.field_id = fvo.field_id)\n LEFT JOIN {$tbl_session_rel_course} src ON (src.id_session = s.id)\n LEFT JOIN {$tbl_course} c ON (src.c_id = c.id)\n LEFT JOIN {$tbl_session_category} sc ON (s.session_category_id = sc.id)\n INNER JOIN {$tbl_user} u ON (s.id_coach = u.user_id) " . $where; if (api_is_multiple_url_enabled()) { $table_access_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION); $access_url_id = api_get_current_access_url_id(); if ($access_url_id != -1) { $where .= " AND ar.access_url_id = {$access_url_id} "; $query = "{$select}\n FROM {$tbl_session} s\n LEFT JOIN {$tbl_session_field_values} fv ON (fv.session_id = s.id)\n LEFT JOIN {$tbl_session_field_options} fvo ON (fv.field_id = fvo.field_id)\n LEFT JOIN {$tbl_session_rel_course} src ON (src.id_session = s.id)\n LEFT JOIN {$tbl_course} c ON (src.c_id = c.id)\n LEFT JOIN {$tbl_session_category} sc ON (s.session_category_id = sc.id)\n INNER JOIN {$tbl_user} u ON (s.id_coach = u.user_id)\n INNER JOIN {$table_access_url_rel_session} ar ON (ar.session_id = s.id)\n {$where}"; } } $query .= ") AS session_table"; if (!empty($options['order'])) { $query .= " ORDER BY " . $options['order']; } //error_log($query); //echo $query; $result = Database::query($query); $formatted_sessions = array(); if (Database::num_rows($result)) { $sessions = Database::store_result($result, 'ASSOC'); foreach ($sessions as $session) { $session_id = $session['id']; $session['name'] = Display::url($session['name'], "resume_session.php?id_session=" . $session['id']); $session['coach_name'] = Display::url($session['coach_name'], "user_information.php?user_id=" . $session['user_id']); if ($session['session_active'] == 1) { $session['session_active'] = Display::return_icon('accept.png', get_lang('Active'), array(), ICON_SIZE_SMALL); } else { $session['session_active'] = Display::return_icon('error.png', get_lang('Inactive'), array(), ICON_SIZE_SMALL); } $session = self::convert_dates_to_local($session); switch ($session['visibility']) { case SESSION_VISIBLE_READ_ONLY: //1 $session['visibility'] = get_lang('ReadOnly'); break; case SESSION_VISIBLE: //2 //2 case SESSION_AVAILABLE: //4 $session['visibility'] = get_lang('Visible'); break; case SESSION_INVISIBLE: //3 $session['visibility'] = api_ucfirst(get_lang('Invisible')); break; } //Cleaning double selects foreach ($session as $key => &$value) { if (isset($options_by_double[$key]) || isset($options_by_double[$key . '_second'])) { $options = explode('::', $value); } $original_key = $key; if (strpos($key, '_second') === false) { } else { $key = str_replace('_second', '', $key); } if (isset($options_by_double[$key])) { if (isset($options[0])) { if (isset($options_by_double[$key][$options[0]])) { if (strpos($original_key, '_second') === false) { $value = $options_by_double[$key][$options[0]]['option_display_text']; } else { $value = $options_by_double[$key][$options[1]]['option_display_text']; } } } } } //Magic filter if (isset($formatted_sessions[$session_id])) { $formatted_sessions[$session_id] = self::compare_arrays_to_merge($formatted_sessions[$session_id], $session); } else { $formatted_sessions[$session_id] = $session; } } } return $formatted_sessions; }
/** * Return all content to replace and all content to be replace * @param int $user_id * @param int $course_id * @param bool $is_preview * @return array */ static function get_all_info_to_certificate($user_id, $course_id, $is_preview = false) { $info_list = array(); $user_id = intval($user_id); $course_info = api_get_course_info($course_id); //info portal $organization_name = api_get_setting('platform.institution'); $portal_name = api_get_setting('platform.site_name'); // Extra user data information $extra_user_info_data = UserManager::get_extra_user_data($user_id, false, false, false, true); // get extra fields $extraField = new ExtraField('user'); $extraFields = $extraField->get_all(['filter = ? AND visible = ?' => [1, 1]]); //Student information $user_info = api_get_user_info($user_id); $first_name = $user_info['firstname']; $last_name = $user_info['lastname']; $official_code = $user_info['official_code']; //Teacher information $info_teacher_id = UserManager::get_user_id_of_course_admin_or_session_admin($course_info); $teacher_info = api_get_user_info($info_teacher_id); $teacher_first_name = $teacher_info['firstname']; $teacher_last_name = $teacher_info['lastname']; // info gradebook certificate $info_grade_certificate = UserManager::get_info_gradebook_certificate($course_id, $user_id); $date_certificate = $info_grade_certificate['created_at']; $date_long_certificate = ''; $date_no_time = api_convert_and_format_date(api_get_utc_datetime(), DATE_FORMAT_LONG_NO_DAY); if (!empty($date_certificate)) { $date_long_certificate = api_convert_and_format_date($date_certificate); $date_no_time = api_convert_and_format_date($date_certificate, DATE_FORMAT_LONG_NO_DAY); } if ($is_preview) { $date_long_certificate = api_convert_and_format_date(api_get_utc_datetime()); $date_no_time = api_convert_and_format_date(api_get_utc_datetime(), DATE_FORMAT_LONG_NO_DAY); } $url = api_get_path(WEB_PATH) . 'certificates/index.php?id=' . $info_grade_certificate['id']; //replace content $info_to_replace_in_content_html = array($first_name, $last_name, $organization_name, $portal_name, $teacher_first_name, $teacher_last_name, $official_code, $date_long_certificate, $date_no_time, $course_id, $course_info['name'], $info_grade_certificate['grade'], $url, '<a href="' . $url . '" target="_blank">' . get_lang('CertificateOnlineLink') . '</a>', '((certificate_barcode))'); $info_to_be_replaced_in_content_html = array('((user_firstname))', '((user_lastname))', '((gradebook_institution))', '((gradebook_sitename))', '((teacher_firstname))', '((teacher_lastname))', '((official_code))', '((date_certificate))', '((date_certificate_no_time))', '((course_code))', '((course_title))', '((gradebook_grade))', '((certificate_link))', '((certificate_link_html))', '((certificate_barcode))'); if (!empty($extraFields)) { foreach ($extraFields as $extraField) { $valueExtra = isset($extra_user_info_data[$extraField['variable']]) ? $extra_user_info_data[$extraField['variable']] : ''; $info_to_be_replaced_in_content_html[] = '((' . strtolower($extraField['variable']) . '))'; $info_to_replace_in_content_html[] = $valueExtra; } } $info_list[] = $info_to_be_replaced_in_content_html; $info_list[] = $info_to_replace_in_content_html; return $info_list; }
$sessionId = isset($_REQUEST['s']) ? intval($_REQUEST['s']) : null; // Init template $tpl = new Template($plugin->get_lang('plugin_title')); // Get all sessions $sessionList = $plugin->listAllSessions(); if (!empty($sessionId)) { // Get student list in queue $studentList = $plugin->listAllStudentsInQueueBySession($sessionId); // Set selected to current session $sessionList[$sessionId]['selected'] = 'selected="selected"'; $studentList['session']['id'] = $sessionId; // Assign variables $fieldsArray = array('description', 'target', 'mode', 'publication_end_date', 'recommended_number_of_participants', 'vacancies'); $sessionArray = api_get_session_info($sessionId); $extraSession = new ExtraFieldValue('session'); $extraField = new ExtraField('session'); // Get session fields $fieldList = $extraField->get_all(array('variable IN ( ?, ?, ?, ?, ?, ?)' => $fieldsArray)); // Index session fields foreach ($fieldList as $field) { $fields[$field['id']] = $field['variable']; } $params = array(' item_id = ? ' => $sessionId); $sessionFieldValueList = $extraSession->get_all(array('where' => $params)); 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']; // Assign session field value to session $sessionArray[$var] = $val;
} if (!empty($_GET['class'])) { $result = Database::query("DELETE FROM {$tbl_session_rel_class}\n WHERE session_id='{$sessionId}' AND class_id=" . intval($_GET['class'])); $nbr_affected_rows = Database::affected_rows($result); Database::query("UPDATE {$tbl_session} SET nbr_classes=nbr_classes-{$nbr_affected_rows} WHERE id='{$sessionId}'"); } if (!empty($_GET['user'])) { SessionManager::unsubscribe_user_from_session($sessionId, $_GET['user']); } break; } $sessionHeader = Display::page_header(Display::return_icon('session.png', get_lang('Session')) . ' ' . $sessionInfo['name'], null, 'h3'); $url = Display::url(Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL), "session_edit.php?page=resume_session.php&id={$sessionId}"); $sessionTitle = Display::page_subheader(get_lang('GeneralProperties') . $url); $generalCoach = api_get_user_info($sessionInfo['id_coach']); $sessionField = new ExtraField('session'); $extraFieldData = $sessionField->getDataAndFormattedValues($sessionId); $multiple_url_is_on = api_get_multiple_access_url(); $urlList = []; if ($multiple_url_is_on) { $urlList = UrlManager::get_access_url_from_session($sessionId); } $url = Display::url(Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL), "add_courses_to_session.php?page=resume_session.php&id_session={$sessionId}"); $courseListToShow = Display::page_subheader(get_lang('CourseList') . $url); $courseListToShow .= '<table id="session-list-course" class="data_table"> <tr> <th width="35%">' . get_lang('CourseTitle') . '</th> <th width="30%">' . get_lang('CourseCoach') . '</th> <th width="10%">' . get_lang('UsersNumber') . '</th> <th width="25%">' . get_lang('Actions') . '</th> </tr>';
// PASSWORD, if auth_source is platform if (is_platform_authentication() && is_profile_editable() && api_get_setting('profile', 'password') == 'true') { $form->addElement('password', 'password0', array(get_lang('Pass'), get_lang('Enter2passToChange')), array('size' => 40)); $form->addElement('password', 'password1', get_lang('NewPass'), array('id' => 'password1', 'size' => 40)); $checkPass = api_get_setting('security.allow_strength_pass_checker'); if ($checkPass == 'true') { $form->addElement('label', null, '<div id="password_progress"></div>'); } $form->addElement('password', 'password2', get_lang('Confirmation'), array('size' => 40)); // user must enter identical password twice so we can prevent some user errors $form->addRule(array('password1', 'password2'), get_lang('PassTwo'), 'compare'); if (CHECK_PASS_EASY_TO_FIND) { $form->addRule('password1', get_lang('CurrentPasswordEmptyOrIncorrect'), 'callback', 'api_check_password'); } } $extraField = new ExtraField('user'); $return = $extraField->addElements($form, api_get_user_id()); $jquery_ready_content = $return['jquery_ready_content']; // the $jquery_ready_content variable collects all functions that // will be load in the $(document).ready javascript function $htmlHeadXtra[] = '<script> $(document).ready(function(){ ' . $jquery_ready_content . ' }); </script>'; if (api_get_setting('profile', 'apikeys') == 'true') { $form->addElement('html', '<div id="div_api_key">'); $form->addElement('text', 'api_key_generate', get_lang('MyApiKey'), array('size' => 40, 'id' => 'id_api_key_generate')); $form->addElement('html', '</div>'); $form->addButton('generate_api_key', get_lang('GenerateApiKey'), 'cogs', 'default', 'default', null, ['id' => 'id_generate_api_key']); }
if (api_get_setting('extendedprofile_registration', 'mycomptetences') == 'true' && api_get_setting('extendedprofile_registrationrequired', 'mycomptetences') == 'true') { $form->addRule('competences', get_lang('ThisFieldIsRequired'), 'required'); } if (api_get_setting('extendedprofile_registration', 'mydiplomas') == 'true' && api_get_setting('extendedprofile_registrationrequired', 'mydiplomas') == 'true') { $form->addRule('diplomas', get_lang('ThisFieldIsRequired'), 'required'); } if (api_get_setting('extendedprofile_registration', 'myteach') == 'true' && api_get_setting('extendedprofile_registrationrequired', 'myteach') == 'true') { $form->addRule('teach', get_lang('ThisFieldIsRequired'), 'required'); } if (api_get_setting('extendedprofile_registration', 'mypersonalopenarea') == 'true' && api_get_setting('extendedprofile_registrationrequired', 'mypersonalopenarea') == 'true') { $form->addRule('openarea', get_lang('ThisFieldIsRequired'), 'required'); } } // EXTRA FIELDS $extra_data = UserManager::get_extra_user_data(api_get_user_id(), true); $extraField = new ExtraField('user'); $extraField->set_extra_fields_in_form($form, $extra_data, 'registration', false, null); } if (isset($_SESSION['user_language_choice']) && $_SESSION['user_language_choice'] != '') { $defaults['language'] = $_SESSION['user_language_choice']; } else { $defaults['language'] = api_get_setting('platformLanguage'); } if (!empty($_GET['username'])) { $defaults['username'] = Security::remove_XSS($_GET['username']); } if (!empty($_GET['email'])) { $defaults['email'] = Security::remove_XSS($_GET['email']); } if (!empty($_GET['phone'])) { $defaults['phone'] = Security::remove_XSS($_GET['phone']);
if (!in_array($sidx, $columns)) { $sidx = 'name'; } $result = Database::select('*', "{$obj->table} ", array('order' => "{$sidx} {$sord}", 'LIMIT' => "{$start} , {$limit}")); $new_result = array(); foreach ($result as $item) { $new_result[] = $item; } $result = $new_result; break; case 'get_usergroups': $columns = array('id', 'name', 'users', 'courses', 'sessions', 'actions'); $result = $obj->getUsergroupsPagination($sidx, $sord, $start, $limit); break; case 'get_extra_fields': $obj = new ExtraField($type); $columns = array('field_display_text', 'field_variable', 'field_type', 'field_changeable', 'field_visible', 'field_filter', 'field_order'); $result = Database::select('*', $obj->table, array('order' => "{$sidx} {$sord}", 'LIMIT' => "{$start} , {$limit}")); $new_result = array(); if (!empty($result)) { foreach ($result as $item) { $item['field_type'] = $obj->get_field_type_by_id($item['field_type']); $item['field_changeable'] = $item['field_changeable'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif'); $item['field_visible'] = $item['field_visible'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif'); $item['field_filter'] = $item['field_filter'] ? Display::return_icon('right.gif') : Display::return_icon('wrong.gif'); $new_result[] = $item; } $result = $new_result; } break; case 'get_exercise_grade':
/** * @param array $options * @return array */ public function parseConditions($options) { $inject_extra_fields = null; $extraFieldOption = new ExtraFieldOption($this->type); $double_fields = array(); if (isset($options['extra'])) { $extra_fields = $options['extra']; if (!empty($extra_fields)) { $counter = 1; foreach ($extra_fields as &$extra) { $extra_field_obj = new ExtraField($this->type); $extra_field_info = $extra_field_obj->get($extra['id']); $extra['extra_field_info'] = $extra_field_info; if (isset($extra_field_info['field_type']) && in_array($extra_field_info['field_type'], array(ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_DOUBLE_SELECT))) { $inject_extra_fields .= " fvo{$counter}.option_display_text as {$extra['field']}, "; } else { $inject_extra_fields .= " fv{$counter}.field_value as {$extra['field']}, "; } if (isset($extra_fields_info[$extra['id']])) { $info = $extra_fields_info[$extra['id']]; } else { $info = $this->get($extra['id']); $extra_fields_info[$extra['id']] = $info; } if (isset($info['field_type']) && $info['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) { $double_fields[$info['id']] = $info; } $counter++; } } } $options_by_double = array(); foreach ($double_fields as $double) { $my_options = $extraFieldOption->get_field_options_by_field($double['id'], true); $options_by_double['extra_' . $double['field_variable']] = $my_options; } $field_value_to_join = array(); //filter can be all/any = and/or $inject_joins = null; $inject_where = null; $where = null; if (!empty($options['where'])) { if (!empty($options['extra'])) { // Removing double 1=1 $options['where'] = str_replace(' 1 = 1 AND', '', $options['where']); // Always OR $counter = 1; foreach ($extra_fields as $extra_info) { $extra_field_info = $extra_info['extra_field_info']; $inject_joins .= " INNER JOIN {$this->table_field_values} fv{$counter} ON (s." . $this->primaryKey . " = fv{$counter}." . $this->handler_id . ") "; //Add options if (isset($extra_field_info['field_type']) && in_array($extra_field_info['field_type'], array(ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_DOUBLE_SELECT))) { $options['where'] = str_replace($extra_info['field'], 'fv' . $counter . '.field_id = ' . $extra_info['id'] . ' AND fvo' . $counter . '.option_value', $options['where']); $inject_joins .= " INNER JOIN {$this->table_field_options} fvo{$counter} " . " ON (fv{$counter}.field_id = fvo{$counter}.field_id AND fv{$counter}.field_value = fvo{$counter}.option_value) "; } else { //text, textarea, etc $options['where'] = str_replace($extra_info['field'], 'fv' . $counter . '.field_id = ' . $extra_info['id'] . ' AND fv' . $counter . '.field_value', $options['where']); } $field_value_to_join[] = " fv{$counter}.{$this->handler_id} "; $counter++; } if (!empty($field_value_to_join)) { //$inject_where .= " AND s.id = ".implode(' = ', $field_value_to_join); } } $where .= ' AND ' . $options['where']; } $order = null; if (!empty($options['order'])) { $order = " ORDER BY " . $options['order']; } $limit = null; if (!empty($options['limit'])) { $limit = " LIMIT " . $options['limit']; } return array('order' => $order, 'limit' => $limit, 'where' => $where, 'inject_where' => $inject_where, 'inject_joins' => $inject_joins, 'field_value_to_join' => $field_value_to_join, 'inject_extra_fields' => $inject_extra_fields); }
$group[] = $form->createElement('radio', 'visibility', null, get_lang('CourseVisibilityHidden'), COURSE_VISIBILITY_HIDDEN); $form->addGroup($group, '', get_lang('CourseAccess'), '<br />'); $group = array(); $group[] = $form->createElement('radio', 'subscribe', get_lang('Subscription'), get_lang('Allowed'), 1); $group[] = $form->createElement('radio', 'subscribe', null, get_lang('Denied'), 0); $form->addGroup($group, '', get_lang('Subscription'), '<br />'); $group = array(); $group[] = $form->createElement('radio', 'unsubscribe', get_lang('Unsubscription'), get_lang('AllowedToUnsubscribe'), 1); $group[] = $form->createElement('radio', 'unsubscribe', null, get_lang('NotAllowedToUnsubscribe'), 0); $form->addGroup($group, '', get_lang('Unsubscription'), '<br />'); $form->addElement('text', 'disk_quota', array(get_lang('CourseQuota'), null, get_lang('MB'))); $form->addRule('disk_quota', get_lang('ThisFieldShouldBeNumeric'), 'numeric'); $obj = new GradeModel(); $obj->fill_grade_model_select_in_form($form); //Extra fields $extra_field = new ExtraField('course'); $extra = $extra_field->addElements($form); $htmlHeadXtra[] = ' <script> $(function() { ' . $extra['jquery_ready_content'] . ' }); </script>'; $form->add_progress_bar(); $form->addButtonCreate(get_lang('CreateCourse')); // Set some default values. $values['course_language'] = api_get_setting('platformLanguage'); $values['disk_quota'] = round(api_get_setting('default_document_quotum') / 1024 / 1024, 1); $default_course_visibility = api_get_setting('courses_default_creation_visibility'); if (isset($default_course_visibility)) {
$group[] = $form->createElement('radio', 'visibility', null, get_lang('CourseVisibilityClosed'), COURSE_VISIBILITY_CLOSED); $group[] = $form->createElement('radio', 'visibility', null, get_lang('CourseVisibilityHidden'), COURSE_VISIBILITY_HIDDEN); $form->addGroup($group, '', get_lang('CourseAccess'), '<br />'); $group = array(); $group[] = $form->createElement('radio', 'subscribe', get_lang('Subscription'), get_lang('Allowed'), 1); $group[] = $form->createElement('radio', 'subscribe', null, get_lang('Denied'), 0); $form->addGroup($group, '', get_lang('Subscription'), '<br />'); $group = array(); $group[] = $form->createElement('radio', 'unsubscribe', get_lang('Unsubscription'), get_lang('AllowedToUnsubscribe'), 1); $group[] = $form->createElement('radio', 'unsubscribe', null, get_lang('NotAllowedToUnsubscribe'), 0); $form->addGroup($group, '', get_lang('Unsubscription'), '<br />'); $form->addElement('text', 'disk_quota', array(get_lang('CourseQuota'), null, get_lang('MB'))); $form->addRule('disk_quota', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('disk_quota', get_lang('ThisFieldShouldBeNumeric'), 'numeric'); //Extra fields $extra_field = new ExtraField('course'); $extra = $extra_field->addElements($form, $courseId); $htmlHeadXtra[] = ' <script> $(function() { ' . $extra['jquery_ready_content'] . ' }); </script>'; $form->addButtonUpdate(get_lang('ModifyCourseInfo')); // Set some default values $courseInfo['disk_quota'] = round(DocumentManager::get_course_quota($courseInfo['code']) / 1024 / 1024, 1); $courseInfo['real_code'] = $courseInfo['code']; $courseInfo['add_teachers_to_sessions_courses'] = isset($courseInfo['add_teachers_to_sessions_courses']) ? $courseInfo['add_teachers_to_sessions_courses'] : 0; $form->setDefaults($courseInfo); // Validate form if ($form->validate()) {
/** * Get all the extra field information of a certain field (also the options) * * @param int $field_name the name of the field we want to know everything of * @return array $return containing all th information about the extra profile field * @author Julio Montoya * @deprecated * @since v1.8.6 */ public static function get_extra_field_information($fieldId) { $extraField = new ExtraField('user'); return $extraField->getFieldInfoByFieldId($fieldId); }
/** * Get options for a specific field as string split by ; * @param int $field_id * @param string $ordered_by Extra query bit for reordering * @return string HTML string of options * @assert (0, '') === null */ public function get_field_options_by_field_to_string($field_id, $ordered_by = null) { $field = new ExtraField($this->type); $field_info = $field->get($field_id); $options = self::get_field_options_by_field($field_id, false, $ordered_by); $elements = array(); if (!empty($options)) { switch ($field_info['field_type']) { case ExtraField::FIELD_TYPE_DOUBLE_SELECT: $html = ExtraField::extra_field_double_select_convert_array_to_string($options); break; default: foreach ($options as $option) { $elements[] = $option['option_value']; } $html = implode(';', $elements); break; } return $html; } return null; }
$schedule = new ExtraField('session'); $schedule->save(array('field_type' => ExtraField::FIELD_TYPE_TEXT, 'variable' => 'schedule', 'display_text' => get_lang('Schedule'), 'visible' => 1, 'changeable' => 1)); $allowVisitors = new ExtraField('session'); $allowVisitors->save(array('field_type' => ExtraField::FIELD_TYPE_CHECKBOX, 'variable' => 'allow_visitors', 'display_text' => get_lang('AllowVisitors'), 'visible' => 1, 'changeable' => 1)); $modeOptions = array(get_lang('Online'), get_lang('Presencial'), get_lang('B-Learning')); $mode = new ExtraField('session'); $mode->save(array('field_type' => ExtraField::FIELD_TYPE_SELECT, 'variable' => 'mode', 'display_text' => get_lang('Mode'), 'visible' => 1, 'changeable' => 1, 'field_options' => implode('; ', $modeOptions))); $isInductionSession = new ExtraField('session'); $isInductionSession->save(array('field_type' => ExtraField::FIELD_TYPE_CHECKBOX, 'variable' => 'is_induction_session', 'display_text' => get_lang('IsInductionSession'), 'visible' => 1, 'changeable' => 1)); $isOpenSession = new ExtraField('session'); $isOpenSession->save(array('field_type' => ExtraField::FIELD_TYPE_CHECKBOX, 'variable' => 'is_open_session', 'display_text' => get_lang('IsOpenSession'), 'visible' => 1, 'changeable' => 1)); $duration = new ExtraField('session'); $duration->save(array('field_type' => ExtraField::FIELD_TYPE_TEXT, 'variable' => 'human_text_duration', 'display_text' => get_lang('DurationInWords'), 'visible' => 1, 'changeable' => 1)); $showStatusOptions = array(get_lang('Open'), get_lang('InProcess'), get_lang('Closed')); $showStatus = new ExtraField('session'); $showStatus->save(array('field_type' => ExtraField::FIELD_TYPE_SELECT, 'variable' => 'show_status', 'display_text' => get_lang('ShowStatus'), 'visible' => 1, 'changeable' => 1, 'field_options' => implode('; ', $showStatusOptions))); $publicationStartDate = new ExtraField('session'); $publicationStartDate->save(array('field_type' => ExtraField::FIELD_TYPE_DATE, 'variable' => 'publication_start_date', 'display_text' => get_lang('PublicationStartDate'), 'visible' => 1, 'changeable' => 1)); $publicationEndDate = new ExtraField('session'); $publicationEndDate->save(array('field_type' => ExtraField::FIELD_TYPE_DATE, 'variable' => 'publication_end_date', 'display_text' => get_lang('PublicationEndDate'), 'visible' => 1, 'changeable' => 1)); $banner = new ExtraField('session'); $banner->save(array('field_type' => ExtraField::FIELD_TYPE_FILE_IMAGE, 'variable' => 'banner', 'display_text' => get_lang('SessionBanner'), 'visible' => 1, 'changeable' => 1)); $brochure = new ExtraField('session'); $brochure->save(array('field_type' => ExtraField::FIELD_TYPE_FILE, 'variable' => 'brochure', 'display_text' => get_lang('Brochure'), 'visible' => 1, 'changeable' => 1)); $targetOptions = array(get_lang('Minedu'), get_lang('Regiones')); $target = new ExtraField('session'); $target->save(array('field_type' => ExtraField::FIELD_TYPE_SELECT, 'variable' => 'target', 'display_text' => get_lang('TargetAudience'), 'visible' => 1, 'changeable' => 1, 'field_options' => implode('; ', $targetOptions))); $shortDescription = new ExtraField('session'); $shortDescription->save(array('field_type' => ExtraField::FIELD_TYPE_TEXT, 'variable' => 'short_description', 'display_text' => get_lang('ShortDescription'), 'visible' => 1, 'changeable' => 1)); $id = new ExtraField('session'); $id->save(array('field_type' => ExtraField::FIELD_TYPE_TEXT, 'variable' => 'code', 'display_text' => get_lang('Code'), 'visible' => 1, 'changeable' => 1));
/** * Internal function to return a extra field object from a row. * @param $row array * @param $callHook boolean * @return Extra Field */ function &_returnExtraFieldFromRow(&$row, $callHook = true) { $extraField = new ExtraField(); $extraField->setId($row['extra_field_id']); $extraField->setExtraFieldId($row['extra_field_id']); $extraField->setExtraFieldType($row['type']); $extraField->setExtraFieldActive($row['active']); $this->getDataObjectSettings('extra_field_settings', 'extra_field_id', $row['extra_field_id'], $extraField); if ($callHook) { HookRegistry::call('ExtraFieldDAO::_returnExtraFieldFromRow', array(&$extraField, &$row)); } return $extraField; }
/** * Save values in the *_field_values table * @param array Structured array with the values to save * @param boolean Whether to show the insert query (passed to the parent save() method) * @result mixed The result sent from the parent method * @assert (array()) === false */ public function save($params, $show_query = false) { $extra_field = new ExtraField($this->type); // Setting value to insert. $value = $params['field_value']; $value_to_insert = null; if (is_array($value)) { $value_to_insert = implode(';', $value); } else { $value_to_insert = Database::escape_string($value); } $params['field_value'] = $value_to_insert; //If field id exists $extra_field_info = $extra_field->get($params['field_id']); if ($extra_field_info) { switch ($extra_field_info['field_type']) { case ExtraField::FIELD_TYPE_RADIO: case ExtraField::FIELD_TYPE_SELECT: case ExtraField::FIELD_TYPE_SELECT_MULTIPLE: //$field_options = $session_field_option->get_field_options_by_field($params['field_id']); //$params['field_value'] = split(';', $value_to_insert); /* if ($field_options) { $check = false; foreach ($field_options as $option) { if (in_array($option['option_value'], $values)) { $check = true; break; } } if (!$check) { return false; //option value not found } } else { return false; //enumerated type but no option found }*/ break; case ExtraField::FIELD_TYPE_TEXT: case ExtraField::FIELD_TYPE_TEXTAREA: break; case ExtraField::FIELD_TYPE_DOUBLE_SELECT: if (is_array($value)) { if (isset($value['extra_' . $extra_field_info['field_variable']]) && isset($value['extra_' . $extra_field_info['field_variable'] . '_second'])) { $value_to_insert = $value['extra_' . $extra_field_info['field_variable']] . '::' . $value['extra_' . $extra_field_info['field_variable'] . '_second']; } else { $value_to_insert = null; } } break; default: break; } if ($extra_field_info['field_type'] == ExtraField::FIELD_TYPE_TAG) { $field_values = self::getAllValuesByItemAndFieldAndValue($params[$this->handler_id], $params['field_id'], $value); } else { $field_values = self::get_values_by_handler_and_field_id($params[$this->handler_id], $params['field_id']); } $params['field_value'] = $value_to_insert; $params['tms'] = api_get_utc_datetime(); $params[$this->author_id] = api_get_user_id(); // Insert if (empty($field_values)) { if ($extra_field_info['field_loggeable'] == 1) { switch ($this->type) { case 'question': $extraFieldValue = new QuestionFieldValues(); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setQuestionId($params[$this->handler_id]); break; case 'course': $extraFieldValue = new CourseFieldValues(); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setQuestionId($params[$this->handler_id]); break; case 'user': $extraFieldValue = new UserFieldValues(); $extraFieldValue->setUserId($params[$this->handler_id]); $extraFieldValue->setAuthorId(api_get_user_id()); break; case 'session': $extraFieldValue = new SessionFieldValues(); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setSessionId($params[$this->handler_id]); break; } if (isset($extraFieldValue)) { if (!empty($params['field_value'])) { $extraFieldValue->setComment($params['comment']); $extraFieldValue->setFieldValue($params['field_value']); $extraFieldValue->setFieldId($params['field_id']); $extraFieldValue->setTms(api_get_utc_datetime(null, false, true)); Database::getManager()->persist($extraFieldValue); Database::getManager()->flush(); } } } else { if ($extra_field_info['field_type'] == ExtraField::FIELD_TYPE_TAG) { $option = new ExtraFieldOption($this->type); $optionExists = $option->get($params['field_value']); if (empty($optionExists)) { $optionParams = array('field_id' => $params['field_id'], 'option_value' => $params['field_value']); $optionId = $option->saveOptions($optionParams); } else { $optionId = $optionExists['id']; } $params['field_value'] = $optionId; if ($optionId) { return parent::save($params, $show_query); } } else { return parent::save($params, $show_query); } } } else { // Update if ($extra_field_info['field_loggeable'] == 1) { switch ($this->type) { case 'question': $extraFieldValue = Database::getManager()->getRepository('ChamiloCoreBundle:QuestionFieldValues')->find($field_values['id']); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setQuestionId($params[$this->handler_id]); break; case 'course': $extraFieldValue = Database::getManager()->getRepository('ChamiloCoreBundle:CourseFieldValues')->find($field_values['id']); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setCourseCode($params[$this->handler_id]); break; case 'user': $extraFieldValue = Database::getManager()->getRepository('ChamiloCoreBundle:UserFieldValues')->find($field_values['id']); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setAuthorId(api_get_user_id()); break; case 'session': $extraFieldValue = Database::getManager()->getRepository('ChamiloCoreBundle:SessionFieldValues')->find($field_values['id']); $extraFieldValue->setUserId(api_get_user_id()); $extraFieldValue->setSessionId($params[$this->handler_id]); break; } if (isset($extraFieldValue)) { if (!empty($params['field_value'])) { /* * If the field value is similar to the previous value then the comment will be the same in order to no save in the log an empty record */ if ($extraFieldValue->getFieldValue() == $params['field_value']) { if (empty($params['comment'])) { $params['comment'] = $extraFieldValue->getComment(); } } $extraFieldValue->setComment($params['comment']); $extraFieldValue->setFieldValue($params['field_value']); $extraFieldValue->setFieldId($params['field_id']); $extraFieldValue->setTms(api_get_utc_datetime(null, false, true)); Database::getManager()->persist($extraFieldValue); Database::getManager()->flush(); } } } else { $params['id'] = $field_values['id']; return parent::update($params, $show_query); } } } }
/** * Creates a new extra field for a given course * @param string Field's internal variable name * @param int Field's type * @param string Field's language var name * @return int new extra field id */ public static function create_course_extra_field($variable, $fieldType, $displayText, $default) { $extraField = new ExtraField('course'); $params = ['variable' => $variable, 'field_type' => $fieldType, 'display_text' => $displayText, 'default_value' => $default]; return $extraField->save($params); }
/** * @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); } }
$creatorInfo = api_get_user_info($user_data['creator_id']); $date = sprintf(get_lang('CreatedByXYOnZ'), 'user_information.php?user_id=' . $user_data['creator_id'], $creatorInfo['username'], $user_data['registration_date']); $form->addElement('label', get_lang('RegistrationDate'), $date); if (!$user_data['platform_admin']) { // Expiration Date $form->addElement('radio', 'radio_expiration_date', get_lang('ExpirationDate'), get_lang('NeverExpires'), 0); $group = array(); $group[] = $form->createElement('radio', 'radio_expiration_date', null, get_lang('Enabled'), 1); $group[] = $form->createElement('DateTimePicker', 'expiration_date', null, array('onchange' => 'javascript: enable_expiration_date();')); $form->addGroup($group, 'max_member_group', null, '', false); // Active account or inactive account $form->addElement('radio', 'active', get_lang('ActiveAccount'), get_lang('Active'), 1); $form->addElement('radio', 'active', '', get_lang('Inactive'), 0); } // EXTRA FIELDS $extraField = new ExtraField('user'); $returnParams = $extraField->addElements($form, $user_data['user_id']); $jquery_ready_content = $returnParams['jquery_ready_content']; // the $jquery_ready_content variable collects all functions that will be load in the $(document).ready javascript function $htmlHeadXtra[] = '<script> $(document).ready(function(){ ' . $jquery_ready_content . ' }); </script>'; // Submit button $form->addButtonSave(get_lang('Save')); // Set default values $user_data['reset_password'] = 0; $expiration_date = $user_data['expiration_date']; if (empty($expiration_date)) { $user_data['radio_expiration_date'] = 0;
//End date $form->addElement('checkbox', 'activate_end_date_check', null, get_lang('EnableEndTime'), array('onclick' => 'activate_end_date()')); $display_date = 'none'; if ($expired_on != '0000-00-00 00:00:00' && !empty($expired_on)) { $display_date = 'block'; $defaults['activate_end_date_check'] = 1; } $form->addElement('html', '<div id="end_date_div" style="display:' . $display_date . ';">'); $form->addElement('datepicker', 'expired_on', get_lang('ExpirationDate'), array('form_name' => 'exercise_admin'), 5); $form->addElement('html', '</div>'); if (api_is_platform_admin()) { $form->addElement('checkbox', 'use_max_score', null, get_lang('UseMaxScore100')); $defaults['use_max_score'] = $_SESSION['oLP']->use_max_score; } $form->addElement('checkbox', 'subscribe_users', null, get_lang('SubscribeUsersToLP')); $extraField = new ExtraField('lp'); $extra = $extraField->addElements($form, $_SESSION['oLP']->get_id()); $htmlHeadXtra[] = '<script src="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/jquery.fcbkcomplete.js" type="text/javascript" language="javascript"></script>'; $htmlHeadXtra[] = '<link href="' . api_get_path(WEB_LIBRARY_PATH) . 'javascript/tag/style.css" rel="stylesheet" type="text/css" />'; $htmlHeadXtra[] = '<script> $(function() { ' . $extra['jquery_ready_content'] . ' }); </script>'; //Submit button $form->addElement('style_submit_button', 'Submit', get_lang('SaveLPSettings'), 'class="save"'); // Hidden fields $form->addElement('hidden', 'action', 'update_lp'); $form->addElement('hidden', 'lp_id', $_SESSION['oLP']->get_id()); $defaults['publicated_on'] = $publicated_on != '0000-00-00 00:00:00' && !empty($publicated_on) ? api_get_local_time($publicated_on) : date('Y-m-d 12:00:00'); $defaults['expired_on'] = $expired_on != '0000-00-00 00:00:00' && !empty($expired_on) ? api_get_local_time($expired_on) : date('Y-m-d 12:00:00', time() + 84600);
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : null; api_protect_admin_script(); //Add the JS needed to use the jqgrid $htmlHeadXtra[] = api_get_jqgrid_js(); // setting breadcrumbs $interbreadcrumb[] = array('url' => 'index.php', 'name' => get_lang('PlatformAdmin')); $tool_name = null; $action = isset($_GET['action']) ? $_GET['action'] : null; $field_id = isset($_GET['field_id']) ? $_GET['field_id'] : null; if (empty($field_id)) { api_not_allowed(); } if (!in_array($type, ExtraField::getValidExtraFieldTypes())) { api_not_allowed(); } $extra_field = new ExtraField($type); $extra_field_info = $extra_field->get($field_id); $check = Security::check_token('request'); $token = Security::get_token(); if ($action == 'add') { $interbreadcrumb[] = array('url' => 'extra_fields.php?type=' . $extra_field->type, 'name' => $extra_field->pageName); $interbreadcrumb[] = array('url' => 'extra_fields.php?type=' . $extra_field->type . '&action=edit&id=' . $extra_field_info['id'], 'name' => $extra_field_info['field_display_text']); $interbreadcrumb[] = array('url' => 'extra_field_options.php?type=' . $extra_field->type . '&field_id=' . $extra_field_info['id'], 'name' => get_lang('EditExtraFieldOptions')); $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('Add')); } elseif ($action == 'edit') { $interbreadcrumb[] = array('url' => 'extra_fields.php?type=' . $extra_field->type, 'name' => $extra_field->pageName); $interbreadcrumb[] = array('url' => 'extra_fields.php?type=' . $extra_field->type . '&action=edit&id=' . $extra_field_info['id'], 'name' => $extra_field_info['field_display_text']); $interbreadcrumb[] = array('url' => 'extra_field_options.php?type=' . $extra_field->type . '&field_id=' . $extra_field_info['id'], 'name' => get_lang('EditExtraFieldOptions')); $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('Edit')); } else { $interbreadcrumb[] = array('url' => 'extra_fields.php?type=' . $extra_field->type, 'name' => $extra_field->pageName);
$("[name=\'url_content\']").val(response); } }); }); }); </script>'; $socialRightInformation = null; $social_right_content = null; $show_full_profile = true; if ($show_full_profile) { $t_ufo = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS); $extra_user_data = UserManager::get_extra_user_data($user_id, false, true); $extra_information = ''; if (is_array($extra_user_data) && count($extra_user_data) > 0) { $extra_information_value = ''; $extraField = new ExtraField('user'); foreach ($extra_user_data as $key => $data) { // Avoiding parameters if (in_array($key, array('mail_notify_invitation', 'mail_notify_message', 'mail_notify_group_message'))) { continue; } // get display text, visibility and type from user_field table $field_variable = str_replace('extra_', '', $key); $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable($field_variable); if ($extraFieldInfo['visible'] != 1) { continue; } if (is_array($data)) { $extra_information_value .= '<dt>' . ucfirst($extraFieldInfo['display_text']) . '</dt>' . '<dd> ' . implode(',', $data) . '</dd>'; } else { switch ($extraFieldInfo['field_type']) {
if (api_get_setting_in_list('registration.extendedprofile_registration', 'mycomptetences') == 'true' && api_get_setting_in_list('registration.extendedprofile_registrationrequired', 'mycomptetences') == 'true') { $form->addRule('competences', get_lang('ThisFieldIsRequired'), 'required'); } if (api_get_setting_in_list('registration.extendedprofile_registration', 'mydiplomas') == 'true' && api_get_setting_in_list('registration.extendedprofile_registrationrequired', 'mydiplomas') == 'true') { $form->addRule('diplomas', get_lang('ThisFieldIsRequired'), 'required'); } if (api_get_setting_in_list('registration.extendedprofile_registration', 'myteach') == 'true' && api_get_setting_in_list('registration.extendedprofile_registrationrequired', 'myteach') == 'true') { $form->addRule('teach', get_lang('ThisFieldIsRequired'), 'required'); } if (api_get_setting_in_list('registration.extendedprofile_registration', 'mypersonalopenarea') == 'true' && api_get_setting_in_list('registration.extendedprofile_registrationrequired', 'mypersonalopenarea') == 'true') { $form->addRule('openarea', get_lang('ThisFieldIsRequired'), 'required'); } } // EXTRA FIELDS if (in_array('extra_fields', $allowedFields)) { $extraField = new ExtraField('user'); $returnParams = $extraField->addElements($form); } } if (isset($_SESSION['user_language_choice']) && $_SESSION['user_language_choice'] != '') { $defaults['language'] = $_SESSION['user_language_choice']; } else { $defaults['language'] = api_get_setting('language.platform_language'); } if (!empty($_GET['username'])) { $defaults['username'] = Security::remove_XSS($_GET['username']); } if (!empty($_GET['email'])) { $defaults['email'] = Security::remove_XSS($_GET['email']); } if (!empty($_GET['phone'])) {