public function export(array $arguments, array $params = array()) { $c = new vcalendar(); $c->setProperty('calscale', 'GREGORIAN'); $c->setProperty('method', 'PUBLISH'); // if no post id are specified do not export those properties // as they would create a new calendar in outlook. // a user reported this in AIOEC-982 and said this would fix it if (true === $arguments['do_not_export_as_calendar']) { $c->setProperty('X-WR-CALNAME', get_bloginfo('name')); $c->setProperty('X-WR-CALDESC', get_bloginfo('description')); } $c->setProperty('X-FROM-URL', home_url()); // Timezone setup $tz = $this->_registry->get('date.timezone')->get_default_timezone(); if ($tz) { $c->setProperty('X-WR-TIMEZONE', $tz); $tz_xprops = array('X-LIC-LOCATION' => $tz); iCalUtilityFunctions::createTimezone($c, $tz, $tz_xprops); } $this->_taxonomy_model = $this->_registry->get('model.taxonomy'); $post_ids = array(); foreach ($arguments['events'] as $event) { $post_ids[] = $event->get('post_id'); } $this->_taxonomy_model->update_meta($post_ids); foreach ($arguments['events'] as $event) { $c = $this->_insert_event_in_calendar($event, $c, true, $params); } $str = ltrim($c->createCalendar()); return $str; }
/** * export_events function * * Export events * * @return void **/ function export_events() { global $ai1ec_events_helper, $ai1ec_exporter_helper, $ai1ec_localization_helper; $ai1ec_cat_ids = !empty($_REQUEST['ai1ec_cat_ids']) ? $_REQUEST['ai1ec_cat_ids'] : false; $ai1ec_tag_ids = !empty($_REQUEST['ai1ec_tag_ids']) ? $_REQUEST['ai1ec_tag_ids'] : false; $ai1ec_post_ids = !empty($_REQUEST['ai1ec_post_ids']) ? $_REQUEST['ai1ec_post_ids'] : false; if (!empty($_REQUEST['lang'])) { $ai1ec_localization_helper->set_language($_REQUEST['lang']); } $filter = array(); if ($ai1ec_cat_ids) { $filter['cat_ids'] = explode(',', $ai1ec_cat_ids); } if ($ai1ec_tag_ids) { $filter['tag_ids'] = explode(',', $ai1ec_tag_ids); } if ($ai1ec_post_ids) { $filter['post_ids'] = explode(',', $ai1ec_post_ids); } // when exporting events by post_id, do not look up the event's start/end date/time $start = $ai1ec_post_ids !== false ? false : Ai1ec_Time_Utility::current_time(true) - 24 * 60 * 60; // Include any events ending today $end = false; $c = new vcalendar(); $c->setProperty('calscale', 'GREGORIAN'); $c->setProperty('method', 'PUBLISH'); $c->setProperty('X-WR-CALNAME', get_bloginfo('name')); $c->setProperty('X-WR-CALDESC', get_bloginfo('description')); $c->setProperty('X-FROM-URL', home_url()); // Timezone setup $tz = Ai1ec_Meta::get_option('timezone_string'); if ($tz) { $c->setProperty('X-WR-TIMEZONE', $tz); $tz_xprops = array('X-LIC-LOCATION' => $tz); iCalUtilityFunctions::createTimezone($c, $tz, $tz_xprops); } $events = $ai1ec_events_helper->get_matching_events($start, $end, $filter); foreach ($events as $event) { $ai1ec_exporter_helper->insert_event_in_calendar($event, $c, $export = true); } $str = ltrim($c->createCalendar()); header('Content-type: text/calendar; charset=utf-8'); echo $str; exit; }
public function generate_ical() { $eventdata = $this->pdh->get('calendar_events', 'data', array($this->url_id)); require $this->root_path . 'libraries/icalcreator/iCalcreator.class.php'; $v = new vcalendar(); $v->setConfig('unique_id', $this->config->get('server_name')); $v->setProperty('x-wr-calname', sprintf(registry::fetch('user')->lang('icalfeed_name'), registry::register('config')->get('guildtag'))); $v->setProperty('X-WR-CALDESC', registry::fetch('user')->lang('icalfeed_description')); // set the timezone - required by some clients $timezone = registry::register('config')->get('timezone'); $v->setProperty("X-WR-TIMEZONE", $timezone); iCalUtilityFunctions::createTimezone($v, $timezone, array("X-LIC-LOCATION" => $timezone)); // Generate the vevents... $e = new vevent(); $e->setProperty('dtstart', array("timestamp" => $eventdata['timestamp_start'] . 'Z')); $e->setProperty('dtend', array("timestamp" => $eventdata['timestamp_end'] . 'Z')); $e->setProperty('dtstamp', array("timestamp" => $this->time->time)); $e->setProperty('summary', $this->pdh->get('event', 'name', array($eventdata['extension']['raid_eventid']))); $e->setProperty('description', $eventdata['notes']); $e->setProperty('class', 'PUBLIC'); $e->setProperty('categories', 'PERSONAL'); $v->setComponent($e); // Save or Output the ICS File.. if ($icsfile == true) { $v->setConfig('filename', $icsfile); $v->saveCalendar(); } else { header('Content-type: text/calendar; charset=utf-8;'); header('Content-Disposition: filename=raidevent-' . $eventdata['timestamp_start'] . '.ics'); echo $v->createCalendar(); exit; } }
/** * Generate ical file content * * @param $who user ID * @param $who_group group ID * @param $limititemtype itemtype only display this itemtype (default '') * * @return icalendar string **/ static function generateIcal($who, $who_group, $limititemtype = '') { global $CFG_GLPI; if ($who === 0 && $who_group === 0) { return false; } include_once GLPI_ROOT . "/lib/icalcreator/iCalcreator.class.php"; $v = new vcalendar(); if (!empty($CFG_GLPI["version"])) { $v->setConfig('unique_id', "GLPI-Planning-" . trim($CFG_GLPI["version"])); } else { $v->setConfig('unique_id', "GLPI-Planning-UnknownVersion"); } $tz = date_default_timezone_get(); $v->setConfig('TZID', $tz); $v->setProperty("method", "PUBLISH"); $v->setProperty("version", "2.0"); $v->setProperty("X-WR-TIMEZONE", $tz); $xprops = array("X-LIC-LOCATION" => $tz); iCalUtilityFunctions::createTimezone($v, $tz, $xprops); $v->setProperty("x-wr-calname", "GLPI-" . $who . "-" . $who_group); $v->setProperty("calscale", "GREGORIAN"); $interv = array(); $begin = time() - MONTH_TIMESTAMP * 12; $end = time() + MONTH_TIMESTAMP * 12; $begin = date("Y-m-d H:i:s", $begin); $end = date("Y-m-d H:i:s", $end); $params = array('who' => $who, 'who_group' => $who_group, 'begin' => $begin, 'end' => $end); $interv = array(); if (empty($limititemtype)) { foreach ($CFG_GLPI['planning_types'] as $itemtype) { $interv = array_merge($interv, $itemtype::populatePlanning($params)); } } else { $interv = $limititemtype::populatePlanning($params); } if (count($interv) > 0) { foreach ($interv as $key => $val) { $vevent = new vevent(); //initiate EVENT if (isset($val['itemtype'])) { if (isset($val[getForeignKeyFieldForItemType($val['itemtype'])])) { $vevent->setProperty("uid", $val['itemtype'] . "#" . $val[getForeignKeyFieldForItemType($val['itemtype'])]); } else { $vevent->setProperty("uid", "Other#" . $key); } } else { $vevent->setProperty("uid", "Other#" . $key); } $vevent->setProperty("dstamp", $val["begin"]); $vevent->setProperty("dtstart", $val["begin"]); $vevent->setProperty("dtend", $val["end"]); if (isset($val["tickets_id"])) { $vevent->setProperty("summary", sprintf(__('Ticket #%1$s %2$s'), $val["tickets_id"], $val["name"])); } else { if (isset($val["name"])) { $vevent->setProperty("summary", $val["name"]); } } if (isset($val["content"])) { $text = $val["content"]; // be sure to replace nl by \r\n $text = preg_replace("/<br( [^>]*)?" . ">/i", "\r\n", $text); $text = Html::clean($text); $vevent->setProperty("description", $text); } else { if (isset($val["name"])) { $text = $val["name"]; // be sure to replace nl by \r\n $text = preg_replace("/<br( [^>]*)?" . ">/i", "\r\n", $text); $text = Html::clean($text); $vevent->setProperty("description", $text); } } if (isset($val["url"])) { $vevent->setProperty("url", $val["url"]); } $v->setComponent($vevent); } } $v->sort(); // $v->parse(); return $v->returnCalendar(); }
if (version_compare(JVERSION, '3.0', 'ge')) { $offset = $config->get('offset'); } else { $offset = $config->getValue('config.offset'); } $dateTimeZone = new DateTimeZone($offset); $dateTime = new DateTime("now", $dateTimeZone); $timeOffset = $dateTimeZone->getOffset($dateTime); $timezone = $timeOffset / 3600; $tz = 'UTC'; $v->setProperty('method', 'PUBLISH'); $v->setProperty('X-WR-CALDESC', ''); $v->setProperty('X-WR-TIMEZONE', $tz); $xprops = array('X-LIC-LOCATION' => $tz); if (version_compare(PHP_VERSION, '5.3.0') >= 0) { iCalUtilityFunctions::createTimezone($v, $tz, $xprops); } $stamp = $this->data; $get_date = ''; $href = '#'; $start_Datetime = ''; $start_Date = ''; $end_Datetime = ''; $end_Date = ''; foreach ($stamp->items as $item) { $s_dates = $item->dates; $single_dates = unserialize($s_dates); if (JRequest::getVar('date', '')) { $var_one_date = JRequest::getVar('date'); $one_ex = explode('-', $var_one_date); $get_one_date = $one_ex['0'] . '-' . $one_ex['1'] . '-' . $one_ex['2'] . ' ' . $one_ex['3'] . ':' . $one_ex['4'] . ':00';
case 'icalfeed': // the permissions for the single modules $permissions = array('calendar' => 'po_calendarevent'); $modulename = registry::register('input')->get('module', ''); // check for permission $userid = registry::fetch('user')->getUserIDfromExchangeKey(registry::register('input')->get('key', '')); if (isset($permissions[$modulename]) && registry::fetch('user')->check_auth($permissions[$modulename], false, $userid)) { require $eqdkp_root_path . 'libraries/icalcreator/iCalcreator.class.php'; $v = new vcalendar(); $v->setConfig('unique_id', registry::register('config')->get('server_name')); $v->setProperty('x-wr-calname', sprintf(registry::fetch('user')->lang('icalfeed_name'), registry::register('config')->get('guildtag'))); $v->setProperty('X-WR-CALDESC', registry::fetch('user')->lang('icalfeed_description')); // set the timezone - required by some clients $timezone = registry::register('config')->get('timezone'); $v->setProperty("X-WR-TIMEZONE", $timezone); iCalUtilityFunctions::createTimezone($v, $timezone, array("X-LIC-LOCATION" => $timezone)); switch ($modulename) { case 'calendar': $eventtypes = registry::register('input')->get('type', 'raids'); switch ($eventtypes) { case 'raids': $eventsfilter = true; break; case 'all': $eventsfilter = false; break; case 'appointments': $eventsfilter = 'appointments'; break; } $caleventids = registry::register('plus_datahandler')->get('calendar_events', 'id_list', array($eventsfilter, registry::register('time')->createRepeatableEvents(registry::register('time')->time, -30)));
/** * Create calendar * Adds timezone component, when not already done * * @see http://kigkonsult.se/iCalcreator/docs/using.html#createTimezone * * @return string */ public function createCalendar() { // add timezone component if ($this->timezone && $this->getComponent('VTIMEZONE') === false) { $xprops = array('X-LIC-LOCATION' => $this->timezone); \iCalUtilityFunctions::createTimezone($this, $this->timezone, $xprops); } return parent::createCalendar(); }
/** * Add a VTIMEZONE using the specified TZID * If VTIMEZONE was already added, do nothing * * @param iCalcomponent * @param string Timezone id to add * @param array (Optional) result from get_timezones() * @return Used TZID, even when it was not added */ function add_vtimezone(&$resource, $tzid, $timezones = array()) { if ($tzid != 'UTC' && !isset($timezones[$tzid])) { $res = iCalUtilityFunctions::createTimezone($resource, $tzid, array('X-LIC-LOCATION' => $tzid)); if ($res === FALSE) { $this->CI->extended_logs->message('ERROR', "Couldn't create vtimezone with tzid=" . $tzid . ' Defaulting to UTC'); $tzid = 'UTC'; } } return $tzid; }
function display($tpl = null) { // Get a reference of the page instance in joomla $document = JFactory::getDocument(); $model = $this->getModel(); $project = $model->getProject(); //$config = $model->getTemplateConfig($this->getName()); if (isset($project)) { $this->project = $project; } $this->overallconfig = $model->getOverallConfig(); $this->config = $this->overallconfig; $this->matches = $model->getMatches(); $this->teams = $model->getTeamsFromMatches($this->matches); // load a class that handles ical formats. require_once JLG_PATH_SITE . DS . 'helpers' . DS . 'iCalcreator.class.php'; // create a new calendar instance $v = new vcalendar(); foreach ($this->matches as $match) { $hometeam = $this->teams[$match->team1]; $home = sprintf('%s', $hometeam->name); $guestteam = $this->teams[$match->team2]; $guest = sprintf('%s', $guestteam->name); $summary = $match->project_name . ': ' . $home . ' - ' . $guest; // check if match gots a date, if not it will not be included in ical if ($match->match_date) { $totalMatchTime = isset($project) ? $project->halftime * ($project->game_parts - 1) + $project->game_regular_time : 90; $start = JoomleagueHelper::getMatchStartTimestamp($match, 'Y-m-d H:i:s'); $end = JoomleagueHelper::getMatchEndTimestamp($match, $totalMatchTime, 'Y-m-d H:i:s'); // check if exist a playground in match or team or club $stringlocation = ''; $stringname = ''; if (!empty($match->playground_id)) { $stringlocation = $match->playground_address . ", " . $match->playground_zipcode . " " . $match->playground_city; $stringname = $match->playground_name; } elseif (!empty($match->team_playground_id)) { $stringlocation = $match->team_playground_address . ", " . $match->team_playground_zipcode . " " . $match->team_playground_city; $stringname = $match->team_playground_name; } elseif (!empty($match->club_playground_id)) { $stringlocation = $match->club_playground_address . ", " . $match->club_playground_zipcode . " " . $match->club_playground_city; $stringname = $match->club_playground_name; } $location = $stringlocation; //if someone want to insert more in description here is the place $description = $stringname; // create an event and insert it in calendar $vevent = new vevent(); $timezone = JoomleagueHelper::getMatchTimezone($match); $vevent->setProperty("dtstart", $start, array("TZID" => $timezone)); $vevent->setProperty("dtend", $end, array("TZID" => $timezone)); $vevent->setProperty('LOCATION', $location); $vevent->setProperty('summary', $summary); $vevent->setProperty('description', $description); $v->setComponent($vevent); } } $v->setProperty("X-WR-TIMEZONE", $timezone); $xprops = array("X-LIC-LOCATION" => $timezone); iCalUtilityFunctions::createTimezone($v, $timezone, $xprops); $v->returnCalendar(); //$debugstr = $v->createCalendar(); //echo "<pre>"; //echo $debugstr; // exit before display // parent::display( $tpl ); }
} if (!$events) { register_error(elgg_echo('event_calendar:no_events_found')); forward(REFERER); } $events = event_calendar_flatten_event_structure($events); $timezone = date_default_timezone_get(); //get_plugin_setting('timezone', 'event_connector'); $config = array('UNIQUE_ID' => elgg_get_site_url(), 'FILENAME' => 'Calendar.ics', 'TZID' => $timezone); $v = new vcalendar($config); $v->setProperty('method', 'PUBLISH'); $v->setProperty("X-WR-TIMEZONE", date_default_timezone_get()); $v->setProperty("calscale", "GREGORIAN"); $v->setProperty("version", "2.0"); $v->setProperty("X-WR-CALNAME", elgg_get_logged_in_user_entity()->username . "Calendar"); iCalUtilityFunctions::createTimezone($v, $timezone); foreach ($events as $event) { //set default beginning and ending time $hb = 8; $he = 18; $mb = $me = $sb = $se = 0; if ($event->start_time) { $hb = (int) ($event->start_time / 60); $mb = $event->start_time % 60; } if ($event->end_time) { $he = (int) ($event->end_time / 60); $me = $event->end_time % 60; } $vevent = $v->newComponent('vevent'); if (!isset($event->end_date)) {
public function ical_feed() { global $wp_query; if (!have_posts()) { $wp_query->set_404(); $wp_query->max_num_pages = 0; header('Content-Type: text/html; charset=' . get_option('blog_charset'), true); locate_template('404.php', true); die; } $display_format = ''; if (isset($_GET['format'])) { $display_format = strtolower($_GET['format']); } if ($display_format == 'xml') { nocache_headers(); header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); } if ($display_format == 'json') { nocache_headers(); header('Content-Type: application/json; charset=' . get_option('blog_charset'), true); } //TODO: Add filters for these things $calendar_name = get_bloginfo('name') . ' Events'; $calendar_description = 'Events found on ' . get_site_url(); $timezone = get_option('timezone_string'); // define time zone $args = array('unique_id' => get_site_url(), 'TZID' => $timezone); $v = new vcalendar($args); // create a new calendar instance $v->setProperty('method', 'PUBLISH'); // required of some calendar software $v->setProperty('x-wr-calname', $calendar_name); // required of some calendar software $v->setProperty('X-WR-CALDESC', $calendar_description); // required of some calendar software $v->setProperty('X-WR-TIMEZONE', $timezone); // required of some calendar software $xprops = array('X-LIC-LOCATION' => $timezone); // required of some calendar software iCalUtilityFunctions::createTimezone($v, $timezone, $xprops); // create timezone component(-s) opt. 1 based on present date while (have_posts()) { the_post(); $event_id = get_the_ID(); $event = get_post($event_id); $event_date = sc_get_event_date($event_id); $event_time = sc_get_event_time($event_id); $event_start = strtotime($event_date . ' ' . $event_time['start']); $event_end = strtotime($event_date . ' ' . $event_time['end']); $event_location = ''; if (function_exists('sc_get_event_address')) { $event_location = sc_get_event_address(); } $event_description = apply_filters('sc_ical_event_description', get_the_content(), $event); $event_description = sc_html2plain($event_description); $vevent =& $v->newComponent('vevent'); // create an event calendar component $start = array('year' => date('Y', $event_start), 'month' => date('n', $event_start), 'day' => date('j', $event_start), 'hour' => date('G', $event_start), 'min' => date('i', $event_start), 'sec' => date('s', $event_start)); $vevent->setProperty('dtstart', $start); $end = array('year' => date('Y', $event_end), 'month' => date('n', $event_end), 'day' => date('j', $event_end), 'hour' => date('G', $event_end), 'min' => date('i', $event_end), 'sec' => date('s', $event_end)); $vevent->setProperty('dtend', $end); $vevent->setProperty('LOCATION', $event_location); // property name - case independent if (function_exists('sc_get_the_organizer')) { $organizer_details = sc_get_the_organizer($event_id); $organizer_details = array_filter($organizer_details); if (isset($organizer_details['name']) && isset($organizer_details['email'])) { $organizer_args = array('CN' => $organizer_details['name']); $x_params = array('Phone', 'Website'); foreach ($x_params as $param) { $lowercase_param = strtolower($param); if (isset($organizer_details[$lowercase_param])) { $arg_key = 'X-' . $param; $val = $organizer_details[$lowercase_param]; $organizer_args[$arg_key] = $val; } } $vevent->setProperty('organizer', $organizer_details['email'], $organizer_args); } } $vevent->setProperty('summary', $event->post_title); $vevent->setProperty('description', $event_description); } // all calendar components are described in rfc5545 // a complete method list in iCalcreator manual iCalUtilityFunctions::createTimezone($v, $timezone, $xprops); // create timezone component(-s) opt. 2 // based on all start dates in events (i.e. dtstart) if ($display_format == 'xml') { echo iCal2XML($v); exit; } if ($display_format == 'json') { $xml = simplexml_load_string(iCal2XML($v)); echo json_encode($xml); exit; } $v->returnCalendar(); // redirect calendar file to browser exit; }
/** * return initialized calendar tool class for ics export * * @return object */ static function getCalendarTool() { require_once JPATH_SITE . '/components/com_jem/classes/iCalcreator.class.php'; $timezone_name = JemHelper::getTimeZoneName(); $config = JFactory::getConfig(); $sitename = $config->get('sitename'); $config = array("unique_id" => $sitename, "TZID" => $timezone_name); $vcal = new vcalendar($config); if (!file_exists(JPATH_SITE . '/cache/com_jem')) { jimport('joomla.filesystem.folder'); JFolder::create(JPATH_SITE . '/cache/com_jem'); } $vcal->setConfig('directory', JPATH_SITE . '/cache/com_jem'); $vcal->setProperty("calscale", "GREGORIAN"); $vcal->setProperty('method', 'PUBLISH'); $vcal->setProperty("X-WR-TIMEZONE", $timezone_name); $vcal->setProperty("x-wr-calname", "Calendar"); $vcal->setProperty("X-WR-CALDESC", "Calendar Description"); $xprops = array("X-LIC-LOCATION" => $timezone_name); if ($timezone_name != 'UTC') { iCalUtilityFunctions::createTimezone($vcal, $timezone_name, $xprops); } return $vcal; }