diff --git a/load_search.php b/load_search.php index 5279ddf077..3e5b2724a1 100644 --- a/load_search.php +++ b/load_search.php @@ -252,7 +252,22 @@ $extra = $extraField->addElements( $defaults, [], false, //$orderDependingDefaults - true // force + true, // force + [ 'domaine' => 3, $theme => 5], // $separateExtraMultipleSelect + [ + 'domaine' => [ + get_lang('Domaine').' 1', + get_lang('Domaine').' 2', + get_lang('Domaine').' 3' + ], + $theme => [ + get_lang('Theme').' 1', + get_lang('Theme').' 2', + get_lang('Theme').' 3', + get_lang('Theme').' 4', + get_lang('Theme').' 5' + ], + ] ); $form->addButtonSearch(get_lang('Search'), 'search'); @@ -273,6 +288,30 @@ $column_model = $result['column_model']; $form->setDefaults($defaults); + +/** @var HTML_QuickForm_select $element */ +$domaine1 = $form->getElementByName('extra_domaine[0]'); +$domaine2 = $form->getElementByName('extra_domaine[1]'); +$domaine3 = $form->getElementByName('extra_domaine[2]'); +$userForm->setDefaults($defaults); +$domainList = array_merge($domaine1->getValue(), $domaine3->getValue(), $domaine2->getValue()); +$themeList = []; +$extraField = new ExtraField('session'); +$resultOptions = $extraField->searchOptionsFromTags('extra_domaine', 'extra_'.$theme, $domainList); + +if ($resultOptions) { + $resultOptions = array_column($resultOptions, 'tag', 'id'); + $resultOptions = array_filter($resultOptions); + + for ($i = 0; $i < 5; $i++) { + /** @var HTML_QuickForm_select $theme */ + $themeElement = $form->getElementByName('extra_'.$theme.'['.$i.']'); + foreach ($resultOptions as $key => $value) { + $themeElement->addOption($value, $value); + } + } +} + $filterToSend = ''; if ($formSearch->validate()) { @@ -306,6 +345,7 @@ if ($formSearch->validate()) { } } } + $params = []; if ($form->validate()) { $params = $form->getSubmitValues(); diff --git a/main/inc/ajax/extra_field.ajax.php b/main/inc/ajax/extra_field.ajax.php index c57efb7f54..deb8a7d6bb 100755 --- a/main/inc/ajax/extra_field.ajax.php +++ b/main/inc/ajax/extra_field.ajax.php @@ -59,42 +59,7 @@ switch ($action) { $options = isset($_REQUEST['options']) ? json_decode($_REQUEST['options']) : ''; $extraField = new ExtraField('session'); - $extraFieldInfo = $extraField->get_handler_field_info_by_field_variable(str_replace('extra_', '', $from)); - $id = $extraFieldInfo['id']; - - $extraFieldInfoTag = $extraField->get_handler_field_info_by_field_variable(str_replace('extra_', '', $search)); - $tagId = $extraFieldInfoTag['id']; - - $table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); - $tagRelExtraTable = Database::get_main_table(TABLE_MAIN_EXTRA_FIELD_REL_TAG); - $tagTable = Database::get_main_table(TABLE_MAIN_TAG); - $optionsTable = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS); - - /*$sql = "SELECT DISTINCT t.* FROM $tagRelExtraTable te INNER JOIN $tagTable t - ON (t.id = te.tag_id) - WHERE te.field_id = $tagId AND te.item_id IN ( - SELECT DISTINCT item_id - FROM $table - WHERE - field_id = $id AND - value IN ('".implode("','", $options)."') - ) - ";*/ - - $sql = "SELECT DISTINCT t.*, v.value, o.display_text - FROM $tagRelExtraTable te - INNER JOIN $tagTable t - ON (t.id = te.tag_id AND te.field_id = t.field_id AND te.field_id = $tagId) - INNER JOIN $table v - ON (te.item_id = v.item_id AND v.field_id = $id) - INNER JOIN $optionsTable o - ON (o.option_value = v.value) - WHERE v.value IN ('".implode("','", $options)."') - ORDER BY o.option_order, t.tag - "; - - $result = Database::query($sql); - $result = Database::store_result($result); + $result = $extraField->searchOptionsFromTags($from, $search, $options); $options = []; $groups = []; foreach ($result as $data) { @@ -102,8 +67,8 @@ switch ($action) { 'id' => $data['id'], 'text' => $data['tag'] ]; - } + foreach ($groups as $key => $data) { $options[] = [ 'text' => $key, diff --git a/main/inc/lib/extra_field.lib.php b/main/inc/lib/extra_field.lib.php index 7ad31b9a0d..44d6008763 100755 --- a/main/inc/lib/extra_field.lib.php +++ b/main/inc/lib/extra_field.lib.php @@ -467,7 +467,6 @@ class ExtraField extends Model if (empty($extraData)) { if (!empty($itemId)) { $extraData = self::get_handler_extra_data($itemId); - if ($form) { $form->setDefaults($extraData); } @@ -2821,4 +2820,46 @@ JAVASCRIPT; return $skillList; } + + /** + * @param string $from + * @param string $search + * + * @return array + */ + public function searchOptionsFromTags($from, $search, $options) + { + $extraFieldInfo = $this->get_handler_field_info_by_field_variable(str_replace('extra_', '', $from)); + $extraFieldInfoTag = $this->get_handler_field_info_by_field_variable(str_replace('extra_', '', $search)); + + if (empty($extraFieldInfo) || empty($extraFieldInfoTag)) { + return []; + } + + $id = $extraFieldInfo['id']; + $tagId = $extraFieldInfoTag['id']; + + $table = Database::get_main_table(TABLE_EXTRA_FIELD_VALUES); + $tagRelExtraTable = Database::get_main_table(TABLE_MAIN_EXTRA_FIELD_REL_TAG); + $tagTable = Database::get_main_table(TABLE_MAIN_TAG); + $optionsTable = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS); + + $sql = "SELECT DISTINCT t.*, v.value, o.display_text + FROM $tagRelExtraTable te + INNER JOIN $tagTable t + ON (t.id = te.tag_id AND te.field_id = t.field_id AND te.field_id = $tagId) + INNER JOIN $table v + ON (te.item_id = v.item_id AND v.field_id = $id) + INNER JOIN $optionsTable o + ON (o.option_value = v.value) + WHERE v.value IN ('".implode("','", $options)."') + ORDER BY o.option_order, t.tag + "; + + $result = Database::query($sql); + $result = Database::store_result($result); + return $result; + } + + } diff --git a/main/inc/lib/pear/HTML/QuickForm.php b/main/inc/lib/pear/HTML/QuickForm.php index d48a7b213f..1bc1f5da3c 100755 --- a/main/inc/lib/pear/HTML/QuickForm.php +++ b/main/inc/lib/pear/HTML/QuickForm.php @@ -751,6 +751,22 @@ class HTML_QuickForm extends HTML_Common } } + /** + * @param string $name + * @return bool|mixed + */ + public function getElementByName($name) + { + foreach ($this->_elements as &$element) { + $elementName = $element->getName(); + if ($elementName == $name) { + return $element; + } + } + + return false; + } + /** * Returns the element's raw value * diff --git a/search.php b/search.php index 01f37eaae2..cd5e79e0d7 100644 --- a/search.php +++ b/search.php @@ -161,7 +161,6 @@ $(document).ready(function() { }); '; - $form->addButtonSave(get_lang('Save'), 'save'); $result = SessionManager::getGridColumns('simple'); @@ -291,8 +290,8 @@ $(document).ready(function() { $("#objectifs_panel").toggle(); return false; }); - }); - '; +}); +'; $panel = Display::panel(get_lang('FiliereExplanation'), '', '', '', '', 'filiere_panel'); $userForm->addHeader(Display::url(get_lang('Filiere'), '#', ['id'=> 'filiere']).''.$panel); @@ -337,9 +336,7 @@ $extra = $extraFieldSession->addElements( $forceShowFields //$forceShowFields = false ); - $jqueryExtra .= $extra['jquery_ready_content']; - $panel = Display::panel(get_lang('DisponibiliteAvantExplanation'), '', '', '', '', 'dispo_panel'); $userForm->addHeader(Display::url(get_lang('DisponibiliteAvant'), '#', ['id'=> 'dispo']).''.$panel); @@ -430,7 +427,7 @@ $extra = $extraFieldSession->addElements( null, true, $forceShowFields, // $forceShowFields - [ 'domaine' => 3, $theme => 5], // $separateExtraMultipleSelect + ['domaine' => 3, $theme => 5], // $separateExtraMultipleSelect [ 'domaine' => [ get_lang('Domaine').' 1', @@ -534,7 +531,29 @@ $(document).ready(function(){ $userForm->addButtonSave(get_lang('Save')); +/** @var HTML_QuickForm_select $element */ +$domaine1 = $form->getElementByName('extra_domaine[0]'); +$domaine2 = $form->getElementByName('extra_domaine[1]'); +$domaine3 = $form->getElementByName('extra_domaine[2]'); $userForm->setDefaults($defaults); +$domainList = array_merge($domaine1->getValue(), $domaine3->getValue(), $domaine2->getValue()); +$themeList = []; +$extraField = new ExtraField('session'); +$resultOptions = $extraField->searchOptionsFromTags('extra_domaine', 'extra_'.$theme, $domainList); + +if ($resultOptions) { + $resultOptions = array_column($resultOptions, 'tag', 'id'); + $resultOptions = array_filter($resultOptions); + + for ($i = 0; $i < 5; $i++) { + /** @var HTML_QuickForm_select $theme */ + $themeElement = $form->getElementByName('extra_'.$theme.'['.$i.']'); + foreach ($resultOptions as $key => $value) { + $themeElement->addOption($value, $value); + } + } +} + $userFormToString = $userForm->returnForm(); if ($userForm->validate()) { @@ -559,6 +578,11 @@ if ($userForm->validate()) { 'extra_temps-de-travail', //'extra_competenceniveau', 'extra_'.$theme, + 'extra_'.$theme.'[0]', + 'extra_'.$theme.'[1]', + 'extra_'.$theme.'[2]', + 'extra_'.$theme.'[3]', + 'extra_'.$theme.'[4]', 'extra_ecouter', 'extra_lire', 'extra_participer_a_une_conversation', @@ -572,11 +596,6 @@ if ($userForm->validate()) { if ($found === false) { continue; } - - $tempKey = str_replace('__persist__', '', $key); - if (!isset($params[$tempKey])) { - $params[$tempKey] = array(); - } } if (isset($userData['extra_filiere_want_stage']) &&