440 lines
17 KiB
PHP
440 lines
17 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Cadoles\PortalBundle\Controller;
|
||
|
|
||
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||
|
use Symfony\Component\HttpFoundation\Request;
|
||
|
use Symfony\Component\HttpFoundation\Response;
|
||
|
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||
|
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
|
||
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||
|
use Doctrine\Common\Collections\ArrayCollection;
|
||
|
|
||
|
use Cadoles\PortalBundle\Entity\Pagewidget;
|
||
|
use Cadoles\PortalBundle\Form\PagewidgetType;
|
||
|
|
||
|
class PagewidgetController extends Controller
|
||
|
{
|
||
|
private $labelentity="CadolesPortalBundle:Pagewidget";
|
||
|
private $routeprimary="cadoles_portal_config_pagewidget";
|
||
|
|
||
|
private function searchArray($array, $key, $value)
|
||
|
{
|
||
|
$results = array();
|
||
|
|
||
|
if (is_array($array))
|
||
|
{
|
||
|
if (isset($array[$key]) && $array[$key] == $value)
|
||
|
$results[] = $array;
|
||
|
|
||
|
foreach ($array as $subarray)
|
||
|
$results = array_merge($results, $this->searchArray($subarray, $key, $value));
|
||
|
}
|
||
|
|
||
|
return $results;
|
||
|
}
|
||
|
|
||
|
private function entityForm(Pagewidget $entity,$idpage,$id,$access="config")
|
||
|
{
|
||
|
if ($this->getDoctrine()->getManager()->contains($entity)) {
|
||
|
$widgettype= $this->getDoctrine()->getManager()->getRepository("CadolesPortalBundle:Pagewidget")->find($id)->getWidget();
|
||
|
$params = $widgettype->getParameter();
|
||
|
$values = $entity->getParameter();
|
||
|
|
||
|
foreach($params->fields as $key => $param) {
|
||
|
$tmp = $this->searchArray($values,"id",$param->id);
|
||
|
if(is_array($tmp))
|
||
|
$params->fields[$key]->value=$tmp[0]["value"];
|
||
|
}
|
||
|
|
||
|
return $this->createForm(PagewidgetType::class, $entity, [
|
||
|
'param' => $params,
|
||
|
'mode' => "update",
|
||
|
'idicon' => $entity->getIcon()->getId(),
|
||
|
'method' => 'POST',
|
||
|
]);
|
||
|
} else {
|
||
|
$widgettype= $this->getDoctrine()->getManager()->getRepository("CadolesPortalBundle:Widget")->find($id);
|
||
|
$entity->setName($widgettype->getName());
|
||
|
$entity->setHeight($widgettype->getHeight());
|
||
|
$entity->setAutoajust($widgettype->getAutoajust());
|
||
|
$entity->setBorder($widgettype->getBorder());
|
||
|
$entity->setColorheaderback($widgettype->getColorheaderback());
|
||
|
$entity->setColorheaderfont($widgettype->getColorheaderfont());
|
||
|
$entity->setColorbodyback($widgettype->getColorbodyback());
|
||
|
$entity->setColorbodyfont($widgettype->getColorbodyfont());
|
||
|
$entity->setIcon($widgettype->getIcon());
|
||
|
|
||
|
$param = $widgettype->getParameter();
|
||
|
return $this->createForm(PagewidgetType::class, $entity, [
|
||
|
'param' => $param,
|
||
|
'mode' => "submit",
|
||
|
'idicon' => $widgettype->getIcon()->getId(),
|
||
|
'method' => 'POST',
|
||
|
]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function submitAction(Request $request,$idpage,$idwidgettype,$access="config")
|
||
|
{
|
||
|
|
||
|
$entity = new Pagewidget();
|
||
|
$form = $this->entityForm($entity,$idpage,$idwidgettype,$access);
|
||
|
$form->handleRequest($request);
|
||
|
|
||
|
|
||
|
if ($form->isValid()) {
|
||
|
$idicon = $form->get('idicon')->getData();
|
||
|
$icon=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findoneby(["id"=>$idicon]);
|
||
|
$panel=$this->getDoctrine()->getRepository("CadolesPortalBundle:Page")->findoneby(["id"=>$idpage]);
|
||
|
$widgettype=$this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->findoneby(["id"=>$idwidgettype]);
|
||
|
|
||
|
// Localisation par défaut en R1C1
|
||
|
$entity->setLoc("R1C1");
|
||
|
$entity->setRoworder("1");
|
||
|
|
||
|
// Rattachement icon / panel / widgettype
|
||
|
$entity->setIcon($icon);
|
||
|
$entity->setPage($panel);
|
||
|
$entity->setWidget($widgettype);
|
||
|
|
||
|
// Récupération des paramétres
|
||
|
$jsons=$widgettype->getParameter();
|
||
|
$param=array();
|
||
|
$param["fields"]=array();
|
||
|
foreach($jsons->fields as $field) {
|
||
|
$tmp=array();
|
||
|
$tmp["id"]=$field->id;
|
||
|
$tmp["value"]=$form->get($field->id)->getData();
|
||
|
array_push($param["fields"],$tmp);
|
||
|
}
|
||
|
|
||
|
$entity->setParameter($param);
|
||
|
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$em->persist($entity);
|
||
|
$em->flush();
|
||
|
|
||
|
return $this->redirect($this->generateUrl('cadoles_portal_'.$access.'_page_view',["id"=>$idpage]));
|
||
|
}
|
||
|
|
||
|
return $this->render($this->labelentity.':edit.html.twig', [
|
||
|
'useheader' => true,
|
||
|
'usemenu' => false,
|
||
|
'usesidebar' => ($access=="config"),
|
||
|
'entity' => $entity,
|
||
|
'icons' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findAll(),
|
||
|
'mode' => "submit",
|
||
|
'access' => $access,
|
||
|
'idpage' => $idpage,
|
||
|
'form' => $form->createView(),
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
public function updateAction(Request $request,$idpage,$idwidget,$access="config")
|
||
|
{
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$entity = $em->getRepository($this->labelentity)->find($idwidget);
|
||
|
if (!$entity) {
|
||
|
throw $this->createNotFoundException('Unable to find entity.');
|
||
|
}
|
||
|
|
||
|
$form = $this->entityForm($entity,$idpage,$idwidget,$access);
|
||
|
$form->handleRequest($request);
|
||
|
|
||
|
if ($form->isValid()) {
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
|
||
|
$idicon = $form->get('idicon')->getData();
|
||
|
$icon=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findoneby(["id"=>$idicon]);
|
||
|
$entity->setIcon($icon);
|
||
|
|
||
|
// Récupération des paramétres
|
||
|
$widgettype= $entity->getWidget();
|
||
|
$jsons=$widgettype->getParameter();
|
||
|
$param=array();
|
||
|
$param["fields"]=array();
|
||
|
foreach($jsons->fields as $field) {
|
||
|
$tmp=array();
|
||
|
$tmp["id"]=$field->id;
|
||
|
|
||
|
$tmp["value"]=$form->get($field->id)->getData();
|
||
|
array_push($param["fields"],$tmp);
|
||
|
}
|
||
|
|
||
|
$entity->setParameter($param);
|
||
|
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$em->persist($entity);
|
||
|
$em->flush();
|
||
|
|
||
|
return $this->redirect($this->generateUrl('cadoles_portal_'.$access.'_page_view',["id"=>$idpage]));
|
||
|
}
|
||
|
|
||
|
return $this->render($this->labelentity.':edit.html.twig', [
|
||
|
'useheader' => true,
|
||
|
'usemenu' => false,
|
||
|
'usesidebar' => ($access=="config"),
|
||
|
'entity' => $entity,
|
||
|
'icons' => $this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findAll(),
|
||
|
'mode' => "update",
|
||
|
'access' => $access,
|
||
|
'idpage' => $idpage,
|
||
|
'form' => $form->createView(),
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
public function deleteAction(Request $request)
|
||
|
{
|
||
|
// S'assurer que c'est un appel ajax
|
||
|
if (!$request->isXmlHttpRequest()) {
|
||
|
return new JsonResponse(array('message' => 'Interdit'), 400);
|
||
|
}
|
||
|
|
||
|
$output=array();
|
||
|
$idwidget=$request->request->get('idwidget');
|
||
|
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$entity = $em->getRepository($this->labelentity)->find($idwidget);
|
||
|
if (!$entity) {
|
||
|
throw $this->createNotFoundException('Unable to find entity.');
|
||
|
}
|
||
|
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$em->remove($entity);
|
||
|
$em->flush();
|
||
|
|
||
|
$response = new Response(json_encode($output));
|
||
|
$response->headers->set('Content-Type', 'application/json');
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
public function orderAction(Request $request)
|
||
|
{
|
||
|
// S'assurer que c'est un appel ajax
|
||
|
if (!$request->isXmlHttpRequest()) {
|
||
|
return new JsonResponse(array('message' => 'Interdit'), 400);
|
||
|
}
|
||
|
|
||
|
$output=array();
|
||
|
$idwidget=$request->request->get('idwidget');
|
||
|
$order=$request->request->get('order');
|
||
|
$idloc=$request->request->get('idloc');
|
||
|
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$entity = $em->getRepository($this->labelentity)->find($idwidget);
|
||
|
if (!$entity) {
|
||
|
throw $this->createNotFoundException('Unable to find entity.');
|
||
|
}
|
||
|
|
||
|
$entity->setRoworder($order);
|
||
|
$entity->setLoc($idloc);
|
||
|
$em->persist($entity);
|
||
|
$em->flush();
|
||
|
|
||
|
$response = new Response(json_encode($output));
|
||
|
$response->headers->set('Content-Type', 'application/json');
|
||
|
return $response;
|
||
|
}
|
||
|
|
||
|
public function viewurlAction($id) {
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$entity = $em->getRepository($this->labelentity)->find($id);
|
||
|
if (!$entity) {
|
||
|
throw $this->createNotFoundException('Unable to find entity.');
|
||
|
}
|
||
|
|
||
|
$url="";
|
||
|
foreach($entity->getParameter()["fields"] as $parameter) {
|
||
|
if($parameter["id"]=="url")
|
||
|
$url=$parameter["value"];
|
||
|
}
|
||
|
|
||
|
// Gestion des url youtuve
|
||
|
$url=str_replace("http://www.youtube.com","https://www.youtube.com",$url);
|
||
|
$url=str_replace("https://www.youtube.com/watch?v=","https://www.youtube.com/embed/",$url);
|
||
|
|
||
|
// Detecter le type de lien
|
||
|
$imagemedia=false;
|
||
|
$pathinfo = pathinfo($url);
|
||
|
|
||
|
// Type image
|
||
|
if(array_key_exists("extension",$pathinfo)) {
|
||
|
if($pathinfo['extension']=="jpg"||$pathinfo['extension']=="gif"||$pathinfo['extension']=="png") {
|
||
|
$imagemedia=true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Spécifique Deviant Art
|
||
|
if(strpos($url, "images-wixmp") !== false) $imagemedia=true;
|
||
|
|
||
|
|
||
|
return $this->render($this->labelentity.':viewurl.html.twig', [
|
||
|
'entity' => $entity,
|
||
|
'url' => $url,
|
||
|
'imagemedia' => $imagemedia
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
public function viewitemAction($id) {
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$entity = $em->getRepository($this->labelentity)->find($id);
|
||
|
if (!$entity) {
|
||
|
throw $this->createNotFoundException('Unable to find entity.');
|
||
|
}
|
||
|
|
||
|
// Récupération des paramétres du widget
|
||
|
$modedesktop=0;
|
||
|
$iditemcategory=null;
|
||
|
foreach($entity->getParameter()["fields"] as $parameter) {
|
||
|
switch($parameter["id"]) {
|
||
|
case "modedesktop":
|
||
|
$modedesktop=$parameter["value"];
|
||
|
break;
|
||
|
|
||
|
case "itemcategory":
|
||
|
$iditemcategory=$parameter["value"];
|
||
|
if($iditemcategory) $itemcategoryfilter=$em->getRepository("CadolesPortalBundle:Itemcategory")->find($iditemcategory);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Profilage
|
||
|
$user=$this->getUser();
|
||
|
$roles=($user?$user->getRoles():["ROLE_ANONYME"]);
|
||
|
$groups=($user?$user->getGroups():[]);
|
||
|
|
||
|
// Initialisation du calcul des items
|
||
|
$items=new ArrayCollection();
|
||
|
|
||
|
// Récupération des items par rôles
|
||
|
foreach($roles as $role) {
|
||
|
$qb = $em->createQueryBuilder();
|
||
|
$qb->select('item')
|
||
|
->from("CadolesPortalBundle:Item", 'item')
|
||
|
->where($qb->expr()->like('item.roles', $qb->expr()->literal("%$role%")));
|
||
|
|
||
|
if($iditemcategory && $itemcategoryfilter) {
|
||
|
$qb->andWhere("item.itemcategory=:itemcategory")
|
||
|
->setParameter("itemcategory",$itemcategoryfilter);
|
||
|
}
|
||
|
$itemsroles=$qb->getQuery()->getResult();
|
||
|
foreach($itemsroles as $itemrole) {
|
||
|
if(!$items->contains($itemrole)) $items->add($itemrole);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Récupération des items par group
|
||
|
foreach($groups as $group) {
|
||
|
$qb = $em->createQueryBuilder();
|
||
|
$qb->select('item')
|
||
|
->from("CadolesPortalBundle:Item", 'item')
|
||
|
->where(":group MEMBER OF item.groups")
|
||
|
->setParameter("group",$group->getGroup());
|
||
|
|
||
|
if($iditemcategory && $itemcategoryfilter) {
|
||
|
$qb->andWhere("item.itemcategory=:itemcategory")
|
||
|
->setParameter("itemcategory",$itemcategoryfilter);
|
||
|
}
|
||
|
$itemsgroups=$qb->getQuery()->getResult();
|
||
|
foreach($itemsgroups as $itemgroup) {
|
||
|
if(!$items->contains($itemgroup)) $items->add($itemgroup);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Trie des items
|
||
|
$itemsordered = $items->getIterator();
|
||
|
$itemsordered->uasort(function ($first, $second) {
|
||
|
return (int) $first->getRowOrder() > (int) $second->getRowOrder() ? 1 : -1;
|
||
|
});
|
||
|
|
||
|
// Catégories affichées
|
||
|
$itemcategorys = $this->getDoctrine()->getRepository('CadolesPortalBundle:Itemcategory')->findBy([], ['rowOrder' => 'asc']);
|
||
|
if($iditemcategory && $itemcategoryfilter) $itemcategorys = $itemcategoryfilter;
|
||
|
|
||
|
// Render
|
||
|
return $this->render($this->labelentity.':viewitem.html.twig', [
|
||
|
'entity' => $entity,
|
||
|
'modedesktop' => $modedesktop,
|
||
|
'items' => $itemsordered,
|
||
|
'itemcategorys' => $itemcategorys
|
||
|
]);
|
||
|
}
|
||
|
|
||
|
public function viewalertAction($id) {
|
||
|
$em = $this->getDoctrine()->getManager();
|
||
|
$entity = $em->getRepository($this->labelentity)->find($id);
|
||
|
if (!$entity) {
|
||
|
throw $this->createNotFoundException('Unable to find entity.');
|
||
|
}
|
||
|
|
||
|
// Récupération des paramétres du widget
|
||
|
$idalertcategory=null;
|
||
|
foreach($entity->getParameter()["fields"] as $parameter) {
|
||
|
switch($parameter["id"]) {
|
||
|
case "alertcategory":
|
||
|
$idalertcategory=$parameter["value"];
|
||
|
if($idalertcategory) $alertcategoryfilter=$em->getRepository("CadolesPortalBundle:Alertcategory")->find($idalertcategory);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Profilage
|
||
|
$user=$this->getUser();
|
||
|
$roles=($user?$user->getRoles():["ROLE_ANONYME"]);
|
||
|
$groups=($user?$user->getGroups():[]);
|
||
|
|
||
|
// Initialisation du calcul des alerts
|
||
|
$alerts=new ArrayCollection();
|
||
|
dump("yo");
|
||
|
// Récupération des alerts par rôles
|
||
|
foreach($roles as $role) {
|
||
|
$qb = $em->createQueryBuilder();
|
||
|
$qb->select('alert')
|
||
|
->from("CadolesPortalBundle:Alert", 'alert')
|
||
|
->where($qb->expr()->like('alert.roles', $qb->expr()->literal("%$role%")));
|
||
|
|
||
|
if($idalertcategory && $alertcategoryfilter) {
|
||
|
$qb->andWhere("alert.alertcategory=:alertcategory")
|
||
|
->setParameter("alertcategory",$alertcategoryfilter);
|
||
|
}
|
||
|
$alertsroles=$qb->getQuery()->getResult();
|
||
|
foreach($alertsroles as $alertrole) {
|
||
|
if(!$alerts->contains($alertrole)) $alerts->add($alertrole);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Récupération des alerts par group
|
||
|
foreach($groups as $group) {
|
||
|
$qb = $em->createQueryBuilder();
|
||
|
$qb->select('alert')
|
||
|
->from("CadolesPortalBundle:Alert", 'alert')
|
||
|
->where(":group MEMBER OF alert.groups")
|
||
|
->setParameter("group",$group->getGroup());
|
||
|
|
||
|
if($idalertcategory && $alertcategoryfilter) {
|
||
|
$qb->andWhere("alert.alertcategory=:alertcategory")
|
||
|
->setParameter("alertcategory",$alertcategoryfilter);
|
||
|
}
|
||
|
$alertsgroups=$qb->getQuery()->getResult();
|
||
|
foreach($alertsgroups as $alertgroup) {
|
||
|
if(!$alerts->contains($alertgroup)) $alerts->add($alertgroup);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Trie des alerts
|
||
|
$alertsordered = $alerts->getIterator();
|
||
|
$alertsordered->uasort(function ($first, $second) {
|
||
|
return (int) $first->getRowOrder() > (int) $second->getRowOrder() ? 1 : -1;
|
||
|
});
|
||
|
|
||
|
// Render
|
||
|
return $this->render($this->labelentity.':viewalert.html.twig', [
|
||
|
'entity' => $entity,
|
||
|
'alerts' => $alertsordered
|
||
|
]);
|
||
|
}
|
||
|
}
|