Пример #1
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     if (!is_object($this->campaign) || !$this->campaign->getHasRelativeDates()) {
         // By default, start date is today
         $now = $this->datetime->setUserTimezone(new \DateTime('now'));
         $endDatePicker = null;
         $helpText = null;
         if ($this->campaign) {
             $startDateCampaign = $this->datetime->formatLocale($this->campaign->getStartDate());
             // If the campaign's start date is after now, then use that as the start and initial date.
             if ($this->campaign->getStartDate() > $now) {
                 $startDatePicker = $this->datetime->formatLocale($this->campaign->getStartDate());
             } else {
                 $startDatePicker = $this->datetime->formatLocale($now);
             }
             $endDateCampaign = $endDatePicker = $this->datetime->formatLocale($this->campaign->getEndDate());
             $helpText = 'Timezone: ' . $this->datetime->getUserTimezone();
         } else {
             $startDatePicker = $this->datetime->formatLocale($now);
         }
         if ($this->campaign) {
             // If the campaign is running right now, then offer the
             // option to execute now or schedule execution.
             if (DateTimeUtil::isWithinDuration($this->campaign->getStartDate(), new \DateTime('now'), $this->campaign->getEndDate())) {
                 $builder->add('execution_choice', 'choice', array('label' => false, 'choices' => array('now' => 'Now', 'schedule' => 'Schedule'), 'mapped' => false, 'expanded' => true, 'multiple' => false, 'required' => true, 'data' => 'schedule'));
             }
         }
         if ($this->view == 'rest') {
             $builder->add('date', 'datetime', array('widget' => 'single_text', 'date_format' => 'Y-m-d\\TH:i:sP'));
         } else {
             $builder->add('date', 'campaignchain_datetimepicker', array('label' => false, 'required' => false, 'constraints' => array(), 'start_date' => $startDatePicker, 'end_date' => $endDatePicker, 'attr' => array('help_text' => $helpText, 'input_group' => array('append' => '<span class="fa fa-calendar">'))));
         }
     } else {
         // TODO: Ensure time is not after or before campaign duration
         $campaignInterval = $this->campaign->getStartDate()->diff($this->campaign->getEndDate());
         $campaignDays = (string) $campaignInterval->format("%a");
         $builder->add('days', 'integer', array('label' => false, 'precision' => 0, 'attr' => array('help_text' => '1-' . $campaignDays . ' days after start of campaign', 'input_group' => array('append' => '<span class="fa fa-calendar">'), 'min' => 0, 'max' => $campaignDays)))->add('time', 'text', array('label' => false, 'attr' => array('help_text' => 'Execution time at that day', 'input_group' => array('append' => '<span class="fa fa-clock-o">'))));
     }
     $builder->add('timezone', 'hidden', array('data' => $this->datetime->getUserTimezone()));
 }
Пример #2
0
 public function configureOptions(OptionsResolver $resolver)
 {
     $resolver->setDefaults(array('model_timezone' => 'UTC', 'view_timezone' => $this->dateTimeUtil->getUserTimezone(), 'widget' => 'single_text', 'format' => $this->dateTimeUtil->getUserDatetimeFormat(), 'date_format' => $this->dateTimeUtil->getUserDateFormat(), 'input' => 'datetime'));
 }
Пример #3
0
 /**
  * Move a Campaign to a new start date.
  *
  * @ApiDoc(
  *  section = "Core",
  *  views = { "private" },
  *  requirements={
  *      {
  *          "name"="id",
  *          "description" = "Campaign ID",
  *          "requirement"="\d+"
  *      },
  *     {
  *          "name"="start_date",
  *          "description" = "Start date in ISO8601 format",
  *          "requirement"="/(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})[+-](\d{2})\:(\d{2})/"
  *      }
  *  }
  * )
  *
  * @param Request $request
  * @return Response
  */
 public function moveApiAction(Request $request)
 {
     $serializer = $this->get('campaignchain.core.serializer.default');
     $responseData = array();
     $id = $request->request->get('id');
     // Is this a campaign with interval?
     if ($request->request->has('start_date')) {
         try {
             $newStartDate = new \DateTime($request->request->get('start_date'));
         } catch (\Exception $e) {
             return $this->apiErrorResponse($e->getMessage());
         }
     } else {
         return $this->apiErrorResponse('Please provide a date time value for start_date');
     }
     $newStartDate = DateTimeUtil::roundMinutes($newStartDate, $this->getParameter('campaignchain_core.scheduler.interval'));
     /** @var CampaignService $campaignService */
     $campaignService = $this->get('campaignchain.core.campaign');
     /** @var Campaign $campaign */
     $campaign = $campaignService->getCampaign($id);
     // Preserve old campaign data for response.
     $responseData['campaign']['id'] = $campaign->getId();
     if (!$campaign->getInterval()) {
         $oldStartDate = clone $campaign->getStartDate();
         $responseData['campaign']['old_start_date'] = $oldStartDate->format(\DateTime::ISO8601);
         $responseData['campaign']['old_end_date'] = $campaign->getEndDate()->format(\DateTime::ISO8601);
     } else {
         $responseData['campaign']['old_interval_start_date'] = $campaign->getIntervalStartDate()->format(\DateTime::ISO8601);
         $responseData['campaign']['old_interval_next_run'] = $campaign->getIntervalNextRun()->format(\DateTime::ISO8601);
         if ($campaign->getIntervalEndDate()) {
             $responseData['campaign']['old_interval_end_date'] = $campaign->getIntervalEndDate()->format(\DateTime::ISO8601);
         }
     }
     // Move campaign's start date.
     $campaign = $campaignService->moveCampaign($campaign, $newStartDate);
     // Add new campaign dates to response.
     if (!$campaign->getInterval()) {
         $responseData['campaign']['new_start_date'] = $campaign->getStartDate()->format(\DateTime::ISO8601);
         $responseData['campaign']['new_end_date'] = $campaign->getEndDate()->format(\DateTime::ISO8601);
     } else {
         $responseData['campaign']['new_interval_start_date'] = $campaign->getIntervalStartDate()->format(\DateTime::ISO8601);
         $responseData['campaign']['new_interval_next_run'] = $campaign->getIntervalNextRun()->format(\DateTime::ISO8601);
         if ($campaign->getIntervalEndDate()) {
             $responseData['campaign']['new_interval_end_date'] = $campaign->getIntervalEndDate()->format(\DateTime::ISO8601);
         }
     }
     return new Response($serializer->serialize($responseData, 'json'));
 }
Пример #4
0
 public function configureOptions(OptionsResolver $resolver)
 {
     $resolver->setDefaults(array('model_timezone' => 'UTC', 'view_timezone' => $this->dateTimeUtil->getUserTimezone(), 'end_date' => null, 'pickerOptions' => array('format' => $this->dateTimeUtil->getUserDatetimeFormat('datepicker'), 'weekStart' => 0, 'autoclose' => true, 'startView' => 'month', 'minView' => 'hour', 'maxView' => 'decade', 'todayBtn' => false, 'todayHighlight' => true, 'keyboardNavigation' => true, 'language' => 'en', 'forceParse' => true, 'minuteStep' => 5, 'pickerReferer ' => 'default', 'pickerPosition' => 'bottom-right', 'viewSelect' => 'hour', 'showMeridian' => false)));
     $resolver->setRequired('start_date');
 }