Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fullcalendar Symfony

Un exemple sous Symfony SVP

    31 août 2017 à 16:28:39

    Bonjour!!

    Cela fait plusieurs semaine que j'essaye de mettre en place un agenda avec fullcalendar sur mon projet symfony et cela s'avère être plus compliquer que prévu. Je ne parvient malheureusement pas a faire tout ce que je veux... J'arrive a ajouter des evenements, les afficher sur la vue mensuelle mais je n'arrive pas à les afficher par créneau horaire par exemple... il existe des exemples sur le net avec PHP-MySQL mais rien sous Symfony avec les contrôleurs qui vont avec et surtout le JS avec toutes les animations qui peuvent rendre l'expérience utilisateur plus agréable!!

    Alors si l'un d'entre vous souhaite faire une bonne action?? je pense que c'est le bon moment!!SVP!! HELP!!!

    • Partager sur Facebook
    • Partager sur Twitter
      25 décembre 2017 à 19:01:07




      Les actions:

       /**
           * Chargement des évenements.
           * @param Request $request
           * @return JsonResponse
           */
          public function loadAction(Request $request)
          {
              //$user = $this->get('security.token_storage')->getToken()->getUser();
              //$idUser = $user->getId();
              //dump($idUser);die();
              /** Recupération session */
              $session = $this->get("session");
              $idUser = $session->get('idUser');//Recupération de l'utilisateur en cours
              $userSelected = $session->get('userSelected');//Recupération de l'utilisateur selectionné pour affichage planning
      
              //dump($idUser, $userSelected);die();
              $em = $this->getDoctrine()->getManager();
              $evenements = $em->getRepository('MALrmBundle:CalendarEvent')->findAll();
      
      
              $calendarService = $this->get('ma_lrm_bundle.service.listener');
              $events = array();
      
              if (empty($userSelected))
              {
                  //$listeCandidat = $em->getRepository('MALrmBundle:Candidat')->findBy(array('chargeRecrutement' => $idUser));
                  foreach ($evenements as $key => $evenement)
                  {
                      //dump($evenement);die();
                      if ($evenement->getChargeRecrutement()->getId() == $idUser)
                      {
                          //Retourne les évenements de l'utilisateur en cours
                          $events[] = $calendarService->loadData($evenement);
                      }
      
                  }
              } else{
                  foreach ($evenements as $key => $evenement)
                  {
                      //dump($evenement);die();
                      if ($evenement->getChargeRecrutement()->getId() == $userSelected)
                      {
                          //Retourne les évenements de l'utilisateur selectionné
                          $events[] = $calendarService->loadData($evenement);
                      }
      
                  }
              }
      
              return new JsonResponse($events);
          }



      /**
           * Edite un evenement par redimensionement
           * @param Request $request
           * @return Response
           */
          public function resizeEventAction(Request $request)
          {
            if ($request->isXmlHttpRequest())
            {
                $idEvent = $request->request->get('id');
                $startDate = $request->request->get('start');
                $endDate = $request->request->get('end');
      
                $em = $this->getDoctrine()->getManager();
                $rst = $em->getRepository('AppBundle:CalendarEvent')->resizeEvent($idEvent,$startDate,$endDate);
      
            }
      
              return new Response("Erreur.");
          }
      
          /**
           * Edite un évenement par glissement
           * @param Request $request
           * @return Response
           */
          public function dropEventAction(Request $request)
          {
              if ($request->isXmlHttpRequest())
              {
                  $idEvent = $request->request->get('id');
                  $startDate = $request->request->get('start');
                  $endDate = $request->request->get('end');
      
                  $em = $this->getDoctrine()->getManager();
                  $rst = $em->getRepository('AppBundle:CalendarEvent')->dropEvent($idEvent,$startDate,$endDate);
      
              }
      
              return new Response("Erreur.");
          }
      
          /**
           * Suppression d'un évenement
           * @param Request $request
           * @return Response
           */
          public function deleteEventAction(Request $request)
          {
              if ($request->isXmlHttpRequest())
              {
                  $idEvent = $request->request->get('id');
                  
                  $em = $this->getDoctrine()->getManager();
                  $rst = $em->getRepository('AppBundle:CalendarEvent')->deleteEvent($idEvent);
      
              }
      
              return new Response("Erreur.");
          }
      
          /**
           * Edite un évenement par son titre et commentaire
           * @param Request $request
           * @return Response
           */
          public function editEventAction(Request $request)
          {
              if ($request->isXmlHttpRequest())
              {
                  $idEvent = $request->request->get('id');
                  $newTitle = $request->request->get('new_title');
                  $newComm = $request->request->get('new_comm');
      
                  $em = $this->getDoctrine()->getManager();
                  $rst = $em->getRepository('AppBundle:CalendarEvent')->editEvent($idEvent, $newTitle, $newComm);
      
              }
      
              return new Response("Erreur.");
          }
      

      Le Repository:

      <?php
      
      namespace AppBundle\Repository;
      
      /**
       * CalendarEventRepository
       *
       * This class was generated by the Doctrine ORM. Add your own custom
       * repository methods below.
       */
      class CalendarEventRepository extends \Doctrine\ORM\EntityRepository
      {
          public function resizeEvent($idEvent, $startDate, $endDate)
          {
              return $this
                  ->createQueryBuilder('e')
                  ->update('AppBundle:CalendarEvent', 'e')
                  ->set('e.startDate', '?1')
                  ->set('e.endDate', '?2')
                  ->where('e.id = ?3')
                  ->setParameter(1, $startDate)
                  ->setParameter(2, $endDate)
                  ->setParameter(3, $idEvent)
                  ->getQuery()
                  ->getResult();
          }
      
          public function dropEvent($idEvent, $startDate, $endDate)
          {
              return $this
                  ->createQueryBuilder('e')
                  ->update('AppBundle:CalendarEvent', 'e')
                  ->set('e.startDate', '?1')
                  ->set('e.endDate', '?2')
                  ->where('e.id = ?3')
                  ->setParameter(1, $startDate)
                  ->setParameter(2, $endDate)
                  ->setParameter(3, $idEvent)
                  ->getQuery()
                  ->getResult();
          }
      
          public function editEvent($idEvent, $newTitle, $newComm)
          {
              return $this
                  ->createQueryBuilder('e')
                  ->update('AppBundle:CalendarEvent', 'e')
                  ->set('e.title', '?1')
                  ->set('e.commentaire', '?2')
                  ->where('e.id = ?3')
                  ->setParameter(1, $newTitle)
                  ->setParameter(2, $newComm)
                  ->setParameter(3, $idEvent)
                  ->getQuery()
                  ->getResult();
          }
      
          public function deleteEvent($idEvent)
          {
              return $this
                  ->createQueryBuilder('e')
                  ->delete('AppBundle:CalendarEvent', 'e')
                  ->where('e.id = ?1')
                  ->setParameter(1, $idEvent)
                  ->getQuery()
                  ->getResult();
          }
      }

      Les routes:

      ma_lrm_calendar:
          path:     /accueil/calendar
          defaults: { _controller: MALrmBundle:Index:load }
          methods:  [GET, POST]



      appBundle_resize:
          path:     /accueil/calendar/resize
          defaults: { _controller: appBundle:Index:resizeEvent }
          methods:  [GET, POST]
      
      appBundle_drop:
          path:     /accueil/calendar/drop
          defaults: { _controller: appBundle:Index:dropEvent }
          methods:  [GET, POST]
      
      appBundle_delete:
          path:     /accueil/calendar/delete
          defaults: { _controller: appBundle:Index:deleteEvent }
          methods:  [GET, POST]
      
      appBundle_selectUser:
          path:     /accueil/calendar/select/user
          defaults: { _controller: appBundle:Index:selectUser }
          methods:  [GET, POST]
      
      appBundle_editEvent:
          path:     /accueil/calendar/edit/title
          defaults: { _controller: appBundle:Index:editEvent }
          methods:  [GET, POST]

      Et le JS

      /**
       * Created by PC on 31/07/2017.
       */
      
      $(document).ready(function() {
      
      
          $('#calendar').fullCalendar({
              header: {
                  left: 'prev, next',
                  center: 'title',
                  right: 'month, agendaWeek, agendaDay'
              },
              timezone: ('Europe/London'),
              businessHours: {
                  start: '09:00',
                  end: '18:30',
                  dow: [1, 2, 3, 4, 5]
              },
              allDaySlot: true,
              defaultView: 'agendaWeek',
              lazyFetching: true,
              firstDay: 1,
              selectable: true,
              /*timeFormat: {
                  agenda: 'h:mmt',
                  '': 'h:mmt'
              },*/
              editable: true,
              eventDurationEditable: true,
              events: 'http://.../admin/accueil/calendar',
      
      
              eventResize: function(event) {
                  console.log("Entrée dans : eventResize");
                  var start1 = event.start.format("YYYY-MM-DD HH:mm:ss");
                  var end1 = event.end.format("YYYY-MM-DD HH:mm:ss");
                  var xhr = $.ajax({
                      type: "POST",
                      url: 'https://.../admin/accueil/calendar/resize',
                      data: 'action=update&title=' + event.title + '&start=' + start1 + '&end=' + end1 + '&id=' + event.id,
                      success: function(data) {
                          console.log(data);
                          window.location.reload(true);
                      },
                      error: function() {
                          alert("erreur lors de l'appel de l'url dans POST event/resize : contactez l'administrateur du site");
                      },
                  });
              },
      
      
      
              eventDrop: function(event){
                  console.log("Entrée dans : eventDrop");
                  console.log(event);
                  var start1 = event.start.format("YYYY-MM-DD HH:mm:ss");
                  var end1 = event.end.format("YYYY-MM-DD HH:mm:ss");
      
                  var xhr = $.ajax({
      
                      url: 'https://.../admin/accueil/calendar/drop',
                      data: 'action=update&title=' + event.title+'&start=' + start1 +'&end=' + end1 + '&id=' + event.id ,
                      type: "POST",
                      success: function(data) {
                          console.log(data);
                          window.location.reload(true);
                          //alert(json);
                      },
                      error: function() {
                          alert("erreur lors de l'appel de l'url dans POST event/drop : contactez l'administrateur du site");
                      },
                  });
              },
      
              eventClick:  function(event, jsEvent, view) {
                  endtime = $.fullCalendar.moment(event.end).format('H:mm');
                  starttime = $.fullCalendar.moment(event.start).format('dddd, Do MMMM  YYYY, H:mm');
                  isAllDay = $.fullCalendar.moment(event.start).format('dddd, Do MMMM  YYYY');
      
                  var mywhen = starttime + ' - ' + endtime;
                  console.log(event);
                  console.log(event.commentaire);
                  $('#modalTitle').html(event.title);
                  if(event.allDay == true) {
                      $('#modalWhen').text(isAllDay);
                  }else {
                      $('#modalWhen').text(mywhen);
                  }
                  $('#modalComm').text(event.commentaire);
                  $('#eventID').val(event.id);
                  $('#calendarModal').modal();
              },
      
          });
      
          $('#deleteButton').on('click', function(e){
              // We don't want this to act as a link so cancel the link action
              confirm('Souhaitez-vous réellement supprimer cet événement?');
              e.preventDefault();
              doDelete();
          });
      
          function doDelete(){
              $("#calendarModal").modal('hide');
              var eventID = $('#eventID').val();
              $.ajax({
                  url: 'https://.../admin/accueil/calendar/delete',
                  data: 'action=delete&id='+eventID,
                  type: "POST",
                  success: function(json) {
                      if(json == 1){
                          $("#calendar").fullCalendar('removeEvents',eventID);
                      } else{
                          return false;
                      }
                  }
              });
              $(document).ajaxStop(function(){
                  window.location.reload();
              });
          }
      
          //Selection d'un autre utilisateur pour visualisation d'un autre planning
          $('#select_user_chargeRecrutement').change(function () {
              var idUser = $(this).val();
              console.log(idUser);
              if($(this).val() != null)
              {
                  $.ajax({
                      url: 'https://../admin/accueil/calendar/select/user',
                      data: 'action=selectUser&id='+idUser,
                      type: "POST",
                      //dataType : 'json'
                      success: function(data) {
                          console.log(data);
                          window.location.reload(true);
                          //alert(json);
                      },
                  });
              }
          });
      
          //Editer un evenement
          $('#editButton').on('click',function () {
              var eventID = $('#eventID').val();
              //window.location.reload(true);
              $("#editModal").modal('show');
              console.log('Entrée modal:ok');
              console.log(eventID);
      
              $('#saveButton').on('click', function(e){
                  var newTitle = $('.input_edit_title').val();
                  var newComm = $('.input_edit_comm').val();
                  console.log(newTitle);
                  $.ajax({
      
                      url: 'https://.../admin/accueil/calendar/edit/title',
                      data: 'action=editTitle&id='+eventID+ '&new title=' + newTitle+ '&new comm=' + newComm,
                      type: "POST",
                      //dataType : 'json'
                      success: function(data) {
                          console.log(data);
                          window.location.reload(true);
                          //alert(json);
                      },
                  });
              });
          });
          
      });
      
      
      

      Voila! ca devrait pouvoir aider...Ca fonctionne bien pour moi!!!



      -
      Edité par Ratpi@ 25 décembre 2017 à 20:03:38

      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2017 à 2:06:33

        Waouh !! Au moins ça le merite d’être direct et concis.un grand merci a toi .si tu le permet j’ai quelques questions. la 1 ère difficulte que je rencontre de mn côté , est de pouvoir afficher la liste de évents stockés en BD,sur le calendar .bien que  jai encode Le resultat via jsonResponse comme dn tn cas.
        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2017 à 11:34:20

          Pense a vérifier cette ligne dans ta config:

          framework:
              #...
              serializer: { enable_annotations: true }

          Après, je ne sais pas trop comment tu t'y prend...mais pour ma part j'ai apporté quelque modif au bundle que j'ai utilisé (https://github.com/ancarebeca/FullCalendarBundle).

          La classe abstrait FullcalendarEvent.php:

          <?php
          
          namespace AncaRebeca\FullCalendarBundle\Model;
          
          abstract class FullCalendarEvent
          {
              /**
               * @var string
               */
              protected $title;
          
              /**
               * @var \DateTime
               */
              protected $startDate;
          
              /**
               * @param string $title
               * @param \DateTime $start
               */
          /*    public function __construct($title, \DateTime $start)
              {
                  $this->title = $title;
                  $this->startDate = $start;
              }*/
          
              /**
               * @return array
               */
              abstract public function toArray();
          }


          La classe Event.php:

          <?php
          
          namespace AncaRebeca\FullCalendarBundle\Model;
          
          use Doctrine\ORM\Mapping as ORM;
          
          class Event extends FullCalendarEvent
          {
              /**
               * @var integer
               * @ORM\Column(name="id", type="integer")
               * @ORM\Id
               * @ORM\GeneratedValue(strategy="AUTO")
               */
              protected $id;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="title",  nullable = true)
               */
              protected $title;
              /**
               * @var boolean
               * @ORM\Column(type="boolean", name="allDay", nullable = true)
               */
              protected $allDay;
              /**
               * @var \DateTime
               * @ORM\Column(type="datetime", name="event_start")
               */
              protected $startDate;
              /**
               * @var \DateTime
               * @ORM\Column(type="datetime", name="event_end")
               */
              protected $endDate;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="url", nullable = true)
               */
              protected $url;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="className", nullable = true)
               */
              protected $className;
              /**
               * @var boolean
               * @ORM\Column(type="boolean", name="editable", nullable = true)
               */
              protected $editable = true;
              /**
               * @var boolean
               * @ORM\Column(type="boolean", name="strartEditable", nullable = true)
               */
              protected $startEditable = true;
              /**
               * @var boolean
               * @ORM\Column(type="boolean", name="durationEditable", nullable = true)
               */
              protected $durationEditable = true;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="rendering", nullable = true)
               */
              protected $rendering;
              /**
               * @var boolean
               * @ORM\Column(type="boolean", name="overlap", nullable = true)
               */
              protected $overlap = true;
              /**
               * @var integer
               * @ORM\Column(type="integer", name="event_constraint", nullable = true)
               */
              protected $constraint;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="event_source", nullable = true)
               */
              protected $source;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="color", nullable = true)
               */
              protected $color;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="backgroundColor", nullable = true)
               */
              protected $backgroundColor;
              /**
               * @var string
               * @ORM\Column(type="string", length=255, name="textColor", nullable = true)
               */
              protected $textColor;
              /**
               * @var array
               * @ORM\Column(type="array", name="customFields", nullable = true)
               */
              protected $customFields = [];
          
              /**
               * @param string $title
               * @param \DateTime $start
               */
             /* public function __construct($title, \DateTime $start)
              {
                  parent::__construct($title, $start);
                  $this->title = $title;
                  $this->startDate = $start;
              }*/
          
              /**
               * @return int
               */
              public function getId()
              {
                  return $this->id;
              }
          
              /**
               * @param int $id
               */
              public function setId($id)
              {
                  $this->id = $id;
              }
          
              /**
               * @return string
               */
              public function getTitle()
              {
                  return $this->title;
              }
          
              /**
               * @param string $title
               */
              public function setTitle($title)
              {
                  $this->title = $title;
              }
          
              /**
               * @return boolean
               */
              public function isAllDay()
              {
                  return $this->allDay;
              }
          
              /**
               * @param boolean $allDay
               */
              public function setAllDay($allDay)
              {
                  $this->allDay = $allDay;
              }
          
              /**
               * @return \DateTime
               */
              public function getStartDate()
              {
                  return $this->startDate;
              }
          
              /**
               * @param \DateTime $startDate
               */
              public function setStartDate(\DateTime $startDate)
              {
                  $this->startDate = $startDate;
              }
          
              /**
               * @return \DateTime
               */
              public function getEndDate()
              {
                  return $this->endDate;
              }
          
              /**
               * @param \DateTime $endDate
               */
              public function setEndDate(\DateTime $endDate)
              {
                  $this->endDate = $endDate;
              }
          
              /**
               * @return string
               */
              public function getUrl()
              {
                  return $this->url;
              }
          
              /**
               * @param string $url
               */
              public function setUrl($url)
              {
                  $this->url = $url;
              }
          
              /**
               * @return string
               */
              public function getClassName()
              {
                  return $this->className;
              }
          
              /**
               * @param string $className
               */
              public function setClassName($className)
              {
                  $this->className = $className;
              }
          
              /**
               * @return boolean
               */
              public function isEditable()
              {
                  return $this->editable;
              }
          
              /**
               * @param boolean $editable
               */
              public function setEditable($editable)
              {
                  $this->editable = $editable;
              }
          
              /**
               * @return boolean
               */
              public function isStartEditable()
              {
                  return $this->startEditable;
              }
          
              /**
               * @param boolean $startEditable
               */
              public function setStartEditable($startEditable)
              {
                  $this->startEditable = $startEditable;
              }
          
              /**
               * @return boolean
               */
              public function isDurationEditable()
              {
                  return $this->durationEditable;
              }
          
              /**
               * @param boolean $durationEditable
               */
              public function setDurationEditable($durationEditable)
              {
                  $this->durationEditable = $durationEditable;
              }
          
              /**
               * @return string
               */
              public function getRendering()
              {
                  return $this->rendering;
              }
          
              /**
               * @param string $rendering
               */
              public function setRendering($rendering)
              {
                  $this->rendering = $rendering;
              }
          
              /**
               * @return boolean
               */
              public function isOverlap()
              {
                  return $this->overlap;
              }
          
              /**
               * @param boolean $overlap
               */
              public function setOverlap($overlap)
              {
                  $this->overlap = $overlap;
              }
          
              /**
               * @return int
               */
              public function getConstraint()
              {
                  return $this->constraint;
              }
          
              /**
               * @param int $constraint
               */
              public function setConstraint($constraint)
              {
                  $this->constraint = $constraint;
              }
          
              /**
               * @return string
               */
              public function getSource()
              {
                  return $this->source;
              }
          
              /**
               * @param string $source
               */
              public function setSource($source)
              {
                  $this->source = $source;
              }
          
              /**
               * @return string
               */
              public function getColor()
              {
                  return $this->color;
              }
          
              /**
               * @param string $color
               */
              public function setColor($color)
              {
                  $this->color = $color;
              }
          
              /**
               * @return string
               */
              public function getBackgroundColor()
              {
                  return $this->backgroundColor;
              }
          
              /**
               * @param string $backgroundColor
               */
              public function setBackgroundColor($backgroundColor)
              {
                  $this->backgroundColor = $backgroundColor;
              }
          
              /**
               * @return string
               */
              public function getTextColor()
              {
                  return $this->textColor;
              }
          
              /**
               * @param string $textColor
               */
              public function setTextColor($textColor)
              {
                  $this->textColor = $textColor;
              }
          
              /**
               * @param $name
               * @param $value
               *
               * @return mixed
               */
              public function setCustomField($name, $value)
              {
                  $this->customFields[$name] = $value;
              }
          
              /**
               * @param $name
               *
               * @return mixed
               */
              public function getCustomFieldValue($name)
              {
                  return $this->customFields[$name];
              }
          
              /**
               * @return array
               */
              public function getCustomFields()
              {
                  return $this->customFields;
              }
          
              /**
               * @param $name
               *
               * @return mixed
               */
              public function removeCustomField($name)
              {
                  if (!isset($this->customFields[$name]) && !array_key_exists($name, $this->customFields)) {
                      return null;
                  }
          
                  $removed = $this->customFields[$name];
                  unset($this->customFields[$name]);
          
                  return $removed;
              }
          
              /**
               * @return array
               */
              public function toArray()
              {
                  $event = [];
                  if (null !== $this->getId()) {
                      $event['id'] = $this->getId();
                  }
                  $event['title']             = $this->getTitle();
                  $event['allDay']            = $this->isAllDay();
                  $event['start']             = $this->getStartDate()->format('Y-m-d\TH:i:s');
                  if (null !== $this->getEndDate()) {
                      $event['end'] = $this->getEndDate()->format('Y-m-d\TH:i:s');
                  }
                  $event['commentaire'] = $this->getCommentaire();
                  $event['chargeRecrutement'] = $this->getChargeRecrutement();
          
                  /*if (null !== $this->getChargeRecrutement()) {
                      $event['chargeRecrutement'] = $this->getChargeRecrutement();
                  }*/
                  $event['editable']          = $this->isEditable();
                  $event['startEditable']     = $this->isStartEditable();
                  $event['durationEditable']  = $this->isDurationEditable();
                  $event['overlap']           = $this->isOverlap();
          
          
          
                  if (null !== $this->getUrl()) {
                      $event['url'] = $this->getUrl();
                  }
          
                  if (null !== $this->getBackgroundColor()) {
                      $event['backgroundColor'] = $this->getBackgroundColor();
                  }
          
                  if (null !== $this->getTextColor()) {
                      $event['textColor'] = $this->getTextColor();
                  }
          
                  if (null !== $this->getClassName()) {
                      $event['className'] = $this->getClassName();
                  }
          
          
                  if (null !== $this->getRendering()) {
                      $event['rendering'] = $this->getRendering();
                  }
          
                  if (null !== $this->getConstraint()) {
                      $event['constraint'] = $this->getConstraint();
                  }
          
                  if (null !== $this->getSource()) {
                      $event['source'] = $this->getSource();
                  }
          
                  if (null !== $this->getColor()) {
                      $event['color'] = $this->getColor();
                  }
          
                  if (!empty($this->getCustomFields()))
                  {
                      foreach ($this->getCustomFields() as $field => $value) {
                          $event[$field] = $value;
                      }
                  }
          
          
                  return $event;
              }
          }

          Mon entité CalendarEvent:

          <?php
          
          namespace AppBundle\Entity;
          
          use Doctrine\ORM\Mapping as ORM;
          use AncaRebeca\FullCalendarBundle\Model\Event;
          use Symfony\Component\Validator\Constraints as Assert;
          
          /**
           * CalendarEvent
           *
           * @ORM\Table(name="calendar_event")
           * @ORM\Entity(repositoryClass="AppBundle\Repository\CalendarEventRepository")
           */
          class CalendarEvent extends Event
          {
          
              /**
               * @ORM\Id
               * @ORM\Column(type="integer")
               * @ORM\GeneratedValue(strategy="AUTO")
               */
              protected $id;
          
              /**
               * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", cascade={"persist"})
               * @ORM\JoinColumn(name="user_id", nullable=true)
               * @Assert\NotBlank()
               */
              private $chargeRecrutement;
          
              /**
               * @var string
               *
               * @ORM\Column(name="commentaire", type="string", length = 2000, nullable = true)
               */
              private $commentaire;
          
              
              /**
               * Get allDay
               *
               * @return boolean
               */
              public function getAllDay()
              {
                  return $this->allDay;
              }
          
              /**
               * Get editable
               *
               * @return boolean
               */
              public function getEditable()
              {
                  return $this->editable;
              }
          
              /**
               * Get startEditable
               *
               * @return boolean
               */
              public function getStartEditable()
              {
                  return $this->startEditable;
              }
          
              /**
               * Get durationEditable
               *
               * @return boolean
               */
              public function getDurationEditable()
              {
                  return $this->durationEditable;
              }
          
              /**
               * Get overlap
               *
               * @return boolean
               */
              public function getOverlap()
              {
                  return $this->overlap;
              }
          
              /**
               * Set customFields
               *
               * @param array $customFields
               *
               * @return CalendarEvent
               */
              public function setCustomFields($customFields)
              {
                  $this->customFields = $customFields;
          
                  return $this;
              }
          
              /**
               * Set chargeRecrutement
               *
               * @param \MA\UserBundle\Entity\User $chargeRecrutement
               *
               * @return CalendarEvent
               */
              public function setChargeRecrutement(AppBundle\Entity\User $chargeRecrutement = null)
              {
                  $this->chargeRecrutement = $chargeRecrutement;
          
                  return $this;
              }
          
              /**
               * Get chargeRecrutement
               *
               * @return \MA\UserBundle\Entity\User
               */
              public function getChargeRecrutement()
              {
                  return $this->chargeRecrutement;
              }
          
              /**
               * Set commentaire
               *
               * @param string $commentaire
               *
               * @return CalendarEvent
               */
              public function setCommentaire($commentaire)
              {
                  $this->commentaire = $commentaire;
          
                  return $this;
              }
          
              /**
               * Get commentaire
               *
               * @return string
               */
              public function getCommentaire()
              {
                  return $this->commentaire;
              }
          }
          

          LoadDataListener.php:

          <?php
          
          namespace AppBundle\Listener;
          
          
          use AncaRebeca\FullCalendarBundle\Model\FullCalendarEvent;
          use AppBundle\Entity\CalendarEvent as MyCustomEvent;
          
          
          class LoadDataListener
          {
              /**
               * @param MyCustomEvent $calendarEvent
               *
               * @return FullCalendarEvent[]
               */
          
              public function loadData(MyCustomEvent $calendarEvent)
              {
          
          /*        $title = $calendarEvent->getTitle();
                  $startDate = $calendarEvent->getStartDate();
                  $endDate = $calendarEvent->getEndDate();
                  $filters = $calendarEvent->getFilters();
          
                  //You may want do a custom query to populate the events
          
                  $calendarEvent->addEvent(new MyCustomEvent('Event Title 1', new \DateTime()));
                  $calendarEvent->addEvent(new MyCustomEvent('Event Title 2', new \DateTime()));*/
                  
                  return $calendarEvent->toArray();
              }
          }


           service.yml:

          # Learn more about services, parameters and containers at
          # http://symfony.com/doc/current/service_container.html
          parameters:
              #parameter_name: value
          
          services:
              app_bundle.service.listener:
                  class: AppBundle\Listener\LoadDataListener
                  arguments: [name: 'kernel.event_listener', event: 'fullcalendar.set_data', method: loadData]



          En gros...Pour afficher tes events,  tu récupère tous tes evenements par un findAll(), tu appelle ton propre service en lui passant en paramètre la variable qui contient le resultat de ta requete.

          Voila!! Je ne sais pas si j'ai oublié quelque chose?? Ca fait un pti moment que j'ai bossé dessus et je ne me rappelle plus de tout! J'ai simplement le souvenir que tout cela n'était pas évident à mettre en place...Pas trop de doc pour une utilisation sur symfony. Je suis en Symf 3.3



          • Partager sur Facebook
          • Partager sur Twitter
            26 décembre 2017 à 12:04:54

            Bonjour, d'accord .C'est donc le bundle FullCalendarBundle que tu as utilisé?.j'ai opté pour le plugin jquery Fullcalendar lui même que j'ai integré au projet. Dont voici l'action qui récupere et renvoie au format json la liste des évenements.J'ai peu être loupé quelque chose.
                public function listingEventAction(){
            
                    $em = $this->getDoctrine()->getManager();
            
                    $Evenements = $em->getRepository('BackBundle:EventCalendar')->listEvents();
            
                    foreach ($Evenements as $evenement){
                        $event[] =array(
                            'id'=> $evenement->getId(),
                            'title' => $evenement->getTitle(),
                            'start' => $evenement->getStart(),
                            'end' => $evenement->getEnd()
                        )
                        ;
                    }
            
                    $events = new JsonResponse($event);
            
                    return $events ;
            
                }

            les events format json.

            	
            0	
            id	17
            title	"test2"
            start	
            date	"2017-12-19 00:00:00.000000"
            timezone_type	3
            timezone	"Africa/Casablanca"
            end	null
            1 id 16 title "test1" start date "2017-12-14 00:00:00.000000" timezone_type 3 timezone "Africa/Casablanca" end date "2017-12-29 00:00:00.000000" timezone_type 3 timezone "Africa/Casablanca"
             

             ensuite linitialisation du calendar

                    $(function () {
                        var date = new Date();
                        var d = date.getDate();
                        var m = date.getMonth();
                        var y = date.getFullYear();
            
                         var url='{{ path('listEvent') }}';
             //req.ajax pour recuperer les"events" que renvoitl'Action
                        $.get(url,function (data) {
                            $.each(data,function (index,value) {
                                // alert(value.end.date);
                                titre = value.title;
                                debut = value.start.date;
                                fin = value.end.date
                            });
            
                        //initialisation du calendar
                        $('#calendare').fullCalendar({
            
                            selectable: true,
                            selectHelper: true,
                            columnFormat: 'dddd',
                            editable: true,
                            header: {
                                left: 'prev,next today',
                                center: 'title',
                                right: 'month,agendaWeek,agendaDay,listWeek'
                            },
                            allDayDefault: false,
                            defaultDate: '2017-12-12',
                            navLinks: true, // can click day/week names to navigate views
                            eventLimit: true, // allow "more" link when too many events
                            eventColor: '#378006',
                            buttonText: {
                                today:    "Aujourdh'ui",
                                month:    'mois',
                                week:     'semaine',
                                day:      'jour',
                                list:     'liste'
            
                            },
                            firstDay:1,
                            events: [
                                {
                                    title: titre,
                                    start: debut,
                                    end: fin
                                }
                            ]
                            ,
                            timeFormat: 'H(:mm)'
            
                        });






            -
            Edité par YannDeo 26 décembre 2017 à 12:12:24

            • Partager sur Facebook
            • Partager sur Twitter
              26 décembre 2017 à 12:31:55

              As tu essayé de passer directement l'url à l'attribut 'events':??

              Tu dois récuperer des données json sous le format suivant.

              [{"id":12,"title":"rdv argus","allDay":false,"start":"2017-11-17T11:00:00","end":"2017-11-17T14:00:00","commentaire":"TFTFTFTFT","chargeRecrutement":{},"editable":true,"startEditable":true,"durationEditable":true,"overlap":true,"backgroundColor":"#ee2930"}}]

              -
              Edité par Ratpi@ 26 décembre 2017 à 16:39:44

              • Partager sur Facebook
              • Partager sur Twitter
                3 mai 2018 à 9:21:13

                bonjour

                j'avais une question: je suis à la lettre les recommandations de "Ratpi@" mais j'ai juste des données json qui s'affiche dans mon navigateur.

                Le calendrier ne s'affiche pas avec les données.

                Est ce que j'ai oublié quelque chose?

                • Partager sur Facebook
                • Partager sur Twitter
                  18 août 2018 à 16:05:27

                  Bonjour

                  tu peux utiliser https://github.com/tattali/CalendarBundle la documentation est très complète

                  -
                  Edité par theoattali 24 mars 2019 à 23:42:54

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Fullcalendar Symfony

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown