private static function get_guid_from_uri($uri, $uid) {
$r = q("SELECT `guid` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($uri), intval($uid));
- if (dbm::is_result($r))
+ if (dbm::is_result($r)) {
return $r[0]["guid"];
- else
+ } else {
return false;
+ }
}
/**
*/
private static function build_event($event_id) {
- $r = q("SELECT `uid`, `start`, `finish`, `summary`, `desc`, `location`, `adjust` FROM `event` WHERE `id` = %d", intval($event_id));
+ $r = q("SELECT `guid`, `uid`, `start`, `finish`, `nofinish`, `summary`, `desc`, `location`, `adjust` FROM `event` WHERE `id` = %d", intval($event_id));
if (!dbm::is_result($r)) {
return array();
}
$user = $r[0];
- if ($event['adjust']) {
+ $r = q("SELECT `addr`, `nick` FROM `contact` WHERE `uid` = %d AND `self`", intval($event['uid']));
+ if (!dbm::is_result($r)) {
+ return array();
+ }
+
+ $owner = $r[0];
+
+ $eventdata['author'] = self::my_handle($owner);
+
+ if ($event['guid']) {
+ $eventdata['guid'] = $event['guid'];
+ }
+
+ $mask = 'Y-m-d\TH:i:s\Z';
+
+ /// @todo - establish "all day" events in Friendica
+ $eventdata["all_day"] = "false";
+
+ if (!$event['adjust']) {
$eventdata['timezone'] = $user['timezone'];
if ($eventdata['timezone'] == "") {
$eventdata['timezone'] = 'UTC';
}
- $mask = 'Y-m-d\TH:i:s\Z';
- } else {
- $mask = 'Y-m-d\TH:i:s';
}
if ($event['start']) {
- $eventdata['start'] = datetime_convert("UTC", "UTC", $event['start'], $mask);
+ $eventdata['start'] = datetime_convert($eventdata['timezone'], "UTC", $event['start'], $mask);
}
- if ($event['finish']) {
- $eventdata['end'] = datetime_convert("UTC", "UTC", $event['finish'], $mask);
+ if ($event['finish'] AND !$event['nofinish']) {
+ $eventdata['end'] = datetime_convert($eventdata['timezone'], "UTC", $event['finish'], $mask);
}
if ($event['summary']) {
$eventdata['summary'] = html_entity_decode(bb2diaspora($event['summary']));
$event = self::build_event($item['event-id']);
if (count($event)) {
$message['event'] = $event;
+
+ /// @todo Once Diaspora supports it, we will remove the body
+ // $message['raw_message'] = '';
}
}
$parent = $p[0];
$target_type = ($parent["uri"] === $parent["parent-uri"] ? "Post" : "Comment");
- $positive = "true";
+ if ($item['verb'] === ACTIVITY_LIKE) {
+ $positive = "true";
+ } elseif ($item['verb'] === ACTIVITY_DISLIKE) {
+ $positive = "false";
+ }
return(array("positive" => $positive,
"guid" => $item["guid"],
"diaspora_handle" => self::my_handle($owner)));
}
+ /**
+ * @brief Creates an "EventParticipation" object
+ *
+ * @param array $item The item that will be exported
+ * @param array $owner the array of the item owner
+ *
+ * @return array The data for an "EventParticipation"
+ */
+ private static function construct_attend($item, $owner) {
+
+ $p = q("SELECT `guid`, `uri`, `parent-uri` FROM `item` WHERE `uri` = '%s' LIMIT 1",
+ dbesc($item["thr-parent"]));
+ if (!dbm::is_result($p))
+ return false;
+
+ $parent = $p[0];
+
+ switch ($item['verb']) {
+ case ACTIVITY_ATTEND:
+ $attend_answer = 'accepted';
+ break;
+ case ACTIVITY_ATTENDNO:
+ $attend_answer = 'declined';
+ break;
+ case ACTIVITY_ATTENDMAYBE:
+ $attend_answer = 'tentative';
+ break;
+ default:
+ logger('Unknown verb '.$item['verb'].' in item '.$item['guid']);
+ return false;
+ }
+
+ return(array("author" => self::my_handle($owner),
+ "guid" => $item["guid"],
+ "parent_guid" => $parent["guid"],
+ "status" => $attend_answer,
+ "author_signature" => ""));
+ }
+
/**
* @brief Creates the object for a comment
*
*/
private static function construct_comment($item, $owner) {
+ $cachekey = "diaspora:construct_comment:".$item['guid'];
+
+ $result = Cache::get($cachekey);
+ if (!is_null($result)) {
+ return $result;
+ }
+
$p = q("SELECT `guid` FROM `item` WHERE `parent` = %d AND `id` = %d LIMIT 1",
intval($item["parent"]),
intval($item["parent"])
if ($item['thr-parent'] != $item['parent-uri']) {
$comment['thread_parent_guid'] = self::get_guid_from_uri($item['thr-parent'], $item['uid']);
}
+
+ Cache::set($cachekey, $comment, CACHE_QUARTER_HOUR);
+
return($comment);
}
*/
public static function send_followup($item,$owner,$contact,$public_batch = false) {
- if($item['verb'] === ACTIVITY_LIKE) {
+ if (in_array($item['verb'], array(ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE))) {
+ $message = self::construct_attend($item, $owner);
+ $type = "event_participation";
+ } elseif (in_array($item["verb"], array(ACTIVITY_LIKE, ACTIVITY_DISLIKE))) {
$message = self::construct_like($item, $owner);
$type = "like";
} else {