X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdiaspora.php;h=fbfc497b59e383940382bdf0e9ea3aaa44d0c652;hb=8d195dc4992ff1e1d083ef0777c24ee897e63875;hp=1e31bae8e5d155ccb69e0800d0c5a5983a851160;hpb=5222bd22645d782fb1ae0cc161879e7c1edf938e;p=friendica.git diff --git a/include/diaspora.php b/include/diaspora.php index 1e31bae8e5..fbfc497b59 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -1173,10 +1173,11 @@ class Diaspora { 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; + } } /** @@ -2949,7 +2950,7 @@ class Diaspora { */ 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(); } @@ -2965,22 +2966,37 @@ class Diaspora { $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'])); @@ -3083,6 +3099,9 @@ class Diaspora { $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'] = ''; } } @@ -3131,7 +3150,11 @@ class Diaspora { $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"], @@ -3141,6 +3164,45 @@ class Diaspora { "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 * @@ -3151,6 +3213,13 @@ class Diaspora { */ 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"]) @@ -3175,6 +3244,9 @@ class Diaspora { 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); } @@ -3190,7 +3262,10 @@ class Diaspora { */ 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 {