From d27cdc2d03e8aeb85b9ac590fe72143c525e5b8b Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 4 Mar 2020 09:42:37 +0100 Subject: [PATCH] Fix extra field save BT#16789 --- load_search.php | 101 +++++++++++++------------ main/inc/lib/extra_field_value.lib.php | 9 ++- search.php | 25 +++--- 3 files changed, 71 insertions(+), 64 deletions(-) diff --git a/load_search.php b/load_search.php index 000c491643..1fde0acecc 100644 --- a/load_search.php +++ b/load_search.php @@ -1,4 +1,5 @@ '; $htmlHeadXtra[] = ''; -$htmlHeadXtra[] = ''; api_block_anonymous_users(); @@ -693,7 +694,9 @@ if ($form->validate()) { $userDataToSave, true, false, - ['heures_disponibilite_par_semaine' , 'langue_cible'] + ['heures_disponibilite_par_semaine', 'langue_cible'], + [], + true ); // Save session search @@ -836,13 +839,13 @@ if (!empty($filterToSend)) { // Special OFAJ date logic if ($userEndDate == '') { $sql = " AND ( - (s.access_start_date >= '$userStartDateMinus') OR + (s.access_start_date >= '$userStartDateMinus') OR ((s.access_start_date = '' OR s.access_start_date IS NULL) AND (s.access_end_date = '' OR s.access_end_date IS NULL)) )"; } else { $sql = " AND ( (s.access_start_date >= '$userStartDateMinus' AND s.access_end_date < '$userEndDatePlus') OR - (s.access_start_date >= '$userStartDateMinus' AND (s.access_end_date = '' OR s.access_end_date IS NULL)) OR + (s.access_start_date >= '$userStartDateMinus' AND (s.access_end_date = '' OR s.access_end_date IS NULL)) OR ((s.access_start_date = '' OR s.access_start_date IS NULL) AND (s.access_end_date = '' OR s.access_end_date IS NULL)) )"; } @@ -1007,8 +1010,8 @@ if (!empty($sessionByUserList)) { } } $action_links = 'function action_formatter(cellvalue, options, rowObject) { - var sessionList = '.json_encode($sessionUserList).'; - var id = options.rowId.toString(); + var sessionList = '.json_encode($sessionUserList).'; + var id = options.rowId.toString(); if (sessionList.indexOf(id) == -1) { return \''.Display::return_icon('add.png', addslashes(get_lang('Subscribe')), '', ICON_SIZE_SMALL).''.'\'; } else { @@ -1039,8 +1042,8 @@ $htmlHeadXtra[] = ''; -$htmlHeadXtra[] = ''; $tpl = new Template(get_lang('Diagnosis')); diff --git a/main/inc/lib/extra_field_value.lib.php b/main/inc/lib/extra_field_value.lib.php index d7d97ce82d..da1e86bc74 100755 --- a/main/inc/lib/extra_field_value.lib.php +++ b/main/inc/lib/extra_field_value.lib.php @@ -89,10 +89,11 @@ class ExtraFieldValue extends Model */ public function saveFieldValues( $params, - $forceSave = false, + $onlySubmittedFields = false, $showQuery = false, $saveOnlyThisFields = [], - $avoidFields = [] + $avoidFields = [], + $forceSave = false ) { foreach ($params as $key => $value) { $found = strpos($key, '__persist__'); @@ -128,6 +129,10 @@ class ExtraFieldValue extends Model $field_variable = $fieldDetails['variable']; + if ($onlySubmittedFields && !isset($params['extra_'.$field_variable])) { + continue; + } + if (!empty($avoidFields)) { if (in_array($field_variable, $avoidFields)) { continue; diff --git a/search.php b/search.php index f4e2518c67..09bc5ed289 100644 --- a/search.php +++ b/search.php @@ -22,8 +22,8 @@ $form->addHeader(get_lang('Diagnosis')); /** @var ExtraFieldSavedSearch $saved */ $search = ['user' => $userId]; - -$items = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findBy($search); +$extraFieldSavedSearchRepo = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch'); +$items = $extraFieldSavedSearchRepo->findBy($search); $extraFieldSession = new ExtraField('session'); $extraFieldValueSession = new ExtraFieldValue('session'); @@ -698,7 +698,7 @@ $userForm->addHtml(''); $userForm->addHtml(''); $htmlHeadXtra[] = ''; @@ -718,8 +718,8 @@ $domainList = array_merge( ); $themeList = []; -$extraField = new ExtraField('session'); -$resultOptions = $extraField->searchOptionsFromTags( + +$resultOptions = $extraFieldSession->searchOptionsFromTags( 'extra_domaine', 'extra_'.$theme, $domainList @@ -755,10 +755,11 @@ if ($userForm->validate()) { $extraFieldValue->saveFieldValues( $userData, - $adminPermissions, + true, false, [], - ['legal_accept'] + ['legal_accept'], + true ); // Saving to extra_field_saved_search @@ -809,6 +810,8 @@ if ($userForm->validate()) { } // save in ExtraFieldSavedSearch. + $extraFieldRepo = $em->getRepository('ChamiloCoreBundle:ExtraField'); + foreach ($userData as $key => $value) { if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') { continue; @@ -828,18 +831,14 @@ if ($userForm->validate()) { continue; } - $extraFieldObj = $em - ->getRepository('ChamiloCoreBundle:ExtraField') - ->find($extraFieldInfo['id']) - ; - + $extraFieldObj = $extraFieldRepo->find($extraFieldInfo['id']); $search = [ 'field' => $extraFieldObj, 'user' => $user, ]; /** @var ExtraFieldSavedSearch $saved */ - $saved = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findOneBy($search); + $saved = $extraFieldSavedSearchRepo->findOneBy($search); if ($saved) { $saved