<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\WidgetNotes;
use App\Form\WidgetNotesType;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Google_Client;
use Google_Service_Calendar;
use Symfony\Contracts\Translation\TranslatorInterface;
class WidgetNotesController extends AbstractController
{
private $translator;
protected $googleCalendar;
public function __construct(TranslatorInterface $translator)
{
// $redirect_uri='urn:ietf:wg:oauth:2.0:oob';
$redirect_uri = 'https://' . $_SERVER['HTTP_HOST']. '/calendar/token';
$googleCalendar = new Google_Client();
$googleCalendar->setApplicationName('Google Calendar API PHP Quickstart');
//campos a extraer de la base de datos User
$googleCalendar->setClientId('2790497987-57qc3vu4pr7vb0s8phpub2me58pe34lb.apps.googleusercontent.com');
$googleCalendar->setClientSecret('nj2C7unaTO68DRhyORsyipSj');
//fin campos user
// $api_key = "AIzaSyBR84cS1IU2BPvk5V3VnbqdkJESlv440Ac";
// $client->setDeveloperKey($api_key);
$googleCalendar->setRedirectUri($redirect_uri);
$googleCalendar->addScope(Google_Service_Calendar::CALENDAR);
$guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
$googleCalendar->setHttpClient($guzzleClient);
$this->googleCalendar = $googleCalendar;
$this->translator = $translator;
}
private function createWidgetNotesCreateForm(WidgetNotes $entity)
{
$form = $this->createForm(WidgetNotesType::class, $entity, array(
'action' => $this->generateUrl('widget_notes_create'),
'method' => 'POST'
));
return $form;
}
private function createWidgetNotesEditForm(WidgetNotes $entity, $id)
{
$form = $this->createForm(WidgetNotesType::class, $entity, array(
'action' => $this->generateUrl('widget_notes_update',
array(
'id' => $id
)),
'method' => 'PUT'
));
return $form;
}
/**
* @Route("/widget/notes/create/", name="widget_notes_create")
*/
public function addNotesAction(Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$notes = $em->getRepository(WidgetNotes::class)->findAll();
$wnotes = new WidgetNotes();
$form = $this->createWidgetNotesCreateForm($wnotes);
$form->handleRequest($request);
$forAgent = $form->get('forAgent')->getData();
if(!is_null($forAgent)){
$wnotes->setForAgent($forAgent->getId());
}
if($form->isValid())
{
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$wnotes->setCreatedId($user_id);
$wnotes->setUpdatedId($user_id);
/* Gestión de eventos en Log */
$user_lastname = $user_logueado->getLastname();
$user_name = $user_logueado->getName();
$user_email = $user_logueado->getEmail();
$user_rol = $user_logueado->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
try{
$em->persist($wnotes);
$em->flush();
$event = 'The Note has been created succesfully.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensaje', $successMessage);
$logger->info($event_complete.' | '.$event);
} catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event_complete.' | '.$event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeerror', $errorMessage);
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("/widget/notes/edit/{id}", name="widget_notes_edit")
*/
public function editNoteAction($id)
{
$em = $this->getDoctrine()->getManager();
$note = $em->getRepository(WidgetNotes::class)->findOneById($id);
$user = $em->getRepository(User::class)->findOneById($note->getForAgent());
$note->setForAgent($user);
$form = $this->createWidgetNotesEditForm($note, $id);
return $this->render('home/note-edit.html.twig',
array(
'form' => $form->createView()
)
);
}
/**
* @Route("/widget/notes/update/{id}", name="widget_notes_update", methods={"POST"})
*/
public function updateNotesAction($id, Request $request, LoggerInterface $logger)
{
$em = $this->getDoctrine()->getManager();
$note = $em->getRepository(WidgetNotes::class)->findOneById($id);
$form = $this->createWidgetNotesEditForm($note, $id);
$form->handleRequest($request);
$forAgent = $form->get('forAgent')->getData();
if(!is_null($forAgent)){
$note->setForAgent($forAgent->getId());
}
if($form->isValid())
{
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$note->setUpdatedId($user_id);
/* Gestión de eventos en Log */
$user_lastname = $user_logueado->getLastname();
$user_name = $user_logueado->getName();
$user_email = $user_logueado->getEmail();
$user_rol = $user_logueado->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
try{
$em->persist($note);
$em->flush();
$event = 'The Note has been updated succesfully.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensaje', $successMessage);
$logger->info($event_complete.' | '.$event);
} catch (\Exception $e){
$event = 'An error occurred: '.$e->getMessage();
/* Para el log */
$logger->error($event_complete.' | '.$event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajeerror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
}else{
$errorMessage = $this->translator->trans('Error, some fields are empty');
$this->addFlash('mensajeerror', $errorMessage);
}
return $this->redirectToRoute('homepage');
}
/**
* @Route("widget/notes/delete/{id}", name="Widget_notes_delete")
*
*/
public function deleteNotesAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$var = $em->getRepository(WidgetNotes::class);
$delete = $var->findOneById($id);
$em->remove($delete);
$em->flush();
/*$response = array(
'title' => $this->translator->trans("Perfect"),
'msg' => $this->translator->trans('The remider was removed successfully'),
);*/
$this->addFlash('mensaje',$this->translator->trans("The remider was removed successfully"));
return $this->redirectToRoute('homepage');
}
/**
* @Route("/widget/notes/events", name="get_widget_notes_select")
*/
public function widgetNotesSelectAction(Request $request) {
$session = new Session();
$token=$session->get('tokenGoogleCalendar');
if (!is_null($token)) {
$this->googleCalendar->setAccessToken($token);
$connectGoogle = "1";
}else{
$connectGoogle = "0";
}
$em = $this->getDoctrine()->getManager();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$wnotesprivate = $em->getRepository(WidgetNotes::class)->findBy(
array('createdId' => $user_id, 'audience' => '0'),
array('dateAt' => 'ASC')
);
$wnotesprivateasig = $em->getRepository(WidgetNotes::class)->findBy(
array('forAgent' => $user_id),
array('dateAt' => 'ASC')
);
$wnotespublic = $em->getRepository(WidgetNotes::class)->findBy(
array('audience' => '1'),
array('dateAt' => 'ASC')
);
$datos = array();
$datosprivate = array();
$datosprivateasig = array();
$datospublic = array();
if (!empty($wnotesprivate)){
foreach($wnotesprivate as $wnotespr){
if ($connectGoogle == 1){
$egcuno = '<a href="/calendar/addEvent/wn/'.$wnotespr->getId().'" class="text-white"><i class="icon-google-plus2"></i></a>';
}else{
$egcuno = '';
}
$tooltip = $wnotespr->getTitle()."<br>".$wnotespr->getMessage()."<br><br>";
$datosprivate[] = array(
"id" => $wnotespr->getId(),
"title" => $egcuno.' <a href="/widget/notes/delete/'.$wnotespr->getId().'" class="sweet_warning text-white pull-right"><i class="icon-trash"></i></a>'.$wnotespr->getTitle(),
"tooltip" => $tooltip,
"date" => $wnotespr->getdateAt(),
"color" => '#FAA200',
"url" => "/widget/notes/edit/".$wnotespr->getId()
);
}
}
if (!empty($wnotesprivateasig ) ){
foreach($wnotesprivateasig as $wnotespras){
if ($connectGoogle == 1){
$egcdos = '<a href="/calendar/addEvent/wn/'.$wnotespras->getId().'" class="text-white"><i class="icon-google-plus2"></i></a>';
}else{
$egcdos = '';
}
$tooltip = $wnotespras->getTitle()."<br>".$wnotespras->getMessage()."<br><br>";
$datosprivateasig[] = array(
"id" => $wnotespras->getId(),
"title" => $egcdos." Assignment: ".$wnotespras->getTitle(),
"tooltip" => $tooltip,
"date" => $wnotespras->getdateAt(),
"color" => '#FAA200',
"url" => "#"
);
}
}
if (!empty($wnotespublic)){
foreach($wnotespublic as $wnotespu){
if ($wnotespu->getCreatedId() == $user_id){
$deleted = '<a href="/widget/notes/delete/'.$wnotespu->getId().'" class="sweet_warning text-white pull-right"><i class="icon-trash"></i></a>';
}else{
$deleted = '';
}
if ($connectGoogle == 1){
$egctres = '<a href="/calendar/addEvent/wn/'.$wnotespu->getId().'" class="text-white"><i class="icon-google-plus2"></i></a> ';
}else{
$egctres = '';
}
$tooltip = $wnotespu->getTitle()."<br>".$wnotespu->getMessage()."<br><br>";
$datospublic[] = array(
"id" => $wnotespu->getId(),
"title" => $egctres.$deleted.$wnotespu->getTitle(),
"tooltip" => $tooltip,
"date" => $wnotespu->getdateAt(),
"color" => '#F7D358',
"url" => "#"
);
}
}
$datos = array_merge($datosprivate, $datosprivateasig, $datospublic);
$return = array(
'notes' => $datos,
);
$response = new JsonResponse($return);
return $response;
}
}