static function transaction_extra_field_agregar_generic($extra_field_variable, $original_data, $web_service_details, $type = 'session') { $function_name = $extra_field_variable . "Detalles"; $data = Migration::soap_call($web_service_details, $function_name, array('intIdSede' => $original_data['branch_id'], "uidid" . $extra_field_variable => $original_data['item_id'])); if ($data['error'] == false) { // Exceptional treatment for specific fields if ($extra_field_variable == 'aula') { $data['name'] = $original_data['branch_id'] . ' - ' . $data['name']; } $extra_field = new ExtraField($type); $extra_field_info = $extra_field->get_handler_field_info_by_field_variable($extra_field_variable); if ($extra_field_info) { $extra_field_option = new ExtraFieldOption($type); $info_before = $extra_field_option->get_field_options_by_field($extra_field_info['id']); $params = array('field_id' => $extra_field_info['id'], 'option_value' => $original_data['item_id'], 'option_display_text' => $data['name'], 'option_order' => null); $result = $extra_field_option->save_one_item($params); $info_after = $extra_field_option->get_field_options_by_field($extra_field_info['id']); if ($result) { return array('entity' => $extra_field_variable, 'before' => $info_before, 'after' => $info_after, 'message' => "Extra field option added - {$extra_field_variable} was saved with data: " . print_r($params, 1), 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL); } else { return array('message' => "Extra field option added - {$extra_field_variable} was NOT saved with data: " . print_r($params, 1), 'status_id' => self::TRANSACTION_STATUS_FAILED); } } else { return array('message' => "Extra field was not found: {$extra_field_variable}", 'status_id' => self::TRANSACTION_STATUS_FAILED); } } else { return $data; } }
echo Display::page_header($extra_field_info['field_display_text']); $obj = new ExtraFieldOption($extra_field->type); $obj->field_id = $field_id; // Action handling: Add switch ($action) { case 'add': if (api_get_session_id() != 0 && !api_is_allowed_to_session_edit(false, true)) { api_not_allowed(); } $url = api_get_self() . '?action=' . Security::remove_XSS($_GET['action']) . '&' . $params; $form = $obj->return_form($url, 'add'); // The validation or display if ($form->validate()) { if ($check) { $values = $form->exportValues(); $res = $obj->save_one_item($values); if ($res) { Display::display_confirmation_message(get_lang('ItemAdded')); } } $obj->display(); } else { /*echo '<div class="actions">'; echo '<a href="'.api_get_self().'">'.Display::return_icon('back.png',get_lang('Back'),'',ICON_SIZE_MEDIUM).'</a>'; echo '</div>'; */ $form->addElement('hidden', 'sec_token'); $form->setConstants(array('sec_token' => $token)); $form->display(); } break; case 'edit':
/** * Helper function to create extra fields in the Chamilo database. If the * extra field aleady exists, then just return the ID of this field. If * options are provided ('options' sub-array), then options are inserted in * the corresponding x_field_options table. * @param Array An array containing an 'extra_fields' entry with details about the required extra fields * @return void */ private function _create_extra_fields(&$table) { $extra_fields = array(); error_log('Inserting (if not exist) extra fields for : ' . $table['dest_table'] . " \n"); foreach ($table['extra_fields'] as $extra_field) { //error_log('Preparing for insertion of extra field ' . $extra_field['field_display_text'] . "\n"); $options = isset($extra_field['options']) ? $extra_field['options'] : null; unset($extra_field['options']); $extra_field_obj = new ExtraField($table['dest_table']); $extra_field_id = $extra_field_obj->save($extra_field); $selected_fields = self::prepare_field_match($options); //Adding options. This is only processed if the corresponding // extra_field has an 'options' sub-aray defined if (!empty($options)) { $extra_field_option_obj = new ExtraFieldOption($table['dest_table']); // use the query defined in the 'query' item as returned in a select by prepare_field_match above $this->select_all($options['orig_table'], $selected_fields); $num_rows = $this->num_rows(); if ($num_rows) { $data_to_insert = array(); $data_to_insert['field_id'] = $extra_field_id; while ($row = $this->fetch_array()) { $data = self::execute_field_match($options, $row); $data_to_insert = array_merge($data_to_insert, $data); $extra_field_option_obj->save_one_item($data_to_insert, false, false); //error_log(print_r($extra_fields[$table['dest_table']]['extra_field_'.$extra_field['field_variable']], 1)); $extra_fields[$table['dest_table']]['extra_field_' . $extra_field['field_variable']]['options'][] = $data_to_insert; $extra_fields[$table['dest_table']]['extra_field_' . $extra_field['field_variable']]['field_type'] = $extra_field['field_type']; } //$extra_fields[$table['dest_table']]['extra_field_'.$extra_field['field_variable']]['selected_option'] = //error_log('$data: ' . print_r($data_to_insert, 1)); } } else { // if there are no pre-defined options, then just return the field_id for this variable $extra_fields[$table['dest_table']]['extra_field_' . $extra_field['field_variable']] = $extra_field_id; } } return $extra_fields; }