|
|
|
@ -68,6 +68,7 @@ class ExtraField extends Model |
|
|
|
|
const FIELD_TYPE_GEOLOCALIZATION = 24; |
|
|
|
|
const FIELD_TYPE_GEOLOCALIZATION_COORDINATES = 25; |
|
|
|
|
const FIELD_TYPE_SELECT_WITH_TEXT_FIELD = 26; |
|
|
|
|
const FIELD_TYPE_TRIPLE_SELECT = 27; |
|
|
|
|
|
|
|
|
|
public $type = 'user'; |
|
|
|
|
public $pageName; |
|
|
|
@ -443,6 +444,7 @@ class ExtraField extends Model |
|
|
|
|
'GeolocalizationCoordinates' |
|
|
|
|
); |
|
|
|
|
$types[self::FIELD_TYPE_SELECT_WITH_TEXT_FIELD] = get_lang('FieldTypeSelectWithTextField'); |
|
|
|
|
$types[self::FIELD_TYPE_TRIPLE_SELECT] = get_lang('FieldTypeTripleSelect'); |
|
|
|
|
|
|
|
|
|
switch ($handler) { |
|
|
|
|
case 'course': |
|
|
|
@ -563,6 +565,7 @@ class ExtraField extends Model |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($field_value) { |
|
|
|
|
$variable = $field['variable']; |
|
|
|
|
$field_value = $field_value['value']; |
|
|
|
|
switch ($field['field_type']) { |
|
|
|
|
case self::FIELD_TYPE_TAG: |
|
|
|
@ -594,6 +597,13 @@ class ExtraField extends Model |
|
|
|
|
case self::FIELD_TYPE_RADIO: |
|
|
|
|
$extra_data['extra_'.$field['variable']]['extra_'.$field['variable']] = $field_value; |
|
|
|
|
break; |
|
|
|
|
case self::FIELD_TYPE_TRIPLE_SELECT: |
|
|
|
|
list($level1, $level2, $level3) = explode(';', $field_value); |
|
|
|
|
|
|
|
|
|
$extra_data["extra_$variable"]["extra_$variable"] = $level1; |
|
|
|
|
$extra_data["extra_$variable"]["extra_{$variable}_second"] = $level2; |
|
|
|
|
$extra_data["extra_$variable"]["extra_{$variable}_third"] = $level3; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
$extra_data['extra_'.$field['variable']] = $field_value; |
|
|
|
|
break; |
|
|
|
@ -693,6 +703,44 @@ class ExtraField extends Model |
|
|
|
|
return $options_parsed; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param $string |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public static function tripleSelectConvertStringToArray($string) |
|
|
|
|
{ |
|
|
|
|
$options = []; |
|
|
|
|
|
|
|
|
|
foreach (explode('|', $string) as $i => $item0) { |
|
|
|
|
$level1 = explode('\\', $item0); |
|
|
|
|
|
|
|
|
|
foreach ($level1 as $j => $item1) { |
|
|
|
|
if (0 === $j) { |
|
|
|
|
$options[] = ['label' => $item1, 'options' => []]; |
|
|
|
|
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (explode(':', $item1) as $k => $item2) { |
|
|
|
|
if (0 === $k) { |
|
|
|
|
$options[$i]['options'][] = ['label' => $item2, 'options' => []]; |
|
|
|
|
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$options[$i]['options'][$j - 1]['options'][] = explode(';', $item2); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
array_walk_recursive($options, function (&$item) { |
|
|
|
|
$item = trim($item); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
return $options; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $options |
|
|
|
|
* |
|
|
|
@ -714,6 +762,38 @@ class ExtraField extends Model |
|
|
|
|
return $options_parsed; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $options |
|
|
|
|
* @param int $parentId |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
private static function getOptionsFromTripleSelect(array $options, $parentId) { |
|
|
|
|
return array_filter($options, function ($option) use ($parentId) { |
|
|
|
|
return $option['option_value'] == $parentId; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $options |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public static function tripleSelectConvertArrayToOrderedArray(array $options) |
|
|
|
|
{ |
|
|
|
|
$level1 = self::getOptionsFromTripleSelect($options, 0); |
|
|
|
|
$level2 = []; |
|
|
|
|
$level3 = []; |
|
|
|
|
|
|
|
|
|
foreach ($level1 as $item1) { |
|
|
|
|
$level2 += self::getOptionsFromTripleSelect($options, $item1['id']); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach ($level2 as $item2) { |
|
|
|
|
$level3 += self::getOptionsFromTripleSelect($options, $item2['id']); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ['level1' => $level1, 'level2' => $level2, 'level3' => $level3]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $options the result of the get_field_options_by_field() array |
|
|
|
|
* |
|
|
|
@ -770,6 +850,32 @@ class ExtraField extends Model |
|
|
|
|
return rtrim($string, '|'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $options |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public static function tripleSelectConvertArrayToString(array $options) |
|
|
|
|
{ |
|
|
|
|
$string = ''; |
|
|
|
|
$parsedOptions = self::tripleSelectConvertArrayToOrderedArray($options); |
|
|
|
|
|
|
|
|
|
foreach ($parsedOptions['level1'] as $item1) { |
|
|
|
|
$string .= $item1['display_text']; |
|
|
|
|
$level2 = self::getOptionsFromTripleSelect($parsedOptions['level2'], $item1['id']); |
|
|
|
|
|
|
|
|
|
foreach ($level2 as $item2) { |
|
|
|
|
$string .= '\\'.$item2['display_text'].':'; |
|
|
|
|
$level3 = self::getOptionsFromTripleSelect($parsedOptions['level3'], $item2['id']); |
|
|
|
|
|
|
|
|
|
$string .= implode(';', array_column($level3, 'display_text')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$string .= '|'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return trim($string, '\\|;'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param array $params |
|
|
|
|
* |
|
|
|
@ -1026,6 +1132,138 @@ class ExtraField extends Model |
|
|
|
|
return $jqueryReadyContent; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param \FormValidator $form |
|
|
|
|
* @param array $fieldDetails |
|
|
|
|
* @param array $extraData |
|
|
|
|
* @param boolean $freezeElement |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
private function addTripleSelectElement( |
|
|
|
|
FormValidator $form, |
|
|
|
|
array $fieldDetails, |
|
|
|
|
array $extraData, |
|
|
|
|
$freezeElement |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
$variable = $fieldDetails['variable']; |
|
|
|
|
$id = $fieldDetails['id']; |
|
|
|
|
$slctFirstId = "first_extra$variable"; |
|
|
|
|
$slctSecondId = "second_extra$variable"; |
|
|
|
|
$slctThirdId = "thrid_extra$variable"; |
|
|
|
|
$langSelect = get_lang('Select'); |
|
|
|
|
|
|
|
|
|
$js = " |
|
|
|
|
(function () { |
|
|
|
|
var slctFirst = $('#$slctFirstId'), |
|
|
|
|
slctSecond = $('#$slctSecondId'), |
|
|
|
|
slctThrid = $('#$slctThirdId'); |
|
|
|
|
|
|
|
|
|
slctFirst.on('change', function () { |
|
|
|
|
slctSecond.empty().selectpicker('refresh'); |
|
|
|
|
slctThrid.empty().selectpicker('refresh'); |
|
|
|
|
|
|
|
|
|
var level = $(this).val(); |
|
|
|
|
|
|
|
|
|
if (!level) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$.getJSON(_p.web_ajax + 'extra_field.ajax.php', { |
|
|
|
|
'a': 'get_second_select_options', |
|
|
|
|
'type': '$this->type', |
|
|
|
|
'field_id': $id, |
|
|
|
|
'option_value_id': level |
|
|
|
|
}) |
|
|
|
|
.done(function (data) { |
|
|
|
|
slctSecond.append( |
|
|
|
|
$('<option>', {value: '', text: '$langSelect'}) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$.each(data, function (index, value) { |
|
|
|
|
slctSecond.append( |
|
|
|
|
$('<option>', {value: index, text: value}) |
|
|
|
|
); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
slctSecond.selectpicker('refresh'); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
slctSecond.on('change', function () { |
|
|
|
|
slctThrid.empty().selectpicker('refresh'); |
|
|
|
|
|
|
|
|
|
var level = $(this).val(); |
|
|
|
|
|
|
|
|
|
if (!level) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$.getJSON(_p.web_ajax + 'extra_field.ajax.php', { |
|
|
|
|
'a': 'get_second_select_options', |
|
|
|
|
'type': '$this->type', |
|
|
|
|
'field_id': $id, |
|
|
|
|
'option_value_id': level |
|
|
|
|
}) |
|
|
|
|
.done(function (data) { |
|
|
|
|
slctThrid.append( |
|
|
|
|
$('<option>', {value: '', text: '$langSelect'}) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$.each(data, function (index, value) { |
|
|
|
|
slctThrid.append( |
|
|
|
|
$('<option>', {value: index, text: value}) |
|
|
|
|
); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
slctThrid.selectpicker('refresh'); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
})(); |
|
|
|
|
"; |
|
|
|
|
|
|
|
|
|
$firstId = isset($extraData["extra_$variable"]["extra_$variable"]) |
|
|
|
|
? $extraData["extra_$variable"]["extra_$variable"] |
|
|
|
|
: ''; |
|
|
|
|
$secondId = isset($extraData["extra_$variable"]["extra_{$variable}_second"]) |
|
|
|
|
? $extraData["extra_$variable"]["extra_{$variable}_second"] |
|
|
|
|
: ''; |
|
|
|
|
|
|
|
|
|
$options = self::tripleSelectConvertArrayToOrderedArray($fieldDetails['options']); |
|
|
|
|
$values1 = ['' => $langSelect]; |
|
|
|
|
$values2 = ['' => $langSelect]; |
|
|
|
|
$values3 = ['' => $langSelect]; |
|
|
|
|
$level1 = self::getOptionsFromTripleSelect($options['level1'], 0); |
|
|
|
|
$level2 = self::getOptionsFromTripleSelect($options['level2'], $firstId); |
|
|
|
|
$level3 = self::getOptionsFromTripleSelect($options['level3'], $secondId); |
|
|
|
|
|
|
|
|
|
foreach ($level1 as $item1) { |
|
|
|
|
$values1[$item1['id']] = $item1['display_text']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach ($level2 as $item2) { |
|
|
|
|
$values2[$item2['id']] = $item2['display_text']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach ($level3 as $item3) { |
|
|
|
|
$values3[$item3['id']] = $item3['display_text']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$form |
|
|
|
|
->defaultRenderer() |
|
|
|
|
->setGroupElementTemplate('<p>{element}</p>', "extra_$variable"); |
|
|
|
|
$group = []; |
|
|
|
|
$group[] = $form->createElement('select', "extra_$variable", null, $values1, ['id' => $slctFirstId]); |
|
|
|
|
$group[] = $form->createElement('select', "extra_{$variable}_second", null, $values2, ['id' => $slctSecondId]); |
|
|
|
|
$group[] = $form->createElement('select', "extra_{$variable}_third", null, $values3, ['id' => $slctThirdId]); |
|
|
|
|
$form->addGroup($group, "extra_$variable", $fieldDetails['display_text']); |
|
|
|
|
|
|
|
|
|
if ($freezeElement) { |
|
|
|
|
$form->freeze('extra_'.$fieldDetails['variable']); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $js; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Add an element that matches the given extra field to the given $form object |
|
|
|
|
* @param FormValidator $form |
|
|
|
@ -2146,6 +2384,14 @@ class ExtraField extends Model |
|
|
|
|
$freezeElement |
|
|
|
|
); |
|
|
|
|
break; |
|
|
|
|
case self::FIELD_TYPE_TRIPLE_SELECT: |
|
|
|
|
$jquery_ready_content .= self::addTripleSelectElement( |
|
|
|
|
$form, |
|
|
|
|
$field_details, |
|
|
|
|
$extraData, |
|
|
|
|
$freezeElement |
|
|
|
|
); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -2349,7 +2595,8 @@ class ExtraField extends Model |
|
|
|
|
self::FIELD_TYPE_SELECT, |
|
|
|
|
self::FIELD_TYPE_TAG, |
|
|
|
|
self::FIELD_TYPE_DOUBLE_SELECT, |
|
|
|
|
self::FIELD_TYPE_SELECT_WITH_TEXT_FIELD |
|
|
|
|
self::FIELD_TYPE_SELECT_WITH_TEXT_FIELD, |
|
|
|
|
self::FIELD_TYPE_TRIPLE_SELECT |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if ($action == 'edit') { |
|
|
|
|