nineskeletor/src/Controller/PagewidgetController.php

959 lines
33 KiB
PHP

<?php
namespace App\Controller;
use App\Entity\Pagewidget;
use App\Form\PagewidgetckeditorType;
use App\Form\PagewidgetType;
use App\Service\MinioService;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class PagewidgetController extends AbstractController
{
private $data = 'pagewidget';
private $labelentity = "App\Entity\Pagewidget";
private $twig = 'Pagewidget/';
private $route = 'app_admin_pagewidget';
private $minio;
private $em;
private $user;
private $entity;
private $page;
private $id;
private $access;
private $usage;
private $group;
private $cansee;
private $canupdate;
private $canadd;
public function __construct(MinioService $minio)
{
$this->minio = $minio;
}
private function searchArray($array, $key, $value)
{
$results = [];
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(ManagerRegistry $em, Pagewidget $entity, $idpage, $id, $access)
{
if ($em->getManager()->contains($entity)) {
$widgettype = $em->getRepository('App\Entity\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) && !empty($tmp)) {
$params['fields'][$key]['value'] = $tmp[0]['value'];
} else {
$params['fields'][$key]['value'] = $param['value'];
}
}
return $this->createForm(PagewidgetType::class, $entity, [
'param' => $params,
'mode' => 'update',
'access' => $access,
'idicon' => ($entity->getIcon() ? $entity->getIcon()->getId() : $widgettype->getIcon()->getId()),
'method' => 'POST',
]);
} else {
$widgettype = $em->getManager()->getRepository("App\Entity\Widget")->find($id);
$entity->setName($widgettype->getName());
$entity->setHeight($widgettype->getHeight());
$entity->setAutoajust($widgettype->isAutoajust());
$entity->setBorder($widgettype->isBorder());
$entity->setViewheader($widgettype->isViewheader());
$entity->setColorheaderback($widgettype->getColorheaderback());
$entity->setColorheaderfont($widgettype->getColorheaderfont());
$entity->setColorbodyback($widgettype->getColorbodyback());
$entity->setColorbodyfont($widgettype->getColorbodyfont());
$entity->setIcon($widgettype->getIcon());
$entity->setWidget($widgettype);
$param = $widgettype->getParameter();
return $this->createForm(PagewidgetType::class, $entity, [
'param' => $param,
'mode' => 'submit',
'access' => $access,
'idicon' => $widgettype->getIcon()->getId(),
'method' => 'POST',
]);
}
}
public function submit($access, $idpage, $idwidgettype, Request $request, ManagerRegistry $em): Response
{
$usage = $request->query->get('usage');
$entity = new Pagewidget();
$form = $this->entityForm($em, $entity, $idpage, $idwidgettype, $access, $usage);
$form->handleRequest($request);
// On s'assure que la page où l'on souhaite insérer un widget est bien du bon type
$page = $em->getRepository("App\Entity\Page")->findoneby(['id' => $idpage]);
if (!$page) {
throw $this->createNotFoundException('Unable to find entity.');
}
if (2 != $page->getPagecategory()->getId()) {
throw $this->createAccessDeniedException('Permission denied');
}
// Sur validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$idicon = $form->get('idicon')->getData();
$icon = $em->getRepository('App\Entity\Icon')->findoneby(['id' => $idicon]);
$widgettype = $em->getRepository('App\Entity\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($page);
$entity->setWidget($widgettype);
// Récupération des paramétres
$jsons = $widgettype->getParameter();
$param = [];
$param['fields'] = [];
foreach ($jsons['fields'] as $field) {
$tmp = [];
$tmp['id'] = $field['id'];
$tmp['value'] = ('hidden' != $field['type'] ? $form->get($field['id'])->getData() : '');
array_push($param['fields'], $tmp);
}
$entity->setParameter($param);
$em = $em->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('app_'.$access.'_page_'.$usage.'_view', ['id' => $idpage]));
}
$icons = $em->getRepository('App\Entity\Icon')->findBy(['user' => null]);
$iconsuser = null;
if ('all' == $access) {
$iconsuser = $em->getRepository('App\Entity\Icon')->findBy(['user' => $this->getUser()]);
}
return $this->render($this->twig.'edit.html.twig', [
'useheader' => ('admin' == $access),
'usemenu' => false,
'usesidebar' => ('admin' == $access),
'entity' => $entity,
'icons' => $icons,
'iconsuser' => $iconsuser,
'mode' => 'submit',
'usage' => $usage,
'access' => $access,
'idpage' => $idpage,
'form' => $form->createView(),
]);
}
public function update($access, $idpage, $idwidget, Request $request, ManagerRegistry $em): Response
{
$usage = $request->query->get('usage');
// Recherche du pagewidget
$entity = $em->getRepository($this->labelentity)->find($idwidget);
if (!$entity) {
throw $this->createNotFoundException('Unable to find entity.');
}
// On s'assure que l'utilisateur à la permission de modifier
if ('all' == $access) {
$em->getRepository('App\Entity\Page')->getPermission($this->getUser(), $entity->getPage(), $cansee, $canupdate, $canadd);
if (!$canupdate) {
throw $this->createAccessDeniedException('Permission denied');
}
}
// Création du formulaire
$form = $this->entityForm($em, $entity, $idpage, $idwidget, $access);
$form->handleRequest($request);
// Validation
if ($form->get('submit')->isClicked() && $form->isValid()) {
$idicon = $form->get('idicon')->getData();
$icon = $em->getRepository('App\Entity\Icon')->findoneby(['id' => $idicon]);
$entity->setIcon($icon);
// Récupération des paramétres
$widgettype = $entity->getWidget();
$jsons = $widgettype->getParameter();
$param = [];
$param['fields'] = [];
foreach ($jsons['fields'] as $field) {
$tmp = [];
$tmp['id'] = $field['id'];
$tmp['value'] = ('hidden' != $field['type'] ? $form->get($field['id'])->getData() : '');
array_push($param['fields'], $tmp);
}
$entity->setParameter($param);
$em->getManager()->flush();
// Si widget RSS On supprime le potentiel cache de ce flux
if (-1880 == $entity->getWidget()->getId()) {
$dir = $this->container->getParameter('kernel.root_dir').'/../web/uploads/flux/';
$mask = $dir.'widget-'.$entity->getId().'.*';
array_map('unlink', glob($mask));
}
// Retour
return $this->redirect($this->generateUrl('app_'.$access.'_page_'.$usage.'_view', ['id' => $idpage]));
}
$icons = $em->getRepository('App\Entity\Icon')->findBy(['user' => null]);
$iconsuser = null;
if ('all' == $access) {
$iconsuser = $em->getRepository('App\Entity\Icon')->findBy(['user' => $this->getUser()]);
}
return $this->render($this->twig.'edit.html.twig', [
'useheader' => ('admin' == $access),
'usemenu' => false,
'usesidebar' => ('admin' == $access),
'entity' => $entity,
'icons' => $icons,
'iconsuser' => $iconsuser,
'mode' => 'update',
'access' => $access,
'idpage' => $idpage,
'form' => $form->createView(),
'usage' => $usage,
'group' => $group,
]);
}
public function delete($access, $idwidget, Request $request, ManagerRegistry $em): Response
{
// Récupération des parametres
$output = [];
// Recherche du pagetwidget
$entity = $em->getRepository($this->labelentity)->find($idwidget);
if (!$entity) {
throw $this->createNotFoundException('Unable to find entity.');
}
// On s'assure que l'utilisateur à la permission de supprimer
if ('all' == $access) {
$em->getRepository('App\Entity\Page')->getPermission($this->getUser(), $entity->getPage(), $cansee, $canupdate, $canadd);
if (!$canupdate) {
throw $this->createAccessDeniedException('Permission denied');
}
}
// Tentative de suppression
try {
$em->getManager()->remove($entity);
$em->getManager()->flush();
} catch (\Exception $e) {
$request->getSession()->getFlashBag()->add('error', $e->getMessage());
throw $this->createAccessDeniedException('Permission denied');
}
return new JsonResponse($output);
}
public function order($access, Request $request, ManagerRegistry $em): Response
{
$idwidget = $request->request->get('idwidget');
$order = $request->request->get('order');
$idloc = $request->request->get('idloc');
$entity = $em->getRepository($this->labelentity)->find($idwidget);
if (!$entity) {
throw $this->createNotFoundException('Unable to find entity.');
}
$entity->setRoworder($order);
$entity->setLoc($idloc);
$em->getManager()->flush();
return new JsonResponse([]);
}
public function ckeditor($access, $idwidget, Request $request, ManagerRegistry $em): Response
{
$usage = $request->query->get('usage');
// Recherche du pagewidget
$entity = $em->getRepository($this->labelentity)->find($idwidget);
if (!$entity) {
throw $this->createNotFoundException('Unable to find entity.');
}
// On s'assure que l'utilisateur à la permission de modifier
if ('all' == $access) {
$em->getRepository('App\Entity\Page')->getPermission($this->getUser(), $entity->getPage(), $cansee, $canupdate, $canadd);
if (!$canadd) {
throw $this->createAccessDeniedException('Permission denied');
}
}
// Création du formulaire
$form = $this->createForm(PagewidgetckeditorType::class, ['ckeditor' => $entity->getParameter()['fields'][0]['value']], ['idwidget' => $idwidget, 'usage' => $usage]);
// Récupération des data du formulaire
$form->handleRequest($request);
if ($form->get('submit')->isClicked() && $form->isValid()) {
$ckeditor = $form->get('ckeditor')->getData();
$param = $entity->getParameter();
$param['fields'][0]['value'] = $ckeditor;
$entity->setParameter($param);
$em->getManager()->flush();
// Retour
return $this->redirect($this->generateUrl('app_'.$access.'_page_'.$usage.'_view', ['id' => $entity->getPage()->getId()]));
}
return $this->render($this->twig.'ckeditor.html.twig', [
'useheader' => ('admin' == $access),
'usemenu' => false,
'usesidebar' => ('admin' == $access),
'entity' => $entity,
'usage' => $usage,
'access' => $access,
'idpage' => $entity->getPage()->getId(),
'form' => $form->createView(),
]);
}
protected function setRequest($em, $request, $id, $access)
{
$this->em = $em;
$this->user = $this->getUser();
$this->id = $id;
$this->access = $access;
$this->usage = $request->query->get('usage');
$this->group = $request->query->get('group');
// Le widget existe-t-il ?
$this->entity = $this->em->getRepository($this->labelentity)->find($this->id);
if (!$this->entity) {
throw $this->createNotFoundException('Unable to find entity.');
}
// Permissions
if ('admin' == $this->access) {
$this->canupdate = true;
$this->canadd = true;
} else {
// On s'assure que l'utilisateur à la permission de voir
$this->page = $this->entity->getPage();
$this->em->getRepository('App\Entity\Page')->getPermission($this->user, $this->page, $this->cansee, $this->canupdate, $this->canadd);
if (!$this->cansee) {
throw $this->createAccessDeniedException('Permission denied');
}
}
$this->getPreference($this->entity);
}
protected function getPreference(&$entity)
{
$user = $this->getUser();
if ($user) {
if ($entity->isViewheader()) {
$preference = $user->getPreference();
$id = $entity->getId();
// Preference widgetshowhide
if (is_array($preference)) {
if (array_key_exists('widgetshowhide', $preference)) {
if (array_key_exists($id, $preference['widgetshowhide'])) {
$entity->setOpened('true' == $preference['widgetshowhide'][$id]);
}
}
}
}
}
}
protected function getKeyPreference(&$entity, $key, $value)
{
$user = $this->getUser();
if (!$user) {
return $value;
}
$preference = $user->getPreference();
$id = $entity->getId();
if (!is_array($preference)) {
return $value;
}
if (!array_key_exists($key, $preference)) {
return $value;
}
if (!array_key_exists($id, $preference[$key])) {
return $value;
}
return $preference[$key][$id];
}
protected function getRender($view, $params)
{
// Paramétres toujours présent dans un rendu de widget
$allways = [
'entity' => $this->entity,
'canupdate' => $this->canupdate, // Permissions de modifier le widget
'canadd' => $this->canadd, // Permission d'ajouter des éléments au widget
'access' => $this->access,
'usage' => $this->usage,
];
// Parametres spéficiques
$params = array_merge($allways, $params);
// Rendu
return $this->render($this->twig.'\\'.$view, $params);
}
public function viewurl($access, $id, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Valeur par défaut
$url = '';
$imagemedia = false;
// Récupération des paramétres du widget
foreach ($this->entity->getParameter()['fields'] as $parameter) {
if ('url' == $parameter['id']) {
$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
$pathinfo = pathinfo($url);
// Type image
if (array_key_exists('extension', $pathinfo)) {
if ('jpg' == $pathinfo['extension'] || 'gif' == $pathinfo['extension'] || 'png' == $pathinfo['extension']) {
$imagemedia = true;
}
}
// Spécifique Deviant Art
if (false !== strpos($url, 'images-wixmp')) {
$imagemedia = true;
}
return $this->getRender('viewurl.html.twig', [
'url' => $url,
'imagemedia' => $imagemedia,
]);
}
public function viewurlfixe($access, $id, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Valeur par défaut
$url = '';
$imagemedia = false;
// Récupération des paramétres du widget
$widgettype = $this->entity->getWidget();
$jsons = $widgettype->getParameter();
$param = [];
$param['fields'] = [];
foreach ($jsons->fields as $field) {
if ('url' == $field->id) {
$url = $field->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
$pathinfo = pathinfo($url);
// Type image
if (array_key_exists('extension', $pathinfo)) {
if ('jpg' == $pathinfo['extension'] || 'gif' == $pathinfo['extension'] || 'png' == $pathinfo['extension']) {
$imagemedia = true;
}
}
// Spécifique Deviant Art
if (false !== strpos($url, 'images-wixmp')) {
$imagemedia = true;
}
return $this->getRender('viewurl.html.twig', [
'url' => $url,
'imagemedia' => $imagemedia,
]);
}
public function viewitem($access, $id, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Valeur par défaut
$modedesktop = 0;
$menu = false;
$menuall = true;
$search = false;
$withbookmark = true;
$bookmarks = null;
$itemsordered = null;
$itemcategorys = null;
// Récupération des paramétres du widget
$iditemcategory = null;
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'modedesktop':
$modedesktop = $parameter['value'];
break;
case 'withbookmark':
$withbookmark = $parameter['value'];
break;
case 'itemcategory':
$iditemcategory = $parameter['value'];
break;
case 'search':
$search = (1 == $parameter['value']);
break;
case 'menu':
$menu = (1 == $parameter['value']);
break;
case 'menuall':
$menuall = (1 == $parameter['value']);
break;
}
}
// Préference utilisateur
$modedesktop = $this->getKeyPreference($this->entity, 'modedesktop', $modedesktop);
// Profilage
$this->em->getRepository('App\Entity\Item')->getUserItems($this->user, $bookmarks, $items, $itemcategorys, $iditemcategory, $withbookmark, false);
// Render
return $this->getRender('viewitem.html.twig', [
'canadd' => $this->user,
'modedesktop' => $modedesktop,
'search' => $search,
'menu' => $menu,
'menuall' => $menuall,
'withbookmark' => $withbookmark,
'bookmarks' => $bookmarks,
'items' => $items,
'itemcategorys' => $itemcategorys,
]);
}
public function viewitemessential($access, $id, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Valeur par défaut
$modedesktop = 0;
$itemsordered = null;
$bookmarks = null;
// Récupération des paramétres du widget
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'modedesktop':
$modedesktop = $parameter['value'];
break;
}
}
// Préference utilisateur
$modedesktop = $this->getKeyPreference($this->entity, 'modedesktop', $modedesktop);
// Profilage
$em->getRepository('App\Entity\Item')->getUserItems($this->user, $bookmarks, $items, $itemcategorys, null, 0, true);
// Render
return $this->getRender('viewitemessential.html.twig', [
'canadd' => $this->user,
'modedesktop' => $modedesktop,
'items' => $items,
'bookmarks' => $bookmarks,
]);
}
public function viewalert($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Valeur par défaut
$alertsordered = null;
// Récupération des paramétres du widget
$idalertcategory = null;
$alertcategoryfilter = null;
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'alertcategory':
$idalertcategory = $parameter['value'];
if ($idalertcategory) {
$alertcategoryfilter = $this->em->getRepository('App:Alertcategory')->find($idalertcategory);
}
break;
}
}
// Profilage
$alertsordered = $this->em->getRepository('App\Entity\Alert')->getUserAlerts($this->user, $idalertcategory, $alertcategoryfilter);
// Render
return $this->getRender('viewalert.html.twig', [
'alerts' => $alertsordered,
]);
}
public function viewbookmark($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Valeur par défaut
$modedesktop = 0;
$bookmarks = null;
// Récupération des paramétres du widget
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'modedesktop':
$modedesktop = $parameter['value'];
break;
}
}
// Bookmark du widget
$bookmarks = $em->getRepository('App\Entity\Bookmark')->findBy(['pagewidget' => $this->entity]);
// Préference utilisateur
$modedesktop = $this->getKeyPreference($this->entity, 'modedesktop', $modedesktop);
// Render
return $this->getRender('viewbookmark.html.twig', [
'canadd' => $this->canadd,
'modedesktop' => $modedesktop,
'bookmarks' => $bookmarks,
]);
}
public function viewlink($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Récupération des paramétres du widget
$url = '';
$target = '_blank';
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'url':
$url = $parameter['value'];
break;
case 'target':
$target = $parameter['value'];
break;
}
}
// Render
return $this->getRender('viewlink.html.twig', [
'url' => $url,
'target' => $target,
]);
}
public function viewinfo($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
if (1 == $this->entity->getPage()->getGroups()->count()) {
$this->entity->setName($this->entity->getPage()->getGroups()[0]->getLabel());
} elseif (0 == $this->entity->getPage()->getGroups()->count() && $this->entity->getPage()->getUser()) {
$this->entity->setName($this->entity->getPage()->getName());
}
// Render
return $this->getRender('viewinfo.html.twig', [
'usage' => $this->usage,
'id' => $id,
'idpage' => $this->entity->getPage()->getId(),
]);
}
public function vieweditor($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Récupération des paramétres du widget
$html = '';
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'html':
$html = $parameter['value'];
break;
}
}
// Render
return $this->getRender('vieweditor.html.twig', [
'html' => $html,
]);
}
public function viewslide($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Récupération des paramétres du widget
$interval = '2';
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'interval':
$interval = $parameter['value'];
break;
}
}
// Récupération des slides
$slides = $this->em->getRepository('App\Entity\Pagewidgetslide')->findBy(['pagewidget' => $this->entity], ['roworder' => 'ASC', 'title' => 'ASC']);
// Render
return $this->getRender('viewslide.html.twig', [
'slides' => $slides,
'interval' => $interval,
]);
}
public function viewfile($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Récupération des paramétres du widget
$view = 'small';
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'modelist':
$view = (0 == $parameter['value'] ? 'small' : 'list');
break;
}
}
// Préference
$widgetfolder = $this->getKeyPreference($this->entity, 'widgetfolder', '');
$view = ($widgetfolder && $widgetfolder['view'] ? $widgetfolder['view'] : $view);
// Render
return $this->getRender('viewfile.html.twig', [
'category' => 'pagewidget',
'id' => $id,
'view' => $view,
]);
}
public function viewgalery($id, $access, Request $request, ManagerRegistry $em)
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
$directory = 'file/pagewidget/'.$id.'/.thumb/';
$files = $this->minio->listFiles($directory, '/');
if ($files) {
$date = array_column($files, 'LastModified');
array_multisort($date, SORT_DESC, $files);
}
// Render
return $this->getRender('viewgalery.html.twig', [
'files' => $files,
]);
}
public function viewcalendar(Request $request, $id, $access = 'config')
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Récupération des paramétres du widget
$nbday = '0';
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'nbday':
$nbday = $parameter['value'];
break;
}
}
// Récupérer les events de l'utilisateur
$user = $this->getUser();
$events = $this->em->getRepository('App:Calendarevent')->getUserCalendarevents($user, $this->get('session')->get('color')['main'], $this->usage, $this->group, $firstcalendar);
// Render
return $this->getRender('viewcalendar.html.twig', [
'events' => $events,
'nbday' => $nbday,
'firstcalendar' => $firstcalendar,
'usage' => $this->usage,
]);
}
public function viewblog(Request $request, $id, $access = 'config')
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Récupération des paramétres du widget
$nbarticle = 10;
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'nbarticle':
$nbarticle = $parameter['value'];
break;
}
}
// On récupère soit les blogs du group en cours soit l'ensemble des blogs de l'utilisateur
if ('group' == $this->usage) {
$blogs = $this->em->getRepository('App:Blog')->getBlogsGroup($this->getUser(), $this->group);
if ($blogs) {
$firstblog = $blogs[0]->getId();
}
} else {
$this->em->getRepository('App:Blog')->getBlogsUser($this->getUser(), $blogsuser, $blogsadmin, $blogsshared);
$blogs = array_merge($blogsuser, $blogsadmin->toArray(), $blogsshared);
$firstblog = 'all';
}
// On récupère les nbarticle de ses blogs
$this->em->getRepository('App:Blogarticle')->getBlogsArticles($blogs, 0, $nbarticle, $count, $blogarticles);
// Render
return $this->getRender('viewblog.html.twig', [
'blogarticles' => $blogarticles,
'nbarticle' => $nbarticle,
'firstblog' => $firstblog,
'usage' => $this->usage,
]);
}
public function viewproject(Request $request, $id, $access = 'config')
{
// Récupération de la requete
$this->setRequest($em, $request, $id, $access);
// Parametres
$nbarticle = 10;
foreach ($this->entity->getParameter()['fields'] as $parameter) {
switch ($parameter['id']) {
case 'nbarticle':
$nbarticle = $parameter['value'];
break;
}
}
// On récupère soit les projects du group en cours soit l'ensemble des projects de l'utilisateur
$user = $this->getUser();
if ('group' == $this->usage) {
$projects = $this->em->getRepository('App:Project')->getProjectsGroup($this->getUser(), $this->group);
if ($projects) {
$firstproject = $projects[0]->getId();
}
} else {
$this->em->getRepository('App:Project')->getProjectsUser($user, $projectsuser, $projectsadmin, $projectsshared);
$projects = array_merge($projectsuser, $projectsadmin->toArray(), $projectsshared);
$firstproject = 'all';
}
// On récupère les nbarticle de ses projects
$this->em->getRepository('App:Projecttask')->getProjectsTasks($projects, 0, $nbarticle, $count, $projecttasks);
foreach ($projecttasks as $key => $projecttask) {
if (100 == $projecttask->getPercentage()) {
unset($projecttasks[$key]);
}
}
if ('group' != $this->usage) {
foreach ($projecttasks as $key => $projecttask) {
if (!$user) {
unset($projecttasks[$key]);
} else {
if ($projecttask->getUser() && $projecttask->getUser() != $user) {
unset($projecttasks[$key]);
} elseif (!$projecttask->getUser() && $projecttask->getOwner() && $projecttask->getOwner() != $user) {
unset($projecttasks[$key]);
}
}
}
}
// Render
return $this->getRender('viewproject.html.twig', [
'projecttasks' => $projecttasks,
'nbarticle' => $nbarticle,
'firstproject' => $firstproject,
'usage' => $this->usage,
]);
}
}