diff --git a/boot.php b/boot.php index 888fb7920d..b726b79a8d 100644 --- a/boot.php +++ b/boot.php @@ -6,7 +6,7 @@ ini_set('pcre.backtrack_limit', 250000); define ( 'FRIENDIKA_VERSION', '2.2.1017' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1064 ); +define ( 'DB_UPDATE_VERSION', 1065 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); @@ -128,6 +128,8 @@ define ( 'NAMESPACE_OSTATUSSUB', 'http://ostatus.org/schema/1.0/subscribe' define ( 'NAMESPACE_GEORSS', 'http://www.georss.org/georss' ); define ( 'NAMESPACE_POCO', 'http://portablecontacts.net/spec/1.0' ); define ( 'NAMESPACE_FEED', 'http://schemas.google.com/g/2010#updates-from' ); +define ( 'NAMESPACE_OSTATUS', 'http://ostatus.org/schema/1.0' ); +define ( 'NAMESPACE_STATUSNET', 'http://status.net/schema/api/1/' ); /** * activity stream defines diff --git a/database.sql b/database.sql index 54e5f39831..e248b6b3d5 100644 --- a/database.sql +++ b/database.sql @@ -179,6 +179,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `author-avatar` char(255) NOT NULL, `title` char(255) NOT NULL, `body` mediumtext NOT NULL, + `app` char(255) NOT NULL, `verb` char(255) NOT NULL, `object-type` char(255) NOT NULL, `object` text NOT NULL, diff --git a/include/api.php b/include/api.php index 2d90071267..cab1431d3d 100644 --- a/include/api.php +++ b/include/api.php @@ -315,7 +315,7 @@ api_register_func('api/account/verify_credentials','api_account_verify_credentials', true); - // TODO - media uploads and alternate 'source' + // TODO - media uploads function api_statuses_update(&$a, $type) { if (local_user()===false) return false; @@ -379,7 +379,7 @@ 'created_at' => api_date($lastwall['created']), 'id' => $lastwall['contact-id'], 'text' => strip_tags(bbcode($lastwall['body'])), - 'source' => 'web', + 'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'), 'truncated' => false, 'in_reply_to_status_id' => $in_reply_to_status_id, 'in_reply_to_user_id' => $in_reply_to_user_id, @@ -436,7 +436,7 @@ 'created_at' => api_date($lastwall['created']), 'id' => $lastwall['contact-id'], 'text' => strip_tags(bbcode($lastwall['body'])), - 'source' => 'web', + 'source' => (($lastwall['app']) ? $lastwall['app'] : 'web'), 'truncated' => false, 'in_reply_to_status_id' => $in_reply_to_status_id, 'in_reply_to_user_id' => $in_reply_to_user_id, @@ -492,7 +492,7 @@ 'id' => $item['id'], 'text' => strip_tags(bbcode($item['body'])), 'html' => bbcode($item['body']), - 'source' => 'web', + 'source' => (($item['app']) ? $item['app'] : 'web'), 'url' => ($item['plink']!=''?$item['plink']:$item['author-link']), 'truncated' => False, 'in_reply_to_status_id' => ($item['parent']!=$item['id']?$item['parent']:''), diff --git a/include/conversation.php b/include/conversation.php index b536fed5fd..1fd9c31eca 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -191,7 +191,7 @@ function conversation(&$a, $items, $mode, $update) { '$thumb' => $profile_avatar, '$title' => $item['title'], '$body' => $body, - '$ago' => relative_date($item['created']), + '$ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), '$location' => $location, '$indent' => '', '$owner_url' => $owner_url, @@ -464,7 +464,7 @@ function conversation(&$a, $items, $mode, $update) { '$sparkle' => $sparkle, '$title' => $item['title'], '$body' => $body, - '$ago' => relative_date($item['created']), + '$ago' => (($item['app']) ? sprintf( t('%s from %s'),relative_date($item['created']),$item['app']) : relative_date($item['created'])), '$lock' => $lock, '$location' => $location, '$indent' => $indent, diff --git a/include/items.php b/include/items.php index a003b84bb2..5bcdaef998 100644 --- a/include/items.php +++ b/include/items.php @@ -336,6 +336,12 @@ function get_atom_elements($feed,$item) { } } + $apps = $item->get_item_tags(NAMESPACE_STATUSNET,'notice_info'); + if($apps && $apps[0]['attribs']['']['source']) { + $res['app'] = $apps[0]['attribs']['']['source']; + if($res['app'] === 'web') + $res['app'] = 'OStatus'; + } /** * If there's a copy of the body content which is guaranteed to have survived mangling in transit, use it. @@ -685,6 +691,7 @@ function item_store($arr,$force_parent = false) { $arr['body'] = ((x($arr,'body')) ? trim($arr['body']) : ''); $arr['tag'] = ((x($arr,'tag')) ? notags(trim($arr['tag'])) : ''); $arr['attach'] = ((x($arr,'attach')) ? notags(trim($arr['attach'])) : ''); + $arr['app'] = ((x($arr,'app')) ? notags(trim($arr['app'])) : ''); if($arr['parent-uri'] === $arr['uri']) { $parent_id = 0; @@ -1620,7 +1627,8 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { if($item['extid']) $o .= '' . $item['extid'] . '' . "\r\n"; - + if($item['app']) + $o .= ''; $verb = construct_verb($item); $o .= '' . xmlify($verb) . '' . "\r\n"; $actobj = construct_activity_object($item); diff --git a/include/salmon.php b/include/salmon.php index d7060b0f7a..74da98c93c 100644 --- a/include/salmon.php +++ b/include/salmon.php @@ -129,7 +129,8 @@ $namespaces = <<< EOT xmlns:as="http://activitystrea.ms/spec/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:poco="http://portablecontacts.net/spec/1.0" - xmlns:ostatus="http://ostatus.org/schema/1.0" > + xmlns:ostatus="http://ostatus.org/schema/1.0" + xmlns:statusnet="http://status.net/schema/api/1/" > > EOT; $slap = str_replace('',$namespaces,$slap); diff --git a/mod/item.php b/mod/item.php index e8714f955f..84fe237b3d 100644 --- a/mod/item.php +++ b/mod/item.php @@ -61,6 +61,7 @@ function item_post(&$a) { $profile_uid = ((x($_POST,'profile_uid')) ? intval($_POST['profile_uid']) : 0); $post_id = ((x($_POST['post_id'])) ? intval($_POST['post_id']) : 0); + $app = ((x($_POST['source'])) ? notags($_POST['source']) : ''); if(! can_write_wall($a,$profile_uid)) { notice( t('Permission denied.') . EOL) ; @@ -102,6 +103,7 @@ function item_post(&$a) { $coord = $orig_post['coord']; $verb = $orig_post['verb']; $emailcc = $orig_post['emailcc']; + $app = $orig_post['app']; $body = escape_tags(trim($_POST['body'])); $private = $orig_post['private']; @@ -421,6 +423,7 @@ function item_post(&$a) { $datarray['uri'] = $uri; $datarray['title'] = $title; $datarray['body'] = $body; + $datarray['app'] = $app; $datarray['location'] = $location; $datarray['coord'] = $coord; $datarray['tag'] = $str_tags; @@ -469,9 +472,9 @@ function item_post(&$a) { $r = q("INSERT INTO `item` (`uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, - `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `changed`, `uri`, `title`, `body`, `location`, `coord`, + `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `changed`, `uri`, `title`, `body`, `app`, `location`, `coord`, `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach` ) - VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", + VALUES( %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s' )", intval($datarray['uid']), dbesc($datarray['type']), intval($datarray['wall']), @@ -489,6 +492,7 @@ function item_post(&$a) { dbesc($datarray['uri']), dbesc($datarray['title']), dbesc($datarray['body']), + dbesc($datarray['app']), dbesc($datarray['location']), dbesc($datarray['coord']), dbesc($datarray['tag']), diff --git a/update.php b/update.php index 541a12ef56..5953956732 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ + xmlns:ostatus="http://ostatus.org/schema/1.0" + xmlns:statusnet="http://status.net/schema/api/1/" > $feed_id $feed_title