/**
  * @return Market_ProductModel
  * @throws Exception
  */
 private function _setProductFromPost()
 {
     $productId = craft()->request->getPost('productId');
     if ($productId) {
         $product = craft()->market_product->getById($productId);
         if (!$product) {
             throw new Exception(Craft::t('No product with the ID “{id}”', ['id' => $productId]));
         }
     } else {
         $product = new Market_ProductModel();
     }
     $availableOn = craft()->request->getPost('availableOn');
     $expiresOn = craft()->request->getPost('expiresOn');
     $product->availableOn = $availableOn ? DateTime::createFromString($availableOn, craft()->timezone) : $product->availableOn;
     $product->expiresOn = $expiresOn ? DateTime::createFromString($expiresOn, craft()->timezone) : null;
     $product->typeId = craft()->request->getPost('typeId');
     $product->enabled = craft()->request->getPost('enabled');
     $product->promotable = craft()->request->getPost('promotable');
     $product->freeShipping = craft()->request->getPost('freeShipping');
     $product->authorId = craft()->userSession->id;
     $product->taxCategoryId = craft()->request->getPost('taxCategoryId', $product->taxCategoryId);
     if (!$product->availableOn) {
         $product->availableOn = new DateTime();
     }
     $product->getContent()->title = craft()->request->getPost('title', $product->title);
     $product->slug = craft()->request->getPost('slug', $product->slug);
     $product->setContentFromPost('fields');
     return $product;
 }
Ejemplo n.º 2
0
 /**
  * Loops through the data and converts the times to DateTime objects.
  *
  * @access private
  * @param array &$value
  */
 public function convertTimes(&$value, $timezone = null)
 {
     if (isset($value) && is_array($value)) {
         foreach ($value as &$day) {
             if (is_string($day['open']) && $day['open'] || is_array($day['open']) && $day['open']['time']) {
                 $day['open'] = DateTime::createFromString($day['open'], $timezone);
             } else {
                 $day['open'] = '';
             }
             if (is_string($day['close']) && $day['close'] || is_array($day['close']) && $day['close']['time']) {
                 $day['close'] = DateTime::createFromString($day['close'], $timezone);
             } else {
                 $day['close'] = '';
             }
         }
     }
 }
 private function buildRRule($settings)
 {
     $allday = $settings['allday'];
     $startDate = $settings['start_date'];
     $endDate = $settings['end_date'];
     $startTime = $settings['start_time'];
     $endTime = $settings['end_time'];
     $repeats = $settings['repeats'];
     //Does it repeat?
     $frequency = $settings['frequency'];
     //Weekly, Daily, Monthly, Yearly
     $interval = $settings['interval'];
     // i.e. Every 1-30 Months?
     $weekDays = $settings['weekdays'];
     //Which weekdays
     $repeatBy = $settings['repeat_by'];
     //Monthly, by day of week, or day of month
     $ends = $settings['ends'];
     //how it ends (never, after, until)
     $count = $settings['count'];
     // if ending occurs amounts
     $untilDate = $settings['until'];
     // if ending until date
     $exDates = $settings['exdates'];
     $dbString = '';
     //Builds RRULE based on UI Elements Input
     if ($repeats) {
         $rule = new Recurr\RecurrenceRule();
         $rule->setStartDate(DateTime::createFromString($startDate, craft()->getTimeZone()));
         $rule->setInterval($interval);
         if ($ends == 'until') {
             $rule->setEndDate(DateTime::createFromString($untilDate, craft()->getTimeZone()));
         } else {
             if ($ends == 'after') {
                 $rule->setCount($count);
             }
         }
         switch ($frequency) {
             case 'daily':
                 $rule->setFreq(Recurr\RecurrenceRule::FREQ_DAILY);
                 break;
             case 'weekly':
                 $rule->setFreq(Recurr\RecurrenceRule::FREQ_WEEKLY);
                 if (empty($weekDays)) {
                     //If weekdays empty set monday by default
                     $rule->setByDay(array('MO'));
                 } else {
                     $rule->setByDay($weekDays);
                 }
                 break;
             case 'monthly':
                 $rule->setFreq(Recurr\RecurrenceRule::FREQ_MONTHLY);
                 if ($repeatBy == 'month') {
                     $dayOfMonth = date('j', $startDate);
                     $rule->setByMonthDay(array($dayOfMonth));
                 } else {
                     if ($repeatBy == 'week') {
                         $uStartDate = $startDate;
                         $dayOfWeek = strtoupper(substr(date('D', $uStartDate), 0, -1));
                         $numberOfWeek = ceil(date('j', $uStartDate) / 7);
                         $rule->setByDay(array('+' . $numberOfWeek . $dayOfWeek));
                     }
                 }
                 break;
             case 'yearly':
                 $rule->setFreq(Recurr\RecurrenceRule::FREQ_YEARLY);
                 break;
         }
         if ($startTime) {
             $time = date('Ymd\\THis', strtotime(date('Y-m-d', $startDate) . date(' H:i:s', strtotime($startTime))));
             $dbString .= 'DTSTART=' . $time . ';' . $rule->getString();
         } else {
             $time = $startDate;
             var_dump($startDate);
             $dbString .= 'DTSTART=' . date('Ymd', $time) . ';' . $rule->getString();
         }
         if (count($exDates) > 0) {
             $dbString .= ';EXDATE=';
             foreach ($exDates as $index => $date) {
                 $dbString .= date('Ymd', $date);
                 if ($date !== end($exDates)) {
                     $dbString .= ',';
                 }
             }
             $dbString .= ';';
         }
     } else {
         if ($startTime) {
             $time = date('Ymd\\THis', strtotime(date('Ymd', $startDate) . date('\\THis', strtotime($startTime))));
             $dbString .= 'DTSTART=' . $time . ';';
         } else {
             $dbString .= 'DTSTART=' . date('Ymd', $startDate) . ';';
         }
     }
     return $dbString;
 }