Commit 730f0f7e authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Retrait de Instadia devenu une lib

parent 258e92bd
Loading
Loading
Loading
Loading
Loading
+0 −25
Changes for config/module.config.php: 0 added lines, 25 removed lines.
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@ use Laminas\ServiceManager\Factory\InvokableFactory;
use UnicaenApp\Controller\CacheControllerFactory;
use UnicaenApp\Controller\ConsoleController;
use UnicaenApp\Controller\ConsoleControllerFactory;
use UnicaenApp\Controller\InstadiaControllerFactory;
use UnicaenApp\DeveloperTools\MessageCollectorService;
use UnicaenApp\DeveloperTools\MessageCollectorServiceFactory;
use UnicaenApp\Form\Element\SearchAndSelect2;
@@ -27,7 +26,6 @@ use UnicaenApp\ORM\Query\Functions\Chr;
use UnicaenApp\ORM\Query\Functions\CompriseEntre;
use UnicaenApp\ORM\Query\Functions\PasHistorise;
use UnicaenApp\ORM\Query\Functions\Replace;
use UnicaenApp\Service\InstadiaServiceFactory;
use UnicaenApp\Service\Mailer\MailerService;
use UnicaenApp\Service\Mailer\MailerServiceFactory;
use UnicaenApp\Service\SQL\RunSQLService;
@@ -43,8 +41,6 @@ use UnicaenApp\View\Helper\HeadScript;
use UnicaenApp\View\Helper\HeadScriptFactory;
use UnicaenApp\View\Helper\InlineScript;
use UnicaenApp\View\Helper\InlineScriptFactory;
use UnicaenApp\View\Helper\InstadiaViewHelper;
use UnicaenApp\View\Helper\InstadiaViewHelperFactory;
use UnicaenApp\View\Helper\MessageCollectorHelper;
use UnicaenApp\View\Helper\MessageCollectorHelperFactory;
use UnicaenApp\View\Helper\Messenger;
@@ -217,18 +213,6 @@ return [
                    ],
                ],
            ],
            'instadia'         => [
                'type'          => 'Literal',
                'options'       => [
                    'route'    => '/instadia',
                    'defaults' => [
                        '__NAMESPACE__' => 'UnicaenApp\Controller',
                        'controller'    => 'Instadia',
                        'action'        => 'index',
                    ],
                ],
                'may_terminate' => true,
            ],
            // The following is a route to simplify getting started creating
            // new controllers and actions without needing to create a new
            // module. Simply drop new controllers in, and you can access them
@@ -343,7 +327,6 @@ return [

            MailerService::class    => MailerServiceFactory::class,
            RunSQLService::class    => RunSQLServiceFactory::class,
            'instadia'              => InstadiaServiceFactory::class,
            HostLocalization::class => HostLocalizationFactory::class,
            RedirectResponse::class => RedirectResponseFactory::class,

@@ -403,7 +386,6 @@ return [
            'headLink'          => HeadLink::class,
            'headScript'        => HeadScript::class,
            'inlineScript'      => InlineScript::class,
            'instadia'          => InstadiaViewHelper::class,
            'messageCollector'  => MessageCollectorHelper::class,
            'uploader'          => UploaderHelper::class,
            'Uploader'          => UploaderHelper::class,
@@ -419,7 +401,6 @@ return [
            HeadLink::class               => HeadLinkFactory::class,
            HeadScript::class             => HeadScriptFactory::class,
            InlineScript::class           => InlineScriptFactory::class,
            InstadiaViewHelper::class     => InstadiaViewHelperFactory::class,
            MessageCollectorHelper::class => MessageCollectorHelperFactory::class,
            UploaderHelper::class         => UploaderHelperFactory::class,
        ],
@@ -480,7 +461,6 @@ return [
        ],
        'factories'    => [
            'UnicaenApp\Controller\Cache'    => CacheControllerFactory::class,
            'UnicaenApp\Controller\Instadia' => InstadiaControllerFactory::class,
            ConsoleController::class         => ConsoleControllerFactory::class,
        ],
    ],
@@ -682,11 +662,6 @@ return [
                    'action'     => ['js', 'css', 'printable-css'],
                    'roles'      => [],
                ],
                [
                    'controller' => 'UnicaenApp\Controller\Instadia',
                    'action'     => ['index'],
                    'roles'      => [],
                ],
            ],
        ],
    ],
+0 −198
Changes for src/UnicaenApp/Entity/Db/Instadia.php: 0 added lines, 198 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\Entity\Db;

use Doctrine\ORM\Mapping as ORM;
use UnicaenAuth\Entity\Db\AbstractUser;


/**
 *
 * @ORM\Entity
 * @ORM\Table(name="instadia")
 */
class Instadia
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var AbstractUser
     * @ORM\ManyToOne(targetEntity="UnicaenAuth\Entity\Db\User", inversedBy="user")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    /**
     * @var string
     * @ORM\Column(name="rubrique", type="string", length=80, unique=false, nullable=false)
     */
    private $rubrique;

    /**
     * @var string
     * @ORM\Column(name="sous_rubrique", type="string", length=80, unique=false, nullable=true)
     */
    private $sousRubrique;

    /**
     * @var \DateTime
     * @ORM\Column(name="horodatage", type="datetime", nullable=false)
     */
    private $horodatage;

    /**
     * @var string
     * @ORM\Column(name="contenu", type="string", length=3000, unique=false, nullable=false)
     */
    private $contenu;



    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }



    /**
     * @param int $id
     *
     * @return Instadia
     */
    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }



    /**
     * @return AbstractUser
     */
    public function getUser()
    {
        return $this->user;
    }



    /**
     * @param AbstractUser $user
     *
     * @return Instadia
     */
    public function setUser($user)
    {
        $this->user = $user;

        return $this;
    }



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



    /**
     * @param string $rubrique
     *
     * @return Instadia
     */
    public function setRubrique($rubrique)
    {
        $this->rubrique = $rubrique;

        return $this;
    }



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



    /**
     * @param string $sousRubrique
     *
     * @return Instadia
     */
    public function setSousRubrique($sousRubrique)
    {
        $this->sousRubrique = $sousRubrique;

        return $this;
    }



    /**
     * @return \DateTime
     */
    public function getHorodatage()
    {
        return $this->horodatage;
    }



    /**
     * @param \DateTime $horodatage
     *
     * @return Instadia
     */
    public function setHorodatage($horodatage)
    {
        $this->horodatage = $horodatage;

        return $this;
    }



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



    /**
     * @param string $contenu
     *
     * @return Instadia
     */
    public function setContenu($contenu)
    {
        $this->contenu = $contenu;

        return $this;
    }
}
+0 −202
Changes for src/UnicaenApp/Service/InstadiaService.php: 0 added lines, 202 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\Service;

use UnicaenApp\Entity\Db\Instadia;
use UnicaenAuth\Entity\Db\AbstractUser;
use UnicaenAuth\Service\UserContext;

/**
 * Description of InstadiaService
 *
 * @author LECLUSE Laurent <laurent.lecluse at unicaen.fr>
 */
class InstadiaService implements EntityManagerAwareInterface
{
    use EntityManagerAwareTrait;

    /**
     * @var UserContext
     */
    private $userContextService;

    /**
     * @var array
     */
    private $callbacks;

    /**
     * @param UserContext $userContextService
     */
    public function setUserContextService(UserContext $userContextService)
    {
        $this->userContextService = $userContextService;
    }

    /**
     * @param string      $rubrique
     * @param string|null $sousRubrique
     *
     * @return Instadia[]
     */
    public function getMessages($rubrique = null, $sousRubrique = null)
    {
        $params = [
            'rubrique' => $rubrique,
        ];

        if ($sousRubrique) {
            $sousRubriqueDql        = 'AND i.sousRubrique = :sousRubrique';
            $params['sousRubrique'] = $sousRubrique;
        } else {
            $sousRubriqueDql = '';
        }

        $dql = "
        SELECT
          i
        FROM
          UnicaenApp\Entity\Db\Instadia i
        WHERE
          i.rubrique = :rubrique
          $sousRubriqueDql
        ORDER BY
          i.horodatage
        ";

        $result = $this->getEntityManager()->createQuery($dql)->setParameters($params)->getResult();

        return $result;
    }



    public function save(Instadia $instadia)
    {
        if (!$instadia->getHorodatage()) {
            $instadia->setHorodatage(new \DateTime());
        }

        $this->doSend($instadia);

        $this->getEntityManager()->persist($instadia);
        $this->getEntityManager()->flush($instadia);

        return $this;
    }



    /**
     * @param string $rubrique
     * @param string $sousRubrique
     * @param function $callback
     *
     * @return $this
     */
    public function onSend( $rubrique, $sousRubrique, $callback)
    {
        $this->callbacks[$this->makeKey($rubrique, $sousRubrique)] = $callback;

        return $this;
    }



    /**
     * @param Instadia $instadia
     *
     * @return $this
     */
    protected function doSend( Instadia $instadia )
    {
        $key = $this->makeKey($instadia->getRubrique(), $instadia->getSousRubrique());

        if (!array_key_exists($key, $this->callbacks)){
            // si la clé par sous-rubrique n'existe pas alors on prend par rubrique uniquement!!
            $key = $this->makeKey($instadia->getRubrique(), null);
        }

        if (array_key_exists($key, $this->callbacks)){
            $callback = $this->callbacks[$key];
            $callback($instadia);
        }

        return $this;
    }



    /**
     * @param string $rubrique
     * @param string $sousRubrique
     *
     * @return string
     */
    protected function makeKey( $rubrique, $sousRubrique )
    {
        return $rubrique.'__/__'.$sousRubrique;
    }



    /**
     * @return \Doctrine\ORM\EntityRepository
     */
    public function getRepo()
    {
        return $this->getEntityManager()->getRepository(Instadia::class);
    }



    public function getUser()
    {
        if ($this->userContextService) {
            $user = $this->userContextService->getDbUser();
        } else {
            $user = null;
        }

        return $user;
    }



    public function makeHash(AbstractUser $user)
    {
        if ($mail = $user->getEmail()) {
            return md5(trim(strtolower($user->getEmail())));
        } else {
            return null;
        }
    }



    public function jsonToInstadia( array $json, Instadia $instadia )
    {
        if (isset($json['rubrique'])) $instadia->setRubrique($json['rubrique']);
        if (isset($json['sousRubrique'])) $instadia->setSousRubrique($json['sousRubrique']);
        if (isset($json['contenu'])) $instadia->setContenu($json['contenu']);
    }



    public function instadiaToJson(Instadia $instadia)
    {
        $json = [
            'contenu'    => $instadia->getContenu(),
            'horodatage' => $instadia->getHorodatage()->getTimestamp(),
        ];
        if ($user = $instadia->getUser()) {
            $json['user'] = [
                'id'    => $user->getId(),
                'label' => $user->getDisplayName(),
                'hash'  => $this->makeHash($user),
            ];
        }

        return $json;
    }
}
 No newline at end of file
+0 −34
Changes for src/UnicaenApp/Service/InstadiaServiceFactory.php: 0 added lines, 34 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\Service;

use Psr\Container\ContainerInterface;
use UnicaenAuth\Service\UserContext;
use Laminas\ServiceManager\FactoryInterface;
use Laminas\ServiceManager\ServiceLocatorInterface;

/**
 * 
 *
 * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
 */
class InstadiaServiceFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        return $this->__invoke($serviceLocator, '?');
    }

    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        $service = new InstadiaService();

        if ($container->has('UnicaenAuth\Service\UserContext')) {
            /** @var UserContext $ucs */
            $ucs = $container->get('UnicaenAuth\Service\UserContext');
            $service->setUserContextService($ucs);
        }

        return $service;
    }
}
+0 −312
Changes for src/UnicaenApp/View/Helper/InstadiaViewHelper.php: 0 added lines, 312 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\View\Helper;

use UnicaenApp\Service\Traits\InstadiaServiceAwareTrait;
use Laminas\View\Helper\AbstractHtmlElement;

/**
 * Description of InstadiaViewHelper
 *
 * @author LECLUSE Laurent <laurent.lecluse at unicaen.fr>
 */
class InstadiaViewHelper extends AbstractHtmlElement
{
    use InstadiaServiceAwareTrait;

    /**
     * @var string
     */
    private $rubrique;

    /**
     * @var string
     */
    private $sousRubrique;

    /**
     * @var integer
     */
    private $refreshDelay;

    /**
     * @var string
     */
    private $title;

    /**
     * @var string
     */
    private $information;

    /**
     * @var integer
     */
    private $width;

    /**
     * @var integer
     */
    private $height;

    /**
     * @var boolean
     */
    private $readOnly;




    /**
     *
     * @return self
     */
    public function __invoke()
    {
        return $this;
    }



    /**
     * Retourne le code HTML.
     *
     * @return string Code HTML
     */
    public function __toString()
    {
        return $this->render();
    }



    /**
     *
     *
     * @return string Code HTML
     */
    public function render($rubrique = '__DEFAULT__', $sousRubrique = '__DEFAULT__')
    {
        if ($rubrique != '__DEFAULT__') $this->setRubrique($rubrique);
        if ($sousRubrique != '__DEFAULT__') $this->setSousRubrique($sousRubrique);

        $user = $this->getServiceInstadia()->getUser();

        $attrs = [
            'class'    => 'instadia',
            'data-url' => $this->getView()->url('instadia'),
        ];

        if ($user) {
            $attrs['data-user-id']    = $user->getId();
            $attrs['data-user-label'] = $user->getDisplayName();
            $attrs['data-user-hash']  = $this->getServiceInstadia()->makeHash($user);
        }

        if ($d = $this->getRubrique()) $attrs['data-rubrique'] = $d;
        if ($d = $this->getSousRubrique()) $attrs['data-sous-rubrique'] = $d;
        if ($d = $this->getRefreshDelay()) $attrs['data-refresh-delay'] = $d;
        if ($d = $this->getTitle()) $attrs['data-title'] = $d;
        if ($d = $this->getInformation()) $attrs['data-information'] = $d;
        if ($d = $this->getWidth()) $attrs['data-width'] = $d;
        if ($d = $this->getHeight()) $attrs['data-height'] = $d;
        if (null !== $this->isReadOnly()) $attrs['data-read-only'] = $this->isReadOnly() ? 'true' : 'false';

        $r = (string)$this->getView()->tag('div', $attrs)->html('');

        return $r;
    }



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



    /**
     * @param string $rubrique
     *
     * @return InstadiaViewHelper
     */
    public function setRubrique($rubrique)
    {
        $this->rubrique = $rubrique;

        return $this;
    }



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



    /**
     * @param string $sousRubrique
     *
     * @return InstadiaViewHelper
     */
    public function setSousRubrique($sousRubrique)
    {
        $this->sousRubrique = $sousRubrique;

        return $this;
    }



    /**
     * @return int
     */
    public function getRefreshDelay()
    {
        return $this->refreshDelay;
    }



    /**
     * @param int $refreshDelay
     *
     * @return InstadiaViewHelper
     */
    public function setRefreshDelay($refreshDelay)
    {
        $this->refreshDelay = $refreshDelay;

        return $this;
    }



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



    /**
     * @param string $title
     *
     * @return InstadiaViewHelper
     */
    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }



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



    /**
     * @param string $information
     *
     * @return InstadiaViewHelper
     */
    public function setInformation($information)
    {
        $this->information = $information;

        return $this;
    }



    /**
     * @return int
     */
    public function getWidth()
    {
        return $this->width;
    }



    /**
     * @param int $width
     *
     * @return InstadiaViewHelper
     */
    public function setWidth($width)
    {
        $this->width = $width;

        return $this;
    }



    /**
     * @return int
     */
    public function getHeight()
    {
        return $this->height;
    }



    /**
     * @param int $height
     *
     * @return InstadiaViewHelper
     */
    public function setHeight($height)
    {
        $this->height = $height;

        return $this;
    }



    /**
     * @return boolean
     */
    public function isReadOnly()
    {
        return $this->readOnly;
    }



    /**
     * @param boolean $readOnly
     *
     * @return InstadiaViewHelper
     */
    public function setReadOnly($readOnly)
    {
        $this->readOnly = $readOnly;

        return $this;
    }

}
 No newline at end of file
Loading