|
@@ -833,6 +833,102 @@ class ExtraField extends Model
|
|
|
parent::delete($id);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param \FormValidator $form
|
|
|
+ * @param array $fieldDetails
|
|
|
+ * @param array $extraData
|
|
|
+ * @param bool $freezeElement
|
|
|
+ * @return string JavaScript code
|
|
|
+ */
|
|
|
+ private function addDoubleSelectElement(FormValidator $form, $fieldDetails, $extraData, $freezeElement = false)
|
|
|
+ {
|
|
|
+ $firstSelectId = 'first_extra_'.$fieldDetails['variable'];
|
|
|
+ $secondSelectId = 'second_extra_'.$fieldDetails['variable'];
|
|
|
+
|
|
|
+ $jqueryReadyContent = "
|
|
|
+ $('#$firstSelectId').on('change', function() {
|
|
|
+ var id = $(this).val();
|
|
|
+
|
|
|
+ if (!id) {
|
|
|
+ $('#$secondSelectId').empty().selectpicker('refresh');
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $.getJSON(_p.web_ajax + 'extra_field.ajax.php?1=1&a=get_second_select_options', {
|
|
|
+ 'type': '{$this->type}',
|
|
|
+ 'field_id': {$fieldDetails['id']},
|
|
|
+ 'option_value_id': id
|
|
|
+ })
|
|
|
+ .done(function(data) {
|
|
|
+ $('#$secondSelectId').empty();
|
|
|
+ $.each(data, function(index, value) {
|
|
|
+ $('#second_extra_{$fieldDetails['variable']}').append(
|
|
|
+ $('<option>', {value: index, text: value})
|
|
|
+ );
|
|
|
+ });
|
|
|
+ $('#$secondSelectId').selectpicker('refresh');
|
|
|
+ });
|
|
|
+ });
|
|
|
+ ";
|
|
|
+
|
|
|
+ $firstId = null;
|
|
|
+ if (!empty($extraData)) {
|
|
|
+ if (isset($extraData['extra_'.$fieldDetails['variable']])) {
|
|
|
+ $firstId = $extraData['extra_'.$fieldDetails['variable']]['extra_'.$fieldDetails['variable']];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $options = self::extra_field_double_select_convert_array_to_ordered_array($fieldDetails['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'];
|
|
|
+
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($firstId === $sub_option['option_value']) {
|
|
|
+ $second_values[$sub_option['id']] = $sub_option['display_text'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $form
|
|
|
+ ->defaultRenderer()
|
|
|
+ ->setGroupElementTemplate('<p>{element}</p>', 'extra_'.$fieldDetails['variable']);
|
|
|
+ $group = array();
|
|
|
+ $group[] = $form->createElement(
|
|
|
+ 'select',
|
|
|
+ 'extra_'.$fieldDetails['variable'],
|
|
|
+ null,
|
|
|
+ $values,
|
|
|
+ array('id' => $firstSelectId)
|
|
|
+ );
|
|
|
+ $group[] = $form->createElement(
|
|
|
+ 'select',
|
|
|
+ 'extra_'.$fieldDetails['variable'].'_second',
|
|
|
+ null,
|
|
|
+ $second_values,
|
|
|
+ array('id' => $secondSelectId)
|
|
|
+ );
|
|
|
+ $form->addGroup(
|
|
|
+ $group,
|
|
|
+ 'extra_'.$fieldDetails['variable'],
|
|
|
+ $fieldDetails['display_text']
|
|
|
+ );
|
|
|
+
|
|
|
+ if ($freezeElement) {
|
|
|
+ $form->freeze('extra_'.$fieldDetails['variable']);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $jqueryReadyContent;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Add an element that matches the given extra field to the given $form object
|
|
|
* @param FormValidator $form
|
|
@@ -858,7 +954,6 @@ class ExtraField extends Model
|
|
|
$showOnlyTheseFields = [],
|
|
|
$orderFields = []
|
|
|
) {
|
|
|
- $type = $this->type;
|
|
|
$jquery_ready_content = null;
|
|
|
if (!empty($extra)) {
|
|
|
$newOrder = [];
|
|
@@ -1233,83 +1328,12 @@ class ExtraField extends Model
|
|
|
}
|
|
|
break;
|
|
|
case self::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
|
|
|
- }));
|
|
|
- });
|
|
|
- $("#second_extra_'.$field_details['variable'].'").selectpicker("refresh");
|
|
|
- },
|
|
|
- });
|
|
|
- } else {
|
|
|
- $("#second_extra_'.$field_details['variable'].'").empty();
|
|
|
- }
|
|
|
- });';
|
|
|
-
|
|
|
- $first_id = null;
|
|
|
- if (!empty($extraData)) {
|
|
|
- if (isset($extraData['extra_'.$field_details['variable']])) {
|
|
|
- $first_id = $extraData['extra_'.$field_details['variable']]['extra_'.$field_details['variable']];
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- $options = self::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']
|
|
|
+ $jquery_ready_content .= self::addDoubleSelectElement(
|
|
|
+ $form,
|
|
|
+ $field_details,
|
|
|
+ $extraData,
|
|
|
+ $freezeElement
|
|
|
);
|
|
|
-
|
|
|
- if ($freezeElement) {
|
|
|
- $form->freeze('extra_'.$field_details['variable']);
|
|
|
- }
|
|
|
break;
|
|
|
case self::FIELD_TYPE_DIVIDER:
|
|
|
$form->addHtml('
|