wiki->services->get(FormManager::class); $aclService = $this->wiki->services->get(AclService::class); $dataList = []; $columnsInfo = []; $sanitizedParams = []; $optionsIfDisplayvaluesinsteadofkeys = []; if (count($fiches)>0) { $formId = $fiches[array_key_first($fiches)]['id_typeannonce'] ?? null; $form = $formManager->getOne($formId); if (!empty($form)) { $fields = $form['prepared']; /* Parameters */ $columnTitlesNames = $param['columntitles'] ?? null; $columnTitlesNames = array_filter( array_map('trim', explode(',', trim($columnTitlesNames))), function ($name) { return !empty($name); } ); $columnFieldsIdsRaw = $param['columnfieldsids'] ?? null; $columnFieldsIdsRaw = array_filter( array_map('trim', explode(',', trim($columnFieldsIdsRaw))), function ($id) { return !empty($id); } ); $checkboxFieldsInColumns = $param['checkboxfieldsincolumns'] ?? null; $checkboxFieldsInColumns = !in_array($checkboxFieldsInColumns, ["0",0,false,"false","non"], true); $sumFieldsIds = $param['sumfieldsids'] ?? null; $sumFieldsIds = array_filter( array_map('trim', explode(',', trim($sumFieldsIds))), function ($id) { return !empty($id); } ); foreach(['displayadmincol','displaycreationdate','displaylastchangedate','displayowner'] as $paramName){ $paramValue = (!empty($param[$paramName]) && in_array($param[$paramName], ['yes','onlyadmins'], true)) ? $param[$paramName] : false; switch ($paramValue) { case 'onlyadmins': $paramValue = $this->wiki->UserIsAdmin(); break; case 'yes': $paramValue = true; break; case false: default: $paramValue = false; break; } $sanitizedParams[$paramName] = $paramValue; } $sanitizedParams['displayvaluesinsteadofkeys'] = !isset($param['displayvaluesinsteadofkeys']) ? false : filter_var($param['displayvaluesinsteadofkeys'],FILTER_VALIDATE_BOOLEAN); /* columnsInfo */ if (!function_exists('tableauGetFieldsCols')) { function tableauGetFieldsCols($field, $checkboxFieldsInColumns): array { $propertyName = $field->getPropertyName(); if (empty($propertyName)) { return []; } $fieldLabel = $field->getLabel(); if (!($field instanceof CheckboxField && $checkboxFieldsInColumns) && !($field instanceof MapField)) { return [['propertyName' => $propertyName, 'title' => $fieldLabel, 'key' => null, 'mapFieldId' => null]]; } elseif ($field instanceof MapField) { $cols = []; $cols[] = [ 'propertyName' => $propertyName, 'title' => _t('BAZ_LATITUDE'), 'key' => null, 'mapFieldId' => $field->getLatitudeField()]; $cols[] = [ 'propertyName' => $propertyName, 'title' => _t('BAZ_LONGITUDE'), 'key' => null, 'mapFieldId' => $field->getLongitudeField()]; return $cols; } else { $options = $field->getOptions(); if (empty($options)) { return []; } else { $cols = []; foreach ($options as $key => $optionName) { $cols[] = [ 'propertyName' => $propertyName, 'title' => "$fieldLabel - $optionName", 'key' => $key, 'mapFieldId' => null]; } return $cols; } } } } /* options when displaying values */ if (!function_exists('tableauGetOptionsForField')) { function tableauGetOptionsForField($field,&$optionsIfDisplayvaluesinsteadofkeys,$sanitizedParams){ $propertyName = $field->getPropertyName(); if ($sanitizedParams['displayvaluesinsteadofkeys'] && $field instanceof EnumField && !isset($optionsIfDisplayvaluesinsteadofkeys[$propertyName])){ $optionsIfDisplayvaluesinsteadofkeys[$propertyName] = $field->getOptions(); } } } if (empty($columnFieldsIdsRaw)) { // if no title, display all fields foreach ($fields as $field) { foreach (tableauGetFieldsCols($field, $checkboxFieldsInColumns) as $col) { $columnsInfo[] = $col; } tableauGetOptionsForField($field,$optionsIfDisplayvaluesinsteadofkeys,$sanitizedParams); } } else { foreach ($columnFieldsIdsRaw as $fieldId) { $field = $formManager->findFieldFromNameOrPropertyName($fieldId, $formId); if (!empty($field)) { foreach (tableauGetFieldsCols($field, $checkboxFieldsInColumns) as $col) { $columnsInfo[] = $col; } tableauGetOptionsForField($field,$optionsIfDisplayvaluesinsteadofkeys,$sanitizedParams); } } } /* append extra cols */ foreach([ 'displaycreationdate' => [ 'fieldName'=>'date_creation_fiche', 'translationKey'=>'BAZ_DATE_CREATION' ], 'displaylastchangedate' => [ 'fieldName'=>'date_maj_fiche', 'translationKey'=>'BAZ_DATE_MAJ' ], 'displayowner' => [ 'fieldName'=>'owner', 'translationKey'=>'TEMPLATE_OWNER' ], ] as $paramName => $data){ if (isset($sanitizedParams[$paramName]) && $sanitizedParams[$paramName]){ $columnsInfo[] = [ 'propertyName' => $data['fieldName'], 'title' => _t($data['translationKey']), 'key' => null, 'mapFieldId' => null ]; } } /* columnTitles custom */ if (!empty($columnTitlesNames)) { foreach ($columnTitlesNames as $key => $value) { if (isset($columnsInfo[$key]) && !empty($value)) { $columnsInfo[$key]['title'] = $value; } } } /* sanitize emails */ if (!$this->wiki->UserIsAdmin()){ foreach($fiches as $index => $fiche){ $formId = $fiche['id_typeannonce']; if (strval($formId) != strval(intval($formId))){ unset($fiches[$index]); } else { $form = $formManager->getOne($formId); if (empty($form['prepared'])){ unset($fiches[$index]); } else { foreach($form['prepared'] as $field){ if ((empty(trim($field->renderStaticIfPermitted($fiche))))){ $fiches[$index][$field->getPropertyName()] = ""; } else if ($field instanceof EmailField){ $fiches[$index][$field->getPropertyName()] = "***@***.***"; } } } } } } } else { echo $this->render('@templates/alert-message.twig', [ 'type' => 'danger', 'message' => _t('BAZ_NO_FORMS_FOUND'), ]); } } echo $this->render('@bazar/tableau.twig', [ 'infoRes' => $info_res ?? null, 'param' => $param, 'columnsInfo' => $columnsInfo, 'entries' => $fiches, 'sumFieldsIds' => $sumFieldsIds ?? null, 'displayadmincol' => $sanitizedParams['displayadmincol'] ?? null, 'displayvaluesinsteadofkeys' => $sanitizedParams['displayvaluesinsteadofkeys'], 'optionsIfDisplayvaluesinsteadofkeys' => $optionsIfDisplayvaluesinsteadofkeys, 'aclService' => $aclService, 'wiki' => $this->wiki, ]);