Example #1
0
 public function getSchedule()
 {
     if (!$this->start_date || !$this->is_recurring || !$this->frequency_id) {
         return false;
     }
     $startDate = $this->getOriginal('last_sent_date') ?: $this->getOriginal('start_date');
     $startDate .= ' ' . $this->account->recurring_hour . ':00:00';
     $startDate = $this->account->getDateTime($startDate);
     $endDate = $this->end_date ? $this->account->getDateTime($this->getOriginal('end_date')) : null;
     $timezone = $this->account->getTimezone();
     $rule = $this->getRecurrenceRule();
     $rule = new \Recurr\Rule("{$rule}", $startDate, $endDate, $timezone);
     // Fix for months with less than 31 days
     $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig();
     $transformerConfig->enableLastDayOfMonthFix();
     $transformer = new \Recurr\Transformer\ArrayTransformer();
     $transformer->setConfig($transformerConfig);
     $dates = $transformer->transform($rule);
     if (count($dates) < 2) {
         return false;
     }
     return $dates;
 }
 /**
  * Get dates array based on recur template. 
  *
  * @return  array
  */
 public function getRecurDates($start, $rrule)
 {
     $timezone = "UTC";
     //"UTC"; //'America/New_York' 'America/Denver' craft()->getTimeZone()
     //convert time back to selected timezone.
     $startDateString = new \DateTime($start->format('c'), new \DateTimeZone(craft()->getTimeZone()));
     //$startDateString = $start->format(DateTime::MYSQL_DATETIME, DateTime::UTC);
     //
     $rule = new \Recurr\Rule($rrule, $startDateString, null, $timezone);
     $transformer = new \Recurr\Transformer\ArrayTransformer();
     $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig();
     $transformerConfig->enableLastDayOfMonthFix();
     $transformer->setConfig($transformerConfig);
     return $transformer->transform($rule);
 }
Example #3
0
<?php

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use dosamigos\datetimepicker\DateTimePicker;
$summary = '';
if ($model->recurrence_rule) {
    $rule = new \Recurr\Rule($model->recurrence_rule);
    $transformer = new \Recurr\Transformer\ArrayTransformer();
    $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig();
    $transformerConfig->enableLastDayOfMonthFix();
    $transformer->setConfig($transformerConfig);
    $textTransformer = new \Recurr\Transformer\TextTransformer(new \Recurr\Transformer\Translator('en'));
    $summary = $textTransformer->transform($rule);
}
?>

<?php 
$form = ActiveForm::begin(['id' => 'event-form', 'layout' => 'horizontal', 'fieldConfig' => ['template' => "{label}\n{beginWrapper}\n{input}\n{endWrapper}", 'horizontalCssClasses' => ['label' => 'col-sm-3', 'offset' => 'col-sm-offset-3', 'wrapper' => 'col-sm-8']]]);
?>

<?php 
echo Html::activeHiddenInput($model, 'id');
?>
   
<?php 
echo Html::activeHiddenInput($model, 'calendar_id');
echo Html::activeHiddenInput($model, 'created_by');
echo Html::activeHiddenInput($model, 'recurrence_rule');
?>
 /**
  * @param int $eventDateUid
  */
 public function updateRecurrences($eventDateUid)
 {
     $date = $this->eventDateRepository->findByUid($eventDateUid);
     if (!$date) {
         /* Do not update hidden records – they'll be updated when the are activated again */
         return;
     }
     if ($date->getFrequency() === 0) {
         /* Remove recurrences that may have existed before switching to frequency=0 */
         $this->removeRecurrences($eventDateUid);
         return;
     }
     if ($date->getStart()) {
         $startDate = $date->getStart();
         // Timezone is set to '+01:00' by default (with a European default timzeone)
         // set the timezone explictly to make DateTransitions work
         $startDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));
         $endDate = null;
         if ($date->getEnd()) {
             $endDate = $date->getEnd();
             $endDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));
         }
         if (!in_array($date->getFrequency(), array_keys(self::$freqs))) {
             return;
         }
         $rrule = ['FREQ' => self::$freqs[$date->getFrequency()]];
         if ($date->getFrequencyUntil()) {
             $rrule['UNTIL'] = $date->getFrequencyUntil()->format(\DateTime::ATOM);
         } else {
             $rrule['COUNT'] = $date->getFrequencyCount();
         }
         if ($rrule['FREQ'] == 'WEEKLY') {
             $byday = $this->buildByDay($date->getFrequencyWeekdays());
             if ($byday) {
                 $rrule['BYDAY'] = $byday;
             }
         }
         $rule = new \Recurr\Rule($rrule, $startDate, $endDate);
         $transformer = new \Recurr\Transformer\ArrayTransformer();
         $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig();
         $limit = $this->configurationService->get('recurrence_virtual_limit');
         if ($limit) {
             $transformerConfig->setVirtualLimit($limit);
         }
         $transformerConfig->enableLastDayOfMonthFix();
         $transformer->setConfig($transformerConfig);
         $this->mergeUpdatesWithExistingRecurrences($date, $transformer->transform($rule));
     }
 }
 /**
  * Get dates array based on recur template.
  *
  * @return  array
  */
 public function getRecurDates($start, $rrule)
 {
     $timezone = craft()->getTimeZone();
     //'UTC','America/New_York','America/Denver' craft()->getTimeZone()
     $startDateString = $start->format(DateTime::MYSQL_DATETIME);
     #-- returns null or datetime
     $endOn = craft()->venti_rule->getEndOn($rrule);
     $rule = new \Recurr\Rule($rrule, $startDateString, $endOn, $timezone);
     $transformer = new \Recurr\Transformer\ArrayTransformer();
     $transformerConfig = new \Recurr\Transformer\ArrayTransformerConfig();
     $transformerConfig->enableLastDayOfMonthFix();
     $transformer->setConfig($transformerConfig);
     // if ($endOn !== null)
     // {
     //     $constraint = new \Recurr\Transformer\Constraint\BetweenConstraint($start, $endOn, true);
     // }
     // else
     // {
     //     $constraint = new \Recurr\Transformer\Constraint\AfterConstraint(new \DateTime(), true);
     // }
     return $transformer->transform($rule);
 }