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())); }
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')); }
/** * 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')); }
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'); }