Commit 8f1bcd01 authored by Bertrand Gauthier's avatar Bertrand Gauthier Committed by Jean-Philippe Metivier
Browse files

Financement : la visibilité des origines non visibles est soumise à un privilège

parent 08d22d88
Loading
Loading
Loading
Loading
+34 −0
Changes for module/Application/config/others/financement.config.php: 34 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Application;

use Application\Provider\Privilege\FinancementPrivileges;
use Application\View\Helper\FinancementFormatterHelperFactory;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider;

return [
    'bjyauthorize'    => [
        'resource_providers' => [
            'BjyAuthorize\Provider\Resource\Config' => [
                'OrigineFinancement' => [],
            ],
        ],
        'rule_providers'     => [
            PrivilegeRuleProvider::class => [
                'allow' => [
                    [
                        'privileges' => [
                            FinancementPrivileges::FINANCEMENT_VOIR_ORIGINE_NON_VISIBLE,
                        ],
                        'resources'  => ['OrigineFinancement'],
                    ],
                ],
            ],
        ],
    ],
    'view_helpers' => [
        'factories' => [
            'financementFormatter' => FinancementFormatterHelperFactory::class,
        ],
    ],
];
+7 −2
Changes for module/Application/src/Application/Controller/ExportController.php: 7 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ use Application\Entity\Db\Acteur;
use Application\Entity\Db\Financement;
use Application\Entity\Db\Role;
use Application\Entity\Db\These;
use Application\Entity\Db\VersionFichier;
use Application\Provider\Privilege\FinancementPrivileges;
use Application\Service\FichierThese\FichierTheseServiceAwareTrait;
use Application\Service\These\TheseRechercheServiceAwareTrait;
use Application\Service\These\TheseServiceAwareTrait;
@@ -78,7 +78,12 @@ class ExportController extends AbstractController
                $financements = $these->getFinancements();
                $origines = [];
                /** @var Financement $financement */
                foreach ($financements as $financement) $origines[] = $financement->getOrigineFinancement()->getLibelleLong();
                foreach ($financements as $financement) {
                    $origine = $financement->getOrigineFinancement();
                    if ($origine->isVisible() || $this->isAllowed($origine, FinancementPrivileges::FINANCEMENT_VOIR_ORIGINE_NON_VISIBLE)) {
                        $origines[] = $origine->getLibelleLong();
                    }
                }
                return implode(",", $origines);
            },
            'Complément sur les financements'                            => function ($variables) {
+2 −2
Changes for module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.OrigineFinancement.dcm.xml: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -2,8 +2,7 @@
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Application\Entity\Db\OrigineFinancement" table="ORIGINE_FINANCEMENT"
            repository-class="">
    <entity name="Application\Entity\Db\OrigineFinancement" table="ORIGINE_FINANCEMENT">
        <id name="id" type="integer" column="ID">
            <generator strategy="SEQUENCE"/>
        </id>
@@ -12,6 +11,7 @@
        <field name="code" column="CODE" type="string" length="64" nullable="false"/>
        <field name="libelleLong" column="LIBELLE_LONG" type="string" length="256" nullable="false"/>
        <field name="libelleCourt" column="LIBELLE_COURT" type="string" length="64" nullable="false"/>
        <field name="visible" column="VISIBLE" type="boolean"/>

        <many-to-one field="source" target-entity="Application\Entity\Db\Source">
            <join-columns>
+30 −3
Changes for module/Application/src/Application/Entity/Db/OrigineFinancement.php: 30 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -3,10 +3,10 @@
namespace Application\Entity\Db;

use UnicaenApp\Entity\HistoriqueAwareTrait;
use Application\Entity\Db\Source;

class OrigineFinancement {
use Zend\Permissions\Acl\Resource\ResourceInterface;

class OrigineFinancement implements ResourceInterface
{
    use HistoriqueAwareTrait;

    /** @var int */
@@ -21,6 +21,16 @@ class OrigineFinancement {
    private $source;
    /** @var string */
    private $sourceCode;
    /** @var bool */
    private $visible;

    /**
     * @inheritDoc
     */
    public function getResourceId(): string
    {
        return 'OrigineFinancement';
    }

    /**
     * @return int
@@ -120,4 +130,21 @@ class OrigineFinancement {
        return $this;
    }

    /**
     * @return bool
     */
    public function isVisible(): bool
    {
        return $this->visible;
    }

    /**
     * @param bool $visible
     * @return self
     */
    public function setVisible(bool $visible): self
    {
        $this->visible = $visible;
        return $this;
    }
}
 No newline at end of file
+37 −38
Changes for module/Application/src/Application/Filter/FinancementFormatter.php: 37 added lines, 38 removed lines.
Original line number Diff line number Diff line
@@ -3,8 +3,16 @@
namespace Application\Filter;

use Application\Entity\Db\Financement;

class FinancementFormatter {
use Application\Entity\Db\OrigineFinancement;
use Application\Provider\Privilege\FinancementPrivileges;
use Application\Service\AuthorizeServiceAwareTrait;
use Application\View\Helper\FinancementFormatterHelper;
use UnicaenApp\Exception\LogicException;
use UnicaenAuth\Service\AuthorizeService;

class FinancementFormatter
{
    use AuthorizeServiceAwareTrait;

    const DISPLAY_AS_LINE = 'DISPLAY_LINE';

@@ -18,47 +26,21 @@ class FinancementFormatter {
    /** @var boolean */
    private $displayComplement;

    /**
     * @param bool $displayComplement
     * @return FinancementFormatter
     */
    public function setDisplayComplement(bool $displayComplement)
    {
        $this->displayComplement = $displayComplement;
        return $this;
    }

    /**
     * @return string
     */
    public function getDisplayAs()
    {
        return $this->displayAs;
    }

    /**
     * @param string $displayAs
     * @return FinancementFormatter
     * @return self
     */
    public function setDisplayAs($displayAs)
    public function setDisplayAs(string $displayAs): self
    {
        $this->displayAs = $displayAs;
        return $this;
    }

    /**
     * @return string
     */
    public function getSortBy()
    {
        return $this->sortBy;
    }

    /**
     * @param string $sortBy
     * @return FinancementFormatter
     * @return self
     */
    public function setSortBy($sortBy)
    public function setSortBy(string $sortBy): self
    {
        $this->sortBy = $sortBy;
        return $this;
@@ -68,10 +50,10 @@ class FinancementFormatter {
     * @param Financement[] $financements
     * @return string
     */
    public function doFormat(array $financements) {

    public function doFormat(array $financements): string
    {
        //sorting
        switch($this->getSortBy()) {
        switch($this->sortBy) {
            case FinancementFormatter::SORT_BY_DATE :
                usort($financements, function (Financement $a, Financement $b) {
                    return $a->getAnnee() - $b->getAnnee();
@@ -86,11 +68,15 @@ class FinancementFormatter {

        $output = "";
        foreach ($financements as $financement) {
            switch($this->getDisplayAs()) {
            switch($this->displayAs) {
                case FinancementFormatter::DISPLAY_AS_LINE :
                    $infos = [];
                    if ($financement->getAnnee())                   $infos[] = $financement->getAnnee();
                    if ($financement->getOrigineFinancement())      $infos[] = $financement->getOrigineFinancement()->getLibelleLong();
                    if ($origine = $financement->getOrigineFinancement()) {
                        if ($this->isOrigineVisible($origine)) {
                            $infos[] = $origine->getLibelleLong();
                        }
                    }
                    if ($this->displayComplement === true AND $financement->getComplementFinancement())   $infos[] = $financement->getComplementFinancement();
                    if ($financement->getQuotiteFinancement())      $infos[] = $financement->getQuotiteFinancement();
                    if ($financement->getDateDebut())               $infos[] = $financement->getDateDebut()->format('d/m/Y');
@@ -104,11 +90,24 @@ class FinancementFormatter {
        return $output;
    }

    private function isOrigineVisible(OrigineFinancement $origine): bool
    {
        if ($this->authorizeService === null) {
            throw new LogicException(
                'Vous devez injecter dans ce formatter une instance du service ' . AuthorizeService::class . '. ' .
                'NB : si vous êtes dans une vue, utilisez $this->financementFormatter().'
            );
        }

        return $origine->isVisible() ||
            $this->authorizeService->isAllowed($origine, FinancementPrivileges::FINANCEMENT_VOIR_ORIGINE_NON_VISIBLE);
    }

    /**
     * @param Financement $financement
     * @return string|null
     */
    public function formatTypeFinancement(Financement $financement)
    private function formatTypeFinancement(Financement $financement): ?string
    {
        if (! $financement->getLibelleTypeFinancement()) {
            return null;
Loading