本文整理汇总了PHP中vcalendar::getComponent方法的典型用法代码示例。如果您正苦于以下问题:PHP vcalendar::getComponent方法的具体用法?PHP vcalendar::getComponent怎么用?PHP vcalendar::getComponent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vcalendar
的用法示例。
在下文中一共展示了vcalendar::getComponent方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getICalPeriods
/**
* @return array
*/
private function getICalPeriods()
{
$response = [];
$iCalLink = $this->checkForICalHref();
if ($this->checkAccessToFile($iCalLink)) {
$startArray = array();
$endArray = array();
require_once 'iCalcreator.php';
$v = new \vcalendar();
// initiate new CALENDAR
$config = array("unique_id" => "ukrapts.com", "url" => "{$iCalLink}");
$v->setConfig($config);
$v->parse();
$v->sort();
$i = 0;
while ($comp = $v->getComponent("VEVENT")) {
$dtstart_array = $comp->getProperty("DTSTART", 1, TRUE);
$dtstart = $dtstart_array["value"];
$startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
$dtend_array = $comp->getProperty("dtend", 1, TRUE);
$dtend = $dtend_array["value"];
$endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
if ($endDate >= $this->DBQueries()->currentDate()) {
$startArray[] = $startDate;
$endArray[] = $endDate;
}
$i++;
}
sort($startArray);
sort($endArray);
$response['start'] = $startArray;
$response['end'] = $endArray;
}
return $response;
}
示例2: setEventsFromICal
/**
* The file contents is looked at and events are created here.
* @param string $fileContents
* @return integer The number of events saved.
*/
public function setEventsFromICal($fullDir, $fullFileName, $personId)
{
//start parse of local file
$v = new vcalendar();
// set directory
$v->setConfig('directory', $fullDir);
// set file name
$v->setConfig('filename', $fullFileName);
$v->parse();
$count = 0;
foreach ($v->components as $component => $info) {
# get first vevent
$comp = $v->getComponent("VEVENT");
$summary_array = $comp->getProperty("summary", 1, TRUE);
//echo "Event: ", $summary_array["value"], "\n";
$dtstart_array = $comp->getProperty("dtstart", 1, TRUE);
$dtstart = $dtstart_array["value"];
$startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
$startTime = "{$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
$dtend_array = $comp->getProperty("dtend", 1, TRUE);
$dtend = $dtend_array["value"];
$endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
$endTime = "{$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
//echo "start: ", $startDate,"T",$startTime, "\n";
//echo "end: ", $endDate,"T",$endTime, "\n";
$location_array = $comp->getProperty("location", 1, TRUE);
//echo "Location: ", $location_array["value"], "\n <br>";
//TODO: Check that this event does not already exist.
$event = new Event();
$event->setPersonId($personId);
$event->setName($summary_array["value"]);
$event->setStartTime($startDate . "T" . $startTime);
$event->setEndTime($endDate . "T" . $endTime);
$event->setLocation($location_array["value"]);
$event->save();
$count++;
}
return $count;
}
示例3: updateItem
/**
* @param string $uri
* @param array $start
* @param array $end
* @param string $subject
* @param bool $allday
* @param string $description
* @param string $location
* @param null $color
* @param string $timezone
* @param bool $notification
* @param null $notification_type
* @param null $notification_value
* @throws Sabre_DAV_Exception_NotFound
* @throws Sabre_DAV_Exception_Conflict
*/
public function updateItem($uri, $start, $end, $subject = "", $allday = false, $description = "", $location = "", $color = null, $timezone = "", $notification = true, $notification_type = null, $notification_value = null)
{
$a = get_app();
$usr_id = IntVal($this->calendarDb->uid);
$old = q("SELECT * FROM %s%sjqcalendar WHERE `uid` = %d AND `namespace` = %d AND `namespace_id` = %d AND `ical_uri` = '%s'", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $usr_id, $this->getNamespace(), $this->namespace_id, dbesc($uri));
if (count($old) == 0) {
throw new Sabre_DAV_Exception_NotFound("Not Found 1");
}
$old_obj = new DBClass_friendica_jqcalendar($old[0]);
$calendarBackend = new Sabre_CalDAV_Backend_Std();
$obj = $calendarBackend->getCalendarObject($this->getNamespace() . "-" . $this->namespace_id, $old_obj->ical_uri);
if (!$obj) {
throw new Sabre_DAV_Exception_NotFound("Not Found 2");
}
$v = new vcalendar();
$v->setConfig('unique_id', $a->get_hostname());
$v->setMethod('PUBLISH');
$v->setProperty("x-wr-calname", "AnimexxCal");
$v->setProperty("X-WR-CALDESC", "Animexx Calendar");
$v->setProperty("X-WR-TIMEZONE", $a->timezone);
$obj["calendardata"] = icalendar_sanitize_string($obj["calendardata"]);
$v->parse($obj["calendardata"]);
/** @var $vevent vevent */
$vevent = $v->getComponent('vevent');
if (trim($vevent->getProperty('uid')) . ".ics" != $old_obj->ical_uri) {
throw new Sabre_DAV_Exception_Conflict("URI != URI: " . $old_obj->ical_uri . " vs. " . trim($vevent->getProperty("uid")));
}
if ($end["year"] < $start["year"] || $end["year"] == $start["year"] && $end["month"] < $start["month"] || $end["year"] == $start["year"] && $end["month"] == $start["month"] && $end["day"] < $start["day"] || $end["year"] == $start["year"] && $end["month"] == $start["month"] && $end["day"] == $start["day"] && $end["hour"] < $start["hour"] || $end["year"] == $start["year"] && $end["month"] == $start["month"] && $end["day"] == $start["day"] && $end["hour"] == $start["hour"] && $end["minute"] < $start["minute"] || $end["year"] == $start["year"] && $end["month"] == $start["month"] && $end["day"] == $start["day"] && $end["hour"] == $start["hour"] && $end["minute"] == $start["minute"] && $end["second"] < $start["second"]) {
$end = $start;
if ($end["hour"] < 23) {
$end["hour"]++;
}
}
// DTEND muss <= DTSTART
if ($start["hour"] == 0 && $start["minute"] == 0 && $end["hour"] == 23 && $end["minute"] == 59) {
$allday = true;
}
if ($allday) {
$vevent->setDtstart($start["year"], $start["month"], $start["day"], FALSE, FALSE, FALSE, FALSE, array("VALUE" => "DATE"));
$end = mktime(0, 0, 0, $end["month"], $end["day"], $end["year"]) + 3600 * 24;
// If a DST change occurs on the current day
$end += date("Z", $end - 3600 * 24) - date("Z", $end);
$vevent->setDtend(date("Y", $end), date("m", $end), date("d", $end), FALSE, FALSE, FALSE, FALSE, array("VALUE" => "DATE"));
} else {
$vevent->setDtstart($start["year"], $start["month"], $start["day"], $start["hour"], $start["minute"], $start["second"], FALSE, array("VALUE" => "DATE-TIME"));
$vevent->setDtend($end["year"], $end["month"], $end["day"], $end["hour"], $end["minute"], $end["second"], FALSE, array("VALUE" => "DATE-TIME"));
}
if ($subject != "") {
$vevent->setProperty('LOCATION', $location);
$vevent->setProperty('summary', $subject);
$vevent->setProperty('description', $description);
}
if (!is_null($color) && $color >= 0) {
$vevent->setProperty("X-ANIMEXX-COLOR", $color);
}
if (!$notification || $notification_type != null) {
$vevent->deleteComponent("VALARM");
if ($notification) {
$valarm = new valarm();
$valarm->setTrigger($notification_type == "year" ? $notification_value : 0, $notification_type == "month" ? $notification_value : 0, $notification_type == "day" ? $notification_value : 0, $notification_type == "week" ? $notification_value : 0, $notification_type == "hour" ? $notification_value : 0, $notification_type == "minute" ? $notification_value : 0, $notification_type == "minute" ? $notification_value : 0, true, $notification_value > 0);
$valarm->setProperty("ACTION", "DISPLAY");
$valarm->setProperty("DESCRIPTION", $subject);
$vevent->setComponent($valarm);
}
}
$v->deleteComponent("vevent");
$v->setComponent($vevent, trim($vevent->getProperty("uid")));
$ical = $v->createCalendar();
$calendarBackend->updateCalendarObject($this->getNamespace() . "-" . $this->namespace_id, $old_obj->ical_uri, $ical);
}
示例4: get_json
public function get_json()
{
$event_json = array();
$filters = $this->in->exists('filters', 'int') ? $this->in->getArray('filters', 'int') : false;
// parse the feeds
$feeds = $this->pdh->get('calendars', 'idlist', array('feed', $filters));
if (is_array($feeds) && count($feeds) > 0) {
foreach ($feeds as $feed) {
$feedurl = $this->pdh->get('calendars', 'feed', array($feed));
if (isValidURL($feedurl)) {
require_once $this->root_path . 'libraries/icalcreator/iCalcreator.class.php';
$vcalendar = new vcalendar(array('url' => $feedurl));
if (TRUE === $vcalendar->parse()) {
$vcalendar->sort();
while ($comp = $vcalendar->getComponent('vevent')) {
$startdate = $comp->getProperty('dtstart', 1);
$enddate = $comp->getProperty('dtend', 1);
$startdate_out = $startdate['year'] . '-' . $startdate['month'] . '-' . $startdate['day'] . ' ' . (isset($startdate['hour']) ? $startdate['hour'] . ':' . $startdate['min'] : '00:00');
$enddate_out = $enddate['year'] . '-' . $enddate['month'] . '-' . $enddate['day'] . ' ' . (isset($enddate['hour']) ? $enddate['hour'] . ':' . $enddate['min'] : '00:00');
$allday = isset($enddate['hour']) && isset($startdate['hour']) ? false : true;
$eventcolor = $this->pdh->get('calendars', 'color', $feed);
$eventcolor_txt = get_brightness($eventcolor) > 130 ? 'black' : 'white';
$event_json[] = array('eventid' => $calid, 'title' => $comp->getProperty('summary', 1), 'start' => $startdate_out, 'end' => $enddate_out, 'allDay' => $allday, 'note' => $comp->getProperty('description', 1), 'color' => '#' . $eventcolor, 'textColor' => $eventcolor_txt);
}
}
}
}
}
// add the calendar events to the json feed
$calendars = $this->pdh->get('calendars', 'idlist', array('nofeed', $filters));
$caleventids = $this->pdh->get('calendar_events', 'id_list', array(false, $this->in->get('start', 0), $this->in->get('end', 0)));
if (is_array($caleventids) && count($caleventids) > 0) {
foreach ($caleventids as $calid) {
$eventextension = $this->pdh->get('calendar_events', 'extension', array($calid));
$raidmode = $eventextension['calendarmode'];
$eventcolor = $this->pdh->get('calendars', 'color', $this->pdh->get('calendar_events', 'calendar_id', array($calid)));
$eventcolor_txt = get_brightness($eventcolor) > 130 ? 'black' : 'white';
if (in_array($this->pdh->get('calendar_events', 'calendar_id', array($calid)), $calendars)) {
if ($raidmode == 'raid') {
// fetch the attendees
$attendees_raw = $this->pdh->get('calendar_raids_attendees', 'attendees', array($calid));
$attendees = array();
if (is_array($attendees_raw)) {
foreach ($attendees_raw as $attendeeid => $attendeerow) {
$attendees[$attendeerow['signup_status']][$attendeeid] = $attendeerow;
}
}
// Build the guest array
$guests = array();
if (registry::register('config')->get('calendar_raid_guests') == 1) {
$guestarray = registry::register('plus_datahandler')->get('calendar_raids_guests', 'members', array($calid));
if (is_array($guestarray)) {
foreach ($guestarray as $guest_row) {
$guests[] = $guest_row['name'];
}
}
}
// fetch per raid data
$raidcal_status = unserialize($this->config->get('calendar_raid_status'));
$rstatusdata = '';
if (is_array($raidcal_status)) {
foreach ($raidcal_status as $raidcalstat_id) {
if ($raidcalstat_id != 4) {
$actcount = isset($attendees[$raidcalstat_id]) ? count($attendees[$raidcalstat_id]) : 0;
if ($raidcalstat_id == 0) {
$actcount += is_array($guests) ? count($guests) : 0;
}
$rstatusdata .= '<div class="raid_status' . $raidcalstat_id . '">' . $this->user->lang(array('raidevent_raid_status', $raidcalstat_id)) . ': ' . $actcount . '</div>';
}
}
}
$rstatusdata .= '<div class="raid_status_total">' . $this->user->lang('raidevent_raid_required') . ': ' . (isset($eventextension) ? $eventextension['attendee_count'] : 0) . '</div>';
$deadlinedate = $this->pdh->get('calendar_events', 'time_start', array($calid)) - $eventextension['deadlinedate'] * 3600;
$deadline = $deadlinedate > $this->time->time || $this->config->get('calendar_raid_allowstatuschange') == '1' && $this->pdh->get('calendar_raids_attendees', 'status', array($calid, $this->user->id)) > 0 && $this->pdh->get('calendar_raids_attendees', 'status', array($calid, $this->user->id)) != 4 && $this->pdh->get('calendar_events', 'time_end', array($calid)) > $this->time->time ? false : true;
$deadlineflag = $deadline ? '<img src="' . $this->root_path . 'images/calendar/clock_s.png" alt="Deadline" title="' . $this->user->lang('raidevent_raid_deadl_reach') . '" />' : '';
// Build the JSON
$event_json[] = array('title' => $this->in->decode_entity($this->pdh->get('calendar_events', 'name', array($calid))), 'start' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_start', array($calid))), 'end' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_end', array($calid))), 'closed' => $this->pdh->get('calendar_events', 'raidstatus', array($calid)) == 1 ? true : false, 'editable' => true, 'eventid' => $calid, 'flag' => $deadlineflag . $this->pdh->get('calendar_raids_attendees', 'html_status', array($calid, $this->user->data['user_id'])), 'url' => 'calendar/viewcalraid.php' . $this->SID . '&eventid=' . $calid, 'icon' => $eventextension['raid_eventid'] ? $this->pdh->get('event', 'icon', array($eventextension['raid_eventid'], true, true)) : '', 'note' => $this->pdh->get('calendar_events', 'notes', array($calid)), 'raidleader' => $eventextension['raidleader'] > 0 ? implode(', ', $this->pdh->aget('member', 'name', 0, array($eventextension['raidleader']))) : '', 'rstatusdata' => $rstatusdata, 'color' => '#' . $eventcolor, 'textColor' => $eventcolor_txt);
} else {
$event_json[] = array('eventid' => $calid, 'title' => $this->pdh->get('calendar_events', 'name', array($calid)), 'start' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_start', array($calid))), 'end' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_end', array($calid))), 'allDay' => $this->pdh->get('calendar_events', 'allday', array($calid)) > 0 ? true : false, 'note' => $this->pdh->get('calendar_events', 'notes', array($calid)), 'color' => '#' . $eventcolor, 'textColor' => $eventcolor_txt);
}
}
}
}
// Output the array as JSON
echo json_encode($event_json);
exit;
}
示例5: add_vcalendar_events_to_db
/**
* Process vcalendar instance - add events to database.
*
* @param vcalendar $v Calendar to retrieve data from.
* @param array $args Arbitrary arguments map.
*
* @throws Ai1ec_Parse_Exception
*
* @internal param stdClass $feed Instance of feed (see Ai1ecIcs plugin).
* @internal param string $comment_status WP comment status: 'open' or 'closed'.
* @internal param int $do_show_map Map display status (DB boolean: 0 or 1).
*
* @return int Count of events added to database.
*/
public function add_vcalendar_events_to_db(vcalendar $v, array $args)
{
$forced_timezone = null;
$feed = isset($args['feed']) ? $args['feed'] : null;
$comment_status = isset($args['comment_status']) ? $args['comment_status'] : 'open';
$do_show_map = isset($args['do_show_map']) ? $args['do_show_map'] : 0;
$count = 0;
$events_in_db = isset($args['events_in_db']) ? $args['events_in_db'] : 0;
//sort by event date function _cmpfcn of iCalcreator.class.php
$v->sort();
// Reverse the sort order, so that RECURRENCE-IDs are listed before the
// defining recurrence events, and therefore take precedence during
// caching.
$v->components = array_reverse($v->components);
// TODO: select only VEVENT components that occur after, say, 1 month ago.
// Maybe use $v->selectComponents(), which takes into account recurrence
// Fetch default timezone in case individual properties don't define it
$tz = $v->getComponent('vtimezone');
$local_timezone = $this->_registry->get('date.timezone')->get_default_timezone();
$timezone = $local_timezone;
if (!empty($tz)) {
$timezone = $tz->getProperty('TZID');
}
$feed_name = $v->getProperty('X-WR-CALNAME');
$x_wr_timezone = $v->getProperty('X-WR-TIMEZONE');
if (isset($x_wr_timezone[1]) && is_array($x_wr_timezone)) {
$forced_timezone = (string) $x_wr_timezone[1];
$timezone = $forced_timezone;
}
$messages = array();
if (empty($forced_timezone)) {
$forced_timezone = $local_timezone;
}
$current_timestamp = $this->_registry->get('date.time')->format_to_gmt();
// initialize empty custom exclusions structure
$exclusions = array();
// go over each event
while ($e = $v->getComponent('vevent')) {
// Event data array.
$data = array();
// =====================
// = Start & end times =
// =====================
$start = $e->getProperty('dtstart', 1, true);
$end = $e->getProperty('dtend', 1, true);
// For cases where a "VEVENT" calendar component
// specifies a "DTSTART" property with a DATE value type but none
// of "DTEND" nor "DURATION" property, the event duration is taken to
// be one day. For cases where a "VEVENT" calendar component
// specifies a "DTSTART" property with a DATE-TIME value type but no
// "DTEND" property, the event ends on the same calendar date and
// time of day specified by the "DTSTART" property.
if (empty($end)) {
// #1 if duration is present, assign it to end time
$end = $e->getProperty('duration', 1, true, true);
if (empty($end)) {
// #2 if only DATE value is set for start, set duration to 1 day
if (!isset($start['value']['hour'])) {
$end = array('value' => array('year' => $start['value']['year'], 'month' => $start['value']['month'], 'day' => $start['value']['day'] + 1, 'hour' => 0, 'min' => 0, 'sec' => 0));
if (isset($start['value']['tz'])) {
$end['value']['tz'] = $start['value']['tz'];
}
} else {
// #3 set end date to start time
$end = $start;
}
}
}
$categories = $e->getProperty("CATEGORIES", false, true);
$imported_cat = array(Ai1ec_Event_Taxonomy::CATEGORIES => array());
// If the user chose to preserve taxonomies during import, add categories.
if ($categories && $feed->keep_tags_categories) {
$imported_cat = $this->add_categories_and_tags($categories['value'], $imported_cat, false, true);
}
$feed_categories = $feed->feed_category;
if (!empty($feed_categories)) {
$imported_cat = $this->add_categories_and_tags($feed_categories, $imported_cat, false, false);
}
$tags = $e->getProperty("X-TAGS", false, true);
$imported_tags = array(Ai1ec_Event_Taxonomy::TAGS => array());
// If the user chose to preserve taxonomies during import, add tags.
if ($tags && $feed->keep_tags_categories) {
$imported_tags = $this->add_categories_and_tags($tags[1]['value'], $imported_tags, true, true);
}
$feed_tags = $feed->feed_tags;
if (!empty($feed_tags)) {
//.........这里部分代码省略.........
示例6: genTimezone
{
#http://www.fbcalendar.com/cal/707610112/9b857cca655089425da6d912-707610112/events/ics/attending,unsure,not_replied/
$data = file_get_contents("http://www.fbcalendar.com/cal/$uid/$key-$uid/events/ics/attending,unsure,not_replied/");
if ($data == "")
die("Can't read from Facebook!\n");
file_put_contents($fname, $data);
}
$v->parse($fname);
$tz = genTimezone ($timezone);
$tzid = $tz->getProperty("TZID");
$out->addComponent($tz);
while( $vevent = $v->getComponent( 'vevent' )) {
$url = $vevent->getProperty('URL');
preg_match("/eid%3D(\d+)/", $url, $matches);
if (count($matches) != 2)
{
print_r($matches);
die("Wrong number of matches!");
}
$url = "http://www.facebook.com/event.php?eid=".$matches[1];
$vevent->setProperty("URL", $url);
$description = $vevent->getProperty( 'description' );
#$description = urlencode($description);
$description = substr($description,0,strrpos($description, "\\n"));
$description .= "\\n\\n$url";
$vevent->deleteProperty('description');
示例7: agenda_import_ical
/**
* Import an iCal file into the database
* @param array Course info
* @return boolean True on success, false otherwise
*/
function agenda_import_ical($course_info, $file)
{
require_once api_get_path(LIBRARY_PATH) . 'fileUpload.lib.php';
$charset = api_get_system_encoding();
$filepath = api_get_path(SYS_ARCHIVE_PATH) . $file['name'];
if (!@move_uploaded_file($file['tmp_name'], $filepath)) {
error_log('Problem moving uploaded file: ' . $file['error'] . ' in ' . __FILE__ . ' line ' . __LINE__);
return false;
}
require_once api_get_path(LIBRARY_PATH) . 'icalcreator/iCalcreator.class.php';
$ical = new vcalendar();
$ical->setConfig('directory', dirname($filepath));
$ical->setConfig('filename', basename($filepath));
$ical->parse();
//we need to recover: summary, description, dtstart, dtend, organizer, attendee, location (=course name),
// rrule
$ve = $ical->getComponent(VEVENT);
//print_r($ve);
$ttitle = $ve->getProperty('summary');
//print_r($ttitle);
$title = api_convert_encoding($ttitle, $charset, 'UTF-8');
$tdesc = $ve->getProperty('description');
$desc = api_convert_encoding($tdesc, $charset, 'UTF-8');
$ts = $ve->getProperty('dtstart');
$start_date = $ts['year'] . '-' . $ts['month'] . '-' . $ts['day'] . ' ' . $ts['hour'] . ':' . $ts['min'] . ':' . $ts['sec'];
$ts = $ve->getProperty('dtend');
$end_date = $ts['year'] . '-' . $ts['month'] . '-' . $ts['day'] . ' ' . $ts['hour'] . ':' . $ts['min'] . ':' . $ts['sec'];
//echo $start_date.' - '.$end_date;
$organizer = $ve->getProperty('organizer');
$attendee = $ve->getProperty('attendee');
$course_name = $ve->getProperty('location');
//insert the event in our database
$id = agenda_add_item($course_info, $title, $desc, $start_date, $end_date, $_POST['selectedform']);
$repeat = $ve->getProperty('rrule');
if (is_array($repeat) && !empty($repeat['FREQ'])) {
$trans = array('DAILY' => 'daily', 'WEEKLY' => 'weekly', 'MONTHLY' => 'monthlyByDate', 'YEARLY' => 'yearly');
$freq = $trans[$repeat['FREQ']];
$interval = $repeat['INTERVAL'];
if (isset($repeat['UNTIL']) && is_array($repeat['UNTIL'])) {
$until = mktime(23, 59, 59, $repeat['UNTIL']['month'], $repeat['UNTIL']['day'], $repeat['UNTIL']['year']);
$res = agenda_add_repeat_item($course_info, $id, $freq, $until, $_POST['selectedform']);
}
//TODO: deal with count
if (!empty($repeat['COUNT'])) {
$count = $repeat['COUNT'];
$res = agenda_add_repeat_item($course_info, $id, $freq, $count, $_POST['selectedform']);
}
}
return true;
}
示例8: add_vcalendar_events_to_db
/**
* Process vcalendar instance - add events to database.
*
* @param vcalendar $v Calendar to retrieve data from.
* @param array $args Arbitrary arguments map.
*
* @throws Ai1ec_Parse_Exception
*
* @internal param stdClass $feed Instance of feed (see Ai1ecIcs plugin).
* @internal param string $comment_status WP comment status: 'open' or 'closed'.
* @internal param int $do_show_map Map display status (DB boolean: 0 or 1).
*
* @return int Count of events added to database.
*/
public function add_vcalendar_events_to_db(vcalendar $v, array $args)
{
$feed = isset($args['feed']) ? $args['feed'] : null;
$comment_status = isset($args['comment_status']) ? $args['comment_status'] : 'open';
$do_show_map = isset($args['do_show_map']) ? $args['do_show_map'] : 0;
$count = 0;
$events_in_db = $args['events_in_db'];
$v->sort();
// Reverse the sort order, so that RECURRENCE-IDs are listed before the
// defining recurrence events, and therefore take precedence during
// caching.
$v->components = array_reverse($v->components);
// TODO: select only VEVENT components that occur after, say, 1 month ago.
// Maybe use $v->selectComponents(), which takes into account recurrence
// Fetch default timezone in case individual properties don't define it
$timezone = $v->getProperty('X-WR-TIMEZONE');
$timezone = (string) $timezone[1];
// go over each event
while ($e = $v->getComponent('vevent')) {
// Event data array.
$data = array();
// =====================
// = Start & end times =
// =====================
$start = $e->getProperty('dtstart', 1, true);
$end = $e->getProperty('dtend', 1, true);
// For cases where a "VEVENT" calendar component
// specifies a "DTSTART" property with a DATE value type but none
// of "DTEND" nor "DURATION" property, the event duration is taken to
// be one day. For cases where a "VEVENT" calendar component
// specifies a "DTSTART" property with a DATE-TIME value type but no
// "DTEND" property, the event ends on the same calendar date and
// time of day specified by the "DTSTART" property.
if (empty($end)) {
// #1 if duration is present, assign it to end time
$end = $e->getProperty('duration', 1, true, true);
if (empty($end)) {
// #2 if only DATE value is set for start, set duration to 1 day
if (!isset($start['value']['hour'])) {
$end = array('value' => array('year' => $start['value']['year'], 'month' => $start['value']['month'], 'day' => $start['value']['day'] + 1, 'hour' => 0, 'min' => 0, 'sec' => 0));
if (isset($start['value']['tz'])) {
$end['value']['tz'] = $start['value']['tz'];
}
} else {
// #3 set end date to start time
$end = $start;
}
}
}
$categories = $e->getProperty("CATEGORIES", false, true);
$imported_cat = array();
// If the user chose to preserve taxonomies during import, add categories.
if ($categories && $feed->keep_tags_categories) {
$imported_cat = $this->_add_categories_and_tags($categories['value'], $imported_cat, false, true);
}
$feed_categories = $feed->feed_category;
if (!empty($feed_categories)) {
$imported_cat = $this->_add_categories_and_tags($feed_categories, $imported_cat, false, false);
}
$tags = $e->getProperty("X-TAGS", false, true);
$imported_tags = array();
// If the user chose to preserve taxonomies during import, add tags.
if ($tags && $feed->keep_tags_categories) {
$imported_tags = $this->_add_categories_and_tags($tags[1]['value'], $imported_tags, true, true);
}
$feed_tags = $feed->feed_tags;
if (!empty($feed_tags)) {
$imported_tags = $this->_add_categories_and_tags($feed_tags, $imported_tags, true, true);
}
// Event is all-day if no time components are defined
$allday = $this->_is_timeless($start['value']) && $this->_is_timeless($end['value']);
// Also check the proprietary MS all-day field.
$ms_allday = $e->getProperty('X-MICROSOFT-CDO-ALLDAYEVENT');
if (!empty($ms_allday) && $ms_allday[1] == 'TRUE') {
$allday = true;
}
$start = $this->_time_array_to_datetime($start, $timezone);
$end = $this->_time_array_to_datetime($end, $timezone);
if (false === $start || false === $end) {
throw new Ai1ec_Parse_Exception('Failed to parse one or more dates given timezone "' . var_export($timezone, true) . '"');
continue;
}
// If all-day, and start and end times are equal, then this event has
// invalid end time (happens sometimes with poorly implemented iCalendar
// exports, such as in The Event Calendar), so set end time to 1 day
// after start time.
//.........这里部分代码省略.........
示例9: import_ics_data
public function import_ics_data($calendar_id)
{
// -------------------------------------
// Get some basic info to use later
// -------------------------------------
$cbasics = $this->data->calendar_basics();
$cbasics = $cbasics[$calendar_id];
$urls = $cbasics['ics_url'];
if ($urls == '') {
return FALSE;
}
$tz_offset = $cbasics['tz_offset'] != '' ? $cbasics['tz_offset'] : '0000';
/*
This shouldn't be happening because DST is only something that
would need to be applied when generating the users current local time.
If an event were at 7pm EST or EDT, it would still be at 7pm either way.
I hate DST.
if ($tz_offset != '0000' AND ee()->config->item('daylight_savings') == 'y')
{
$tz_offset += 100;
}
*/
$channel_id = $this->data->channel_is_events_channel();
$author_id = $cbasics['author_id'];
// -------------------------------------
// Prepare the URLs
// -------------------------------------
if (!is_array($urls)) {
$urls = explode("\n", $urls);
}
foreach ($urls as $k => $url) {
$urls[$k] = trim($url);
}
// -------------------------------------
// Load iCalCreator
// -------------------------------------
if (!class_exists('vcalendar')) {
require_once CALENDAR_PATH_ASSETS . 'icalcreator/iCalcreator.class.php';
}
// -------------------------------------
// Load Calendar_datetime
// -------------------------------------
if (!class_exists('Calendar_datetime')) {
require_once CALENDAR_PATH . 'calendar.datetime' . EXT;
}
$CDT = new Calendar_datetime();
$CDT_end = new Calendar_datetime();
// -------------------------------------
// Load Publish
// -------------------------------------
if (APP_VER < 2.0) {
//need to set DSP if not present
if (!isset($GLOBALS['DSP']) or !is_object($GLOBALS['DSP'])) {
if (!class_exists('Display')) {
require_once PATH_CP . 'cp.display' . EXT;
}
$GLOBALS['DSP'] = new Display();
}
if (!class_exists('Publish')) {
require_once PATH_CP . 'cp.publish' . EXT;
}
$PB = new Publish();
$PB->assign_cat_parent = ee()->config->item('auto_assign_cat_parents') == 'n' ? FALSE : TRUE;
} else {
ee()->load->library('api');
ee()->api->instantiate(array('channel_entries', 'channel_categories', 'channel_fields'));
ee()->api_channel_entries->assign_cat_parent = ee()->config->item('auto_assign_cat_parents') == 'n' ? FALSE : TRUE;
}
// -------------------------------------
// Tell our extensions that we're running the icalendar import
// -------------------------------------
$this->cache['ical'] = TRUE;
// -------------------------------------
// Get already-imported events
// -------------------------------------
$imported = $this->data->get_imported_events($calendar_id);
// -------------------------------------
// Don't let EXT drop us early
// -------------------------------------
ee()->extensions->in_progress = '';
// -------------------------------------
// Cycle through the URLs
// -------------------------------------
foreach ($urls as $url) {
$ICAL = new vcalendar();
$ICAL->parse($this->fetch_url($url));
// -------------------------------------
// Iterate among the events
// -------------------------------------
while ($event = $ICAL->getComponent('vevent')) {
// -------------------------------------
// Times
// -------------------------------------
$hour = isset($event->dtstart['value']['hour']) ? $event->dtstart['value']['hour'] : 00;
$minute = isset($event->dtstart['value']['min']) ? $event->dtstart['value']['min'] : 00;
$end_hour = isset($event->dtend['value']['hour']) ? $event->dtend['value']['hour'] : $hour;
$end_minute = isset($event->dtend['value']['min']) ? $event->dtend['value']['min'] : $minute;
// -------------------------------------
//.........这里部分代码省略.........
示例10: toKalenderEvent
public static function toKalenderEvent($iCal, $ownerClass = "iCal", $ownerClassID = "-1")
{
$VC = new vcalendar();
$VC->parse($iCal);
$event = $VC->getComponent("vevent");
$dayStart = $event->getProperty("DTSTART");
$dayEnd = $event->getProperty("DTEND");
$dayStartTS = strtotime(implode("", $dayStart));
$dayEndTS = strtotime(implode("", $dayEnd));
$KE = new KalenderEvent($ownerClass, $ownerClassID, Kalender::formatDay($dayStartTS), Kalender::formatTime($dayStartTS), $event->getProperty("SUMMARY"));
$KE->UID($event->getProperty("UID"));
$organizer = $event->getProperty("ORGANIZER", 0, true);
$organizer["value"] = str_replace("MAILTO:", "", $organizer["value"]);
$ON = $organizer["value"];
if (isset($organizer["params"]["CN"])) {
$ON = $organizer["params"]["CN"];
}
$OE = $organizer["value"];
$KE->organizer($ON, $OE);
if ($dayStart["hour"] . $dayStart["min"] == "" and $dayEnd["hour"] . $dayEnd["min"] == "") {
$KE->allDay(true);
} else {
$KE->endDay(Kalender::formatDay($dayEndTS));
$KE->endTime(Kalender::formatTime($dayEndTS));
}
return $KE;
}
示例11: vcalendar
<?php
ini_set('display_errors', 1);
require_once 'iCalcreator.class.php';
$v = new vcalendar();
/* start parse of local file */
$v->setConfig('directory', 'uploads');
// set directory
$v->setConfig('filename', 'basic.ics');
// set file name
$v->parse();
foreach ($v->components as $component => $info) {
# get first vevent
$comp = $v->getComponent("VEVENT");
//print_r($comp);
$summary_array = $comp->getProperty("summary", 1, TRUE);
//$summary_array = $vevent->getProperty("summary", 1, TRUE);
echo "Event: ", $summary_array["value"], "\n";
$dtstart_array = $comp->getProperty("dtstart", 1, TRUE);
//$dtstart_array = $vevent->getProperty("dtstart", 1, TRUE);
$dtstart = $dtstart_array["value"];
$startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
$startTime = "{$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
$dtend_array = $comp->getProperty("dtend", 1, TRUE);
//$dtend_array = $vevent->getProperty("dtend", 1, TRUE);
$dtend = $dtend_array["value"];
$endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
$endTime = "{$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
echo "start: ", $startDate, "T", $startTime, "\n";
示例12: vcalendar
$calendar = new vcalendar();
$calendar->setConfig('unique_id', UNIQUE);
if (!$calendar->setConfig('directory', CALDIR)) {
addLogEntry(1, ' ERROR (1) when setting directory \'' . CALDIR . '\', check directory/file permissions!!');
} elseif (!$calendar->setConfig('filename', TESTFILE)) {
addLogEntry(1, " ERROR (2) when setting directory/file '{$dirFile}', check directory/file permissions!!");
} else {
$starttime2 = microtime(TRUE);
$createFileStatus = !$calendar->parse();
$exec = array(', Parse exec time:', $starttime2, microtime(TRUE));
if (FALSE !== $createFileStatus) {
addLogEntry(2, ' FALSE from calendar->parse, i.e. file missing or empty' . $exec[0], $exec[1], $exec[2]);
} else {
addLogEntry(3, ' TRUE from calendar->parse' . $exec[0], $exec[1], $exec[2]);
$starttime2 = microtime(TRUE);
$comp = $calendar->getComponent('vevent', 1);
$exec = array(', exec time:', $starttime2, microtime(TRUE));
if (FALSE === $comp) {
$createFileStatus = TRUE;
addLogEntry(2, ' FALSE from calendar->getComponent, no vevent in file' . $exec[0], $exec[1], $exec[2]);
} else {
addLogEntry(3, ' TRUE from calendar->getComponent' . $exec[0], $exec[1], $exec[2]);
$starttime2 = microtime(TRUE);
$dtstart = $comp->getProperty('dtstart');
$exec = array(', exec time:', $starttime2, microtime(TRUE));
if (FALSE === ($dtstart = $comp->getProperty('dtstart'))) {
$createFileStatus = TRUE;
addLogEntry(2, ' FALSE from (first) getProperty(DTSTART), no DTSTART in vevent component' . $exec[0], $exec[1], $exec[2]);
} else {
$fileDtstartDate = sprintf("%04d%02d%02d", $dtstart['year'], $dtstart['month'], $dtstart['day']);
addLogEntry(3, " {$fileDtstartDate} = (first) getProperty(DTSTART)" . $exec[0], $exec[1], $exec[2]);
示例13: iCal2csv
//.........这里部分代码省略.........
}
$proporder['TYPE'] = 0;
$proporder['ORDER'] = 1;
$props = array('TZID', 'LAST-MODIFIED', 'TZURL', 'DTSTART', 'TZOFFSETTO', 'TZOFFSETFROM', 'TZOFFSETTFROM', 'COMMENT', 'RRULE', 'RDATE', 'TZNAME');
$pix = 2;
foreach ($props as $prop) {
if (isset($proporder[$prop])) {
continue;
}
if (isset($conf['skip']) && in_array($prop, $conf['skip'])) {
if ($log) {
$log->log("{$iCal2csv_VERSION} {$prop} removed from output", 7);
}
continue;
}
while (in_array($pix, $proporder)) {
$pix++;
}
$proporder[$prop] = $pix++;
}
/* remove unused properties from and add x-props to property order list */
$maxpropix = 11;
if ($maxpropix != count($proporder) - 1) {
$maxpropix = count($proporder) - 1;
}
$compsinfo = $calendar->getConfig('compsinfo');
$potmp = array();
$potmp[0] = 'TYPE';
$potmp[1] = 'ORDER';
foreach ($compsinfo as $cix => $compinfo) {
if ('vtimezone' != $compinfo['type']) {
continue;
}
$comp = $calendar->getComponent($compinfo['ordno']);
foreach ($compinfo['props'] as $propName => $propcnt) {
if (!in_array($propName, $potmp) && isset($proporder[$propName])) {
$potmp[$proporder[$propName]] = $propName;
} elseif ('X-PROP' == $propName) {
while ($xprop = $comp->getProperty()) {
if (!in_array($xprop[0], $potmp)) {
$maxpropix += 1;
$potmp[$maxpropix] = $xprop[0];
}
// end if
}
// end while xprop
}
// end X-PROP
}
// end $compinfo['props']
if (isset($compinfo['sub'])) {
foreach ($compinfo['sub'] as $compinfo2) {
foreach ($compinfo2['props'] as $propName => $propcnt) {
if (!in_array($propName, $potmp) && isset($proporder[$propName])) {
$potmp[$proporder[$propName]] = $propName;
} elseif ('X-PROP' == $propName) {
$scomp = $comp->getComponent($compinfo2['ordno']);
while ($xprop = $scomp->getProperty()) {
if (!in_array($xprop[0], $potmp)) {
$maxpropix += 1;
$potmp[$maxpropix] = $xprop[0];
}
// end if
}
// end while xprop
}
示例14: agenda_import_ical
/**
* Import an iCal file into the database
* @param array Course info
* @return boolean True on success, false otherwise
* @deprecated
*/
function agenda_import_ical($course_info, $file)
{
require_once api_get_path(LIBRARY_PATH) . 'fileUpload.lib.php';
$charset = api_get_system_encoding();
$filepath = api_get_path(SYS_ARCHIVE_PATH) . $file['name'];
if (!@move_uploaded_file($file['tmp_name'], $filepath)) {
error_log('Problem moving uploaded file: ' . $file['error'] . ' in ' . __FILE__ . ' line ' . __LINE__);
return false;
}
require_once api_get_path(LIBRARY_PATH) . 'icalcreator/iCalcreator.class.php';
$ical = new vcalendar();
$ical->setConfig('directory', dirname($filepath));
$ical->setConfig('filename', basename($filepath));
$return = $ical->parse();
//we need to recover: summary, description, dtstart, dtend, organizer, attendee, location (=course name),
/*
$ve = $ical->getComponent(VEVENT);
$ttitle = $ve->getProperty('summary');
$title = api_convert_encoding($ttitle,$charset,'UTF-8');
$tdesc = $ve->getProperty('description');
$desc = api_convert_encoding($tdesc,$charset,'UTF-8');
$start_date = $ve->getProperty('dtstart');
$start_date_string = $start_date['year'].'-'.$start_date['month'].'-'.$start_date['day'].' '.$start_date['hour'].':'.$start_date['min'].':'.$start_date['sec'];
$ts = $ve->getProperty('dtend');
if ($ts) {
$end_date_string = $ts['year'].'-'.$ts['month'].'-'.$ts['day'].' '.$ts['hour'].':'.$ts['min'].':'.$ts['sec'];
} else {
//Check duration if dtend does not exist
$duration = $ve->getProperty('duration');
if ($duration) {
$duration = $ve->getProperty('duration');
$duration_string = $duration['year'].'-'.$duration['month'].'-'.$duration['day'].' '.$duration['hour'].':'.$duration['min'].':'.$duration['sec'];
$start_date_tms = mktime(intval($start_date['hour']), intval($start_date['min']), intval($start_date['sec']), intval($start_date['month']), intval($start_date['day']), intval($start_date['year']));
//$start_date_tms = mktime(($start_date['hour']), ($start_date['min']), ($start_date['sec']), ($start_date['month']), ($start_date['day']), ($start_date['year']));
//echo date('d-m-Y - h:i:s', $start_date_tms);
$end_date_string = mktime(intval($start_date['hour']) +$duration['hour'], intval($start_date['min']) + $duration['min'], intval($start_date['sec']) + $duration['sec'], intval($start_date['month']) + $duration['month'], intval($start_date['day'])+$duration['day'], intval($start_date['year']) + $duration['year']);
$end_date_string = date('Y-m-d H:i:s', $end_date_string);
//echo date('d-m-Y - h:i:s', $end_date_string);
}
}
//echo $start_date.' - '.$end_date;
$organizer = $ve->getProperty('organizer');
$attendee = $ve->getProperty('attendee');
$course_name = $ve->getProperty('location');
//insert the event in our database
$id = agenda_add_item($course_info,$title,$desc,$start_date_string,$end_date_string,$_POST['selectedform']);
$repeat = $ve->getProperty('rrule');
if(is_array($repeat) && !empty($repeat['FREQ'])) {
$trans = array('DAILY'=>'daily','WEEKLY'=>'weekly','MONTHLY'=>'monthlyByDate','YEARLY'=>'yearly');
$freq = $trans[$repeat['FREQ']];
$interval = $repeat['INTERVAL'];
if(isset($repeat['UNTIL']) && is_array($repeat['UNTIL'])) {
$until = mktime(23,59,59,$repeat['UNTIL']['month'],$repeat['UNTIL']['day'],$repeat['UNTIL']['year']);
$res = agenda_add_repeat_item($course_info,$id,$freq,$until,$_POST['selectedform']);
} */
$eventcount = 0;
$message = array();
$agenda_obj = new Agenda();
while (true) {
//we need to recover: summary, description, dtstart, dtend, organizer, attendee, location (=course name)
$ve = $ical->getComponent('VEVENT', $eventcount);
if (!$ve) {
break;
}
$ttitle = $ve->getProperty('summary');
$title = api_convert_encoding($ttitle, $charset, 'UTF-8');
$tdesc = $ve->getProperty('description');
$desc = api_convert_encoding($tdesc, $charset, 'UTF-8');
$start_date = $ve->getProperty('dtstart', false, true);
if (isset($start_date['params']['VALUE'])) {
$start_date_value = $start_date['value'];
if ($start_date['params']['VALUE'] == 'DATE') {
$start_date_string = $start_date_value['year'] . '-' . $start_date_value['month'] . '-' . $start_date_value['day'] . '';
} else {
$start_date_string = $start_date_value['year'] . '-' . $start_date_value['month'] . '-' . $start_date_value['day'] . ' ' . $start_date_value['hour'] . ':' . $start_date_value['min'] . ':' . $start_date_value['sec'];
}
} else {
continue;
}
$ts = $ve->getProperty('dtend');
if ($ts) {
$end_date = $ve->getProperty('dtend', false, true);
if (isset($end_date['params']['VALUE'])) {
$end_date_value = $end_date['value'];
//.........这里部分代码省略.........
示例15: get_json
public function get_json()
{
$event_json = array();
$filters = $this->in->exists('filters', 'int') ? $this->in->getArray('filters', 'int') : false;
$range_start = $this->time->fromformat($this->in->get('start', ''), 'Y-m-d');
$range_end = $this->time->fromformat($this->in->get('end', ''), 'Y-m-d');
$filterby = $this->in->get('filterby', 'all');
// parse the feeds
$feeds = $this->pdh->get('calendars', 'idlist', array('feed', $filters));
if (is_array($feeds) && count($feeds) > 0) {
foreach ($feeds as $feed) {
$feedurl = $this->pdh->get('calendars', 'feed', array($feed));
if (isValidURL($feedurl)) {
require_once $this->root_path . 'libraries/icalcreator/iCalcreator.class.php';
$vcalendar = new vcalendar(array('url' => $feedurl));
if (TRUE === $vcalendar->parse()) {
$vcalendar->sort();
while ($comp = $vcalendar->getComponent('vevent')) {
$startdate = $comp->getProperty('dtstart', 1);
$enddate = $comp->getProperty('dtend', 1);
// set the date for the events
$allday = isset($enddate['hour']) && isset($startdate['hour']) ? false : true;
if ($allday) {
$startdate_out = sprintf("%04d", $startdate['year']) . '-' . sprintf("%02d", $startdate['month']) . '-' . sprintf("%02d", $startdate['day']) . ' 00:00';
$enddate_out = sprintf("%04d", $enddate['year']) . '-' . sprintf("%02d", $enddate['month']) . '-' . sprintf("%02d", $enddate['day'] - 1) . ' 00:00';
} else {
$startdate_out = sprintf("%04d", $startdate['year']) . '-' . sprintf("%02d", $startdate['month']) . '-' . sprintf("%02d", $startdate['day']) . ' ' . (isset($startdate['hour']) ? sprintf("%02d", $startdate['hour']) . ':' . sprintf("%02d", $startdate['min']) : '00:00');
$enddate_out = sprintf("%04d", $enddate['year']) . '-' . $enddate['month'] . '-' . $enddate['day'] . ' ' . (isset($enddate['hour']) ? $enddate['hour'] . ':' . $enddate['min'] : '00:00');
}
// build the event colours
$eventcolor = $this->pdh->get('calendars', 'color', $feed);
$eventcolor_txt = get_brightness($eventcolor) > 130 ? 'black' : 'white';
$event_json[] = array('eventid' => $calid, 'title' => $comp->getProperty('summary', 1), 'start' => $startdate_out, 'end' => $enddate_out, 'allDay' => $allday, 'note' => $comp->getProperty('description', 1), 'color' => $eventcolor . ' !important', 'textColor' => $eventcolor_txt . ' !important');
}
}
}
}
}
// add the calendar events to the json feed
$calendars = $this->pdh->get('calendars', 'idlist', array('nofeed', $filters));
$caleventids = $this->pdh->get('calendar_events', 'id_list', array(false, $range_start, $range_end, false, $filterby));
if (is_array($caleventids) && count($caleventids) > 0) {
foreach ($caleventids as $calid) {
$eventextension = $this->pdh->get('calendar_events', 'extension', array($calid));
$raidmode = $eventextension['calendarmode'];
$eventcolor = $this->pdh->get('calendars', 'color', $this->pdh->get('calendar_events', 'calendar_id', array($calid)));
$eventcolor_txt = get_brightness($eventcolor) > 130 ? 'black' : 'white';
if (in_array($this->pdh->get('calendar_events', 'calendar_id', array($calid)), $calendars)) {
if ($raidmode == 'raid') {
// fetch the attendees
$attendees_raw = $this->pdh->get('calendar_raids_attendees', 'attendees', array($calid));
$attendees = array();
if (is_array($attendees_raw)) {
foreach ($attendees_raw as $attendeeid => $attendeerow) {
$attendees[$attendeerow['signup_status']][$attendeeid] = $attendeerow;
}
}
// Build the guest array
$guests = array();
if (registry::register('config')->get('calendar_raid_guests') == 1) {
$guestarray = registry::register('plus_datahandler')->get('calendar_raids_guests', 'members', array($calid));
if (is_array($guestarray)) {
foreach ($guestarray as $guest_row) {
$guests[] = $guest_row['name'];
}
}
}
// fetch per raid data
$raidcal_status = $this->config->get('calendar_raid_status');
$rstatusdata = '';
if (is_array($raidcal_status)) {
foreach ($raidcal_status as $raidcalstat_id) {
if ($raidcalstat_id != 4) {
$actcount = isset($attendees[$raidcalstat_id]) ? count($attendees[$raidcalstat_id]) : 0;
if ($raidcalstat_id == 0) {
$actcount += is_array($guests) ? count($guests) : 0;
}
$rstatusdata .= '<div class="raid_status' . $raidcalstat_id . '">' . $this->user->lang(array('raidevent_raid_status', $raidcalstat_id)) . ': ' . $actcount . '</div>';
}
}
}
$rstatusdata .= '<div class="raid_status_total">' . $this->user->lang('raidevent_raid_required') . ': ' . (isset($eventextension) ? $eventextension['attendee_count'] : 0) . '</div>';
$deadlinedate = $this->pdh->get('calendar_events', 'time_start', array($calid)) - $eventextension['deadlinedate'] * 3600;
$deadline = $deadlinedate > $this->time->time || $this->config->get('calendar_raid_allowstatuschange') == '1' && $this->pdh->get('calendar_raids_attendees', 'status', array($calid, $this->user->id)) > 0 && $this->pdh->get('calendar_raids_attendees', 'status', array($calid, $this->user->id)) != 4 && $this->pdh->get('calendar_events', 'time_end', array($calid)) > $this->time->time ? false : true;
$deadlineflag = $deadline ? '<i class="fa fa-lock fa-lg" title="' . $this->user->lang('raidevent_raid_deadl_reach') . '"></i>' : '';
// Build the JSON
$event_json[] = array('type' => 'raid', 'eventid' => $calid, 'editable' => $this->user->check_auth('a_cal_revent_conf', false) || $this->check_permission($calid) ? true : false, 'title' => $this->in->decode_entity($this->pdh->get('calendar_events', 'name', array($calid))), 'url' => $this->routing->build('calendarevent', $this->pdh->get('calendar_events', 'name', array($calid)), $calid), 'start' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_start', array($calid))), 'end' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_end', array($calid))), 'closed' => $this->pdh->get('calendar_events', 'raidstatus', array($calid)) == 1 ? true : false, 'flag' => $deadlineflag . $this->pdh->get('calendar_raids_attendees', 'html_status', array($calid, $this->user->data['user_id'])), 'icon' => $eventextension['raid_eventid'] ? $this->pdh->get('event', 'icon', array($eventextension['raid_eventid'], true)) : '', 'note' => $this->pdh->get('calendar_events', 'notes', array($calid)), 'raidleader' => $eventextension['raidleader'] > 0 ? implode(', ', $this->pdh->aget('member', 'name', 0, array($eventextension['raidleader']))) : '', 'rstatusdata' => $rstatusdata, 'color' => $eventcolor . ' !important', 'textColor' => $eventcolor_txt . ' !important');
} else {
// check if the event is private
if (!$this->pdh->get('calendar_events', 'private_userperm', array($calid))) {
continue;
}
$alldayevents = $this->pdh->get('calendar_events', 'allday', array($calid)) > 0 ? true : false;
$event_json[] = array('type' => 'event', 'eventid' => $calid, 'editable' => $this->user->check_auth('a_cal_revent_conf', false) || $this->check_permission($calid) ? true : false, 'url' => $this->routing->build('calendarevent', $this->pdh->get('calendar_events', 'name', array($calid)), $calid) . 'eventdetails', 'title' => $this->pdh->get('calendar_events', 'name', array($calid)), 'start' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_start', array($calid))), 'end' => $this->time->date('Y-m-d H:i', $this->pdh->get('calendar_events', 'time_end', array($calid, $alldayevents))), 'allDay' => $alldayevents, 'note' => $this->pdh->get('calendar_events', 'notes', array($calid)), 'color' => $eventcolor, 'textColor' => $eventcolor_txt, 'isowner' => $this->pdh->get('calendar_events', 'is_owner', array($calid)), 'isinvited' => $this->pdh->get('calendar_events', 'is_invited', array($calid)), 'joinedevent' => $this->pdh->get('calendar_events', 'joined_invitation', array($calid)), 'author' => $this->pdh->get('calendar_events', 'creator', array($calid)), 'attendees' => $this->pdh->get('calendar_events', 'sharedevent_attendees', array($calid)));
}
}
}
}
// birthday calendar
if ($this->config->get('calendar_show_birthday') && $this->user->check_auth('u_userlist', false)) {
//.........这里部分代码省略.........