possibilité de profiler les alertes par items (fixes #31120)
This commit is contained in:
parent
f5633610a9
commit
9b877c2de0
|
@ -210,4 +210,33 @@ class AjaxController extends Controller
|
|||
return $response;
|
||||
|
||||
}
|
||||
|
||||
public function itemlistAction(Request $request)
|
||||
{
|
||||
// S'assurer que c'est un appel ajax
|
||||
if (!$request->isXmlHttpRequest()) {
|
||||
return new JsonResponse(array('message' => 'Interdit'), 400);
|
||||
}
|
||||
|
||||
$output=array();
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$page_limit=$request->query->get('page_limit');
|
||||
$q=$request->query->get('q');
|
||||
|
||||
$qb = $em->createQueryBuilder();
|
||||
$qb->select('table')->from("CadolesPortalBundle:Item",'table')
|
||||
->where('table.title LIKE :value')
|
||||
->setParameter("value", "%".$q."%")
|
||||
->orderBy('table.title');
|
||||
|
||||
$datas=$qb->setFirstResult(0)->setMaxResults($page_limit)->getQuery()->getResult();
|
||||
foreach($datas as $data) {
|
||||
array_push($output,array("id"=>$data->getId(),"text"=>$data->getTitle()));
|
||||
}
|
||||
|
||||
$response = new Response(json_encode($output));
|
||||
$response->headers->set('Content-Type', 'application/json');
|
||||
return $response;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -157,6 +157,9 @@ cadoles_core_ajax_group_read:
|
|||
path: /ajax/group/read
|
||||
defaults: { _controller: CadolesCoreBundle:Ajax:groupread }
|
||||
|
||||
cadoles_core_ajax_item_list:
|
||||
path: /ajax/item/list
|
||||
defaults: { _controller: CadolesCoreBundle:Ajax:itemlist }
|
||||
|
||||
#== Home Config ==========================================================================================================
|
||||
cadoles_core_config:
|
||||
|
|
|
@ -105,6 +105,15 @@ class Alert
|
|||
*/
|
||||
protected $readers;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Item", inversedBy="alerts", cascade={"persist"})
|
||||
* @ORM\JoinTable(name="alertitem",
|
||||
* joinColumns={@ORM\JoinColumn(name="alert", referencedColumnName="id")},
|
||||
* inverseJoinColumns={@ORM\JoinColumn(name="item", referencedColumnName="id")}
|
||||
* )
|
||||
*/
|
||||
protected $items;
|
||||
|
||||
// Is Online
|
||||
public function isOnline()
|
||||
{
|
||||
|
@ -461,4 +470,38 @@ class Alert
|
|||
{
|
||||
return $this->readers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add item
|
||||
*
|
||||
* @param \Cadoles\PortalBundle\Entity\Item $item
|
||||
*
|
||||
* @return Alert
|
||||
*/
|
||||
public function addItem(\Cadoles\PortalBundle\Entity\Item $item)
|
||||
{
|
||||
$this->items[] = $item;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove item
|
||||
*
|
||||
* @param \Cadoles\PortalBundle\Entity\Item $item
|
||||
*/
|
||||
public function removeItem(\Cadoles\PortalBundle\Entity\Item $item)
|
||||
{
|
||||
$this->items->removeElement($item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get items
|
||||
*
|
||||
* @return \Doctrine\Common\Collections\Collection
|
||||
*/
|
||||
public function getItems()
|
||||
{
|
||||
return $this->items;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,6 +140,11 @@ class Item
|
|||
*/
|
||||
protected $niveau01s;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="Cadoles\PortalBundle\Entity\Alert", mappedBy="items")
|
||||
*/
|
||||
protected $alerts;
|
||||
|
||||
// A garder pour forcer l'id en init
|
||||
public function setId($id)
|
||||
{
|
||||
|
@ -580,4 +585,38 @@ class Item
|
|||
{
|
||||
return $this->essential;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add alert
|
||||
*
|
||||
* @param \Cadoles\PortalBundle\Entity\Alert $alert
|
||||
*
|
||||
* @return Item
|
||||
*/
|
||||
public function addAlert(\Cadoles\PortalBundle\Entity\Alert $alert)
|
||||
{
|
||||
$this->alerts[] = $alert;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove alert
|
||||
*
|
||||
* @param \Cadoles\PortalBundle\Entity\Alert $alert
|
||||
*/
|
||||
public function removeAlert(\Cadoles\PortalBundle\Entity\Alert $alert)
|
||||
{
|
||||
$this->alerts->removeElement($alert);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get alerts
|
||||
*
|
||||
* @return \Doctrine\Common\Collections\Collection
|
||||
*/
|
||||
public function getAlerts()
|
||||
{
|
||||
return $this->alerts;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -98,6 +98,24 @@ class AlertType extends AbstractType
|
|||
'placeholder' => 'Selectionner un groupe',
|
||||
])
|
||||
|
||||
->add('items', Select2EntityType::class, [
|
||||
'label' => 'Visible pour les Items',
|
||||
'class' => 'CadolesPortalBundle:Item',
|
||||
'text_property' => 'label',
|
||||
'multiple' => true,
|
||||
'remote_route' => 'cadoles_core_ajax_item_list',
|
||||
'primary_key' => 'id',
|
||||
'text_property' => 'title',
|
||||
'minimum_input_length' => 0,
|
||||
'page_limit' => 100,
|
||||
'allow_clear' => true,
|
||||
'delay' => 250,
|
||||
'cache' => false,
|
||||
'cache_timeout' => 60000,
|
||||
'language' => 'fr',
|
||||
'placeholder' => 'Selectionner des items',
|
||||
])
|
||||
|
||||
->add('publishedat', DateType::class, [
|
||||
'label' => 'Publier du',
|
||||
'input' => 'datetime',
|
||||
|
|
|
@ -118,6 +118,34 @@ class AlertRepository extends EntityRepository
|
|||
}
|
||||
}
|
||||
|
||||
// Récupération des alerts par item
|
||||
$bookmarks=null;
|
||||
$items=null;
|
||||
$itemcategorys=null;
|
||||
$this->_em->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,4);
|
||||
foreach($items as $item) {
|
||||
$qb = $this->createQueryBuilder('a');
|
||||
$qb->select('alert')
|
||||
->from("CadolesPortalBundle:Alert", 'alert')
|
||||
->where(":item MEMBER OF alert.items")
|
||||
->andWhere('alert.publishedat <= :today')
|
||||
->andWhere($qb->expr()->orX(
|
||||
$qb->expr()->gt('alert.unpublishedat', ':today'),
|
||||
$qb->expr()->isNull('alert.unpublishedat')
|
||||
))
|
||||
->setParameter("item",$item)
|
||||
->setParameter('today', date('Y-m-d'));
|
||||
|
||||
if($idalertcategory && $alertcategoryfilter) {
|
||||
$qb->andWhere("alert.alertcategory=:alertcategory")
|
||||
->setParameter("alertcategory",$alertcategoryfilter);
|
||||
}
|
||||
$alertsitems=$qb->getQuery()->getResult();
|
||||
foreach($alertsitems as $alertitem) {
|
||||
if(!$alerts->contains($alertitem)&&!$alertitem->getReaders()->contains($user)) $alerts->add($alertitem);
|
||||
}
|
||||
}
|
||||
|
||||
// Trie des alerts
|
||||
$alertsordered = $alerts->getIterator();
|
||||
$alertsordered->uasort(function ($first, $second) {
|
||||
|
|
|
@ -63,6 +63,7 @@
|
|||
{{ form_row(form.roles) }}
|
||||
{{ form_row(form.niveau01s) }}
|
||||
{{ form_row(form.groups) }}
|
||||
{{ form_row(form.items) }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -69,6 +69,64 @@
|
|||
|
||||
<div class="panel-body">
|
||||
{{ alert.content|raw }}
|
||||
|
||||
{% if not alert.items is empty %}
|
||||
{% if app.user %}
|
||||
{% set username = app.user.username %}
|
||||
{% else %}
|
||||
{% set username = "" %}
|
||||
{% endif %}
|
||||
|
||||
<div class="grid clearfix fitWidth" style="width:auto; margin: 0 auto;">
|
||||
<div class="grid-sizer grid-small"></div>
|
||||
<div class="grid-gutter-sizer"></div>
|
||||
|
||||
{% for item in alert.items %}
|
||||
<div class="grid-item grid-list">
|
||||
<div class="grid-item-content" style="background-color: {{ item.color ? "#"~item.color : '#'~colormain }};">
|
||||
{% if item.protected and not app.user %}
|
||||
{% if mode_auth == "SAML" %}
|
||||
<a href="{{ path('lightsaml_sp.login') }}" {% if access=="user" %}target="_top"{% endif %}>
|
||||
{% elseif mode_auth == "CAS" %}
|
||||
<a href="{{ path('cas_sp.login') }}" {% if access=="user" %}target="_top"{% endif %}>
|
||||
{% elseif mode_auth == "MYSQL" %}
|
||||
<a href="{{ path('cnous_portal_user_login') }}" {% if access=="user" %}target="_top"{% endif %}>
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if item.target == 'frame' %}
|
||||
<a class="linktosonde" data-sonde="{{ item.title }}" style="cursor:pointer" onClick="showFrameitem({{ item.id }},'{{ item.url|replace({'#login#': username}) }}')">
|
||||
{% elseif item.target == "_self" %}
|
||||
<a class="linktosonde" data-sonde="{{ item.title }}" href="{{ item.url|replace({'#login#': username}) }}" target="{% if access=="user" %}_top{% else %}{{ item.target }}{% endif %}">
|
||||
{% else %}
|
||||
<a class="linktosonde" data-sonde="{{ item.title }}" href="{{ item.url|replace({'#login#': username}) }}" target="{{ item.target }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<div class="item-link clearfix">
|
||||
<div class="grid-item-logo" title="{{ item.subtitle|nl2br }}">
|
||||
{% if item.icon %}
|
||||
<img class="grid-item-img" height="110" src="/{{ alias }}/{{ item.icon.label }}">
|
||||
{% else %}
|
||||
<img class="grid-item-img" height="110" src="/{{ alias }}/uploads/icon/icon_pin.png">
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="grid-item-title">
|
||||
<h2>{{ item.title }}</h2>
|
||||
<span>{{ item.subtitle|nl2br }}</<span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<div class="grid-item-body" style="display:none">
|
||||
{{ item.content|raw }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue