Loading module/Oscar/config/administration-parameters.schema.json +20 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,26 @@ "type": "boolean", "default": true }, { "key": "activity_form_person_roles", "label": "Roles personnes visibles dans la fiche", "description": "Liste des roles personnes disponibles sur la fiche activite.", "category": "Activites de recherche", "type": "list", "multiple": true, "options_source": "activity_person_roles", "default": [] }, { "key": "activity_form_organization_roles", "label": "Roles organisations visibles dans la fiche", "description": "Liste des roles organisations disponibles sur la fiche activite.", "category": "Activites de recherche", "type": "list", "multiple": true, "options_source": "activity_organization_roles", "default": [] }, { "key": "spents_account_filter", "label": "Comptes exclus (depenses)", Loading module/Oscar/src/Oscar/Controller/AdministrationController.php +138 −4 Original line number Diff line number Diff line Loading @@ -728,14 +728,13 @@ class AdministrationController extends AbstractOscarController implements throw new OscarException("Schema des parametres invalide (parameters)"); } $themes = $this->getOscarConfigurationService()->getConfiguration('themes'); foreach ($parameters as &$parameter) { if (!is_array($parameter)) { continue; } if (($parameter['options_source'] ?? null) === 'themes') { $parameter['options'] = array_values($themes); $optionsSource = $parameter['options_source'] ?? null; if ($optionsSource) { $parameter['options'] = $this->getAdministrationParameterOptionsFromSource((string)$optionsSource); } } Loading @@ -743,9 +742,28 @@ class AdministrationController extends AbstractOscarController implements return $decoded; } private function getAdministrationParameterOptionsFromSource(string $source): array { switch ($source) { case 'themes': return array_values($this->getOscarConfigurationService()->getConfiguration('themes')); case 'activity_person_roles': return $this->getOscarUserContextService()->getAvailabledRolesPersonActivity(); case 'activity_organization_roles': return $this->getOscarUserContextService()->getAvailabledRolesOrganizationActivity(); default: return []; } } private function getAdministrationParametersCurrentValues(): array { $organizationRequired = $this->getOscarConfigurationService()->getOrganizationRequired(); $personRoles = $this->getOscarConfigurationService()->getActivityFormPersonRoles(); $organizationRoles = $this->getOscarConfigurationService()->getActivityFormOrganizationRoles(); return [ OscarConfigurationService::allow_numerotation_custom => $this->getOscarConfigurationService()->getNumerotationEditable(), Loading @@ -762,9 +780,24 @@ class AdministrationController extends AbstractOscarController implements 'timesheet_excel' => $this->getOscarConfigurationService()->getTimesheetExcel(), 'organization_require_type' => boolval($organizationRequired['type'] ?? false), 'organization_require_country' => boolval($organizationRequired['country'] ?? false), OscarConfigurationService::activity_form_person_roles => $this->extractRoleIdsFromConfiguration($personRoles), OscarConfigurationService::activity_form_organization_roles => $this->extractRoleIdsFromConfiguration($organizationRoles), ]; } private function extractRoleIdsFromConfiguration($value): array { if (!is_array($value)) { return []; } if (array_key_exists('roleids', $value) && is_array($value['roleids'])) { return array_values($value['roleids']); } return array_values($value); } private function applyAdministrationParametersValues($inputValues): void { if (!is_array($inputValues)) { Loading Loading @@ -821,6 +854,9 @@ class AdministrationController extends AbstractOscarController implements case 'select': return (string)$value; case 'list': return $this->castAdministrationParameterListValue($definition, $value); case 'text': case 'string': default: Loading @@ -828,6 +864,84 @@ class AdministrationController extends AbstractOscarController implements } } private function castAdministrationParameterListValue(array $definition, $value) { $multiple = boolval($definition['multiple'] ?? false); if ($multiple) { if (is_array($value) && array_key_exists('roleids', $value) && is_array($value['roleids'])) { $value = $value['roleids']; } $items = is_array($value) ? $value : [$value]; $out = []; foreach ($items as $item) { $itemResolved = $this->resolveAdministrationParameterListOptionValue($definition, $item); if ($itemResolved !== null) { $out[] = $itemResolved; } } return array_values(array_unique($out, SORT_REGULAR)); } if (is_array($value)) { if (array_key_exists('value', $value)) { $value = $value['value']; } else { $value = reset($value); } } return $this->resolveAdministrationParameterListOptionValue($definition, $value); } private function resolveAdministrationParameterListOptionValue(array $definition, $rawValue) { if ($rawValue === null || $rawValue === '') { return boolval($definition['multiple'] ?? false) ? null : ''; } $allowedValues = $this->getAdministrationParameterAllowedListValues($definition); if (count($allowedValues) === 0) { return $rawValue; } foreach ($allowedValues as $allowedValue) { if ((string)$allowedValue === (string)$rawValue) { return $allowedValue; } } return null; } private function getAdministrationParameterAllowedListValues(array $definition): array { $options = $definition['options'] ?? []; if (!is_array($options)) { return []; } $isList = array_keys($options) === range(0, count($options) - 1); $allowedValues = []; foreach ($options as $key => $option) { if (is_array($option) && array_key_exists('value', $option)) { $allowedValues[] = $option['value']; continue; } if (!$isList && !is_array($option) && !is_object($option)) { $allowedValues[] = $key; continue; } if (!is_array($option) && !is_object($option)) { $allowedValues[] = $option; } } return $allowedValues; } private function saveAdministrationParameterValue(string $key, $value): void { switch ($key) { Loading Loading @@ -886,6 +1000,26 @@ class AdministrationController extends AbstractOscarController implements case 'organization_require_country': $this->getOscarConfigurationService()->saveEditableConfKey('organization_require_country', boolval($value)); return; case OscarConfigurationService::activity_form_person_roles: $this->getOscarConfigurationService()->saveEditableConfKey( OscarConfigurationService::activity_form_person_roles, [ 'roleids' => is_array($value) ? array_values($value) : [], 'min' => 1, ] ); return; case OscarConfigurationService::activity_form_organization_roles: $this->getOscarConfigurationService()->saveEditableConfKey( OscarConfigurationService::activity_form_organization_roles, [ 'roleids' => is_array($value) ? array_values($value) : [], 'min' => 1, ] ); return; } } Loading Loading
module/Oscar/config/administration-parameters.schema.json +20 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,26 @@ "type": "boolean", "default": true }, { "key": "activity_form_person_roles", "label": "Roles personnes visibles dans la fiche", "description": "Liste des roles personnes disponibles sur la fiche activite.", "category": "Activites de recherche", "type": "list", "multiple": true, "options_source": "activity_person_roles", "default": [] }, { "key": "activity_form_organization_roles", "label": "Roles organisations visibles dans la fiche", "description": "Liste des roles organisations disponibles sur la fiche activite.", "category": "Activites de recherche", "type": "list", "multiple": true, "options_source": "activity_organization_roles", "default": [] }, { "key": "spents_account_filter", "label": "Comptes exclus (depenses)", Loading
module/Oscar/src/Oscar/Controller/AdministrationController.php +138 −4 Original line number Diff line number Diff line Loading @@ -728,14 +728,13 @@ class AdministrationController extends AbstractOscarController implements throw new OscarException("Schema des parametres invalide (parameters)"); } $themes = $this->getOscarConfigurationService()->getConfiguration('themes'); foreach ($parameters as &$parameter) { if (!is_array($parameter)) { continue; } if (($parameter['options_source'] ?? null) === 'themes') { $parameter['options'] = array_values($themes); $optionsSource = $parameter['options_source'] ?? null; if ($optionsSource) { $parameter['options'] = $this->getAdministrationParameterOptionsFromSource((string)$optionsSource); } } Loading @@ -743,9 +742,28 @@ class AdministrationController extends AbstractOscarController implements return $decoded; } private function getAdministrationParameterOptionsFromSource(string $source): array { switch ($source) { case 'themes': return array_values($this->getOscarConfigurationService()->getConfiguration('themes')); case 'activity_person_roles': return $this->getOscarUserContextService()->getAvailabledRolesPersonActivity(); case 'activity_organization_roles': return $this->getOscarUserContextService()->getAvailabledRolesOrganizationActivity(); default: return []; } } private function getAdministrationParametersCurrentValues(): array { $organizationRequired = $this->getOscarConfigurationService()->getOrganizationRequired(); $personRoles = $this->getOscarConfigurationService()->getActivityFormPersonRoles(); $organizationRoles = $this->getOscarConfigurationService()->getActivityFormOrganizationRoles(); return [ OscarConfigurationService::allow_numerotation_custom => $this->getOscarConfigurationService()->getNumerotationEditable(), Loading @@ -762,9 +780,24 @@ class AdministrationController extends AbstractOscarController implements 'timesheet_excel' => $this->getOscarConfigurationService()->getTimesheetExcel(), 'organization_require_type' => boolval($organizationRequired['type'] ?? false), 'organization_require_country' => boolval($organizationRequired['country'] ?? false), OscarConfigurationService::activity_form_person_roles => $this->extractRoleIdsFromConfiguration($personRoles), OscarConfigurationService::activity_form_organization_roles => $this->extractRoleIdsFromConfiguration($organizationRoles), ]; } private function extractRoleIdsFromConfiguration($value): array { if (!is_array($value)) { return []; } if (array_key_exists('roleids', $value) && is_array($value['roleids'])) { return array_values($value['roleids']); } return array_values($value); } private function applyAdministrationParametersValues($inputValues): void { if (!is_array($inputValues)) { Loading Loading @@ -821,6 +854,9 @@ class AdministrationController extends AbstractOscarController implements case 'select': return (string)$value; case 'list': return $this->castAdministrationParameterListValue($definition, $value); case 'text': case 'string': default: Loading @@ -828,6 +864,84 @@ class AdministrationController extends AbstractOscarController implements } } private function castAdministrationParameterListValue(array $definition, $value) { $multiple = boolval($definition['multiple'] ?? false); if ($multiple) { if (is_array($value) && array_key_exists('roleids', $value) && is_array($value['roleids'])) { $value = $value['roleids']; } $items = is_array($value) ? $value : [$value]; $out = []; foreach ($items as $item) { $itemResolved = $this->resolveAdministrationParameterListOptionValue($definition, $item); if ($itemResolved !== null) { $out[] = $itemResolved; } } return array_values(array_unique($out, SORT_REGULAR)); } if (is_array($value)) { if (array_key_exists('value', $value)) { $value = $value['value']; } else { $value = reset($value); } } return $this->resolveAdministrationParameterListOptionValue($definition, $value); } private function resolveAdministrationParameterListOptionValue(array $definition, $rawValue) { if ($rawValue === null || $rawValue === '') { return boolval($definition['multiple'] ?? false) ? null : ''; } $allowedValues = $this->getAdministrationParameterAllowedListValues($definition); if (count($allowedValues) === 0) { return $rawValue; } foreach ($allowedValues as $allowedValue) { if ((string)$allowedValue === (string)$rawValue) { return $allowedValue; } } return null; } private function getAdministrationParameterAllowedListValues(array $definition): array { $options = $definition['options'] ?? []; if (!is_array($options)) { return []; } $isList = array_keys($options) === range(0, count($options) - 1); $allowedValues = []; foreach ($options as $key => $option) { if (is_array($option) && array_key_exists('value', $option)) { $allowedValues[] = $option['value']; continue; } if (!$isList && !is_array($option) && !is_object($option)) { $allowedValues[] = $key; continue; } if (!is_array($option) && !is_object($option)) { $allowedValues[] = $option; } } return $allowedValues; } private function saveAdministrationParameterValue(string $key, $value): void { switch ($key) { Loading Loading @@ -886,6 +1000,26 @@ class AdministrationController extends AbstractOscarController implements case 'organization_require_country': $this->getOscarConfigurationService()->saveEditableConfKey('organization_require_country', boolval($value)); return; case OscarConfigurationService::activity_form_person_roles: $this->getOscarConfigurationService()->saveEditableConfKey( OscarConfigurationService::activity_form_person_roles, [ 'roleids' => is_array($value) ? array_values($value) : [], 'min' => 1, ] ); return; case OscarConfigurationService::activity_form_organization_roles: $this->getOscarConfigurationService()->saveEditableConfKey( OscarConfigurationService::activity_form_organization_roles, [ 'roleids' => is_array($value) ? array_values($value) : [], 'min' => 1, ] ); return; } } Loading