parent
d21c818e84
commit
33b63429ef
8 changed files with 148 additions and 82 deletions
|
@ -17,6 +17,8 @@ use Symfony\Component\Console\Input\InputArgument;
|
|||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Validator\Constraints\DateTime;
|
||||
use enko\RelativeDateParser\RelativeDateParser;
|
||||
|
||||
class GenerateEventsCommand extends ContainerAwareCommand
|
||||
{
|
||||
|
@ -44,18 +46,19 @@ class GenerateEventsCommand extends ContainerAwareCommand
|
|||
$entities = $repo->findAll();
|
||||
foreach($entities as $entity) {
|
||||
/** @var RepeatingEvent $entity */
|
||||
$period = new \DatePeriod($entity->nextdate,new \DateInterval($entity->repeating_pattern),$end);
|
||||
$next_date = is_null($entity->nextdate) ? new DateTime() : $entity->nextdate;
|
||||
$parser = new RelativeDateParser($entity->repeating_pattern,$next_date,'de');
|
||||
$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')));
|
||||
while (($next_date = $parser->getNext()) < $end) {
|
||||
/** @var \DateTime $next_date */
|
||||
$output->writeln(sprintf("Creating Event %s for %s",$entity->summary,$next_date->format('Y-m-d H:i')));
|
||||
$event = new Event();
|
||||
$event->location = $entity->location;
|
||||
$event->startdate = $date;
|
||||
$event->startdate = $next_date;
|
||||
if ($entity->duration > 0) {
|
||||
$duration = new \DateInterval("PT".$entity->duration.'H');
|
||||
/** @var \DateTime $enddate */
|
||||
$enddate = clone $date;
|
||||
$enddate = clone $next_date;
|
||||
$enddate->add($duration);
|
||||
$entity->enddate = $enddate;
|
||||
}
|
||||
|
@ -72,10 +75,10 @@ class GenerateEventsCommand extends ContainerAwareCommand
|
|||
}
|
||||
$entityManager->persist($event);
|
||||
$entityManager->flush();
|
||||
$parser->setNow($next_date);
|
||||
}
|
||||
if (!is_null($event)) {
|
||||
$entity->nextdate = $event->startdate;
|
||||
$entity->nextdate->add(new \DateInterval($entity->repeating_pattern));
|
||||
$entityManager->persist($entity);
|
||||
$entityManager->flush();
|
||||
}
|
||||
|
|
|
@ -295,4 +295,15 @@ class RepeatingEventController extends Controller
|
|||
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a Event entity.
|
||||
*
|
||||
* @Route("/wiederholungsmuster", name="repeating_patterns")
|
||||
* @Method({"GET", "POST"})
|
||||
* @Template("CalciferBundle:RepeatingEvent:repeating_patterns.html.twig")
|
||||
*/
|
||||
public function repeatingPatternsHelpAction(Request $request) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,17 +84,4 @@ class RepeatingEvent extends BaseEntity
|
|||
* )
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -44,7 +44,7 @@
|
|||
{{ entity.nextdate.format('Y-m-d H:i') }}
|
||||
</td>
|
||||
<td>
|
||||
{{ entity.getFormatedRepeatPattern() }}
|
||||
{{ entity.repeating_pattern }}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ path('repeating_event_edit', {'slug':entity.slug}) }}">Bearbeiten</a> |
|
||||
|
|
|
@ -38,23 +38,23 @@
|
|||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="control-label required" for="event_duration">Wiederholungsmuster</label>
|
||||
<label class="control-label required" for="event_duration">Terminwiederholungsmuster</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="ui left labeled input attached-label">
|
||||
<input type="text"
|
||||
id="repeating_pattern"
|
||||
name="repeating_pattern"
|
||||
value="{{ entity.repeating_pattern|default('') }}"
|
||||
required="required"
|
||||
maxlength="255"
|
||||
class="form-control">
|
||||
|
||||
<div class="default text">Bitte wähle einen Wert aus</div>
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="ui corner label">
|
||||
<i class="icon asterisk"></i>
|
||||
</div>
|
||||
|
||||
<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 class="ui bottom attached label">
|
||||
Gebe hier ein <a href="{{ path("repeating_patterns") }}">Wiederholungsmuster</a> an.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
{% 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">
|
||||
Wiederholungsmuster
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ui one column page grid segment">
|
||||
<div class="ui column">
|
||||
<p>Es gibt 2 verschiedene Wiederholungsmustertypen. Feste Termine oder Interval Termine.</p>
|
||||
<p>Der erste definiert sich dadurch das der Termin immer an einem bestimmten Tag im Monat passieren soll. Das Hackspace-Plenum findet z.B. am <code>Zweiten Freitag des Monats</code> statt. Die Sicherheitssprechstunde findet immer am <code>Ersten Dienstag des Monats</code> statt. Anhand dieser Beispiele sollte eigentlich klar sein wie dieses Wiederholungsmuster funktioniert:</p>
|
||||
<p>An erster stelle definiert man die Woche: Erster, Zweiter, Dritter, Letzter (In manchen Fällen kann Dritter und Letzter auch identisch sein).</p>
|
||||
<p>An zweiter stelle definiert man den Wochentag: Montag, Dienstag, Mitwoch usw.</p>
|
||||
<p>An letzter Stelle steht noch pro Forma „des Monats“</p>
|
||||
<p>Der zweite Wiederholungstyp ist für regelmäßige Termine wie z.B. die Elektrorunde gedacht, die <code>Alle 7 Tage</code>. Für die Brettspielerei würde man <code>Alle 2 Wochen</code> schreiben.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
Reference in a new issue