} else { switch ($extraFieldInfo['field_type']) { case ExtraField::FIELD_TYPE_DOUBLE_SELECT: $id_options = explode(';', $data); $value_options = array(); // get option display text from user_field_options table foreach ($id_options as $id_option) { $sql = "SELECT display_text FROM {$t_ufo} WHERE id = '{$id_option}'"; $res_options = Database::query($sql); $row_options = Database::fetch_row($res_options); $value_options[] = $row_options[0]; } $extra_information_value .= '<dt>' . ucfirst($extraFieldInfo['display_text']) . ':</dt>' . '<dd>' . implode(' ', $value_options) . '</dd>'; break; case ExtraField::FIELD_TYPE_TAG: $user_tags = UserManager::get_user_tags($user_id, $extraFieldInfo['id']); $tag_tmp = array(); foreach ($user_tags as $tags) { $tag_tmp[] = '<a class="label label_tag"' . ' href="' . api_get_path(WEB_PATH) . 'main/social/search.php?q=' . $tags['tag'] . '">' . $tags['tag'] . '</a>'; } if (is_array($user_tags) && count($user_tags) > 0) { $extra_information_value .= '<dt>' . ucfirst($extraFieldInfo['display_text']) . ':</dt>' . '<dd>' . implode('', $tag_tmp) . '</dd>'; } break; case ExtraField::FIELD_TYPE_SOCIAL_PROFILE: $icon_path = UserManager::get_favicon_from_url($data); $bottom = '0.2'; //quick hack for hi5 $domain = parse_url($icon_path, PHP_URL_HOST); if ($domain == 'www.hi5.com' or $domain == 'hi5.com') { $bottom = '-0.8';
/** * @param FormValidator $form * @param $extra_data * @param $form_name * @param bool $admin_permissions * @param null $user_id * @deprecated * @return array */ static function set_extra_fields_in_form($form, $extra_data, $admin_permissions = false, $user_id = null) { $user_id = intval($user_id); // EXTRA FIELDS $extra = UserManager::get_extra_fields(0, 50, 5, 'ASC'); $jquery_ready_content = null; foreach ($extra as $field_details) { if (!$admin_permissions) { if ($field_details[6] == 0) { continue; } } switch ($field_details[2]) { case ExtraField::FIELD_TYPE_TEXT: $form->addElement('text', 'extra_' . $field_details[1], $field_details[3], array('size' => 40)); $form->applyFilter('extra_' . $field_details[1], 'stripslashes'); $form->applyFilter('extra_' . $field_details[1], 'trim'); $form->applyFilter('extra_' . $field_details[1], 'html_filter'); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } break; case ExtraField::FIELD_TYPE_TEXTAREA: $form->addHtmlEditor('extra_' . $field_details[1], $field_details[3], false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130')); $form->applyFilter('extra_' . $field_details[1], 'stripslashes'); $form->applyFilter('extra_' . $field_details[1], 'trim'); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } break; case ExtraField::FIELD_TYPE_RADIO: $group = array(); foreach ($field_details[9] as $option_id => $option_details) { $options[$option_details[1]] = $option_details[2]; $group[] = $form->createElement('radio', 'extra_' . $field_details[1], $option_details[1], $option_details[2] . '<br />', $option_details[1]); } $form->addGroup($group, 'extra_' . $field_details[1], $field_details[3], ''); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } break; case ExtraField::FIELD_TYPE_SELECT: $get_lang_variables = false; if (in_array($field_details[1], array('mail_notify_message', 'mail_notify_invitation', 'mail_notify_group_message'))) { $get_lang_variables = true; } $options = array(); foreach ($field_details[9] as $option_id => $option_details) { if ($get_lang_variables) { $options[$option_details[1]] = get_lang($option_details[2]); } else { $options[$option_details[1]] = $option_details[2]; } } if ($get_lang_variables) { $field_details[3] = get_lang($field_details[3]); } $form->addElement('select', 'extra_' . $field_details[1], $field_details[3], $options, array('id' => 'extra_' . $field_details[1])); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } break; case ExtraField::FIELD_TYPE_SELECT_MULTIPLE: $options = array(); foreach ($field_details[9] as $option_id => $option_details) { $options[$option_details[1]] = $option_details[2]; } $form->addElement('select', 'extra_' . $field_details[1], $field_details[3], $options, array('multiple' => 'multiple')); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } break; case ExtraField::FIELD_TYPE_DATE: $form->addDatePicker('extra_' . $field_details[1], $field_details[3]); $defaults['extra_' . $field_details[1]] = date('Y-m-d 12:00:00'); $form->setDefaults($defaults); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } $form->applyFilter('theme', 'trim'); break; case ExtraField::FIELD_TYPE_DATETIME: $form->addDateTimePicker('extra_' . $field_details[1], $field_details[3]); $defaults['extra_' . $field_details[1]] = date('Y-m-d 12:00:00'); $form->setDefaults($defaults); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } $form->applyFilter('theme', 'trim'); break; case ExtraField::FIELD_TYPE_DOUBLE_SELECT: foreach ($field_details[9] as $key => $element) { if ($element[2][0] == '*') { $values['*'][$element[0]] = str_replace('*', '', $element[2]); } else { $values[0][$element[0]] = $element[2]; } } $group = ''; $group[] = $form->createElement('select', 'extra_' . $field_details[1], '', $values[0], ''); $group[] = $form->createElement('select', 'extra_' . $field_details[1] . '*', '', $values['*'], ''); $form->addGroup($group, 'extra_' . $field_details[1], $field_details[3], ' '); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } /* Recoding the selected values for double : if the user has selected certain values, we have to assign them to the correct select form */ if (array_key_exists('extra_' . $field_details[1], $extra_data)) { // exploding all the selected values (of both select forms) $selected_values = explode(';', $extra_data['extra_' . $field_details[1]]); $extra_data['extra_' . $field_details[1]] = array(); // looping through the selected values and assigning the selected values to either the first or second select form foreach ($selected_values as $key => $selected_value) { if (array_key_exists($selected_value, $values[0])) { $extra_data['extra_' . $field_details[1]]['extra_' . $field_details[1]] = $selected_value; } else { $extra_data['extra_' . $field_details[1]]['extra_' . $field_details[1] . '*'] = $selected_value; } } } break; case ExtraField::FIELD_TYPE_DIVIDER: $form->addElement('static', $field_details[1], '<br /><strong>' . $field_details[3] . '</strong>'); break; case ExtraField::FIELD_TYPE_TAG: //the magic should be here $user_tags = UserManager::get_user_tags($user_id, $field_details[0]); $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>'; } } $multi_select = '<select id="extra_' . $field_details[1] . '" name="extra_' . $field_details[1] . '"> ' . $tag_list . ' </select>'; $form->addElement('label', $field_details[3], $multi_select); $url = api_get_path(WEB_AJAX_PATH) . 'user_manager.ajax.php'; $complete_text = get_lang('StartToType'); //if cache is set to true the jquery will be called 1 time $jquery_ready_content = <<<EOF \$("#extra_{$field_details['1']}").fcbkcomplete({ json_url: "{$url}?a=search_tags&field_id={$field_details['0']}", cache: false, filter_case: true, filter_hide: true, complete_text:"{$complete_text}", firstselected: true, //onremove: "testme", //onselect: "testme", filter_selected: true, newel: true }); EOF; break; case ExtraField::FIELD_TYPE_TIMEZONE: $form->addElement('select', 'extra_' . $field_details[1], $field_details[3], api_get_timezones(), ''); if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } break; case ExtraField::FIELD_TYPE_SOCIAL_PROFILE: // get the social network's favicon $icon_path = UserManager::get_favicon_from_url($extra_data['extra_' . $field_details[1]], $field_details[4]); // 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[1], $field_details[3], 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[1], 'stripslashes'); $form->applyFilter('extra_' . $field_details[1], 'trim'); if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } break; case ExtraField::FIELD_TYPE_FILE: $extra_field = 'extra_' . $field_details[1]; $form->addElement('file', $extra_field, $field_details[3], null, ''); if ($extra_file_list = UserManager::build_user_extra_file_list($user_id, $field_details[1], '', true)) { $form->addElement('static', $extra_field . '_list', null, $extra_file_list); } if ($field_details[7] == 0) { $form->freeze($extra_field); } break; case ExtraField::FIELD_TYPE_MOBILE_PHONE_NUMBER: $form->addElement('text', 'extra_' . $field_details[1], $field_details[3] . " (" . get_lang('CountryDialCode') . ")", array('size' => 40, 'placeholder' => '(xx)xxxxxxxxx')); $form->applyFilter('extra_' . $field_details[1], 'stripslashes'); $form->applyFilter('extra_' . $field_details[1], 'trim'); $form->applyFilter('extra_' . $field_details[1], 'mobile_phone_number_filter'); $form->addRule('extra_' . $field_details[1], get_lang('MobilePhoneNumberWrong'), 'mobile_phone_number'); if (!$admin_permissions) { if ($field_details[7] == 0) { $form->freeze('extra_' . $field_details[1]); } } break; } } $return = array(); $return['jquery_ready_content'] = $jquery_ready_content; return $return; }
/** * This function gets all the information of a certrain ($field_id) * additional profile field for a specific list of users is more efficent * than get_addtional_profile_information_of_field() function * It gets the information of all the users so that it can be displayed * in the sortable table or in the csv or xls export * * @author Julio Montoya <*****@*****.**> * @param int field id * @param array list of user ids * @return array * @since Nov 2009 * @version 1.8.6.2 */ public static function get_addtional_profile_information_of_field_by_user($field_id, $users) { // Database table definition $table_user = Database::get_main_table(TABLE_MAIN_USER); $table_user_field_values = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); $extraField = Database::get_main_table(TABLE_EXTRA_FIELD); $result_extra_field = UserManager::get_extra_field_information($field_id); if (!empty($users)) { if ($result_extra_field['field_type'] == UserManager::USER_FIELD_TYPE_TAG) { foreach ($users as $user_id) { $user_result = UserManager::get_user_tags($user_id, $field_id); $tag_list = array(); foreach ($user_result as $item) { $tag_list[] = $item['tag']; } $return[$user_id][] = implode(', ', $tag_list); } } else { $new_user_array = array(); foreach ($users as $user_id) { $new_user_array[] = "'" . $user_id . "'"; } $users = implode(',', $new_user_array); $extraFieldType = EntityExtraField::USER_FIELD_TYPE; // Selecting only the necessary information NOT ALL the user list $sql = "SELECT user.user_id, v.value\n \t\t\t FROM {$table_user} user\n \t\t\t INNER JOIN {$table_user_field_values} v\n ON (user.user_id = v.item_id)\n INNER JOIN {$extraField} f\n ON (f.id = v.field_id)\n WHERE\n f.extra_field_type = {$extraFieldType} AND\n v.field_id=" . intval($field_id) . " AND\n user.user_id IN ({$users})"; $result = Database::query($sql); while ($row = Database::fetch_array($result)) { // get option value for field type double select by id if (!empty($row['value'])) { if ($result_extra_field['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) { $id_double_select = explode(';', $row['value']); if (is_array($id_double_select)) { $value1 = $result_extra_field['options'][$id_double_select[0]]['option_value']; $value2 = $result_extra_field['options'][$id_double_select[1]]['option_value']; $row['value'] = $value1 . ';' . $value2; } } } // get other value from extra field $return[$row['user_id']][] = $row['value']; } } } return $return; }
/** * @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 FormValidator $form * @param array $extraData * @param bool $admin_permissions * @param int $user_id * @param array $extra * @param int $itemId * @param array $exclude variables of extra field to exclude * @return array */ public function set_extra_fields_in_form($form, $extraData, $admin_permissions = false, $extra = array(), $itemId = null, $exclude = []) { $type = $this->type; $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['variable']])) { $valueToFind = $extraData['extra_' . $field_details['variable']]; } foreach ($field_details['options'] as $option) { if ($option['option_value'] == $valueToFind) { $defaultValueId = $option['id']; } } } if (!$admin_permissions) { if ($field_details['visible'] == 0) { continue; } if (in_array($field_details['variable'], $exclude)) { continue; } } switch ($field_details['field_type']) { case ExtraField::FIELD_TYPE_TEXT: $form->addElement('text', 'extra_' . $field_details['variable'], $field_details['display_text'], array()); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_TEXTAREA: $form->addHtmlEditor('extra_' . $field_details['variable'], $field_details['display_text'], false, false, array('ToolbarSet' => 'Profile', 'Width' => '100%', 'Height' => '130')); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['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['display_text']; $group[] = $form->createElement('radio', 'extra_' . $field_details['variable'], $option_details['option_value'], $option_details['display_text'] . '<br />', $option_details['option_value']); } } $form->addGroup($group, 'extra_' . $field_details['variable'], $field_details['display_text'], ''); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['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['display_text']; $group[] = $form->createElement('checkbox', 'extra_' . $field_details['variable'], $option_details['option_value'], $option_details['display_text'] . '<br />', $option_details['option_value']); } } else { $fieldVariable = "extra_{$field_details['variable']}"; $checkboxAttributes = array(); if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) { $checkboxAttributes['checked'] = true; } // We assume that is a switch on/off with 1 and 0 as values $group[] = $form->createElement('checkbox', 'extra_' . $field_details['variable'], null, get_lang('Yes'), $checkboxAttributes); } $form->addGroup($group, 'extra_' . $field_details['variable'], $field_details['display_text'], ''); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_SELECT: $get_lang_variables = false; if (in_array($field_details['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 = false; global $app; // Check if exist $app['orm.em'] object if (isset($app['orm.em']) && is_object($app['orm.em'])) { $optionsExists = $app['orm.em']->getRepository('ChamiloLMS\\Entity\\ExtraFieldOptionRelFieldOption')->findOneBy(array('fieldId' => $field_details['id'])); } if ($optionsExists) { if (isset($userInfo['status']) && !empty($userInfo['status'])) { $fieldWorkFlow = $app['orm.em']->getRepository('ChamiloLMS\\Entity\\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['display_text']); } else { if ($optionsExists) { // Adding always the default value if ($option_details['id'] == $defaultValueId) { $options[$option_details['option_value']] = $option_details['display_text']; } else { if (isset($addOptions) && !empty($addOptions)) { // Parsing filters if (in_array($option_details['id'], $addOptions)) { $options[$option_details['option_value']] = $option_details['display_text']; } } } } else { // Normal behaviour $options[$option_details['option_value']] = $option_details['display_text']; } } } if (isset($optionList[$defaultValueId])) { if (isset($optionList[$defaultValueId]['option_value']) && $optionList[$defaultValueId]['option_value'] == 'aprobada') { // @todo function don't exists api_is_question_manager /*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['display_text'] = get_lang($field_details['display_text']); } // chzn-select doesn't work for sessions?? $form->addElement('select', 'extra_' . $field_details['variable'], $field_details['display_text'], $options, array('id' => 'extra_' . $field_details['variable'])); /* Enable this when field_loggeable is introduced as a table field (2.0) if ($optionsExists && $field_details['field_loggeable'] && !empty($defaultValueId)) { $form->addElement( 'textarea', 'extra_' . $field_details['variable'] . '_comment', $field_details['display_text'] . ' ' . get_lang('Comment') ); $extraFieldValue = new ExtraFieldValue($this->type); $repo = $app['orm.em']->getRepository($extraFieldValue->entityName); $repoLog = $app['orm.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['visible'] == 0) { $form->freeze('extra_' . $field_details['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['display_text']; } $form->addElement('select', 'extra_' . $field_details['variable'], $field_details['display_text'], $options, array('multiple' => 'multiple')); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_DATE: $form->addDatePicker('extra_' . $field_details['variable'], $field_details['display_text']); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } $form->applyFilter('theme', 'trim'); break; case ExtraField::FIELD_TYPE_DATETIME: $form->addDateTimePicker('extra_' . $field_details['variable'], $field_details['display_text']); $defaults['extra_' . $field_details['variable']] = api_get_local_time(); if (!isset($form->_defaultValues['extra_' . $field_details['variable']])) { $form->setDefaults($defaults); } if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } $form->applyFilter('theme', 'trim'); break; case ExtraField::FIELD_TYPE_DOUBLE_SELECT: $first_select_id = 'first_extra_' . $field_details['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['variable'] . '").empty(); $.each(data, function(index, value) { $("#second_extra_' . $field_details['variable'] . '").append($("<option/>", { value: index, text: value })); }); }, }); } else { $("#second_extra_' . $field_details['variable'] . '").empty(); } });'; $first_id = null; $second_id = null; if (!empty($extraData)) { $first_id = $extraData['extra_' . $field_details['variable']]['extra_' . $field_details['variable']]; $second_id = $extraData['extra_' . $field_details['variable']]['extra_' . $field_details['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['display_text']; } else { if ($first_id === $sub_option['option_value']) { $second_values[$sub_option['id']] = $sub_option['display_text']; } } } } } $group = array(); $group[] = $form->createElement('select', 'extra_' . $field_details['variable'], null, $values, array('id' => $first_select_id)); $group[] = $form->createElement('select', 'extra_' . $field_details['variable'] . '_second', null, $second_values, array('id' => 'second_extra_' . $field_details['variable'])); $form->addGroup($group, 'extra_' . $field_details['variable'], $field_details['display_text'], ' '); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_DIVIDER: $form->addElement('static', $field_details['variable'], '<br /><strong>' . $field_details['display_text'] . '</strong>'); break; case ExtraField::FIELD_TYPE_TAG: $variable = $field_details['variable']; $field_id = $field_details['id']; //Added for correctly translate the extra_field $get_lang_variables = false; if (in_array($variable, ['tags'])) { $get_lang_variables = true; } if ($get_lang_variables) { $field_details['display_text'] = get_lang($field_details['display_text']); } $tagsSelect = $form->addSelect("extra_{$field_details['variable']}", $field_details['display_text']); $tagsSelect->setAttribute('class', null); $tagsSelect->setAttribute('id', "extra_{$field_details['variable']}"); $tagsSelect->setMultiple(true); if ($this->type == 'user') { /* //the magic should be here $user_tags = UserManager::get_user_tags($user_id, $field_details[0]); $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>'; } } $multi_select = '<select id="extra_'.$field_details[1].'" name="extra_'.$field_details[1].'"> '.$tag_list.' </select>'; $form->addElement('label', $field_details[3], $multi_select); $url = api_get_path(WEB_AJAX_PATH).'user_manager.ajax.php'; $complete_text = get_lang('StartToType'); //if cache is set to true the jquery will be called 1 time $jquery_ready_content = <<<EOF $("#extra_$field_details[1]").fcbkcomplete({ json_url: "$url?a=search_tags&field_id=$field_details[0]", cache: false, filter_case: true, filter_hide: true, complete_text:"$complete_text", firstselected: true, //onremove: "testme", //onselect: "testme", filter_selected: true, newel: true }); EOF; break;*/ // The magic should be here $user_tags = UserManager::get_user_tags($itemId, $field_details['id']); if (is_array($user_tags) && count($user_tags) > 0) { foreach ($user_tags as $tag) { $tagsSelect->addOption($tag['tag'], $tag['tag'], ['selected' => 'selected', 'class' => 'selected']); } } $url = api_get_path(WEB_AJAX_PATH) . 'user_manager.ajax.php'; } else { $em = Database::getManager(); $fieldTags = $em->getRepository('ChamiloCoreBundle:ExtraFieldRelTag')->findBy(['fieldId' => $field_id, 'itemId' => $itemId]); foreach ($fieldTags as $fieldTag) { $tag = $em->find('ChamiloCoreBundle:Tag', $fieldTag->getTagId()); if (empty($tag)) { continue; } $tagsSelect->addOption($tag->getTag(), $tag->getTag(), ['selected' => 'selected', 'class' => 'selected']); } $url = api_get_path(WEB_AJAX_PATH) . 'extra_field.ajax.php'; } $complete_text = get_lang('StartToType'); //if cache is set to true the jquery will be called 1 time $jquery_ready_content .= <<<EOF \$("#extra_{$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; break; case ExtraField::FIELD_TYPE_TIMEZONE: $form->addElement('select', 'extra_' . $field_details['variable'], $field_details['display_text'], api_get_timezones(), ''); if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } break; case ExtraField::FIELD_TYPE_SOCIAL_PROFILE: // get the social network's favicon $extra_data_variable = isset($extraData['extra_' . $field_details['variable']]) ? $extraData['extra_' . $field_details['variable']] : null; $field_default_value = isset($field_details['field_default_value']) ? $field_details['field_default_value'] : null; $icon_path = UserManager::get_favicon_from_url($extra_data_variable, $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['variable'], $field_details['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['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } break; case ExtraField::FIELD_TYPE_MOBILE_PHONE_NUMBER: $form->addElement('text', 'extra_' . $field_details[1], $field_details[3] . " (" . get_lang('CountryDialCode') . ")", array('size' => 40, 'placeholder' => '(xx)xxxxxxxxx')); $form->applyFilter('extra_' . $field_details[1], 'stripslashes'); $form->applyFilter('extra_' . $field_details[1], 'trim'); $form->applyFilter('extra_' . $field_details[1], 'mobile_phone_number_filter'); $form->addRule('extra_' . $field_details[1], get_lang('MobilePhoneNumberWrong'), 'mobile_phone_number'); if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } break; case ExtraField::FIELD_TYPE_INTEGER: $form->addElement('number', 'extra_' . $field_details['variable'], $field_details['display_text'], array('class' => 'span1', 'step' => 1)); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); $form->applyFilter('extra_' . $field_details['variable'], 'intval'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_FILE_IMAGE: $fieldVariable = "extra_{$field_details['variable']}"; $fieldTexts = array($field_details['display_text']); if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) { if (file_exists(api_get_path(SYS_UPLOAD_PATH) . $extraData[$fieldVariable])) { $fieldTexts[] = Display::img(api_get_path(WEB_UPLOAD_PATH) . $extraData[$fieldVariable], $field_details['display_text'], array('width' => '300')); } } $form->addElement('file', $fieldVariable, $fieldTexts, array('accept' => 'image/*')); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); $allowed_picture_types = array('jpg', 'jpeg', 'png', 'gif'); $form->addRule('extra_' . $field_details['variable'], get_lang('OnlyImagesAllowed') . ' (' . implode(',', $allowed_picture_types) . ')', 'filetype', $allowed_picture_types); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_FLOAT: $form->addElement('number', 'extra_' . $field_details['variable'], $field_details['display_text'], array('class' => 'span1', 'step' => '0.01')); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); $form->applyFilter('extra_' . $field_details['variable'], 'floatval'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_FILE: $fieldVariable = "extra_{$field_details['variable']}"; $fieldTexts = array($field_details['display_text']); if (is_array($extraData) && array_key_exists($fieldVariable, $extraData)) { if (file_exists(api_get_path(SYS_UPLOAD_PATH) . $extraData[$fieldVariable])) { $fieldTexts[] = Display::url(api_get_path(WEB_UPLOAD_PATH) . $extraData[$fieldVariable], api_get_path(WEB_UPLOAD_PATH) . $extraData[$fieldVariable], array('title' => $field_details['display_text'], 'target' => '_blank')); } } $form->addElement('file', $fieldVariable, $fieldTexts, array()); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); $form->applyFilter('extra_' . $field_details['variable'], 'trim'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_VIDEO_URL: //Added for correctly translate the extra_field $get_lang_variables = false; if (in_array($field_details['variable'], ['video_url'])) { $get_lang_variables = true; } if ($get_lang_variables) { $field_details['display_text'] = get_lang($field_details['display_text']); } $form->addUrl("extra_{$field_details['variable']}", $field_details['display_text'], false, ['placeholder' => 'https://']); break; case ExtraField::FIELD_TYPE_LETTERS_ONLY: $form->addTextLettersOnly("extra_{$field_details['variable']}", $field_details['display_text']); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_ALPHANUMERIC: $form->addTextAlphanumeric("extra_{$field_details['variable']}", $field_details['display_text']); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_LETTERS_SPACE: $form->addTextLettersAndSpaces("extra_{$field_details['variable']}", $field_details['display_text']); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; case ExtraField::FIELD_TYPE_ALPHANUMERIC_SPACE: $form->addTextAlphanumericAndSpaces("extra_{$field_details['variable']}", $field_details['display_text']); $form->applyFilter('extra_' . $field_details['variable'], 'stripslashes'); if (!$admin_permissions) { if ($field_details['visible'] == 0) { $form->freeze('extra_' . $field_details['variable']); } } break; } } } $return = array(); $return['jquery_ready_content'] = $jquery_ready_content; return $return; }
/** * This function gets all the information of a certrain ($field_id) * additional profile field for a specific list of users is more efficent * than get_addtional_profile_information_of_field() function * It gets the information of all the users so that it can be displayed * in the sortable table or in the csv or xls export * * @author Julio Montoya <*****@*****.**> * @param int field id * @param array list of user ids * @return array * @since Nov 2009 * @version 1.8.6.2 */ public static function get_addtional_profile_information_of_field_by_user($field_id, $users) { // Database table definition $table_user = Database::get_main_table(TABLE_MAIN_USER); $table_user_field_values = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES); $result_extra_field = UserManager::get_extra_field_information($field_id); if (!empty($users)) { if ($result_extra_field['field_type'] == UserManager::USER_FIELD_TYPE_TAG ) { foreach($users as $user_id) { $user_result = UserManager::get_user_tags($user_id, $field_id); $tag_list = array(); foreach($user_result as $item) { $tag_list[] = $item['tag']; } $return[$user_id][] = implode(', ',$tag_list); } } else { $new_user_array = array(); foreach($users as $user_id) { $new_user_array[]= "'".$user_id."'"; } $users = implode(',',$new_user_array); //selecting only the necessary information NOT ALL the user list $sql = "SELECT user.user_id, field.field_value FROM $table_user user INNER JOIN $table_user_field_values field ON (user.user_id = field.user_id) WHERE field.field_id=".intval($field_id)." AND user.user_id IN ($users)"; $result = Database::query($sql); while($row = Database::fetch_array($result)) { // get option value for field type double select by id if (!empty($row['field_value'])) { if ($result_extra_field['field_type'] == USER_FIELD_TYPE_DOUBLE_SELECT) { $id_double_select = explode(';',$row['field_value']); if (is_array($id_double_select)) { $value1 = $result_extra_field['options'][$id_double_select[0]]['option_value']; $value2 = $result_extra_field['options'][$id_double_select[1]]['option_value']; $row['field_value'] = ($value1.';'.$value2); } } } // get other value from extra field $return[$row['user_id']][] = $row['field_value']; } } } return $return; }
.'<dd> '.implode(',',$data).'</dd>'; } else { if ($field_type == UserManager::USER_FIELD_TYPE_DOUBLE_SELECT) { $id_options = explode(';',$data); $value_options = array(); // get option display text from user_field_options table foreach ($id_options as $id_option) { $sql = "SELECT option_display_text FROM $t_ufo WHERE id = '$id_option'"; $res_options = Database::query($sql); $row_options = Database::fetch_row($res_options); $value_options[] = $row_options[0]; } $extra_information_value .= '<dt>'.ucfirst($field_display_text).':</dt>' .'<dd>'.implode(' ',$value_options).'</dd>'; } elseif ($field_type == UserManager::USER_FIELD_TYPE_TAG ) { $user_tags = UserManager::get_user_tags($user_id, $field_id); $tag_tmp = array(); foreach ($user_tags as $tags) { $tag_tmp[] = '<a class="label label_tag"' .' href="'.api_get_path(WEB_PATH).'main/social/search.php?q='.$tags['tag'].'">' .$tags['tag'] .'</a>'; } if (is_array($user_tags) && count($user_tags)>0) { $extra_information_value .= '<dt>'.ucfirst($field_display_text).':</dt>' .'<dd>'.implode('', $tag_tmp).'</dd>'; } } elseif ($field_type == UserManager::USER_FIELD_TYPE_SOCIAL_PROFILE) { $icon_path = UserManager::get_favicon_from_url($data); $bottom = '0.2'; //quick hack for hi5
/** * Deletes an user tag * @param int user id * @param int field id * */ public static function delete_user_tags($user_id, $field_id) { // database table definition $table_user_tag = Database::get_main_table(TABLE_MAIN_TAG); $table_user_tag_values = Database::get_main_table(TABLE_MAIN_USER_REL_TAG); $tags = UserManager::get_user_tags($user_id, $field_id); //echo '<pre>';var_dump($tags); if (is_array($tags) && count($tags) > 0) { foreach ($tags as $key => $tag) { if ($tag['count'] > '0') { $sql = "UPDATE {$table_user_tag} SET count = count - 1 WHERE id = {$key} "; $result = Database::query($sql); } $sql = "DELETE FROM {$table_user_tag_values} WHERE user_id = {$user_id} AND tag_id = {$key}"; $result = Database::query($sql); } } }