php - Symfony2 - CalendarBundle - How to fetch user informations from database to render on calendar -
so, new symfony , i'm trying create functional calendar based application events rendered database using calendar-bundle.
passing documentation able make relationship between users , events rendered on calendar i'm stuck passing particular data, more user name.
below shown evententity responsible calendar event's details.
<?php namespace adesigns\calendarbundle\entity; /** * class holding calendar event's details. * * @author mike yudin <mikeyudin@gmail.com> */ class evententity { /** * @var mixed unique identifier of event (optional). */ protected $id; /** * @var string title/label of calendar event. */ protected $title; /** * @var string url relative current path. */ protected $url; /** * @var string html color code bg color of event label. */ protected $bgcolor; /** * @var string html color code foregorund color of event label. */ protected $fgcolor; /** * @var string css class event label */ protected $cssclass; /** * @var \datetime datetime object of event start date/time. */ protected $startdatetime; /** * @var \datetime datetime object of event end date/time. */ protected $enddatetime; /** * @var boolean day event? */ protected $allday = false; /** * @var array non-standard fields */ protected $otherfields = array(); public function __construct($title, \datetime $startdatetime, \datetime $enddatetime = null, $allday = false) { $this->title = $title; $this->startdatetime = $startdatetime; $this->setallday($allday); if ($enddatetime === null && $this->allday === false) { throw new \invalidargumentexception("must specify event end datetime if not day event."); } $this->enddatetime = $enddatetime; } /** * convert calendar event details array * * @return array $event */ public function toarray() { $event = array(); if ($this->id !== null) { $event['id'] = $this->id; } $event['title'] = $this->title; $event['start'] = $this->startdatetime->format("y-m-d\th:i:sp"); if ($this->url !== null) { $event['url'] = $this->url; } if ($this->bgcolor !== null) { $event['backgroundcolor'] = $this->bgcolor; $event['bordercolor'] = $this->bgcolor; } if ($this->fgcolor !== null) { $event['textcolor'] = $this->fgcolor; } if ($this->cssclass !== null) { $event['classname'] = $this->cssclass; } if ($this->enddatetime !== null) { $event['end'] = $this->enddatetime->format("y-m-d\th:i:sp"); } $event['allday'] = $this->allday; foreach ($this->otherfields $field => $value) { $event[$field] = $value; } return $event; } public function setid($id) { $this->id = $id; } public function getid() { return $this->id; } public function settitle($title) { $this->title = $title; } public function gettitle() { return $this->title; } public function seturl($url) { $this->url = $url; } public function geturl() { return $this->url; } public function setbgcolor($color) { $this->bgcolor = $color; } public function getbgcolor() { return $this->bgcolor; } public function setfgcolor($color) { $this->fgcolor = $color; } public function getfgcolor() { return $this->fgcolor; } public function setcssclass($class) { $this->cssclass = $class; } public function getcssclass() { return $this->cssclass; } public function setstartdatetime(\datetime $start) { $this->startdatetime = $start; } public function getstartdatetime() { return $this->startdatetime; } public function setenddatetime(\datetime $end) { $this->enddatetime = $end; } public function getenddatetime() { return $this->enddatetime; } public function setallday($allday = false) { $this->allday = (boolean) $allday; } public function getallday() { return $this->allday; } /** * @param string $name * @param string $value */ public function addfield($name, $value) { $this->otherfields[$name] = $value; } /** * @param string $name */ public function removefield($name) { if (!array_key_exists($name, $this->otherfields)) { return; } unset($this->otherfields[$name]); } }
besides have calendareventlistener.php responsible data sent render on calendar:
<?php namespace appbundle\eventlistener; use adesigns\calendarbundle\event\calendarevent; use adesigns\calendarbundle\entity\evententity; use doctrine\orm\entitymanager; class calendareventlistener { private $entitymanager; public function __construct(entitymanager $entitymanager) { $this->entitymanager = $entitymanager; } public function loadevents(calendarevent $calendarevent) { $startdate = $calendarevent->getstarteventdate(); $enddate = $calendarevent->getendeventdate(); // original request can filters calendar // use filter in query example $request = $calendarevent->getrequest(); $filter = $request->get('filter'); // load events using custom logic here, // instance, retrieving events repository $companyevents = $this->entitymanager->getrepository('appbundle:companyevents') ->createquerybuilder('companyevents') ->where('companyevents.starteventdate between :starteventdate , :endeventdate') ->setparameter('starteventdate', $startdate->format('y-m-d h:i:s')) ->setparameter('endeventdate', $enddate->format('y-m-d h:i:s')) ->getquery()->getresult(); // $companyevents , $companyevent in example // represent entities database, not instances of evententity // within bundle. // // create evententity instances , populate it's properties data // own entities/database values. foreach($companyevents $companyevent) { $evententity = new evententity($companyevent->geteventname(), // $companyevent->getstarteventdate(), $companyevent->getendeventdate() ,null, true); //optional calendar event settings $evententity->setallday(true); // default false, set true if day event $evententity->setbgcolor('#3366ff'); //set background color of event's label $evententity->setfgcolor('#ffffff'); //set foreground color of event's label $evententity->seturl('http://www.google.com'); // url send user when event label clicked $evententity->setcssclass('my-custom-class'); // custom class may want apply event labels //finally, add event calendarevent displaying on calendar $calendarevent->addevent($evententity); } } }
and companyevents entity structuring events:
<?php namespace appbundle\entity; use doctrine\orm\mapping orm; use symfony\component\security\core\user\userinterface; use doctrine\common\collections\arraycollection; /** * @orm\entity * @orm\table(name="companyevents") */ class companyevents { /** * @orm\column(name="id", type="integer") * @orm\id * @orm\generatedvalue(strategy="auto") */ private $id; /** * events created users * @orm\manytoone(targetentity="user", inversedby="events") * @orm\joincolumn(name="user_id", referencedcolumnname="id") */ private $user; /** * @orm\column(name="event_name") */ private $eventname; /** * @orm\column(name="event_date", type="datetime") */ private $eventdate; /** * @orm\column(name="starteventdate", type="datetime") */ private $starteventdate; /** * @orm\column(name="endeventdate", type="datetime") */ private $endeventdate; /** * set eventname * * @param string $eventname * * @return companyevents */ public function seteventname($eventname) { $this->eventname = $eventname; return $this; } /** * eventname * * @return string */ public function geteventname() { return $this->eventname; } /** * set eventdate * * @param string $eventdate * * @return companyevents */ public function seteventdate($eventdate) { $this->eventdate = $eventdate; return $this; } /** * eventdate * * @return string */ public function geteventdate() { return $this->eventdate; } /** * set start event date * @param string $starteventdate * * @return companyevents */ public function setstarteventdate($starteventdate) { $this->starteventdate = $starteventdate; return $this; } /** *get start event date * @return string */ public function getstarteventdate() { return $this->starteventdate; } /** * set start event date * @param string $endeventdate * * @return companyevents */ public function setendeventdate($endeventdate) { $this->endeventdate = $endeventdate; return $this; } /** *get start event date * @return string */ public function getendeventdate() { return $this->endeventdate; } /** * set user relationship * @param string $user_id * * @return companyevents */ public function setuser($user) { $this->user = $user; return $this; } /** * @return string */ public function getuser() { return $this->user; } /** * id * * @return integer */ public function getid() { return $this->id; }
}
so, problem instead of geteventname passed here:
$evententity = new evententity($companyevent->geteventname(), $companyevent->getstarteventdate(), $companyevent->getendeventdate() ,null, true);
i want pass particular user name belongs specific event when change geteventname() (which renders title of event) other function (i have tried pass user_id entity), nothing else shown in calendar without dumping error.
any hints on resolving problem hardly appreciated :) !
if want render username in event's title can change geteventname
method return user name:
public function geteventname() { return $this->user->getusername(); }
this way won't have change calendareventlistener
code.
remember remove eventname
property , it's setter method companyevents
entity. should name entity camelcased , in singular, companyevent
.
Comments
Post a Comment