From f10e671c0ecba2ce3334ea43bb3ddc7462ccfdae Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 8 Jul 2021 12:01:30 +0200 Subject: [PATCH] Add load_search.php as is (preprodparkur) --- public/load_search.php | 1194 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1194 insertions(+) create mode 100644 public/load_search.php diff --git a/public/load_search.php b/public/load_search.php new file mode 100644 index 0000000000..6a08d8e520 --- /dev/null +++ b/public/load_search.php @@ -0,0 +1,1194 @@ +'; +$htmlHeadXtra[] = ''; + +$htmlHeadXtra[] = ''; + +api_block_anonymous_users(); +$allowToSee = api_is_drh() || api_is_student_boss() || api_is_platform_admin(); + +if ($allowToSee === false) { + api_not_allowed(true); +} +$userId = api_get_user_id(); +$userInfo = api_get_user_info(); + +$userToLoad = isset($_GET['user_id']) ? $_GET['user_id'] : ''; + +$userToLoadInfo = []; +if ($userToLoad) { + $userToLoadInfo = api_get_user_info($userToLoad); +} +$action = isset($_GET['action']) ? $_GET['action'] : ''; + +switch ($action) { + case 'subscribe_user': + $sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : ''; + SessionManager::subscribeUsersToSession( + $sessionId, + [$userToLoad], + SESSION_VISIBLE_READ_ONLY, + false + ); + Display::addFlash(Display::return_message(get_lang('UserAdded'))); + header("Location: ".api_get_self().'?user_id='.$userToLoad.'#session-table'); + exit; + break; + case 'unsubscribe_user': + $sessionId = isset($_GET['session_id']) ? $_GET['session_id'] : ''; + SessionManager::unsubscribe_user_from_session($sessionId, $userToLoad); + Display::addFlash(Display::return_message(get_lang('Unsubscribed'))); + header("Location: ".api_get_self().'?user_id='.$userToLoad.'#session-table'); + break; +} + +$em = Database::getManager(); + +$formSearch = new FormValidator('load', 'get', api_get_self()); +$formSearch->addHeader(get_lang('LoadDiagnosis')); +if (!empty($userInfo)) { + $users = []; + switch ($userInfo['status']) { + case DRH: + $users = UserManager::get_users_followed_by_drh( + $userId, + 0, + false, + false, + false, + null, + null, + null, + null, + 1 + ); + break; + case STUDENT_BOSS: + $users = UserManager::getUsersFollowedByStudentBoss( + $userId, + 0, + false, + false, + false, + null, + null, + null, + null, + 1 + ); + break; + } + + if (!empty($users)) { + $userList = []; + foreach ($users as $user) { + $userList[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']); + } + $formSearch->addSelect('user_id', get_lang('User'), $userList); + } +} +if ($userToLoad) { + $formSearch->setDefaults(['user_id' => $userToLoad]); +} + +$formSearch->addButtonSearch(get_lang('ShowDiagnostic'), 'save'); + +$form = new FormValidator('search', 'post', api_get_self().'?user_id='.$userToLoad.'#session-table'); +$form->addHeader(get_lang('Diagnosis')); +$form->addHidden('user_id', $userToLoad); + +/** @var ExtraFieldSavedSearch $saved */ +$search = [ + 'user' => $userToLoad, +]; + +$items = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findBy($search); +if (empty($items)) { + Display::addFlash(Display::return_message('NoData')); +} + +$defaults = []; +$tagsData = []; +if (!empty($items)) { + /** @var ExtraFieldSavedSearch $item */ + foreach ($items as $item) { + $variable = 'extra_'.$item->getField()->getVariable(); + if ($item->getField()->getFieldType() == ExtraField::FIELD_TYPE_TAG) { + $tagsData[$variable] = $item->getValue(); + } + $defaults[$variable] = $item->getValue(); + } +} + +$extraField = new ExtraField('session'); +$extraFieldValue = new ExtraFieldValue('session'); +$extraFieldValueUser = new ExtraFieldValue('user'); + +$theme = 'theme_fr'; +$lang = $defaultLangCible = api_get_interface_language(); + +if ($userToLoadInfo) { + $lang = $userToLoadInfo['language']; + $targetLanguageInfo = $extraFieldValueUser->get_values_by_handler_and_field_variable( + $userToLoad, + 'langue_cible' + ); + + if (!empty($targetLanguageInfo)) { + $defaultLangCible = $targetLanguageInfo['value']; + } + + switch ($lang) { + case 'italian': + $theme = 'theme_it'; + break; + case 'polish': + $theme = 'theme_pl'; + break; + case 'spanish': + $theme = 'theme_es'; + break; + case 'french2': + case 'french': + $theme = 'theme_fr'; + break; + case 'german2': + case 'german': + $theme = 'theme_de'; + break; + } +} + +$extraFieldUser = new ExtraField('user'); + +$userForm = new FormValidator('user_form', 'post', api_get_self()); +$jqueryExtra = ''; +$userForm->addHtml('
'); +$userForm->addHtml('
'); +$userForm->addHtml(''); +$userForm->addHtml('
'); +$userForm->addHtml('

'.get_lang('FiliereExplanation').'

'); + +$fieldsToShow = [ + 'statusocial', + 'filiere_user', + 'filiereprecision', + 'filiere_want_stage', +]; +$forceShowFields = true; +$filter = false; +$extra = $extraFieldUser->addElements( + $userForm, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields, //$forceShowFields = false + [], + [] +); + +$userForm->addHtml('
'); + +$userForm->addHtml('
'); +$userForm->addHtml(''); +$userForm->addHtml('
'); +$userForm->addHtml('

'.get_lang('DisponibilitePendantMonStageExplanation').'

'); + +$fieldsToShow = [ + 'datedebutstage', + 'datefinstage', + 'deja_sur_place', + 'poursuiteapprentissagestage', + 'heures_disponibilite_par_semaine_stage', +]; + +$extra = $extraFieldUser->addElements( + $userForm, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields, //$forceShowFields = false + [], + [] +); + +$userForm->addHtml('
'); + +$userForm->addHtml('
'); +$userForm->addHtml(''); +$userForm->addHtml('
'); +$userForm->addHtml('

'.get_lang('ObjectifsApprentissageExplanation').'

'); + +$fieldsToShow = [ + 'objectif_apprentissage', +]; + +$extra = $extraFieldUser->addElements( + $userForm, + $userToLoad, + [], + $filter, + false, + $fieldsToShow, + $fieldsToShow, + $defaults, + false, + $forceShowFields,//$forceShowFields = false + [], + [] +); + +$userForm->addHtml('
'); + +$userForm->addHtml('
'); +$userForm->addHtml(''); +$userForm->addHtml('
'); +$userForm->addHtml('

'.get_lang('MethodeTravailExplanation').'

'); + +$fieldsToShow = [ + 'methode_de_travaille', + 'accompagnement', +]; + +$extra = $extraFieldUser->addElements( + $userForm, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields, //$forceShowFields = false + [], + [] +); + +$userForm->addHtml('
'); + +if (isset($_POST) && !empty($_POST)) { + $searchChecked1 = isset($_POST['search_using_1']) ? 'checked' : ''; + $searchChecked2 = isset($_POST['search_using_2']) ? 'checked' : ''; + $searchChecked3 = isset($_POST['search_using_3']) ? 'checked' : ''; + Session::write('search_using_1', $searchChecked1); + Session::write('search_using_2', $searchChecked2); + Session::write('search_using_3', $searchChecked3); +} else { + $searchChecked1 = Session::read('search_using_1'); + $searchChecked1 = $searchChecked1 === null ? 'checked' : $searchChecked1; + + $searchChecked2 = Session::read('search_using_2'); + $searchChecked2 = $searchChecked2 === null ? 'checked' : $searchChecked2; + + $searchChecked3 = Session::read('search_using_3'); + $searchChecked3 = $searchChecked3 === null ? 'checked' : $searchChecked3; +} + +$form->addHtml('
'); +$form->addHtml(''); +$form->addHtml('
'); +$form->addHtml('

'.get_lang('DisponibiliteAvantExplanation').'

'); + +// Session fields +$showOnlyThisFields = [ + 'access_start_date', + 'access_end_date', +]; + +$extra = $extraField->addElements( + $form, + '', + [], + false, //filter + true, + $showOnlyThisFields, + $showOnlyThisFields, + $defaults, + false, //$orderDependingDefaults + true, // force + [], // $separateExtraMultipleSelect + [] +); + +$fieldsToShow = [ + 'heures_disponibilite_par_semaine', + 'moment_de_disponibilite', + //'langue_cible', +]; + +$extra = $extraFieldUser->addElements( + $form, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields //$forceShowFields = false +); + +$form->addHtml('
'); + +$form->addHtml('
'); +$form->addHtml(''); +$form->addHtml('
'); +$form->addHtml('

'.get_lang('ThemesObjectifsExplanation').'

'); + +$showOnlyThisFields = [ + 'domaine', + 'filiere', + $theme, +]; + +$extra = $extraField->addElements( + $form, + '', + [], + false, //filter + true, + $showOnlyThisFields, + $showOnlyThisFields, + $defaults, + false, //$orderDependingDefaults + true, // force + ['domaine' => 3, $theme => 5], // $separateExtraMultipleSelect + [ + 'domaine' => [ + get_lang('Domaine').' 1', + get_lang('Domaine').' 2', + get_lang('Domaine').' 3', + ], + $theme => [ + get_lang('ThemeField').' 1', + get_lang('ThemeField').' 2', + get_lang('ThemeField').' 3', + get_lang('ThemeField').' 4', + get_lang('ThemeField').' 5', + ], + ], + true +); + +// Commented because BT#15776 +$fieldsToShow = [ + 'langue_cible', +]; + +$extra = $extraFieldUser->addElements( + $form, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields //$forceShowFields = false +); + +$form->addHtml('
'); +$form->addHtml('
'); +$form->addHtml(''); +$form->addHtml('
'); +$form->addHtml('

'.get_lang('NiveauLangueExplanation').'

'); + +$showOnlyThisFields = [ + 'ecouter', + 'lire', + 'participer_a_une_conversation', + 's_exprimer_oralement_en_continu', + 'ecrire', +]; + +$extra = $extraField->addElements( + $form, + '', + [], + false, //filter + true, + $showOnlyThisFields, + $showOnlyThisFields, + $defaults, + false, //$orderDependingDefaults + 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->addHtml('
'); + +// Enviroment +$userForm->addHtml('
'); +$userForm->addHtml( + ''); +$userForm->addHtml('
'); +$userForm->addHtml('

'.get_lang('MonEnvironnementDeTravailExplanation').'

'); + +$fieldsToShow = [ + 'outil_de_travail_ordinateur', + 'outil_de_travail_ordinateur_so', + 'outil_de_travail_tablette', + 'outil_de_travail_tablette_so', + 'outil_de_travail_smartphone', + 'outil_de_travail_smartphone_so', +]; + +$userForm->addLabel(null, get_lang('MonEnvironnementDeTravailExplanationIntro1')); + +$extra = $extraFieldUser->addElements( + $userForm, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields +); + +$userForm->addLabel(null, get_lang('MonEnvironnementDeTravailExplanationIntro2')); + +$jqueryExtra .= $extra['jquery_ready_content']; + +$fieldsToShow = [ + 'browser_platforme', + 'browser_platforme_autre', + 'browser_platforme_version', +]; +$extra = $extraFieldUser->addElements( + $userForm, + $userToLoad, + [], + $filter, + true, + $fieldsToShow, + $fieldsToShow, + [], + false, + $forceShowFields, //$forceShowFields = false + [], + [] +); + +$jqueryExtra .= $extra['jquery_ready_content']; + +$userForm->addHtml('

'.get_lang('MonEnvironnementDeTravailRenvoiFAQ').'

'); + +$userForm->addButtonSave(get_lang('Save'), 'submit_partial[collapseEight]'); +$userForm->addHtml('
'); + +$form->addButtonSave(get_lang('SaveDiagnosticChanges'), 'save'); +$form->addButtonSearch(get_lang('SearchSessions'), 'search'); + +$extraFieldsToFilter = $extraField->get_all(['variable = ?' => 'temps_de_travail']); +$extraFieldToSearch = []; +if (!empty($extraFieldsToFilter)) { + foreach ($extraFieldsToFilter as $filter) { + $extraFieldToSearch[] = $filter['id']; + } +} +$extraFieldListToString = implode(',', $extraFieldToSearch); + +$result = SessionManager::getGridColumns('simple', $extraFieldsToFilter); +$columns = $result['columns']; +$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( + is_object($domaine1) && !empty($domaine1->getValue()) ? $domaine1->getValue() : [], + is_object($domaine3) && !empty($domaine3->getValue()) ? $domaine3->getValue() : [], + is_object($domaine2) && !empty($domaine2->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()) { + $formSearchParams = $formSearch->getSubmitValues(); +} + +// Search filter +$filters = []; +foreach ($defaults as $key => $value) { + if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') { + continue; + } + if (!empty($value)) { + $filters[$key] = $value; + } +} + +$filterToSend = []; +if (!empty($filters)) { + $filterToSend = ['groupOp' => 'AND']; + if ($filters) { + $count = 1; + $countExtraField = 1; + foreach ($result['column_model'] as $column) { + if ($count > 5) { + if (isset($filters[$column['name']])) { + $defaultValues['jqg'.$countExtraField] = $filters[$column['name']]; + /*switch ($column['name']) { + case 'extra_theme_it': + case 'extra_theme_de': + case 'extra_theme_es': + case 'extra_theme_fr': + break; + case 'extra_domaine': + break; + case '': + break; + }*/ + $filterToSend['rules'][] = ['field' => $column['name'], 'op' => 'cn', 'data' => $filters[$column['name']]]; + } + $countExtraField++; + } + $count++; + } + } +} + +$params = []; +if ($form->validate()) { + $params = $form->getSubmitValues(); + $save = false; + $search = false; + if (isset($params['search'])) { + unset($params['search']); + $search = true; + } + + if (isset($params['save'])) { + $save = true; + unset($params['save']); + } + + $form->setDefaults($params); + + $filters = []; + + // Search + if ($search) { + // Parse params. + foreach ($params as $key => $value) { + if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') { + continue; + } + if (!empty($value)) { + $filters[$key] = $value; + } + } + + $filterToSend = []; + if (!empty($filters)) { + $filterToSend = ['groupOp' => 'AND']; + if ($filters) { + $count = 1; + $countExtraField = 1; + foreach ($result['column_model'] as $column) { + if ($count > 5) { + if (isset($filters[$column['name']])) { + $defaultValues['jqg'.$countExtraField] = $filters[$column['name']]; + $filterToSend['rules'][] = [ + 'field' => $column['name'], + 'op' => 'cn', + 'data' => $filters[$column['name']], + ]; + } + $countExtraField++; + } + $count++; + } + } + } + } + + if ($save) { + $userData = $params; + // Update extra_heures_disponibilite_par_semaine + $extraFieldValue = new ExtraFieldValue('user'); + $userDataToSave = [ + 'item_id' => $userToLoad, + 'extra_heures_disponibilite_par_semaine' => isset($userData['extra_heures_disponibilite_par_semaine']) ? $userData['extra_heures_disponibilite_par_semaine'] : '', + 'extra_langue_cible' => isset($userData['extra_langue_cible']) ? $userData['extra_langue_cible'] : '', + ]; + $extraFieldValue->saveFieldValues( + $userDataToSave, + true, + false, + ['heures_disponibilite_par_semaine', 'langue_cible'], + [], + true + ); + + // Save session search + /** @var \Chamilo\UserBundle\Entity\User $user */ + $user = $em->getRepository('ChamiloUserBundle:User')->find($userToLoad); + $extraFieldValueSession = new ExtraFieldValue('session'); + + $sessionFields = [ + 'extra_access_start_date', + 'extra_access_end_date', + 'extra_filiere', + 'extra_domaine', + 'extra_domaine[0]', + 'extra_domaine[1]', + 'extra_domaine[3]', + 'extra_temps_de_travail', + //'extra_competenceniveau', + 'extra_'.$theme, + 'extra_ecouter', + 'extra_lire', + 'extra_participer_a_une_conversation', + 'extra_s_exprimer_oralement_en_continu', + 'extra_ecrire', + ]; + + foreach ($userData as $key => $value) { + $found = strpos($key, '__persist__'); + if ($found === false) { + continue; + } + } + + if (isset($userData['extra_filiere_want_stage']) && + isset($userData['extra_filiere_want_stage']['extra_filiere_want_stage']) + ) { + $wantStage = $userData['extra_filiere_want_stage']['extra_filiere_want_stage']; + + if ($wantStage === 'yes') { + if (isset($userData['extra_filiere_user'])) { + $userData['extra_filiere'] = []; + $userData['extra_filiere']['extra_filiere'] = $userData['extra_filiere_user']['extra_filiere_user']; + } + } + } + + // save in ExtraFieldSavedSearch. + foreach ($userData as $key => $value) { + if (substr($key, 0, 6) != 'extra_' && substr($key, 0, 7) != '_extra_') { + continue; + } + + if (!in_array($key, $sessionFields)) { + continue; + } + + $field_variable = substr($key, 6); + $extraFieldInfo = $extraFieldValueSession + ->getExtraField() + ->get_handler_field_info_by_field_variable($field_variable); + + if (!$extraFieldInfo) { + continue; + } + + $extraFieldObj = $em->getRepository('ChamiloCoreBundle:ExtraField')->find($extraFieldInfo['id']); + + $search = [ + 'field' => $extraFieldObj, + 'user' => $user, + ]; + + /** @var ExtraFieldSavedSearch $saved */ + $saved = $em->getRepository('ChamiloCoreBundle:ExtraFieldSavedSearch')->findOneBy($search); + + if ($saved) { + $saved + ->setField($extraFieldObj) + ->setUser($user) + ->setValue($value) + ; + $em->merge($saved); + } else { + $saved = new ExtraFieldSavedSearch(); + $saved + ->setField($extraFieldObj) + ->setUser($user) + ->setValue($value) + ; + $em->persist($saved); + } + $em->flush(); + } + Display::addFlash(Display::return_message(get_lang('Saved'), 'success')); + header('Location: '.api_get_self().'?user_id='.$userToLoad); + exit; + } +} + +$view = $form->returnForm(); + +$jsTag = ''; +if (!empty($tagsData)) { + foreach ($tagsData as $extraField => $tags) { + foreach ($tags as $tag) { + $tag = api_htmlentities($tag); + } + } +} + +$htmlHeadXtra[] = ''; + +if (!empty($filterToSend)) { + if (isset($params['search_using_1'])) { + // Get start and end date from ExtraFieldSavedSearch + $defaultExtraStartDate = isset($defaults['extra_access_start_date']) ? $defaults['extra_access_start_date'] : ''; + $defaultExtraEndDate = isset($defaults['extra_access_end_date']) ? $defaults['extra_access_end_date'] : ''; + + $userStartDate = isset($params['extra_access_start_date']) ? $params['extra_access_start_date'] : $defaultExtraStartDate; + $userEndDate = isset($params['extra_access_end_date']) ? $params['extra_access_end_date'] : $defaultExtraEndDate; + + // Minus 3 days + $date = new DateTime($userStartDate); + $date->sub(new DateInterval('P3D')); + $userStartDateMinus = $date->format('Y-m-d h:i:s'); + + // Plus 2 days + $date = new DateTime($userEndDate); + $date->add(new DateInterval('P2D')); + $userEndDatePlus = $date->format('Y-m-d h:i:s'); + + // Ofaj fix + $userStartDateMinus = api_get_utc_datetime(substr($userStartDateMinus, 0, 11).'00:00:00'); + $userEndDatePlus = api_get_utc_datetime(substr($userEndDatePlus, 0, 11).'23:59:59'); + + // Special OFAJ date logic + if ($userEndDate == '') { + $sql = " AND ( + (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 = '' OR s.access_start_date IS NULL) AND (s.access_end_date = '' OR s.access_end_date IS NULL)) + )"; + } + } + + $deleteFiliere = false; + $extraFieldOptions = new ExtraFieldOption('session'); + $extraFieldSession = new ExtraField('session'); + + // Special filters + // see https://task.beeznest.com/issues/10849#change-81902 + foreach ($filterToSend['rules'] as &$filterItem) { + if (isset($filterItem['field'])) { + switch ($filterItem['field']) { + case 'extra_filiere': + case 'extra_domaine': + case 'extra_theme_it': + case 'extra_theme_fr': + case 'extra_theme_de': + case 'extra_theme_pl': + if (!isset($params['search_using_2'])) { + $filterItem = null; + } + break; + } + + switch ($filterItem['field']) { + case 'extra_ecouter': + case 'extra_lire': + case 'extra_participer_a_une_conversation': + case 'extra_s_exprimer_oralement_en_continu': + case 'extra_ecrire': + if (!isset($params['search_using_3'])) { + $filterItem = null; + break; + } + $selectedValue = ''; + $fieldExtra = str_replace('extra_', '', $filterItem['field']); + $extraFieldSessionData = $extraFieldSession->get_handler_field_info_by_field_variable($fieldExtra); + + if (is_array($filterItem['data'])) { + $myOrder = []; + foreach ($filterItem['data'] as $option) { + foreach ($extraFieldSessionData['options'] as $optionValue) { + if ($option == $optionValue['option_value']) { + $myOrder[$optionValue['option_order']] = $optionValue['option_value']; + } + } + } + + if (!empty($myOrder)) { + // Taking last from list + $selectedValue = end($myOrder); + } + } else { + $selectedValue = $filterItem['data']; + } + + $newOptions = array_column( + $extraFieldSessionData['options'], + 'option_value', + 'option_order' + ); + + $searchOptions = []; + for ($i = 1; $i < count($newOptions); $i++) { + if ($selectedValue == $newOptions[$i]) { + if (isset($newOptions[$i - 1])) { + $searchOptions[] = $newOptions[$i - 1]; + } + if (isset($newOptions[$i])) { + $searchOptions[] = $newOptions[$i]; + } + if (isset($newOptions[$i + 1])) { + $searchOptions[] = $newOptions[$i + 1]; + } + break; + } + } + + $filterItem['data'] = $searchOptions; + break; + case 'extra_domaine': + if (!isset($params['search_using_2'])) { + break; + } + // Special condition see: + // https://task.beeznest.com/issues/10849#note-218 + // Remove filiere + $list = [ + 'vie-quotidienne', + //'competente-dans-mon-domaine-de-specialite', + 'arrivee-sur-mon-poste-de-travail', + ]; + + $deleteFiliere = false; + if (is_array($filterItem['data'])) { + $myOrder = []; + foreach ($filterItem['data'] as $option) { + if (in_array($option, $list)) { + $deleteFiliere = true; + break; + } + } + } else { + if (in_array($filterItem['data'], $list)) { + $deleteFiliere = true; + } + } + break; + } + } + + if ($deleteFiliere) { + foreach ($filterToSend['rules'] as &$filterItem) { + if (isset($filterItem['field']) && $filterItem['field'] == 'extra_filiere') { + $filterItem = []; + } + } + } + } + + // Language + $lang = isset($params['extra_langue_cible']) ? $params['extra_langue_cible'] : $defaultLangCible; + $lang = strtolower($lang); + + if (isset($params['search_using_1'])) { + if ($userStartDate && !empty($userStartDate)) { + $filterToSend['custom_dates'] = $sql; + } + } + + $filterToSend = json_encode($filterToSend); + $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&_search=true&load_extra_field='. + $extraFieldListToString.'&_force_search=true&rows=20&page=1&sidx=&sord=asc&filters2='.$filterToSend; + if (isset($params['search_using_2'])) { + $url .= '&lang='.$lang; + } +} else { + $url = api_get_path(WEB_AJAX_PATH).'model.ajax.php?a=get_sessions&_search=true&load_extra_field='. + $extraFieldListToString.'&_force_search=true&rows=20&page=1&sidx=&sord=asc'; +} + +// Autowidth +$extra_params['autowidth'] = 'true'; + +// height auto +$extra_params['height'] = 'auto'; +$extra_params['postData'] = [ + 'filters' => [ + 'groupOp' => 'AND', + 'rules' => $result['rules'], + ], +]; + +$sessionByUserList = SessionManager::get_sessions_by_user($userToLoad, true, true); + +$sessionUserList = []; +if (!empty($sessionByUserList)) { + foreach ($sessionByUserList as $sessionByUser) { + $sessionUserList[] = (string) $sessionByUser['session_id']; + } +} +$action_links = 'function action_formatter(cellvalue, options, rowObject) { + 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 { + return \''.Display::return_icon('delete.png', addslashes(get_lang('Delete')), '', ICON_SIZE_SMALL).''.'\'; + } +}'; + +$htmlHeadXtra[] = api_get_jqgrid_js(); + +$griJs = Display::grid_js( + 'sessions', + $url, + $columns, + $column_model, + $extra_params, + [], + $action_links, + true +); + +$grid = '
'; +$grid .= Display::grid_html('sessions'); +$grid .= '
'; + +$htmlHeadXtra[] = ''; + +$htmlHeadXtra[] = ''; + +$tpl = new Template(get_lang('Diagnosis')); + +if (empty($items)) { + $view = ''; + $grid = ''; + $griJs = ''; +} +$tpl->assign('form', $view); +$tpl->assign('form_search', $formSearch->returnForm().$userForm->returnForm()); + +$table = new HTML_Table(['class' => 'data_table']); +$column = 0; +$row = 0; + +$total = '0'; +$sumHours = '0'; +$numHours = '0'; + +$field = 'heures_disponibilite_par_semaine'; +$extraField = new ExtraFieldValue('user'); +$data = $extraField->get_values_by_handler_and_field_variable($userToLoad, $field); + +$availableHoursPerWeek = 0; + +function dateDiffInWeeks($date1, $date2) +{ + if ($date1 > $date2) { + return dateDiffInWeeks($date2, $date1); + } + $first = new \DateTime($date1); + $second = new \DateTime($date2); + + return floor($first->diff($second)->days / 7); +} + +if ($data) { + $availableHoursPerWeek = $data['value']; + $numberWeeks = 0; + if ($form->validate()) { + $formData = $form->getSubmitValues(); + + if (isset($formData['extra_access_start_date']) && isset($formData['extra_access_end_date'])) { + $startDate = $formData['extra_access_start_date']; + $endDate = $formData['extra_access_end_date']; + $numberWeeks = dateDiffInWeeks($startDate, $endDate); + } + } else { + if ($defaults) { + if (isset($defaults['extra_access_start_date']) && isset($defaults['extra_access_end_date'])) { + $startDate = $defaults['extra_access_start_date']; + $endDate = $defaults['extra_access_end_date']; + $numberWeeks = dateDiffInWeeks($startDate, $endDate); + } + } + } + + $total = $numberWeeks * $availableHoursPerWeek; + $sessions = SessionManager::getSessionsFollowedByUser($userToLoad); + + if ($sessions) { + $sessionFieldValue = new ExtraFieldValue('session'); + + foreach ($sessions as $session) { + $sessionId = $session['id']; + $data = $sessionFieldValue->get_values_by_handler_and_field_variable( + $sessionId, + 'temps_de_travail' + ); + if ($data) { + $sumHours += $data['value']; + } + } + } +} + +$numHours = $total - $sumHours; +$headers = [ + get_lang('TotalAvailableHours') => $total, + get_lang('SumHoursSessionsSubscribed') => $sumHours, + get_lang('CountHoursAvailable') => $numHours, +]; +foreach ($headers as $header => $value) { + $table->setCellContents($row, 0, $header); + $table->updateCellAttributes($row, 0, 'width="250px"'); + $table->setCellContents($row, 1, $value); + $row++; +} + +$button = ''; +if ($userToLoad) { + $button = Display::url( + get_lang('OfajEndOfLearnPath'), + api_get_path(WEB_CODE_PATH).'messages/new_message.php?prefill=ofaj&send_to_user='.$userToLoad, + ['class' => 'btn btn-default'] + ); + $button .= '

'; +} + +$userReportButton = Display::url( + get_lang('DiagnosticValidateLearningPath'), + api_get_path(WEB_CODE_PATH).'mySpace/myStudents.php?student='.$userToLoad, + ['class' => 'btn btn-primary'] +); +$tpl->assign('grid', $grid.$button.$table->toHtml().$userReportButton); +$tpl->assign('grid_js', $griJs); + +$content = $tpl->fetch('default/user_portal/search_extra_field.tpl'); +$tpl->assign('content', $content); +$tpl->display_one_col_template();