Skip to content
Snippets Groups Projects
Commit 730f0f7e authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Retrait de Instadia devenu une lib

parent 258e92bd
No related branches found
No related tags found
No related merge requests found
Pipeline #18734 passed
......@@ -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' => [],
],
],
],
],
......
<?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;
}
}
<?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
<?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;
}
}
<?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
<?php
namespace UnicaenApp\View\Helper;
use Psr\Container\ContainerInterface;
use UnicaenApp\Service\InstadiaService;
use Laminas\ServiceManager\FactoryInterface;
use Laminas\ServiceManager\ServiceLocatorInterface;
class InstadiaViewHelperFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
return $this->__invoke($serviceLocator, '?');
}
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$helper = new InstadiaViewHelper();
/** @var InstadiaService $instadiaService */
$instadiaService = $container->get('instadia');
$helper->setServiceInstadia($instadiaService);
return $helper;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment