/** * @see wcf\system\option\IOptionType::validate() */ public function validate(Option $option, $newValue) { if (!in_array($newValue, DateUtil::getAvailableTimezones())) { throw new UserInputException($option->optionName, 'validationFailed'); } }
/** * @see \wcf\system\condition\ICondition::validate() */ public function validate() { if ($this->startTime == '00:00' && $this->endTime == '00:00') { $this->startTime = $this->endTime = ''; return; } $startDateTime = $endDateTime = null; if ($this->startTime) { $startDateTime = \DateTime::createFromFormat('H:i', $this->startTime); if ($startDateTime === false) { $this->errorMessages['time'] = 'wcf.date.startTime.error.notValid'; throw new UserInputException('startTime', 'notValid'); } } if ($this->endTime) { $endDateTime = \DateTime::createFromFormat('H:i', $this->endTime); if ($endDateTime === false) { $this->errorMessages['time'] = 'wcf.date.endTime.error.notValid'; throw new UserInputException('endTime', 'notValid'); } } if ($startDateTime !== null && $endDateTime !== null) { if ($startDateTime->getTimestamp() >= $endDateTime->getTimeStamp()) { $this->errorMessages['time'] = 'wcf.date.endTime.error.beforeStartTime'; throw new UserInputException('endTime', 'beforeStartTime'); } } if ($this->timezone && !in_array($this->timezone, DateUtil::getAvailableTimezones())) { $this->errorMessages['timezone'] = 'wcf.global.form.error.notValidSelection'; throw new UserInputException('timezone', 'notValidSelection'); } }
// update acp templates $sql = "UPDATE\twcf" . WCF_N . "_acp_template\n\tSET\tpackageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(1)); // update language $sql = "UPDATE\twcf" . WCF_N . "_language_item\n\tSET\tpackageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(1)); // update installation logs $sql = "UPDATE\twcf" . WCF_N . "_package_installation_file_log\n\tSET\tpackageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(1)); $sql = "UPDATE\twcf" . WCF_N . "_package_installation_sql_log\n\tSET\tpackageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(1)); // update pips $sql = "UPDATE\twcf" . WCF_N . "_package_installation_plugin\n\tSET\tpackageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(1)); // group options $sql = "UPDATE\twcf" . WCF_N . "_user_group_option\n\tSET\tpackageID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array(1)); // get server timezone if ($timezone = @date_default_timezone_get()) { if ($timezone != 'Europe/London' && in_array($timezone, DateUtil::getAvailableTimezones())) { $sql = "UPDATE\twcf" . WCF_N . "_option\n\t\t\tSET\toptionValue = ?\n\t\t\tWHERE\toptionName = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($timezone, 'timezone')); } }
/** * Exports calendar events. */ public function exportCalendarEvents($offset, $limit) { $sql = "SELECT\t\tevent.*, user.username\n\t\t\tFROM\t\t" . $this->databasePrefix . "event event\n\t\t\tLEFT JOIN\t" . $this->databasePrefix . "user user\n\t\t\tON\t\tevent.userid = user.userid\n\t\t\tWHERE\t\teventid BETWEEN ? AND ?\n\t\t\tORDER BY\teventid"; $statement = $this->database->prepareStatement($sql); $statement->execute(array($offset + 1, $offset + $limit)); $timezones = array(); foreach (DateUtil::getAvailableTimezones() as $timezone) { $dateTimeZone = new \DateTimeZone($timezone); $offset = $dateTimeZone->getOffset(new \DateTime("now", $dateTimeZone)); $timezones[round($offset / 360, 0)] = $timezone; } while ($row = $statement->fetchArray()) { $eventDateData = array('startTime' => $row['dateline_from'], 'endTime' => $row['recurring'] != 0 ? $row['dateline_from'] + 1 : $row['dateline_to'], 'isFullDay' => $row['dateline_to'] ? 0 : 1, 'timezone' => $timezones[round($row['utc'] * 10, 0)], 'repeatEndType' => 'date', 'repeatEndDate' => $row['dateline_to'], 'repeatEndCount' => 1000, 'firstDayOfWeek' => 1, 'repeatType' => '', 'repeatInterval' => 1, 'repeatWeeklyByDay' => array(), 'repeatMonthlyByMonthDay' => 1, 'repeatMonthlyDayOffset' => 1, 'repeatMonthlyByWeekDay' => 0, 'repeatYearlyByMonthDay' => 1, 'repeatYearlyByMonth' => 1, 'repeatYearlyDayOffset' => 1, 'repeatYearlyByWeekDay' => 1); switch ($row['recurring']) { case 0: $eventDateData['repeatType'] = ''; break; case 1: $eventDateData['repeatType'] = 'daily'; $eventDateData['repeatInterval'] = $row['recuroption']; break; case 2: $eventDateData['repeatType'] = 'daily'; $eventDateData['repeatInterval'] = 1; break; case 3: $eventDateData['repeatType'] = 'weekly'; list($interval, $days) = explode('|', $row['recuroption']); $eventDateData['repeatInterval'] = $interval; // each day is represented as one bit for ($i = 0; $i < 7; $i++) { if ($days & 1 << $i) { $eventDateData['repeatWeeklyByDay'][] = $i; } } break; case 4: $eventDateData['repeatType'] = 'monthlyByDayOfMonth'; list($day, $interval) = explode('|', $row['recuroption']); $eventDateData['repeatInterval'] = $interval; $eventDateData['repeatMonthlyByMonthDay'] = $day; break; case 5: $eventDateData['repeatType'] = 'monthlyByDayOfWeek'; list($offset, $day, $interval) = explode('|', $row['recuroption']); $eventDateData['repeatInterval'] = $interval; // last is -1 for WoltLab and 5 for vBulletin $eventDateData['repeatMonthlyDayOffset'] = $offset == 5 ? -1 : $offset; // week day is one indexed, starting at sunday $eventDateData['repeatMonthlyByWeekDay'] = $day - 1; break; case 6: $eventDateData['repeatType'] = 'yearlyByDayOfMonth'; list($month, $day) = explode('|', $row['recuroption']); $eventDateData['repeatYearlyByMonthDay'] = $day; $eventDateData['repeatYearlyByMonth'] = $month; break; case 7: $eventDateData['repeatType'] = 'yearlyByDayOfWeek'; list($offset, $day, $month) = explode('|', $row['recuroption']); $eventDateData['repeatYearlyByMonth'] = $month; $eventDateData['repeatYearlyDayOffset'] = $offset; // week day is one indexed, starting at sunday $eventDateData['repeatYearlyByWeekDay'] = $day - 1; break; } $data = array('userID' => $row['userid'] ?: null, 'username' => $row['username'], 'subject' => $row['title'], 'message' => self::fixBBCodes($row['event']), 'time' => $row['dateline'], 'enableSmilies' => $row['allowsmilies'], 'eventDate' => serialize($eventDateData)); ImportHandler::getInstance()->getImporter('com.woltlab.calendar.event')->import($row['eventid'], $data, array('categories' => array($row['calendarid']), 'createEventDates' => true)); } }