Set values correctly.

ofaj
jmontoyaa 9 years ago
parent 83678e4b15
commit 32b51d7dd4
  1. 42
      load_search.php
  2. 39
      main/inc/ajax/extra_field.ajax.php
  3. 43
      main/inc/lib/extra_field.lib.php
  4. 16
      main/inc/lib/pear/HTML/QuickForm.php
  5. 41
      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();

@ -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,

@ -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;
}
}

@ -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
*

@ -161,7 +161,6 @@ $(document).ready(function() {
});
</script>';
$form->addButtonSave(get_lang('Save'), 'save');
$result = SessionManager::getGridColumns('simple');
@ -291,8 +290,8 @@ $(document).ready(function() {
$("#objectifs_panel").toggle();
return false;
});
});
</script>';
});
</script>';
$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']) &&

Loading…
Cancel
Save