improved install steps #6
26 changed files with 1045 additions and 3053 deletions
16
INSTALL.md
16
INSTALL.md
|
@ -10,9 +10,13 @@
|
||||||
|
|
||||||
Diese Anleitung geht davon aus das du SSH-Zugriff auf deinen Server hast. Wenn du Calcifer auf einem Shared-Hosting-Anbieter installieren willst, so ist dies auch möglich, aber etwas komplizierter und wird irgendwann später beschrieben.
|
Diese Anleitung geht davon aus das du SSH-Zugriff auf deinen Server hast. Wenn du Calcifer auf einem Shared-Hosting-Anbieter installieren willst, so ist dies auch möglich, aber etwas komplizierter und wird irgendwann später beschrieben.
|
||||||
|
|
||||||
1. Das [Repo](https://phablab.krautspace.de/diffusion/C/calcifer.git) irgendwo hin clonen
|
1. Das [Repo](https://phablab.krautspace.de/diffusion/C/calcifer.git) irgendwo hin clonen
|
||||||
2. In das calcifer Verzeichnis wechseln.
|
2. In das calcifer Verzeichnis wechseln.
|
||||||
3. composer install
|
3. Abhängigkeiten installieren
|
||||||
4. Im Verzeichnis app/config die Datei parameters.yml.dist nach parameters.yml kopieren und anpassen.
|
1. composer herunterladen ```curl -sS https://getcomposer.org/installer | php```
|
||||||
5. Dann die Tabellen erstellen: php app/console doctrine:schema:create
|
2. Installation ausführen: ```php composer.phar install```
|
||||||
6. Zum Schluss must du noch deinen Webserver [konfigurieren](http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html) und dann ist calcifer auch schon erreichbar.
|
5. Dann die Tabellen erstellen: ```php app/console doctrine:schema:update --force```
|
||||||
|
6. Cache löschen ```php app/console cache:clear --env=prod --no-debug```
|
||||||
|
7. Assets dumpen ```php app/console assetic:dump --env=prod --no-debug```
|
||||||
|
8. Einen täglichen Cronjob anlegen, der die wiederholenden Termine anlegt: ```php app/console calcifer:events:generate```
|
||||||
|
6. Zum Schluss must du noch deinen Webserver [konfigurieren](http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html) und dann ist calcifer auch schon erreichbar.
|
||||||
|
|
88
src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php
Executable file
88
src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php
Executable file
|
@ -0,0 +1,88 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: tim
|
||||||
|
* Date: 28.07.14
|
||||||
|
* Time: 22:19
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Hackspace\Bundle\CalciferBundle\Command;
|
||||||
|
|
||||||
|
|
||||||
|
use Doctrine\ORM\EntityManager;
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Entity\Event;
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Entity\RepeatingEvent;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class GenerateEventsCommand extends ContainerAwareCommand
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setName('calcifer:events:generate')
|
||||||
|
->setDescription('Generate events from repeating events')
|
||||||
|
->addOption('duration', 'd', InputOption::VALUE_OPTIONAL, 'The duration you want to generate events into the future. Default is 2 monts','2 months')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$duration = \DateInterval::createFromDateString($input->getOption('duration'));
|
||||||
|
if ($duration instanceof \DateInterval) {
|
||||||
|
$now = new \DateTime();
|
||||||
|
$end = new \DateTime();
|
||||||
|
$end->add($duration);
|
||||||
|
$output->writeln(sprintf("Generating Dates from %s to %s",$now->format('Y-m-d'),$end->format('Y-m-d')));
|
||||||
|
$output->writeln("Fetching repeating events");
|
||||||
|
/** @var EntityManager $entityManager */
|
||||||
|
$entityManager = $this->getContainer()->get('doctrine')->getManager();
|
||||||
|
$repo = $entityManager->getRepository('CalciferBundle:RepeatingEvent');
|
||||||
|
$entities = $repo->findAll();
|
||||||
|
foreach($entities as $entity) {
|
||||||
|
/** @var RepeatingEvent $entity */
|
||||||
|
$period = new \DatePeriod($entity->nextdate,new \DateInterval($entity->repeating_pattern),$end);
|
||||||
|
$event = null;
|
||||||
|
foreach($period as $date) {
|
||||||
|
/** @var \DateTime $date */
|
||||||
|
$output->writeln(sprintf("Creating Event %s for %s",$entity->summary,$date->format('Y-m-d H:i')));
|
||||||
|
$event = new Event();
|
||||||
|
$event->location = $entity->location;
|
||||||
|
$event->startdate = $date;
|
||||||
|
if ($entity->duration > 0) {
|
||||||
|
$duration = new \DateInterval("PT".$entity->duration.'H');
|
||||||
|
/** @var \DateTime $enddate */
|
||||||
|
$enddate = clone $date;
|
||||||
|
$enddate->add($duration);
|
||||||
|
$entity->enddate = $enddate;
|
||||||
|
}
|
||||||
|
$event->summary = $entity->summary;
|
||||||
|
$event->description = $entity->description;
|
||||||
|
$event->url = $entity->url;
|
||||||
|
$entityManager->persist($event);
|
||||||
|
$entityManager->flush();
|
||||||
|
$event->slug = \URLify::filter($event->id . '-' . $event->summary,255,'de');
|
||||||
|
$entityManager->persist($event);
|
||||||
|
$entityManager->flush();
|
||||||
|
foreach($entity->getTags() as $tag) {
|
||||||
|
$event->addTag($tag);
|
||||||
|
}
|
||||||
|
$entityManager->persist($event);
|
||||||
|
$entityManager->flush();
|
||||||
|
}
|
||||||
|
if (!is_null($event)) {
|
||||||
|
$entity->nextdate = $event->startdate;
|
||||||
|
$entity->nextdate->add(new \DateInterval($entity->repeating_pattern));
|
||||||
|
$entityManager->persist($entity);
|
||||||
|
$entityManager->flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$output->writeln('Invalid duration');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,76 +59,8 @@ class EventController extends Controller
|
||||||
public function createAction(Request $request)
|
public function createAction(Request $request)
|
||||||
{
|
{
|
||||||
$entity = new Event();
|
$entity = new Event();
|
||||||
$entity->setDescription($request->get('description'));
|
|
||||||
$entity->setSummary($request->get('summary'));
|
|
||||||
$entity->setUrl($request->get('url'));
|
|
||||||
$startdate = $request->get('startdate');
|
|
||||||
$startdate = new \DateTime($startdate);
|
|
||||||
$entity->setStartdate($startdate);
|
|
||||||
$entity->setSlug(\URLify::filter($entity->getSummary(),255,'de'));
|
|
||||||
|
|
||||||
$enddate = $request->get('enddate');
|
$em = $this->saveEvent($request, $entity);
|
||||||
if (strlen($enddate) > 0) {
|
|
||||||
$enddate = new \DateTime($enddate);
|
|
||||||
$entity->setenddate($enddate);
|
|
||||||
}
|
|
||||||
|
|
||||||
$location = $request->get('location');
|
|
||||||
$location_lat = $request->get('location_lat');
|
|
||||||
$location_lon = $request->get('location_lon');
|
|
||||||
if (strlen($location) > 0) {
|
|
||||||
// check if the location already exists
|
|
||||||
/** @var EntityManager $em */
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
$repo = $em->getRepository('CalciferBundle:Location');
|
|
||||||
$results = $repo->findBy(['name' => $location]);
|
|
||||||
if (count($results) > 0) {
|
|
||||||
$location_obj = $results[0];
|
|
||||||
if (strlen($location_lat) > 0) {
|
|
||||||
$location_obj->setLat($location_lat);
|
|
||||||
}
|
|
||||||
if (strlen($location_lon) > 0) {
|
|
||||||
$location_obj->setLon($location_lon);
|
|
||||||
}
|
|
||||||
$em->persist($location_obj);
|
|
||||||
$em->flush();
|
|
||||||
$entity->setLocation($results[0]);
|
|
||||||
} else {
|
|
||||||
$location_obj = new Location();
|
|
||||||
$location_obj->setName($location);
|
|
||||||
if (strlen($location_lat) > 0) {
|
|
||||||
$location_obj->setLat($location_lat);
|
|
||||||
}
|
|
||||||
if (strlen($location_lon) > 0) {
|
|
||||||
$location_obj->setLon($location_lon);
|
|
||||||
}
|
|
||||||
$location_obj->setSlug(\URLify::filter($location_obj->getName(),255,'de'));
|
|
||||||
$em->persist($location_obj);
|
|
||||||
$em->flush();
|
|
||||||
$entity->setLocation($location_obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$tags = $request->get('tags');
|
|
||||||
if (strlen($tags) > 0) {
|
|
||||||
$tags = explode(',',$tags);
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
$repo = $em->getRepository('CalciferBundle:Tag');
|
|
||||||
foreach ($tags as $tag) {
|
|
||||||
$tag = trim($tag);
|
|
||||||
$results = $repo->findBy(['name' => $tag]);
|
|
||||||
if (count($results) > 0) {
|
|
||||||
$entity->addTag($results[0]);
|
|
||||||
} else {
|
|
||||||
$tag_obj = new Tag();
|
|
||||||
$tag_obj->setName($tag);
|
|
||||||
$tag_obj->setSlug(\URLify::filter($tag_obj->getName(),255,'de'));
|
|
||||||
$em->persist($tag_obj);
|
|
||||||
$em->flush();
|
|
||||||
$entity->addTag($tag_obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if ($entity->isValid()) {
|
if ($entity->isValid()) {
|
||||||
|
@ -136,7 +68,7 @@ class EventController extends Controller
|
||||||
$em->persist($entity);
|
$em->persist($entity);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->getSlug())));
|
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->slug)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
@ -236,18 +168,42 @@ class EventController extends Controller
|
||||||
throw $this->createNotFoundException('Unable to find Event entity.');
|
throw $this->createNotFoundException('Unable to find Event entity.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$entity->setDescription($request->get('description'));
|
$em = $this->saveEvent($request, $entity);
|
||||||
$entity->setSummary($request->get('summary'));
|
|
||||||
$entity->setUrl($request->get('url'));
|
|
||||||
|
if ($entity->isValid()) {
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$em->persist($entity);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->slug)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'entity' => $entity,
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @param $entity
|
||||||
|
* @return EntityManager
|
||||||
|
*/
|
||||||
|
public function saveEvent(Request $request, Event $entity)
|
||||||
|
{
|
||||||
|
$entity->description = $request->get('description');
|
||||||
|
$entity->summary = $request->get('summary');
|
||||||
|
$entity->url = $request->get('url');
|
||||||
$startdate = $request->get('startdate');
|
$startdate = $request->get('startdate');
|
||||||
$startdate = new \DateTime($startdate);
|
$startdate = new \DateTime($startdate);
|
||||||
$entity->setStartdate($startdate);
|
$entity->startdate = $startdate;
|
||||||
$entity->setSlug(\URLify::filter($entity->getSummary(),255,'de'));
|
$entity->slug = \URLify::filter($entity->summary, 255, 'de');
|
||||||
|
|
||||||
$enddate = $request->get('enddate');
|
$enddate = $request->get('enddate');
|
||||||
if (strlen($enddate) > 0) {
|
if (strlen($enddate) > 0) {
|
||||||
$enddate = new \DateTime($enddate);
|
$enddate = new \DateTime($enddate);
|
||||||
$entity->setenddate($enddate);
|
$entity->enddate = $enddate;
|
||||||
}
|
}
|
||||||
|
|
||||||
$location = $request->get('location');
|
$location = $request->get('location');
|
||||||
|
@ -262,24 +218,24 @@ class EventController extends Controller
|
||||||
if (count($results) > 0) {
|
if (count($results) > 0) {
|
||||||
$location_obj = $results[0];
|
$location_obj = $results[0];
|
||||||
if (strlen($location_lat) > 0) {
|
if (strlen($location_lat) > 0) {
|
||||||
$location_obj->setLat($location_lat);
|
$location_obj->lat = $location_lat;
|
||||||
}
|
}
|
||||||
if (strlen($location_lon) > 0) {
|
if (strlen($location_lon) > 0) {
|
||||||
$location_obj->setLon($location_lon);
|
$location_obj->lon = $location_lon;
|
||||||
}
|
}
|
||||||
$em->persist($location_obj);
|
$em->persist($location_obj);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
$entity->setLocation($results[0]);
|
$entity->setLocation($results[0]);
|
||||||
} else {
|
} else {
|
||||||
$location_obj = new Location();
|
$location_obj = new Location();
|
||||||
$location_obj->setName($location);
|
$location_obj->name = $location;
|
||||||
if (strlen($location_lat) > 0) {
|
if (strlen($location_lat) > 0) {
|
||||||
$location_obj->setLat($location_lat);
|
$location_obj->lat = $location_lat;
|
||||||
}
|
}
|
||||||
if (strlen($location_lon) > 0) {
|
if (strlen($location_lon) > 0) {
|
||||||
$location_obj->setLon($location_lon);
|
$location_obj->lon = $location_lon;
|
||||||
}
|
}
|
||||||
$location_obj->setSlug(\URLify::filter($location_obj->getName(),255,'de'));
|
$location_obj->slug = \URLify::filter($location_obj->name, 255, 'de');
|
||||||
$em->persist($location_obj);
|
$em->persist($location_obj);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
$entity->setLocation($location_obj);
|
$entity->setLocation($location_obj);
|
||||||
|
@ -288,9 +244,10 @@ class EventController extends Controller
|
||||||
|
|
||||||
$tags = $request->get('tags');
|
$tags = $request->get('tags');
|
||||||
if (strlen($tags) > 0) {
|
if (strlen($tags) > 0) {
|
||||||
$tags = explode(',',$tags);
|
$tags = explode(',', $tags);
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
$repo = $em->getRepository('CalciferBundle:Tag');
|
$repo = $em->getRepository('CalciferBundle:Tag');
|
||||||
|
$entity->clearTags();
|
||||||
foreach ($tags as $tag) {
|
foreach ($tags as $tag) {
|
||||||
$tag = trim($tag);
|
$tag = trim($tag);
|
||||||
$results = $repo->findBy(['name' => $tag]);
|
$results = $repo->findBy(['name' => $tag]);
|
||||||
|
@ -298,27 +255,15 @@ class EventController extends Controller
|
||||||
$entity->addTag($results[0]);
|
$entity->addTag($results[0]);
|
||||||
} else {
|
} else {
|
||||||
$tag_obj = new Tag();
|
$tag_obj = new Tag();
|
||||||
$tag_obj->setName($tag);
|
$tag_obj->name = $tag;
|
||||||
$tag_obj->setSlug(\URLify::filter($tag_obj->getName(),255,'de'));
|
$tag_obj->slug = \URLify::filter($tag_obj->name, 255, 'de');
|
||||||
$em->persist($tag_obj);
|
$em->persist($tag_obj);
|
||||||
$em->flush();
|
$em->flush();
|
||||||
$entity->addTag($tag_obj);
|
$entity->addTag($tag_obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $em;
|
||||||
}
|
}
|
||||||
|
return $em;
|
||||||
|
|
||||||
if ($entity->isValid()) {
|
|
||||||
$em = $this->getDoctrine()->getManager();
|
|
||||||
$em->persist($entity);
|
|
||||||
$em->flush();
|
|
||||||
|
|
||||||
return $this->redirect($this->generateUrl('_show', array('slug' => $entity->getSlug())));
|
|
||||||
}
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'entity' => $entity,
|
|
||||||
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace Hackspace\Bundle\CalciferBundle\Controller;
|
namespace Hackspace\Bundle\CalciferBundle\Controller;
|
||||||
|
|
||||||
|
use Doctrine\Common\Annotations\Annotation\Required;
|
||||||
use Doctrine\ORM\EntityManager;
|
use Doctrine\ORM\EntityManager;
|
||||||
use Doctrine\ORM\EntityRepository;
|
use Doctrine\ORM\EntityRepository;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
@ -35,11 +36,11 @@ class LocationController extends Controller
|
||||||
/**
|
/**
|
||||||
* Finds and displays a Event entity.
|
* Finds and displays a Event entity.
|
||||||
*
|
*
|
||||||
* @Route("/{slug}(?!\.ics)", name="location_show")
|
* @Route("/{slug}.{format}", name="location_show", defaults={"format" = "html"})
|
||||||
* @Method("GET")
|
* @Method("GET")
|
||||||
* @Template("CalciferBundle:Event:index.html.twig")
|
* @Template("CalciferBundle:Event:index.html.twig")
|
||||||
*/
|
*/
|
||||||
public function showAction($slug)
|
public function showAction($slug,$format)
|
||||||
{
|
{
|
||||||
/** @var EntityManager $em */
|
/** @var EntityManager $em */
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
@ -67,52 +68,42 @@ class LocationController extends Controller
|
||||||
->andWhere('e.locations_id = :location')
|
->andWhere('e.locations_id = :location')
|
||||||
->orderBy('e.startdate')
|
->orderBy('e.startdate')
|
||||||
->setParameter('startdate',$now)
|
->setParameter('startdate',$now)
|
||||||
->setParameter('location',$location->getId());
|
->setParameter('location',$location->id);
|
||||||
$entities = $qb->getQuery()->execute();
|
$entities = $qb->getQuery()->execute();
|
||||||
|
|
||||||
return array(
|
if ($format == 'ics') {
|
||||||
'entities' => $entities,
|
$calendar = new Calendar();
|
||||||
'location' => $location,
|
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
foreach ($entities as $entity) {
|
||||||
* Finds and displays a Event entity.
|
/** @var Event $entity */
|
||||||
*
|
$event = new CalendarEvent();
|
||||||
* @Route("/{slug}\.ics", name="location_show_ics")
|
$event->setStart($entity->startdate);
|
||||||
* @Method("GET")
|
if ($entity->enddate instanceof \DateTime)
|
||||||
*/
|
$event->setEnd($entity->enddate);
|
||||||
public function showActionICS($slug)
|
$event->setSummary($entity->summary);
|
||||||
{
|
$event->setDescription($entity->description);
|
||||||
$results = $this->showAction(str_replace('.ics','',$slug));
|
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||||
$entities = $results['entities'];
|
$location->setName($entity->getLocation()->name);
|
||||||
|
$event->setLocations([$location]);
|
||||||
|
$calendar->addEvent($event);
|
||||||
|
}
|
||||||
|
|
||||||
$calendar = new Calendar();
|
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
||||||
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
$calendarExport->addCalendar($calendar);
|
||||||
|
|
||||||
foreach($entities as $entity) {
|
//output .ics formatted text
|
||||||
/** @var Event $entity */
|
$result = $calendarExport->getStream();
|
||||||
$event = new CalendarEvent();
|
|
||||||
$event->setStart($entity->getStartdate());
|
$response = new Response($result);
|
||||||
if ($entity->getEnddate() instanceof DateTime)
|
$response->headers->set('Content-Type', 'text/calendar');
|
||||||
$event->setEnd($entity->getEnddate());
|
|
||||||
$event->setSummary($entity->getSummary());
|
return $response;
|
||||||
$event->setDescription($entity->getDescription());
|
} else {
|
||||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
return array(
|
||||||
$location->setName($entity->getLocation()->getName());
|
'entities' => $entities,
|
||||||
$event->setLocations([$location]);
|
'location' => $location,
|
||||||
$calendar->addEvent($event);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
|
||||||
$calendarExport->addCalendar($calendar);
|
|
||||||
|
|
||||||
//output .ics formatted text
|
|
||||||
$result = $calendarExport->getStream();
|
|
||||||
|
|
||||||
$response = new Response($result);
|
|
||||||
$response->headers->set('Content-Type', 'text/calendar');
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
262
src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php
Executable file
262
src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php
Executable file
|
@ -0,0 +1,262 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Hackspace\Bundle\CalciferBundle\Controller;
|
||||||
|
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Entity\RepeatingEvent;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
|
use Doctrine\Common\Annotations\Annotation\Required;
|
||||||
|
use Doctrine\ORM\EntityManager;
|
||||||
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
use Doctrine\ORM\QueryBuilder;
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Entity\Location;
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Entity\Tag;
|
||||||
|
use Symfony\Component\Config\Definition\Exception\Exception;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Entity\Event;
|
||||||
|
use Hackspace\Bundle\CalciferBundle\Form\EventType;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Location controller.
|
||||||
|
*
|
||||||
|
* @Route("/termine/wiederholend")
|
||||||
|
*/
|
||||||
|
class RepeatingEventController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Displays all repeating events
|
||||||
|
*
|
||||||
|
* @Route("/", name="repeating_event_show")
|
||||||
|
* @Method("GET")
|
||||||
|
* @Template()
|
||||||
|
*/
|
||||||
|
public function indexAction()
|
||||||
|
{
|
||||||
|
/** @var EntityManager $em */
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
|
/** @var EntityRepository $repo */
|
||||||
|
$repo = $em->getRepository('CalciferBundle:RepeatingEvent');
|
||||||
|
|
||||||
|
$entities = $repo->findAll();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'entities' => $entities,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a form to create a repeating event
|
||||||
|
*
|
||||||
|
* @Route("/neu", name="repeating_event_new")
|
||||||
|
* @Method("GET")
|
||||||
|
* @Template()
|
||||||
|
*/
|
||||||
|
public function newAction()
|
||||||
|
{
|
||||||
|
$entity = new RepeatingEvent();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'entity' => $entity,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a repeating event
|
||||||
|
*
|
||||||
|
* @Route("/neu", name="repeating_event_create")
|
||||||
|
* @Method("POST")
|
||||||
|
* @Template("CalciferBundle:RepeatingEvent:new.html.twig")
|
||||||
|
*/
|
||||||
|
public function createAction(Request $request)
|
||||||
|
{
|
||||||
|
$entity = new RepeatingEvent();
|
||||||
|
$this->fillEntity($request, $entity);
|
||||||
|
if ($this->validateRepeatingEvent($entity)) {
|
||||||
|
$ret = $this->saveRepeatingEvent($request, $entity);
|
||||||
|
if ($entity->id > 0) {
|
||||||
|
return $this->redirect($this->generateUrl('repeating_event_show'));
|
||||||
|
} else {
|
||||||
|
throw new \Exception('Could not save repeating event?!?');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'entity' => $entity,
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a form to edit a repeating event
|
||||||
|
*
|
||||||
|
* @Route("/{slug}/bearbeiten",name="repeating_event_edit")
|
||||||
|
* @Method("GET")
|
||||||
|
* @Template()
|
||||||
|
*/
|
||||||
|
public function editAction($slug)
|
||||||
|
{
|
||||||
|
/** @var EntityManager $em */
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
|
/** @var EntityRepository $repo */
|
||||||
|
$repo = $em->getRepository('CalciferBundle:RepeatingEvent');
|
||||||
|
|
||||||
|
/** @var Event $entity */
|
||||||
|
$entity = $repo->findOneBy(['slug' => $slug]);
|
||||||
|
|
||||||
|
if (!$entity) {
|
||||||
|
throw $this->createNotFoundException('Unable to find RepeatingEvent entity.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'entity' => $entity,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a repeating event
|
||||||
|
*
|
||||||
|
* @Route("/{slug}/bearbeiten",name="repeating_event_update")
|
||||||
|
* @Method("POST")
|
||||||
|
* @Template("CalciferBundle:RepeatingEvent:edit.html.twig")
|
||||||
|
*/
|
||||||
|
public function updateAction(Request $request, $slug)
|
||||||
|
{
|
||||||
|
/** @var EntityManager $em */
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
|
/** @var EntityRepository $repo */
|
||||||
|
$repo = $em->getRepository('CalciferBundle:RepeatingEvent');
|
||||||
|
|
||||||
|
/** @var Event $entity */
|
||||||
|
$entity = $repo->findOneBy(['slug' => $slug]);
|
||||||
|
|
||||||
|
if (!$entity) {
|
||||||
|
throw $this->createNotFoundException('Unable to find RepeatingEvent entity.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fillEntity($request, $entity);
|
||||||
|
if ($this->validateRepeatingEvent($entity)) {
|
||||||
|
$ret = $this->saveRepeatingEvent($request, $entity);
|
||||||
|
if ($entity->id > 0) {
|
||||||
|
return $this->redirect($this->generateUrl('repeating_event_show'));
|
||||||
|
} else {
|
||||||
|
throw new \Exception('Could not save repeating event?!?');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'entity' => $entity,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function fillEntity(Request $request, RepeatingEvent $entity)
|
||||||
|
{
|
||||||
|
$fields = [
|
||||||
|
'duration',
|
||||||
|
'repeating_pattern',
|
||||||
|
'summary',
|
||||||
|
'description',
|
||||||
|
'url',
|
||||||
|
];
|
||||||
|
foreach ($fields as $field) {
|
||||||
|
$entity->$field = $request->get($field);
|
||||||
|
}
|
||||||
|
if (strlen($entity->duration) == 0)
|
||||||
|
$entity->duration = null;
|
||||||
|
$nextdate = $request->get('nextdate');
|
||||||
|
$nextdate = new \DateTime($nextdate);
|
||||||
|
$entity->nextdate = $nextdate;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validateRepeatingEvent(RepeatingEvent $entity)
|
||||||
|
{
|
||||||
|
$fields = [
|
||||||
|
'nextdate',
|
||||||
|
'repeating_pattern',
|
||||||
|
'summary',
|
||||||
|
];
|
||||||
|
foreach ($fields as $field) {
|
||||||
|
if ((is_null($entity->$field)) && (strlen($entity->$field) > 0))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function saveRepeatingEvent(Request $request, RepeatingEvent $entity)
|
||||||
|
{
|
||||||
|
$location = $request->get('location');
|
||||||
|
$location_lat = $request->get('location_lat');
|
||||||
|
$location_lon = $request->get('location_lon');
|
||||||
|
if (strlen($location) > 0) {
|
||||||
|
// check if the location already exists
|
||||||
|
/** @var EntityManager $em */
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$repo = $em->getRepository('CalciferBundle:Location');
|
||||||
|
$results = $repo->findBy(['name' => $location]);
|
||||||
|
if (count($results) > 0) {
|
||||||
|
$location_obj = $results[0];
|
||||||
|
if (strlen($location_lat) > 0) {
|
||||||
|
$location_obj->lat = $location_lat;
|
||||||
|
}
|
||||||
|
if (strlen($location_lon) > 0) {
|
||||||
|
$location_obj->lon = $location_lon;
|
||||||
|
}
|
||||||
|
$em->persist($location_obj);
|
||||||
|
$em->flush();
|
||||||
|
$entity->location = $results[0];
|
||||||
|
} else {
|
||||||
|
$location_obj = new Location();
|
||||||
|
$location_obj->name = $location;
|
||||||
|
if (strlen($location_lat) > 0) {
|
||||||
|
$location_obj->lat = $location_lat;
|
||||||
|
}
|
||||||
|
if (strlen($location_lon) > 0) {
|
||||||
|
$location_obj->lon = $location_lon;
|
||||||
|
}
|
||||||
|
$location_obj->slug = \URLify::filter($location_obj->name, 255, 'de');
|
||||||
|
$em->persist($location_obj);
|
||||||
|
$em->flush();
|
||||||
|
$entity->location = $location_obj;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$entity->location = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tags = $request->get('tags');
|
||||||
|
if (strlen($tags) > 0) {
|
||||||
|
$tags = explode(',', $tags);
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$repo = $em->getRepository('CalciferBundle:Tag');
|
||||||
|
$entity->clearTags();
|
||||||
|
foreach ($tags as $tag) {
|
||||||
|
$tag = trim($tag);
|
||||||
|
$results = $repo->findBy(['name' => $tag]);
|
||||||
|
if (count($results) > 0) {
|
||||||
|
$entity->addTag($results[0]);
|
||||||
|
} else {
|
||||||
|
$tag_obj = new Tag();
|
||||||
|
$tag_obj->name = $tag;
|
||||||
|
$tag_obj->slug = \URLify::filter($tag_obj->name, 255, 'de');
|
||||||
|
$em->persist($tag_obj);
|
||||||
|
$em->flush();
|
||||||
|
$entity->addTag($tag_obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$entity->clearTags();
|
||||||
|
}
|
||||||
|
|
||||||
|
$entity->slug = \URLify::filter($entity->summary,255,'de');
|
||||||
|
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$em->persist($entity);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
return $entity;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,11 +35,11 @@ class TagController extends Controller
|
||||||
/**
|
/**
|
||||||
* Finds and displays a Event entity.
|
* Finds and displays a Event entity.
|
||||||
*
|
*
|
||||||
* @Route("/{slug}(?!\.ics)", name="tag_show")
|
* @Route("/{slug}.{format}", defaults={"format" = "html"}, name="tag_show")
|
||||||
* @Method("GET")
|
* @Method("GET")
|
||||||
* @Template("CalciferBundle:Event:index.html.twig")
|
* @Template("CalciferBundle:Event:index.html.twig")
|
||||||
*/
|
*/
|
||||||
public function showAction($slug)
|
public function showAction($slug, $format)
|
||||||
{
|
{
|
||||||
/** @var EntityManager $em */
|
/** @var EntityManager $em */
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
@ -55,60 +55,51 @@ class TagController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
$now = new \DateTime();
|
$now = new \DateTime();
|
||||||
$now->setTime(0,0,0);
|
$now->setTime(0, 0, 0);
|
||||||
|
|
||||||
/** @var QueryBuilder $qb */
|
/** @var QueryBuilder $qb */
|
||||||
$qb = $em->createQueryBuilder();
|
$qb = $em->createQueryBuilder();
|
||||||
$qb ->select(array('e'))
|
$qb->select(array('e'))
|
||||||
->from('CalciferBundle:Event', 'e')
|
->from('CalciferBundle:Event', 'e')
|
||||||
->join('e.tags', 't', 'WITH', $qb->expr()->in('t.id', $tag->getId()))
|
->join('e.tags', 't', 'WITH', $qb->expr()->in('t.id', $tag->id))
|
||||||
->where('e.startdate >= :startdate')
|
->where('e.startdate >= :startdate')
|
||||||
->orderBy('e.startdate')
|
->orderBy('e.startdate')
|
||||||
->setParameter('startdate',$now);
|
->setParameter('startdate', $now);
|
||||||
$entities = $qb->getQuery()->execute();
|
$entities = $qb->getQuery()->execute();
|
||||||
|
|
||||||
return array(
|
if ($format == 'ics') {
|
||||||
'entities' => $entities,
|
$calendar = new Calendar();
|
||||||
'tag' => $tag,
|
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
foreach ($entities as $entity) {
|
||||||
* Finds and displays a Event entity.
|
/** @var Event $entity */
|
||||||
*
|
$event = new CalendarEvent();
|
||||||
* @Route("/{slug}.ics", name="tag_show_ics")
|
$event->setStart($entity->startdate);
|
||||||
* @Method("GET")
|
if ($entity->enddate instanceof \DateTime)
|
||||||
*/
|
$event->setEnd($entity->enddate);
|
||||||
public function showActionICS($slug)
|
$event->setSummary($entity->summary);
|
||||||
{
|
$event->setDescription($entity->description);
|
||||||
$results = $this->showAction(str_replace('.ics','',$slug));
|
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
||||||
$entities = $results['entities'];
|
$location->setName($entity->location->name);
|
||||||
|
$event->setLocations([$location]);
|
||||||
|
$calendar->addEvent($event);
|
||||||
|
}
|
||||||
|
|
||||||
$calendar = new Calendar();
|
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
||||||
$calendar->setProdId('-//My Company//Cool Calendar App//EN');
|
$calendarExport->addCalendar($calendar);
|
||||||
|
|
||||||
foreach($entities as $entity) {
|
//output .ics formatted text
|
||||||
/** @var Event $entity */
|
$result = $calendarExport->getStream();
|
||||||
$event = new CalendarEvent();
|
|
||||||
$event->setStart($entity->getStartdate());
|
$response = new Response($result);
|
||||||
$event->setEnd($entity->getEnddate());
|
$response->headers->set('Content-Type', 'text/calendar');
|
||||||
$event->setSummary($entity->getSummary());
|
|
||||||
$event->setDescription($entity->getDescription());
|
return $response;
|
||||||
$location = new \Jsvrcek\ICS\Model\Description\Location();
|
} else {
|
||||||
$location->setName($entity->getLocation()->getName());
|
return array(
|
||||||
$event->setLocations([$location]);
|
'entities' => $entities,
|
||||||
$calendar->addEvent($event);
|
'tag' => $tag,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$calendarExport = new CalendarExport(new CalendarStream, new Formatter());
|
|
||||||
$calendarExport->addCalendar($calendar);
|
|
||||||
|
|
||||||
//output .ics formatted text
|
|
||||||
$result = $calendarExport->getStream();
|
|
||||||
|
|
||||||
$response = new Response($result);
|
|
||||||
$response->headers->set('Content-Type', 'text/calendar');
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
63
src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php
Executable file
63
src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: tim
|
||||||
|
* Date: 13.07.14
|
||||||
|
* Time: 13:55
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
use Doctrine\ORM\PersistentCollection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A baseclass for all other entities
|
||||||
|
*
|
||||||
|
* @property integer $id
|
||||||
|
* @property string $slug
|
||||||
|
*
|
||||||
|
* @ORM\MappedSuperclass
|
||||||
|
*/
|
||||||
|
abstract class BaseEntity {
|
||||||
|
/**
|
||||||
|
* @var integer
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="id", type="integer")
|
||||||
|
* @ORM\Id
|
||||||
|
* @ORM\GeneratedValue(strategy="AUTO")
|
||||||
|
*/
|
||||||
|
protected $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
||||||
|
*/
|
||||||
|
protected $slug = '';
|
||||||
|
|
||||||
|
public function __isset($name) {
|
||||||
|
if (property_exists($this,$name)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __get($name) {
|
||||||
|
if (property_exists($this,$name)) {
|
||||||
|
return $this->$name;
|
||||||
|
} else {
|
||||||
|
throw new \Exception("Property {$name} does not Exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __set($name,$value) {
|
||||||
|
if (property_exists($this,$name)) {
|
||||||
|
$this->$name = $value;
|
||||||
|
return $this;
|
||||||
|
} else {
|
||||||
|
throw new \Exception("Property {$name} does not Exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,59 +3,59 @@
|
||||||
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||||
|
|
||||||
use Doctrine\ORM\Mapping as ORM;
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
use Doctrine\ORM\PersistentCollection;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event
|
* Event
|
||||||
*
|
*
|
||||||
|
* @property \DateTime $startdate
|
||||||
|
* @property \DateTime $enddate
|
||||||
|
* @property string $summary
|
||||||
|
* @property string $description
|
||||||
|
* @property Location $location
|
||||||
|
* @property string $url
|
||||||
|
* @property array $tags
|
||||||
|
*
|
||||||
* @ORM\Table(name="events")
|
* @ORM\Table(name="events")
|
||||||
* @ORM\Entity
|
* @ORM\Entity
|
||||||
*/
|
*/
|
||||||
class Event
|
class Event extends BaseEntity
|
||||||
{
|
{
|
||||||
/**
|
use TagTrait;
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="id", type="integer")
|
|
||||||
* @ORM\Id
|
|
||||||
* @ORM\GeneratedValue(strategy="AUTO")
|
|
||||||
*/
|
|
||||||
private $id;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \DateTime
|
* @var \DateTime
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="startdate", type="datetimetz")
|
* @ORM\Column(name="startdate", type="datetimetz")
|
||||||
*/
|
*/
|
||||||
private $startdate;
|
protected $startdate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \DateTime
|
* @var \DateTime
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="enddate", type="datetimetz", nullable=true)
|
* @ORM\Column(name="enddate", type="datetimetz", nullable=true)
|
||||||
*/
|
*/
|
||||||
private $enddate;
|
protected $enddate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="summary", type="string", length=255)
|
* @ORM\Column(name="summary", type="string", length=255)
|
||||||
*/
|
*/
|
||||||
private $summary;
|
protected $summary;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="description", type="text", nullable=true)
|
* @ORM\Column(name="description", type="text", nullable=true)
|
||||||
*/
|
*/
|
||||||
private $description;
|
protected $description;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="locations_id", type="integer", nullable=true)
|
* @ORM\Column(name="locations_id", type="integer", nullable=true)
|
||||||
*/
|
*/
|
||||||
private $locations_id;
|
protected $locations_id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Location
|
* @var Location
|
||||||
|
@ -63,14 +63,14 @@ class Event
|
||||||
* @ORM\ManyToOne(targetEntity="Location")
|
* @ORM\ManyToOne(targetEntity="Location")
|
||||||
* @ORM\JoinColumn(name="locations_id", referencedColumnName="id")
|
* @ORM\JoinColumn(name="locations_id", referencedColumnName="id")
|
||||||
*/
|
*/
|
||||||
private $location;
|
protected $location;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="url", type="string", length=255, nullable=true)
|
* @ORM\Column(name="url", type="string", length=255, nullable=true)
|
||||||
*/
|
*/
|
||||||
private $url;
|
protected $url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
|
@ -81,179 +81,7 @@ class Event
|
||||||
* inverseJoinColumns={@ORM\JoinColumn(name="tags_id", referencedColumnName="id")}
|
* inverseJoinColumns={@ORM\JoinColumn(name="tags_id", referencedColumnName="id")}
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
private $tags = [];
|
protected $tags = [];
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
|
||||||
*/
|
|
||||||
private $slug = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $slug
|
|
||||||
*/
|
|
||||||
public function setSlug($slug)
|
|
||||||
{
|
|
||||||
$this->slug = $slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSlug()
|
|
||||||
{
|
|
||||||
return $this->slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get id
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set startdate
|
|
||||||
*
|
|
||||||
* @param \DateTime $startdate
|
|
||||||
* @return Event
|
|
||||||
*/
|
|
||||||
public function setStartdate($startdate)
|
|
||||||
{
|
|
||||||
$this->startdate = $startdate;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get startdate
|
|
||||||
*
|
|
||||||
* @return \DateTime
|
|
||||||
*/
|
|
||||||
public function getStartdate()
|
|
||||||
{
|
|
||||||
return $this->startdate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set enddate
|
|
||||||
*
|
|
||||||
* @param \DateTime $enddate
|
|
||||||
* @return Event
|
|
||||||
*/
|
|
||||||
public function setEnddate($enddate)
|
|
||||||
{
|
|
||||||
$this->enddate = $enddate;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get enddate
|
|
||||||
*
|
|
||||||
* @return \DateTime
|
|
||||||
*/
|
|
||||||
public function getEnddate()
|
|
||||||
{
|
|
||||||
return $this->enddate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set summary
|
|
||||||
*
|
|
||||||
* @param string $summary
|
|
||||||
* @return Event
|
|
||||||
*/
|
|
||||||
public function setSummary($summary)
|
|
||||||
{
|
|
||||||
$this->summary = $summary;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get summary
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSummary()
|
|
||||||
{
|
|
||||||
return $this->summary;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set description
|
|
||||||
*
|
|
||||||
* @param string $description
|
|
||||||
* @return Event
|
|
||||||
*/
|
|
||||||
public function setDescription($description)
|
|
||||||
{
|
|
||||||
$this->description = $description;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get description
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getDescription()
|
|
||||||
{
|
|
||||||
return $this->description;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set location
|
|
||||||
*
|
|
||||||
* @param string $locations_id
|
|
||||||
* @return Event
|
|
||||||
*/
|
|
||||||
public function setLocationsID($locations_id)
|
|
||||||
{
|
|
||||||
$this->locations_id = $locations_id;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get location
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getLocationsID()
|
|
||||||
{
|
|
||||||
return $this->locations_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set url
|
|
||||||
*
|
|
||||||
* @param string $url
|
|
||||||
* @return Event
|
|
||||||
*/
|
|
||||||
public function setUrl($url)
|
|
||||||
{
|
|
||||||
$this->url = $url;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get url
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getUrl()
|
|
||||||
{
|
|
||||||
return $this->url;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \Hackspace\Bundle\CalciferBundle\Entity\Location $location
|
* @param \Hackspace\Bundle\CalciferBundle\Entity\Location $location
|
||||||
|
@ -273,41 +101,7 @@ class Event
|
||||||
return $this->location;
|
return $this->location;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTags() {
|
|
||||||
return $this->tags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function hasTag(Tag $tag) {
|
|
||||||
if ($this->tags instanceof PersistentCollection) {
|
|
||||||
return $this->tags->contains($tag);
|
|
||||||
} elseif (is_array($this->tags)) {
|
|
||||||
return in_array($tag,$this->tags);
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addTag(Tag $tag) {
|
|
||||||
/** @var PersistentCollection $this->tags */
|
|
||||||
if (!$this->hasTag($tag)) {
|
|
||||||
$this->tags[] = $tag;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isValid() {
|
public function isValid() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTagsAsText() {
|
|
||||||
if (count($this->tags) > 0) {
|
|
||||||
$tags = [];
|
|
||||||
foreach ($this->tags as $tag) {
|
|
||||||
$tags[] = $tag->getName();
|
|
||||||
}
|
|
||||||
return implode(',',$tags);
|
|
||||||
} else {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,138 +10,28 @@ use Doctrine\ORM\Mapping as ORM;
|
||||||
* @ORM\Table(name="locations")
|
* @ORM\Table(name="locations")
|
||||||
* @ORM\Entity
|
* @ORM\Entity
|
||||||
*/
|
*/
|
||||||
class Location
|
class Location extends BaseEntity
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="id", type="integer")
|
|
||||||
* @ORM\Id
|
|
||||||
* @ORM\GeneratedValue(strategy="AUTO")
|
|
||||||
*/
|
|
||||||
private $id;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="name", type="string", length=255)
|
* @ORM\Column(name="name", type="string", length=255)
|
||||||
*/
|
*/
|
||||||
private $name;
|
protected $name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var float
|
* @var float
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="lon", type="float", nullable=true)
|
* @ORM\Column(name="lon", type="float", nullable=true)
|
||||||
*/
|
*/
|
||||||
private $lon;
|
protected $lon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var float
|
* @var float
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="lat", type="float", nullable=true)
|
* @ORM\Column(name="lat", type="float", nullable=true)
|
||||||
*/
|
*/
|
||||||
private $lat;
|
protected $lat;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
|
||||||
*/
|
|
||||||
private $slug = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $slug
|
|
||||||
*/
|
|
||||||
public function setSlug($slug)
|
|
||||||
{
|
|
||||||
$this->slug = $slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSlug()
|
|
||||||
{
|
|
||||||
return $this->slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get id
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set name
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return Location
|
|
||||||
*/
|
|
||||||
public function setName($name)
|
|
||||||
{
|
|
||||||
$this->name = $name;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get name
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getName()
|
|
||||||
{
|
|
||||||
return $this->name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set lon
|
|
||||||
*
|
|
||||||
* @param float $lon
|
|
||||||
* @return Location
|
|
||||||
*/
|
|
||||||
public function setLon($lon)
|
|
||||||
{
|
|
||||||
$this->lon = $lon;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get lon
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getLon()
|
|
||||||
{
|
|
||||||
return $this->lon;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set lat
|
|
||||||
*
|
|
||||||
* @param float $lat
|
|
||||||
* @return Location
|
|
||||||
*/
|
|
||||||
public function setLat($lat)
|
|
||||||
{
|
|
||||||
$this->lat = $lat;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get lat
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getLat()
|
|
||||||
{
|
|
||||||
return $this->lat;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
100
src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEvent.php
Executable file
100
src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEvent.php
Executable file
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
use Doctrine\ORM\PersistentCollection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RepeatEvent
|
||||||
|
*
|
||||||
|
* @property \DateTime $nextdate
|
||||||
|
* @property integer $duration
|
||||||
|
* @property string $repeating_pattern
|
||||||
|
* @property string $summary
|
||||||
|
* @property string $description
|
||||||
|
* @property Location $location
|
||||||
|
* @property string $url
|
||||||
|
* @property array $tags
|
||||||
|
*
|
||||||
|
* @ORM\Table(name="repeating_events")
|
||||||
|
* @ORM\Entity
|
||||||
|
*/
|
||||||
|
class RepeatingEvent extends BaseEntity
|
||||||
|
{
|
||||||
|
use TagTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \DateTime
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="nextdate", type="datetimetz")
|
||||||
|
*/
|
||||||
|
protected $nextdate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var integer
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="duration", type="integer", nullable=true)
|
||||||
|
*/
|
||||||
|
protected $duration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="repeating_pattern", type="string", length=255)
|
||||||
|
*/
|
||||||
|
protected $repeating_pattern = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="summary", type="string", length=255)
|
||||||
|
*/
|
||||||
|
protected $summary;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="description", type="text", nullable=true)
|
||||||
|
*/
|
||||||
|
protected $description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Location
|
||||||
|
*
|
||||||
|
* @ORM\ManyToOne(targetEntity="Location")
|
||||||
|
* @ORM\JoinColumn(name="locations_id", referencedColumnName="id")
|
||||||
|
*/
|
||||||
|
protected $location;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*
|
||||||
|
* @ORM\Column(name="url", type="string", length=255, nullable=true)
|
||||||
|
*/
|
||||||
|
protected $url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*
|
||||||
|
* @ORM\ManyToMany(targetEntity="Tag")
|
||||||
|
* @ORM\JoinTable(name="repeating_events2tags",
|
||||||
|
* joinColumns={@ORM\JoinColumn(name="repeating_events_id", referencedColumnName="id")},
|
||||||
|
* inverseJoinColumns={@ORM\JoinColumn(name="tags_id", referencedColumnName="id")}
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
protected $tags = [];
|
||||||
|
|
||||||
|
public function getFormatedRepeatPattern() {
|
||||||
|
switch($this->repeating_pattern) {
|
||||||
|
case 'P7D':
|
||||||
|
return 'Wöchentlich';
|
||||||
|
case 'P14D':
|
||||||
|
return 'Alle 2 Wochen';
|
||||||
|
case 'P1M':
|
||||||
|
return 'Monatlich';
|
||||||
|
default:
|
||||||
|
return $this->repeating_pattern;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,77 +10,12 @@ use Doctrine\ORM\Mapping as ORM;
|
||||||
* @ORM\Table(name="tags")
|
* @ORM\Table(name="tags")
|
||||||
* @ORM\Entity
|
* @ORM\Entity
|
||||||
*/
|
*/
|
||||||
class Tag
|
class Tag extends BaseEntity
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="id", type="integer")
|
|
||||||
* @ORM\Id
|
|
||||||
* @ORM\GeneratedValue(strategy="AUTO")
|
|
||||||
*/
|
|
||||||
private $id;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
*
|
*
|
||||||
* @ORM\Column(name="name", type="string", length=255)
|
* @ORM\Column(name="name", type="string", length=255)
|
||||||
*/
|
*/
|
||||||
private $name;
|
protected $name;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*
|
|
||||||
* @ORM\Column(name="slug", type="string", length=255,options={"default" = ""})
|
|
||||||
*/
|
|
||||||
private $slug = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $slug
|
|
||||||
*/
|
|
||||||
public function setSlug($slug)
|
|
||||||
{
|
|
||||||
$this->slug = $slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSlug()
|
|
||||||
{
|
|
||||||
return $this->slug;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get id
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set name
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
* @return Tag
|
|
||||||
*/
|
|
||||||
public function setName($name)
|
|
||||||
{
|
|
||||||
$this->name = $name;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get name
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getName()
|
|
||||||
{
|
|
||||||
return $this->name;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
61
src/Hackspace/Bundle/CalciferBundle/Entity/TagTrait.php
Executable file
61
src/Hackspace/Bundle/CalciferBundle/Entity/TagTrait.php
Executable file
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: tim
|
||||||
|
* Date: 28.07.14
|
||||||
|
* Time: 21:00
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Hackspace\Bundle\CalciferBundle\Entity;
|
||||||
|
|
||||||
|
use Doctrine\ORM\PersistentCollection;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
trait TagTrait
|
||||||
|
{
|
||||||
|
public function getTags()
|
||||||
|
{
|
||||||
|
return $this->tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clearTags()
|
||||||
|
{
|
||||||
|
if ($this->tags instanceof PersistentCollection) {
|
||||||
|
$this->tags->clear();
|
||||||
|
} elseif (is_array($this->tags)) {
|
||||||
|
$this->tags = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasTag(Tag $tag)
|
||||||
|
{
|
||||||
|
if ($this->tags instanceof PersistentCollection) {
|
||||||
|
return $this->tags->contains($tag);
|
||||||
|
} elseif (is_array($this->tags)) {
|
||||||
|
return in_array($tag, $this->tags);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addTag(Tag $tag)
|
||||||
|
{
|
||||||
|
if (!$this->hasTag($tag)) {
|
||||||
|
$this->tags[] = $tag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTagsAsText()
|
||||||
|
{
|
||||||
|
if (count($this->tags) > 0) {
|
||||||
|
$tags = [];
|
||||||
|
foreach ($this->tags as $tag) {
|
||||||
|
$tags[] = $tag->name;
|
||||||
|
}
|
||||||
|
return implode(',', $tags);
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('.ui.dropdown.selection')
|
||||||
|
.dropdown()
|
||||||
|
.dropdown('set value',$('.ui.dropdown.selection input[type=hidden]').val())
|
||||||
|
;
|
||||||
|
});
|
|
@ -1,25 +1,31 @@
|
||||||
<div class="ui column">
|
<div class="ui column">
|
||||||
<div class="ui segment event box">
|
<div class="ui segment event box">
|
||||||
<h2 class="ui dividing header segment green inverted"><a href="{{ path('_show', { 'slug': entity.slug }) }}">{{ entity.summary }}</a>
|
<h2 class="ui dividing header segment green inverted"><a
|
||||||
|
href="{{ path('_show', { 'slug': entity.slug }) }}">{{ entity.summary }}</a>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<p class="edit">
|
<p class="edit">
|
||||||
<a href="{{ path('_edit', {'slug' : entity.slug }) }}"><i class="circular icon edit green inverted link"></i>Bearbeiten</a>
|
<a href="{{ path('_edit', {'slug' : entity.slug }) }}"><i
|
||||||
|
class="circular icon edit green inverted link"></i>Bearbeiten</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="startdate ">
|
<p class="startdate ">
|
||||||
<i class="circular icon calendar green inverted link" title="Wann?" data-content="Wann?"></i>{{ entity.startdate.format('Y-m-d H:i') }}
|
<i class="circular icon calendar green inverted link" title="Wann?"
|
||||||
|
data-content="Wann?"></i>{{ entity.startdate.format('Y-m-d H:i') }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% if entity.location is not null %}
|
{% if entity.location is not null %}
|
||||||
<p class="location">
|
<p class="location">
|
||||||
<a href="{{ path('location_show', {'slug' : entity.location.slug }) }}"><i class="circular icon map marker green inverted link" title="Wo?" data-content="Wo?"></i>{{ entity.location.name }}</a>
|
<a href="{{ path('location_show', {'slug' : entity.location.slug }) }}"><i
|
||||||
|
class="circular icon map marker green inverted link" title="Wo?"
|
||||||
|
data-content="Wo?"></i>{{ entity.location.name }}</a>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if entity.tags|length > 0 %}
|
{% if entity.tags|length > 0 %}
|
||||||
<ul class="tags">
|
<ul class="tags">
|
||||||
{% for tag in entity.tags %}
|
{% for tag in entity.tags %}
|
||||||
<li class="tag"><a href="{{ path('tag_show',{'slug' : tag.slug }) }}"><i class="circular icon tag green inverted link"></i>{{ tag.name }}</a></li>
|
<li class="tag"><a href="{{ path('tag_show',{'slug' : tag.slug }) }}"><i
|
||||||
|
class="circular icon tag green inverted link"></i>{{ tag.name }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -37,6 +43,5 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>{{ entity.description|markdown }}</p>
|
<p>{{ entity.description|markdown }}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,4 +1,4 @@
|
||||||
<form method="post" action="{% if entity.id > 0 %}{{ path('_update',{'slug':entity.slug}) }}{% else %}{{ path('_create') }}{% endif %}">
|
<form method="post" action="{% if entity.id|default(0) > 0 %}{{ path('_update',{'slug':entity.slug}) }}{% else %}{{ path('_create') }}{% endif %}">
|
||||||
<div class="ui form segment">
|
<div class="ui form segment">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label class="control-label required" for="event_startdate">Startdatum</label>
|
<label class="control-label required" for="event_startdate">Startdatum</label>
|
||||||
|
|
|
@ -18,6 +18,6 @@
|
||||||
|
|
||||||
{% block body -%}
|
{% block body -%}
|
||||||
<div class="ui one column page grid">
|
<div class="ui one column page grid">
|
||||||
{{ include('CalciferBundle:Event:event_box.html.twig') }}
|
{{ include('CalciferBundle:Event:event_box.html.twig',{'entity' : entity}) }}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||||
|
|
||||||
|
{% block css %}
|
||||||
|
{% stylesheets filter="compass"
|
||||||
|
"@CalciferBundle/Resources/assets/css/jquery.datetimepicker.scss"
|
||||||
|
"@CalciferBundle/Resources/assets/css/events.scss"
|
||||||
|
"@CalciferBundle/Resources/assets/css/leaflet.scss"
|
||||||
|
%}
|
||||||
|
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||||
|
{% endstylesheets %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block javascripts %}
|
||||||
|
{% javascripts
|
||||||
|
"@CalciferBundle/Resources/assets/js/jquery.datetimepicker.js"
|
||||||
|
"@CalciferBundle/Resources/assets/js/repeating_events.js"
|
||||||
|
"@CalciferBundle/Resources/assets/js/events.js"
|
||||||
|
"@CalciferBundle/Resources/assets/js/leaflet.js"
|
||||||
|
%}
|
||||||
|
<script src="{{ asset_url }}"></script>
|
||||||
|
{% endjavascripts %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body -%}
|
||||||
|
<div class="ui one column page grid">
|
||||||
|
<div class="ui column">
|
||||||
|
<h1>Wiederholenden Termin bearbeiten</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui one column page grid">
|
||||||
|
<div class="ui column">
|
||||||
|
{{ include('CalciferBundle:RepeatingEvent:repeating_event_form.html.twig',{'entity':entity}) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,65 @@
|
||||||
|
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||||
|
|
||||||
|
{% block css %}
|
||||||
|
{% stylesheets filter="compass"
|
||||||
|
"@CalciferBundle/Resources/assets/css/events.scss" %}
|
||||||
|
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||||
|
{% endstylesheets %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block javascripts %}
|
||||||
|
{% javascripts
|
||||||
|
"@CalciferBundle/Resources/assets/js/events.js" %}
|
||||||
|
<script src="{{ asset_url }}"></script>
|
||||||
|
{% endjavascripts %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body -%}
|
||||||
|
<div class="ui one column page grid title">
|
||||||
|
<div class="ui column">
|
||||||
|
<h1 class="ui header">
|
||||||
|
Wiederholende Termine
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui one column page grid stackable">
|
||||||
|
<div class="column">
|
||||||
|
<table class="ui table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Zusammenfassung</th>
|
||||||
|
<th>Nächstes Datum</th>
|
||||||
|
<th>Wiederholungsmuster</th>
|
||||||
|
<th>Aktionen</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for entity in entities %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ entity.summary }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ entity.nextdate.format('Y-m-d H:i') }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ entity.getFormatedRepeatPattern() }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ path('repeating_event_edit', {'slug':entity.slug}) }}">Bearbeiten</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td colspan="4"><a href="{{ path('repeating_event_new') }}">Neuen wiederholenden Termin anlegen</a></td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,35 @@
|
||||||
|
{% extends 'CalciferBundle::layout.html.twig' %}
|
||||||
|
|
||||||
|
{% block css %}
|
||||||
|
{% stylesheets filter="compass"
|
||||||
|
"@CalciferBundle/Resources/assets/css/jquery.datetimepicker.scss"
|
||||||
|
"@CalciferBundle/Resources/assets/css/events.scss"
|
||||||
|
"@CalciferBundle/Resources/assets/css/leaflet.scss" %}
|
||||||
|
<link rel="stylesheet" href="{{ asset_url }}"/>
|
||||||
|
{% endstylesheets %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block javascripts %}
|
||||||
|
{% javascripts
|
||||||
|
"@CalciferBundle/Resources/assets/js/jquery.datetimepicker.js"
|
||||||
|
"@CalciferBundle/Resources/assets/js/repeating_events.js"
|
||||||
|
"@CalciferBundle/Resources/assets/js/events.js"
|
||||||
|
"@CalciferBundle/Resources/assets/js/leaflet.js" %}
|
||||||
|
<script src="{{ asset_url }}"></script>
|
||||||
|
{% endjavascripts %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block body -%}
|
||||||
|
<div class="ui one column page grid">
|
||||||
|
<div class="ui column">
|
||||||
|
<h1>Wiederholenden Termin erstellen</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui one column page grid">
|
||||||
|
<div class="ui column">
|
||||||
|
{{ include('CalciferBundle:RepeatingEvent:repeating_event_form.html.twig') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,166 @@
|
||||||
|
<form method="post"
|
||||||
|
action="{% if entity.id|default(0) > 0 %}{{ path('repeating_event_update',{'slug':entity.slug}) }}{% else %}{{ path('repeating_event_create') }}{% endif %}">
|
||||||
|
<div class="ui form segment">
|
||||||
|
<div class="field">
|
||||||
|
<label class="control-label required" for="event_startdate">Nächster Termin</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled icon input">
|
||||||
|
<input type="datetime"
|
||||||
|
id="event_nextdate"
|
||||||
|
name="nextdate"
|
||||||
|
required="required"
|
||||||
|
value="{{ entity.nextdate.format('Y-m-d H:i')|default('') }}"
|
||||||
|
placeholder="{{ "now"|date('d.m.Y H:00') }}"
|
||||||
|
class="form-control">
|
||||||
|
|
||||||
|
<i class="icon calendar"></i>
|
||||||
|
|
||||||
|
<div class="ui corner label">
|
||||||
|
<i class="icon asterisk"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="control-label required" for="event_duration">Dauer</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled input attached-label">
|
||||||
|
<input type="text"
|
||||||
|
id="event_duration"
|
||||||
|
name="duration"
|
||||||
|
pattern="\d*"
|
||||||
|
value="{{ entity.duration }}"
|
||||||
|
class="form-control">
|
||||||
|
|
||||||
|
<div class="ui bottom attached label">
|
||||||
|
Hier gibst du bitte die Dauer der Veranstaltung in Minuten an.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label class="control-label required" for="event_duration">Wiederholungsmuster</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled input">
|
||||||
|
<div class="ui dropdown selection fluid">
|
||||||
|
<input name="repeating_pattern" type="hidden" value="{{ entity.repeating_pattern|default('') }}">
|
||||||
|
|
||||||
|
<div class="default text">Bitte wähle einen Wert aus</div>
|
||||||
|
<i class="dropdown icon"></i>
|
||||||
|
|
||||||
|
<div class="menu">
|
||||||
|
<div class="item" data-value="P7D">Wöchentlich</div>
|
||||||
|
<div class="item" data-value="P14D">Jede 2. Woche</div>
|
||||||
|
<div class="item" data-value="P1M">Monatlich</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui corner label">
|
||||||
|
<i class="icon asterisk"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label class="" for="event_summary">Zusammenfassung</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled input">
|
||||||
|
<input type="text"
|
||||||
|
id="event_summary"
|
||||||
|
name="summary"
|
||||||
|
value="{{ entity.summary|default('') }}"
|
||||||
|
required="required"
|
||||||
|
maxlength="255"
|
||||||
|
class="form-control">
|
||||||
|
|
||||||
|
<div class="ui corner label">
|
||||||
|
<i class="icon asterisk"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label class="control-label required" for="event_summary">Beschreibung</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled icon input attached-label">
|
||||||
|
<textarea name="description">{{ entity.description|default('') }}</textarea>
|
||||||
|
|
||||||
|
<div class="ui bottom attached label">Du kannst hier <a href="https://en.wikipedia.org/wiki/Markdown">Markdown</a>
|
||||||
|
benutzen.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label class="control-label required" for="event_url">URL</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled icon input">
|
||||||
|
<input type="text"
|
||||||
|
id="event_url"
|
||||||
|
name="url"
|
||||||
|
maxlength="255"
|
||||||
|
value="{{ entity.url|default('') }}"
|
||||||
|
class="form-control">
|
||||||
|
<i class="icon globe"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label class="control-label required" for="event_location">Ort</label>
|
||||||
|
|
||||||
|
<div class="ui left labeled icon input attached-{% if entity.location.lat|default(0) > 0 %}geo-{% endif %}label">
|
||||||
|
<input type="text"
|
||||||
|
id="event_location"
|
||||||
|
name="location"
|
||||||
|
maxlength="255"
|
||||||
|
value="{{ entity.location.name|default('') }}"
|
||||||
|
class="form-control">
|
||||||
|
<input type="hidden" name="location_lat" value="{{ entity.location.lat|default('') }}">
|
||||||
|
<input type="hidden" name="location_lon" value="{{ entity.location.lon|default('') }}">
|
||||||
|
<i class="icon map marker"></i>
|
||||||
|
|
||||||
|
<div class="ui bottom attached label">
|
||||||
|
Du kannst zu diesem Ort auch Geokoordinaten <a href="#" class="add_geo">hinterlegen</a>.<br/>
|
||||||
|
<span class="coords">{% if entity.location.lat|default(0) > 0 %}Folgende Koordinaten sind angegeben: lat:{{ entity.location.lat }}, lon:{{ entity.location.lon }}{% endif %}</span>
|
||||||
|
</div>
|
||||||
|
<div class="ui modal geo chooser">
|
||||||
|
<i class="close icon"></i>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
Wähle einen Punkt auf der Karte
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div id="map"></div>
|
||||||
|
</div>
|
||||||
|
<div class="actions">
|
||||||
|
<div class="ui button cancel">
|
||||||
|
Cancel
|
||||||
|
</div>
|
||||||
|
<div class="ui button ok">
|
||||||
|
Okay
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field">
|
||||||
|
<label class="" for="event_tags">Tags</label>
|
||||||
|
|
||||||
|
<div class="ui left icon input attached-label">
|
||||||
|
<input type="text"
|
||||||
|
id="event_tags"
|
||||||
|
name="tags"
|
||||||
|
value="{{ entity.getTagsAsText() }}"
|
||||||
|
class="form-control">
|
||||||
|
<i class="icon tag"></i>
|
||||||
|
|
||||||
|
<div class="ui bottom attached label">Du kannst hier kommasepariert <a
|
||||||
|
href="https://en.wikipedia.org/wiki/Tag_%28metadata%29">Tags</a> angeben.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<input type="submit" class="ui button blue" value="Speichern"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
|
@ -3,6 +3,7 @@
|
||||||
<div class="ui column">
|
<div class="ui column">
|
||||||
<div class="title item"><a href="{{ path('') }}">Calcifer</a></div>
|
<div class="title item"><a href="{{ path('') }}">Calcifer</a></div>
|
||||||
<div class="item"><a href="{{ path('_new') }}">Neuer Termin</a> </div>
|
<div class="item"><a href="{{ path('_new') }}">Neuer Termin</a> </div>
|
||||||
|
<div class="item"><a href="{{ path('repeating_event_show') }}">Wiederholende Termine</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
|
@ -1,460 +0,0 @@
|
||||||
/* line 1, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker {
|
|
||||||
box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
|
|
||||||
background: #FFFFFF;
|
|
||||||
border-bottom: 1px solid #BBBBBB;
|
|
||||||
border-left: 1px solid #CCCCCC;
|
|
||||||
border-right: 1px solid #CCCCCC;
|
|
||||||
border-top: 1px solid #CCCCCC;
|
|
||||||
color: #333333;
|
|
||||||
font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
||||||
padding: 8px;
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-top: 2px;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 9999;
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 20, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker iframe {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
width: 75px;
|
|
||||||
height: 210px;
|
|
||||||
background: transparent;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*For IE8 or lower*/
|
|
||||||
/* line 31, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker button {
|
|
||||||
border: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 35, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_noselect {
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
-o-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 45, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_noselect::selection {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 49, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_noselect::-moz-selection {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 53, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker.xdsoft_inline {
|
|
||||||
display: inline-block;
|
|
||||||
position: static;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 59, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker * {
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 0px;
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 66, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 70, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 74, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker {
|
|
||||||
width: 224px;
|
|
||||||
float: left;
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 80, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker {
|
|
||||||
width: 58px;
|
|
||||||
float: left;
|
|
||||||
text-align: center;
|
|
||||||
margin-left: 8px;
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 88, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker.active + .xdsoft_timepicker {
|
|
||||||
margin-top: 8px;
|
|
||||||
margin-bottom: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 93, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_mounthpicker {
|
|
||||||
position: relative;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 98, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_today_button {
|
|
||||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg==");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 102, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_prev {
|
|
||||||
float: left;
|
|
||||||
background-position: -20px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 107, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_today_button {
|
|
||||||
float: left;
|
|
||||||
background-position: -70px 0px;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 113, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_next {
|
|
||||||
float: right;
|
|
||||||
background-position: 0px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 121, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_today_button {
|
|
||||||
background-color: transparent;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
border: 0px none currentColor;
|
|
||||||
cursor: pointer;
|
|
||||||
display: block;
|
|
||||||
height: 30px;
|
|
||||||
opacity: 0.5;
|
|
||||||
outline: medium none currentColor;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0px;
|
|
||||||
position: relative;
|
|
||||||
text-indent: 100%;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 139, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
|
|
||||||
float: none;
|
|
||||||
background-position: -40px -15px;
|
|
||||||
height: 15px;
|
|
||||||
width: 30px;
|
|
||||||
display: block;
|
|
||||||
margin-left: 14px;
|
|
||||||
margin-top: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 149, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
|
|
||||||
background-position: -40px 0px;
|
|
||||||
margin-bottom: 7px;
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 155, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
|
|
||||||
height: 151px;
|
|
||||||
overflow: hidden;
|
|
||||||
border-bottom: 1px solid #DDDDDD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 161, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div {
|
|
||||||
background: #F5F5F5;
|
|
||||||
border-top: 1px solid #DDDDDD;
|
|
||||||
color: #666666;
|
|
||||||
font-size: 12px;
|
|
||||||
text-align: center;
|
|
||||||
border-collapse: collapse;
|
|
||||||
cursor: pointer;
|
|
||||||
border-bottom-width: 0px;
|
|
||||||
height: 25px;
|
|
||||||
line-height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 174, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:first-child {
|
|
||||||
border-top-width: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 180, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_today_button:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_next:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_prev:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 184, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label {
|
|
||||||
display: inline;
|
|
||||||
position: relative;
|
|
||||||
z-index: 9999;
|
|
||||||
margin: 0;
|
|
||||||
padding: 5px 3px;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #fff;
|
|
||||||
float: left;
|
|
||||||
width: 182px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 200, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 204, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
position: absolute;
|
|
||||||
right: 0px;
|
|
||||||
top: 30px;
|
|
||||||
z-index: 101;
|
|
||||||
display: none;
|
|
||||||
background: #fff;
|
|
||||||
max-height: 160px;
|
|
||||||
overflow-y: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 216, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect {
|
|
||||||
right: -7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 220, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect {
|
|
||||||
right: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 224, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
|
|
||||||
color: #fff;
|
|
||||||
background: #ff8000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 229, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
|
|
||||||
padding: 2px 10px 2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 233, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
|
|
||||||
background: #33AAFF;
|
|
||||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 240, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_month {
|
|
||||||
width: 90px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 245, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 249, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_year {
|
|
||||||
width: 56px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 253, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 259, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td > div {
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 263, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 267, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td, .xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
width: 14.2857142%;
|
|
||||||
background: #F5F5F5;
|
|
||||||
border: 1px solid #DDDDDD;
|
|
||||||
color: #666666;
|
|
||||||
font-size: 12px;
|
|
||||||
text-align: right;
|
|
||||||
padding: 0px;
|
|
||||||
border-collapse: collapse;
|
|
||||||
cursor: pointer;
|
|
||||||
height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 280, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
background: #F1F1F1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 284, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
|
|
||||||
color: #33AAFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 290, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_current {
|
|
||||||
background: #33AAFF;
|
|
||||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 299, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_time_box > div > div.xdsoft_disabled {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 303, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 308, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:hover {
|
|
||||||
color: #fff !important;
|
|
||||||
background: #ff8000 !important;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 315, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_disabled:hover {
|
|
||||||
color: inherit !important;
|
|
||||||
background: inherit !important;
|
|
||||||
/*box-shadow: inherit !important;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 321, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
font-weight: 700;
|
|
||||||
text-align: center;
|
|
||||||
color: #999;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 328, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_copyright {
|
|
||||||
color: #ccc !important;
|
|
||||||
font-size: 10px;
|
|
||||||
clear: both;
|
|
||||||
float: none;
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 336, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_copyright a {
|
|
||||||
color: #eee !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 340, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_copyright a:hover {
|
|
||||||
color: #aaa !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 344, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_time_box {
|
|
||||||
position: relative;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 349, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_scrollbar > .xdsoft_scroller {
|
|
||||||
background: #ccc !important;
|
|
||||||
height: 20px;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 355, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_scrollbar {
|
|
||||||
position: absolute;
|
|
||||||
width: 7px;
|
|
||||||
right: 0px;
|
|
||||||
top: 0px;
|
|
||||||
bottom: 0px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 364, assetic_compassiP1C2P.scss */
|
|
||||||
.xdsoft_scroller_box {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 2, assetic_compass09ABip.scss */
|
|
||||||
.event.box h2 {
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
/* line 4, assetic_compass09ABip.scss */
|
|
||||||
.event.box h2 a, .event.box h2 a:hover, .event.box h2 a:visited {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
/* line 9, assetic_compass09ABip.scss */
|
|
||||||
.event.box .startdate, .event.box .location, .event.box .url, .event.box .edit {
|
|
||||||
/*float: left;*/
|
|
||||||
display: inline;
|
|
||||||
margin: 0;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
/* line 17, assetic_compass09ABip.scss */
|
|
||||||
.event.box ul.tags {
|
|
||||||
padding-left: 0;
|
|
||||||
/*float: left;*/
|
|
||||||
margin: 0;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
/* line 24, assetic_compass09ABip.scss */
|
|
||||||
.event.box ul.tags li {
|
|
||||||
list-style-type: none;
|
|
||||||
/*float: left;*/
|
|
||||||
display: inline;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 35, assetic_compass09ABip.scss */
|
|
||||||
form .ui.form .field .attached-label > input, form .ui.form .field .attached-label > textarea {
|
|
||||||
margin-bottom: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 41, assetic_compass09ABip.scss */
|
|
||||||
#map {
|
|
||||||
height: 20rem;
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
/* line 2, assetic_compasscXEbLP.scss */
|
|
||||||
.event.box h2 {
|
|
||||||
padding: 0.5rem;
|
|
||||||
}
|
|
||||||
/* line 4, assetic_compasscXEbLP.scss */
|
|
||||||
.event.box h2 a, .event.box h2 a:hover, .event.box h2 a:visited {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
/* line 9, assetic_compasscXEbLP.scss */
|
|
||||||
.event.box .startdate, .event.box .location, .event.box .url, .event.box .edit {
|
|
||||||
/*float: left;*/
|
|
||||||
display: inline;
|
|
||||||
margin: 0;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
}
|
|
||||||
/* line 17, assetic_compasscXEbLP.scss */
|
|
||||||
.event.box ul.tags {
|
|
||||||
padding-left: 0;
|
|
||||||
/*float: left;*/
|
|
||||||
margin: 0;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
margin-bottom: 0.5rem;
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
/* line 24, assetic_compasscXEbLP.scss */
|
|
||||||
.event.box ul.tags li {
|
|
||||||
list-style-type: none;
|
|
||||||
/*float: left;*/
|
|
||||||
display: inline;
|
|
||||||
margin-right: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 35, assetic_compasscXEbLP.scss */
|
|
||||||
form .ui.form .field .attached-label > input, form .ui.form .field .attached-label > textarea {
|
|
||||||
margin-bottom: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 41, assetic_compasscXEbLP.scss */
|
|
||||||
#map {
|
|
||||||
height: 20rem;
|
|
||||||
}
|
|
|
@ -1,417 +0,0 @@
|
||||||
/* line 1, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker {
|
|
||||||
box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
|
|
||||||
background: #FFFFFF;
|
|
||||||
border-bottom: 1px solid #BBBBBB;
|
|
||||||
border-left: 1px solid #CCCCCC;
|
|
||||||
border-right: 1px solid #CCCCCC;
|
|
||||||
border-top: 1px solid #CCCCCC;
|
|
||||||
color: #333333;
|
|
||||||
font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
|
||||||
padding: 8px;
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-top: 2px;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 9999;
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 20, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker iframe {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
width: 75px;
|
|
||||||
height: 210px;
|
|
||||||
background: transparent;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*For IE8 or lower*/
|
|
||||||
/* line 31, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker button {
|
|
||||||
border: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 35, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_noselect {
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
-webkit-user-select: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
-o-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 45, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_noselect::selection {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 49, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_noselect::-moz-selection {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 53, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker.xdsoft_inline {
|
|
||||||
display: inline-block;
|
|
||||||
position: static;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 59, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker * {
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 0px;
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 66, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 70, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 74, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker {
|
|
||||||
width: 224px;
|
|
||||||
float: left;
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 80, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker {
|
|
||||||
width: 58px;
|
|
||||||
float: left;
|
|
||||||
text-align: center;
|
|
||||||
margin-left: 8px;
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 88, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_datepicker.active + .xdsoft_timepicker {
|
|
||||||
margin-top: 8px;
|
|
||||||
margin-bottom: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 93, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_mounthpicker {
|
|
||||||
position: relative;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 98, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_today_button {
|
|
||||||
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg==");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 102, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_prev {
|
|
||||||
float: left;
|
|
||||||
background-position: -20px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 107, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_today_button {
|
|
||||||
float: left;
|
|
||||||
background-position: -70px 0px;
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 113, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_next {
|
|
||||||
float: right;
|
|
||||||
background-position: 0px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 121, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_next, .xdsoft_datetimepicker .xdsoft_prev, .xdsoft_datetimepicker .xdsoft_today_button {
|
|
||||||
background-color: transparent;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
border: 0px none currentColor;
|
|
||||||
cursor: pointer;
|
|
||||||
display: block;
|
|
||||||
height: 30px;
|
|
||||||
opacity: 0.5;
|
|
||||||
outline: medium none currentColor;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0px;
|
|
||||||
position: relative;
|
|
||||||
text-indent: 100%;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 139, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
|
|
||||||
float: none;
|
|
||||||
background-position: -40px -15px;
|
|
||||||
height: 15px;
|
|
||||||
width: 30px;
|
|
||||||
display: block;
|
|
||||||
margin-left: 14px;
|
|
||||||
margin-top: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 149, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
|
|
||||||
background-position: -40px 0px;
|
|
||||||
margin-bottom: 7px;
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 155, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
|
|
||||||
height: 151px;
|
|
||||||
overflow: hidden;
|
|
||||||
border-bottom: 1px solid #DDDDDD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 161, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div {
|
|
||||||
background: #F5F5F5;
|
|
||||||
border-top: 1px solid #DDDDDD;
|
|
||||||
color: #666666;
|
|
||||||
font-size: 12px;
|
|
||||||
text-align: center;
|
|
||||||
border-collapse: collapse;
|
|
||||||
cursor: pointer;
|
|
||||||
border-bottom-width: 0px;
|
|
||||||
height: 25px;
|
|
||||||
line-height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 174, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:first-child {
|
|
||||||
border-top-width: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 180, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_today_button:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_next:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_prev:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 184, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label {
|
|
||||||
display: inline;
|
|
||||||
position: relative;
|
|
||||||
z-index: 9999;
|
|
||||||
margin: 0;
|
|
||||||
padding: 5px 3px;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
background-color: #fff;
|
|
||||||
float: left;
|
|
||||||
width: 182px;
|
|
||||||
text-align: center;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 200, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 204, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
position: absolute;
|
|
||||||
right: 0px;
|
|
||||||
top: 30px;
|
|
||||||
z-index: 101;
|
|
||||||
display: none;
|
|
||||||
background: #fff;
|
|
||||||
max-height: 160px;
|
|
||||||
overflow-y: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 216, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect {
|
|
||||||
right: -7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 220, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect {
|
|
||||||
right: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 224, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
|
|
||||||
color: #fff;
|
|
||||||
background: #ff8000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 229, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
|
|
||||||
padding: 2px 10px 2px 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 233, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
|
|
||||||
background: #33AAFF;
|
|
||||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 240, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_month {
|
|
||||||
width: 90px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 245, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 249, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_year {
|
|
||||||
width: 56px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 253, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 259, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td > div {
|
|
||||||
padding-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 263, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 267, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td, .xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
width: 14.2857142%;
|
|
||||||
background: #F5F5F5;
|
|
||||||
border: 1px solid #DDDDDD;
|
|
||||||
color: #666666;
|
|
||||||
font-size: 12px;
|
|
||||||
text-align: right;
|
|
||||||
padding: 0px;
|
|
||||||
border-collapse: collapse;
|
|
||||||
cursor: pointer;
|
|
||||||
height: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 280, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
background: #F1F1F1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 284, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
|
|
||||||
color: #33AAFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 290, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_current {
|
|
||||||
background: #33AAFF;
|
|
||||||
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 299, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_time_box > div > div.xdsoft_disabled {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 303, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 308, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div:hover {
|
|
||||||
color: #fff !important;
|
|
||||||
background: #ff8000 !important;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 315, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
|
|
||||||
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box > div > div.xdsoft_disabled:hover {
|
|
||||||
color: inherit !important;
|
|
||||||
background: inherit !important;
|
|
||||||
/*box-shadow: inherit !important;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 321, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_calendar th {
|
|
||||||
font-weight: 700;
|
|
||||||
text-align: center;
|
|
||||||
color: #999;
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 328, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_copyright {
|
|
||||||
color: #ccc !important;
|
|
||||||
font-size: 10px;
|
|
||||||
clear: both;
|
|
||||||
float: none;
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 336, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_copyright a {
|
|
||||||
color: #eee !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 340, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_datetimepicker .xdsoft_copyright a:hover {
|
|
||||||
color: #aaa !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 344, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_time_box {
|
|
||||||
position: relative;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 349, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_scrollbar > .xdsoft_scroller {
|
|
||||||
background: #ccc !important;
|
|
||||||
height: 20px;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 355, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_scrollbar {
|
|
||||||
position: absolute;
|
|
||||||
width: 7px;
|
|
||||||
right: 0px;
|
|
||||||
top: 0px;
|
|
||||||
bottom: 0px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* line 364, assetic_compassQzxHpj.scss */
|
|
||||||
.xdsoft_scroller_box {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
1472
web/js/73cfd50.js
1472
web/js/73cfd50.js
File diff suppressed because one or more lines are too long
|
@ -1,56 +0,0 @@
|
||||||
/**
|
|
||||||
* Created by tim on 06.07.14.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// initializing with settings
|
|
||||||
|
|
||||||
function addGeoCoordinates(ev) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var map = null;
|
|
||||||
$(document).ready(function () {
|
|
||||||
$('.icon.link').popup();
|
|
||||||
jQuery('input[type=datetime]').datetimepicker({lang: 'de', format: 'Y-m-d H:i'});
|
|
||||||
|
|
||||||
$('.add_geo').click(addGeoCoordinates);
|
|
||||||
map = L.map('map');
|
|
||||||
|
|
||||||
// add an OpenStreetMap tile layer
|
|
||||||
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
|
|
||||||
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
|
|
||||||
}).addTo(map);
|
|
||||||
|
|
||||||
map.setView([51.505, -0.09], 0);
|
|
||||||
|
|
||||||
L.Icon.Default.imagePath = '/css/images';
|
|
||||||
var popup = L.popup();
|
|
||||||
|
|
||||||
var marker = L.marker();
|
|
||||||
|
|
||||||
function onMapClick(e) {
|
|
||||||
marker
|
|
||||||
.setLatLng(e.latlng)
|
|
||||||
//.setContent("You clicked the map at " + e.latlng.toString())
|
|
||||||
.addTo(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
map.on('click', onMapClick);
|
|
||||||
|
|
||||||
$('.geo.chooser').modal('setting', {
|
|
||||||
closable: false,
|
|
||||||
onApprove: function () {
|
|
||||||
var coords = marker.getLatLng();
|
|
||||||
$('input[name=location_lat]').val(coords.lat);
|
|
||||||
$('input[name=location_lon]').val(coords.lng);
|
|
||||||
$('input[name=location]').css('margin-bottom','3.2rem');
|
|
||||||
$('span.coords').text('Folgende Koordinaten sind angegeben: lat:' +coords.lat + ', lon:' + coords.lng);
|
|
||||||
},
|
|
||||||
onDeny: function () {
|
|
||||||
|
|
||||||
},
|
|
||||||
onVisible: function () {
|
|
||||||
map.invalidateSize(true);
|
|
||||||
map.locate({setView: true});
|
|
||||||
}
|
|
||||||
}).modal('attach events', '.add_geo', 'show');
|
|
||||||
});
|
|
Reference in a new issue