function format_event_html($ev, $simple = false) {
- if(! ((is_array($ev)) && count($ev)))
+ if (! ((is_array($ev)) && count($ev)))
return '';
$bd_format = t('l F d, Y \@ g:i A') ; // Friday January 18, 2011 @ 8 AM
$o .= "<h4>".t('Starts:')."</h4><p>".$event_start."</p>";
- if(! $ev['nofinish'])
+ if (! $ev['nofinish'])
$o .= "<h4>".t('Finishes:')."</h4><p>".$event_end."</p>";
- if(strlen($ev['location']))
+ if (strlen($ev['location']))
$o .= "<h4>".t('Location:')."</h4><p>".$ev['location']."</p>";
return $o;
. '" >'.$event_start
. '</abbr></p>' . "\r\n";
- if(! $ev['nofinish'])
+ if (! $ev['nofinish'])
$o .= '<p class="event-end" >' . t('Finishes:') . ' <abbr class="dtend" title="'
. datetime_convert('UTC','UTC',$ev['finish'], (($ev['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' ))
. '" >'.$event_end
. '</abbr></p>' . "\r\n";
- if(strlen($ev['location'])){
+ if (strlen($ev['location'])){
$o .= '<p class="event-location"> ' . t('Location:') . ' <span class="location">'
. bbcode($ev['location'])
. '</span></p>' . "\r\n";
logger('parse_event: parse error: ' . $e);
}
- if(! $dom)
+ if (! $dom)
return $ret;
$items = $dom->getElementsByTagName('*');
- foreach($items as $item) {
- if(attribute_contains($item->getAttribute('class'), 'vevent')) {
+ foreach ($items as $item) {
+ if (attribute_contains($item->getAttribute('class'), 'vevent')) {
$level2 = $item->getElementsByTagName('*');
- foreach($level2 as $x) {
- if(attribute_contains($x->getAttribute('class'),'dtstart') && $x->getAttribute('title')) {
+ foreach ($level2 as $x) {
+ if (attribute_contains($x->getAttribute('class'),'dtstart') && $x->getAttribute('title')) {
$ret['start'] = $x->getAttribute('title');
- if(! strpos($ret['start'],'Z'))
+ if (! strpos($ret['start'],'Z'))
$ret['adjust'] = true;
}
- if(attribute_contains($x->getAttribute('class'),'dtend') && $x->getAttribute('title'))
+ if (attribute_contains($x->getAttribute('class'),'dtend') && $x->getAttribute('title'))
$ret['finish'] = $x->getAttribute('title');
- if(attribute_contains($x->getAttribute('class'),'description'))
+ if (attribute_contains($x->getAttribute('class'),'description'))
$ret['desc'] = $x->textContent;
- if(attribute_contains($x->getAttribute('class'),'location'))
+ if (attribute_contains($x->getAttribute('class'),'location'))
$ret['location'] = $x->textContent;
}
}
// sanitise
- if((x($ret,'desc')) && ((strpos($ret['desc'],'<') !== false) || (strpos($ret['desc'],'>') !== false))) {
+ if ((x($ret,'desc')) && ((strpos($ret['desc'],'<') !== false) || (strpos($ret['desc'],'>') !== false))) {
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$purifier = new HTMLPurifier($config);
$ret['desc'] = html2bbcode($purifier->purify($ret['desc']));
}
- if((x($ret,'location')) && ((strpos($ret['location'],'<') !== false) || (strpos($ret['location'],'>') !== false))) {
+ if ((x($ret,'location')) && ((strpos($ret['location'],'<') !== false) || (strpos($ret['location'],'>') !== false))) {
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$purifier = new HTMLPurifier($config);
$ret['location'] = html2bbcode($purifier->purify($ret['location']));
}
- if(x($ret,'start'))
+ if (x($ret,'start'))
$ret['start'] = datetime_convert('UTC','UTC',$ret['start']);
- if(x($ret,'finish'))
+ if (x($ret,'finish'))
$ret['finish'] = datetime_convert('UTC','UTC',$ret['finish']);
return $ret;
$o = '';
- if($ev['summary'])
+ if ($ev['summary'])
$o .= '[event-summary]' . $ev['summary'] . '[/event-summary]';
- if($ev['desc'])
+ if ($ev['desc'])
$o .= '[event-description]' . $ev['desc'] . '[/event-description]';
- if($ev['start'])
+ if ($ev['start'])
$o .= '[event-start]' . $ev['start'] . '[/event-start]';
- if(($ev['finish']) && (! $ev['nofinish']))
+ if (($ev['finish']) && (! $ev['nofinish']))
$o .= '[event-finish]' . $ev['finish'] . '[/event-finish]';
- if($ev['location'])
+ if ($ev['location'])
$o .= '[event-location]' . $ev['location'] . '[/event-location]';
- if($ev['adjust'])
+ if ($ev['adjust'])
$o .= '[event-adjust]' . $ev['adjust'] . '[/event-adjust]';
function bbtovcal($s) {
$o = '';
$ev = bbtoevent($s);
- if($ev['desc'])
+ if ($ev['desc'])
$o = format_event_html($ev);
return $o;
}
$ev = array();
$match = '';
- if(preg_match("/\[event\-summary\](.*?)\[\/event\-summary\]/is",$s,$match))
+ if (preg_match("/\[event\-summary\](.*?)\[\/event\-summary\]/is",$s,$match))
$ev['summary'] = $match[1];
$match = '';
- if(preg_match("/\[event\-description\](.*?)\[\/event\-description\]/is",$s,$match))
+ if (preg_match("/\[event\-description\](.*?)\[\/event\-description\]/is",$s,$match))
$ev['desc'] = $match[1];
$match = '';
- if(preg_match("/\[event\-start\](.*?)\[\/event\-start\]/is",$s,$match))
+ if (preg_match("/\[event\-start\](.*?)\[\/event\-start\]/is",$s,$match))
$ev['start'] = $match[1];
$match = '';
- if(preg_match("/\[event\-finish\](.*?)\[\/event\-finish\]/is",$s,$match))
+ if (preg_match("/\[event\-finish\](.*?)\[\/event\-finish\]/is",$s,$match))
$ev['finish'] = $match[1];
$match = '';
- if(preg_match("/\[event\-location\](.*?)\[\/event\-location\]/is",$s,$match))
+ if (preg_match("/\[event\-location\](.*?)\[\/event\-location\]/is",$s,$match))
$ev['location'] = $match[1];
$match = '';
- if(preg_match("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",$s,$match))
+ if (preg_match("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",$s,$match))
$ev['adjust'] = $match[1];
$ev['nofinish'] = (((x($ev, 'start') && $ev['start']) && (!x($ev, 'finish') || !$ev['finish'])) ? 1 : 0);
return $ev;
$date_a = (($a['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$a['start']) : $a['start']);
$date_b = (($b['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$b['start']) : $b['start']);
- if($date_a === $date_b)
+ if ($date_a === $date_b)
return strcasecmp($a['desc'],$b['desc']);
return strcmp($date_a,$date_b);
$arr['cid'] = ((intval($arr['cid'])) ? intval($arr['cid']) : 0);
$arr['uri'] = (x($arr,'uri') ? $arr['uri'] : item_new_uri($a->get_hostname(),$arr['uid']));
$arr['private'] = ((x($arr,'private')) ? intval($arr['private']) : 0);
+ $arr['guid'] = get_guid(32);
- if($arr['cid'])
+ if ($arr['cid'])
$c = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($arr['cid']),
intval($arr['uid'])
intval($arr['uid'])
);
- if(count($c))
+ if (count($c))
$contact = $c[0];
// Existing event being modified
- if($arr['id']) {
+ if ($arr['id']) {
// has the event actually changed?
intval($arr['id']),
intval($arr['uid'])
);
- if((! count($r)) || ($r[0]['edited'] === $arr['edited'])) {
+ if ((! dbm::is_result($r)) || ($r[0]['edited'] === $arr['edited'])) {
// Nothing has changed. Grab the item id to return.
intval($arr['id']),
intval($arr['uid'])
);
- return((count($r)) ? $r[0]['id'] : 0);
+ return((dbm::is_result($r)) ? $r[0]['id'] : 0);
}
// The event changed. Update it.
intval($arr['id']),
intval($arr['uid'])
);
- if(count($r)) {
+ if (dbm::is_result($r)) {
$object = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($arr['uri']) . '</id>';
$object .= '<content>' . xmlify(format_event_bbcode($arr)) . '</content>';
$object .= '</object>' . "\n";
call_hooks("event_updated", $arr['id']);
return $item_id;
- }
- else {
+ } else {
// New event. Store it.
- $r = q("INSERT INTO `event` ( `uid`,`cid`,`uri`,`created`,`edited`,`start`,`finish`,`summary`, `desc`,`location`,`type`,
+ $r = q("INSERT INTO `event` (`uid`,`cid`,`guid`,`uri`,`created`,`edited`,`start`,`finish`,`summary`, `desc`,`location`,`type`,
`adjust`,`nofinish`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`)
- VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ",
+ VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', '%s' ) ",
intval($arr['uid']),
intval($arr['cid']),
+ dbesc($arr['guid']),
dbesc($arr['uri']),
dbesc($arr['created']),
dbesc($arr['edited']),
dbesc($arr['uri']),
intval($arr['uid'])
);
- if(count($r))
+ if (dbm::is_result($r))
$event = $r[0];
$item_arr = array();
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
intval($arr['uid'])
);
- //if(count($r))
- // $plink = $a->get_baseurl() . '/display/' . $r[0]['nickname'] . '/' . $item_id;
+ //if (dbm::is_result($r))
+ // $plink = App::get_baseurl() . '/display/' . $r[0]['nickname'] . '/' . $item_id;
- if($item_id) {
+ if ($item_id) {
//q("UPDATE `item` SET `plink` = '%s', `event-id` = %d WHERE `uid` = %d AND `id` = %d",
// dbesc($plink),
// intval($event['id']),
return $i18n;
}
+/// @todo We should replace this with a separate update function if there is some time left
+/**
+ * @brief Removes duplicated birthday events
+ *
+ * @param array $dates Array of possibly duplicated events
+ * @return array Cleaned events
+ */
+function event_remove_duplicates($dates) {
+ $dates2 = array();
+
+ foreach ($dates AS $date) {
+ if ($date['type'] == 'birthday') {
+ $dates2[$date['uid']."-".$date['cid']."-".$date['start']] = $date;
+ } else {
+ $dates2[] = $date;
+ }
+ }
+ return $dates2;
+}
+
/**
* @brief Get an event by its event ID
- *
+ *
* @param type $owner_uid The User ID of the owner of the event
* @param type $event_params An assoziative array with
* int 'event_id' => The ID of the event in the event table
*/
function event_by_id($owner_uid = 0, $event_params, $sql_extra = '') {
// ownly allow events if there is a valid owner_id
- if($owner_uid == 0)
+ if ($owner_uid == 0)
return;
// query for the event by event id
$r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`,
`item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event`
- STRAIGHT_JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid`
+ LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid`
WHERE `event`.`uid` = %d AND `event`.`id` = %d $sql_extra",
intval($owner_uid),
intval($event_params["event_id"])
);
- if(count($r))
- return $r;
-
+ if (dbm::is_result($r)) {
+ return event_remove_duplicates($r);
+ }
}
/**
* @brief Get all events in a specific timeframe
- *
+ *
* @param int $owner_uid The User ID of the owner of the events
* @param array $event_params An assoziative array with
- * int 'ignored' =>
+ * int 'ignored' =>
* string 'start' => Start time of the timeframe
* string 'finish' => Finish time of the timeframe
- * string 'adjust_start' =>
* string 'adjust_start' =>
- *
+ * string 'adjust_start' =>
+ *
* @param string $sql_extra Additional sql conditions (e.g. permission request)
* @return array Query results
*/
function events_by_date($owner_uid = 0, $event_params, $sql_extra = '') {
// ownly allow events if there is a valid owner_id
- if($owner_uid == 0)
+ if ($owner_uid == 0)
return;
// query for the event by date
$r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`,
`item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event`
- STRAIGHT_JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid`
+ LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` AND `item`.`uid` = `event`.`uid`
WHERE `event`.`uid` = %d AND event.ignore = %d
AND ((`adjust` = 0 AND (`finish` >= '%s' OR (nofinish AND start >= '%s')) AND `start` <= '%s')
OR (`adjust` = 1 AND (`finish` >= '%s' OR (nofinish AND start >= '%s')) AND `start` <= '%s'))
dbesc($event_params["adjust_finish"])
);
- if(count($r))
- return $r;
+ if (dbm::is_result($r)) {
+ return event_remove_duplicates($r);
+ }
}
/**
* @brief Convert an array query results in an arry which could be used by the events template
- *
+ *
* @param array $arr Event query array
* @return array Event array for the template
*/
-function process_events ($arr) {
+function process_events($arr) {
$events=array();
$last_date = '';
$fmt = t('l, F j');
if (count($arr)) {
- foreach($arr as $rr) {
+ foreach ($arr as $rr) {
$j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'j') : datetime_convert('UTC','UTC',$rr['start'],'j'));
$d = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], $fmt) : datetime_convert('UTC','UTC',$rr['start'],$fmt));
$last_date = $d;
$edit = ((! $rr['cid']) ? array(App::get_baseurl().'/events/event/'.$rr['id'],t('Edit event'),'','') : null);
$title = strip_tags(html_entity_decode(bbcode($rr['summary']),ENT_QUOTES,'UTF-8'));
- if(! $title) {
+ if (! $title) {
list($title, $_trash) = explode("<br",bbcode($rr['desc']),2);
$title = strip_tags(html_entity_decode($title,ENT_QUOTES,'UTF-8'));
}
/**
* @brief Format event to export format (ical/csv)
- *
+ *
* @param array $events Query result for events
* @param string $format The output format (ical/csv)
* @param string $timezone The timezone of the user (not implemented yet)
- *
+ *
* @return string Content according to selected export format
*/
function event_format_export ($events, $format = 'ical', $timezone) {
- if(! ((is_array($events)) && count($events)))
+ if (! ((is_array($events)) && count($events)))
return;
switch ($format) {
$o = '"Subject", "Start Date", "Start Time", "Description", "End Date", "End Time", "Location"' . PHP_EOL;
foreach ($events as $event) {
- /// @todo the time / date entries don't include any information about the
+ /// @todo the time / date entries don't include any information about the
// timezone the event is scheduled in :-/
$tmp1 = strtotime($event['start']);
$tmp2 = strtotime($event['finish']);
$o .= '"'.$event['summary'].'", "'.strftime($date_format, $tmp1) .
'", "'.strftime($time_format, $tmp1).'", "'.$event['desc'] .
'", "'.strftime($date_format, $tmp2) .
- '", "'.strftime($time_format, $tmp2) .
+ '", "'.strftime($time_format, $tmp2) .
'", "'.$event['location'].'"' . PHP_EOL;
}
break;
foreach ($events as $event) {
if ($event['adjust'] == 1) {
$UTC = 'Z';
- } else {
+ } else {
$UTC = '';
}
$o .= 'BEGIN:VEVENT' . PHP_EOL;
/**
* @brief Get all events for a user ID
- *
+ *
* The query for events is done permission sensitive
* If the user is the owner of the calendar he/she
* will get all of his/her available events.
* If the user is only a visitor only the public events will
* be available
- *
+ *
* @param int $uid The user ID
* @param int $sql_extra Additional sql conditions for permission
- *
+ *
* @return array Query results
*/
function events_by_uid($uid = 0, $sql_extra = '') {
- if($uid == 0)
+ if ($uid == 0) {
return;
+ }
// The permission condition if no condition was transmitted
- if($sql_extra == '')
+ if ($sql_extra == '') {
$sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' ";
+ }
- // does the user who requests happen to be the owner of the events
- // requested? then show all of your events, otherwise only those that
+ // does the user who requests happen to be the owner of the events
+ // requested? then show all of your events, otherwise only those that
// don't have limitations set in allow_cid and allow_gid
if (local_user() == $uid) {
$r = q("SELECT `start`, `finish`, `adjust`, `summary`, `desc`, `location`, `nofinish`
);
}
- if(count($r))
+ if (dbm::is_result($r)) {
return $r;
+ }
}
/**
- *
+ *
* @param int $uid The user ID
* @param string $format Output format (ical/csv)
* @return array With the results
* string 'format' => The output format
* string 'extension' => The file extension of the output format
* string 'content' => The formatted output content
- *
+ *
* @todo Respect authenticated users with events_by_uid()
*/
function event_export($uid, $format = 'ical') {
// we are allowed to show events
// get the timezone the user is in
$r = q("SELECT `timezone` FROM `user` WHERE `uid` = %d LIMIT 1", intval($uid));
- if (count($r))
+ if (dbm::is_result($r)) {
$timezone = $r[0]['timezone'];
+ }
// get all events which are owned by a uid (respects permissions);
$events = events_by_uid($uid);
// we have the events that are available for the requestor
// now format the output according to the requested format
- if(count($events))
+ if (count($events)) {
$res = event_format_export($events, $format, $timezone);
+ }
// If there are results the precess was successfull
- if(x($res))
+ if (x($res)) {
$process = true;
+ }
// get the file extension for the format
switch ($format) {
/**
* @brief Get the events widget
- *
+ *
* @return string Formated html of the evens widget
*/
function widget_events() {
// The permission testing is a little bit tricky because we have to respect many cases
// It's not the private events page (we don't get the $owner_uid for /events)
- if(! local_user() && ! $owner_uid)
+ if (! local_user() && ! $owner_uid) {
return;
+ }
// Cal logged in user (test permission at foreign profile page)
// If the $owner uid is available we know it is part of one of the profile pages (like /cal)
- // So we have to test if if it's the own profile page of the logged in user
+ // So we have to test if if it's the own profile page of the logged in user
// or a foreign one. For foreign profile pages we need to check if the feature
// for exporting the cal is enabled (otherwise the widget would appear for logged in users
// on foreigen profile pages even if the widget is disabled)
- if(intval($owner_uid) && local_user() !== $owner_uid && ! feature_enabled($owner_uid, "export_calendar"))
+ if (intval($owner_uid) && local_user() !== $owner_uid && ! feature_enabled($owner_uid, "export_calendar")) {
return;
+ }
// If it's a kind of profile page (intval($owner_uid)) return if the user not logged in and
// export feature isn't enabled
- if(intval($owner_uid) && ! local_user() && ! feature_enabled($owner_uid, "export_calendar"))
+ if (intval($owner_uid) && ! local_user() && ! feature_enabled($owner_uid, "export_calendar")) {
return;
+ }
return replace_macros(get_markup_template("events_aside.tpl"), array(
'$etitle' => t("Export"),