/**
  * @see wcf\system\option\IOptionType::validate()
  */
 public function validate(Option $option, $newValue)
 {
     if (!in_array($newValue, DateUtil::getAvailableTimezones())) {
         throw new UserInputException($option->optionName, 'validationFailed');
     }
 }
Esempio n. 2
0
 /**
  * @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');
     }
 }
Esempio n. 3
0
// 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));
     }
 }