Merge pull request #2729 from gerhard6380/develop
new API calls for private messages in Win10 App
This commit is contained in:
commit
dfac110887
2 changed files with 253 additions and 14 deletions
64
doc/api.md
64
doc/api.md
|
@ -104,6 +104,7 @@ Unofficial Twitter command. It shows all direct answers (excluding the original
|
||||||
* max_id: maximum id
|
* max_id: maximum id
|
||||||
* getText: Defines the format of the status field. Can be "html" or "plain"
|
* getText: Defines the format of the status field. Can be "html" or "plain"
|
||||||
* include_entities: "true" shows entities for pictures and links (Default: false)
|
* include_entities: "true" shows entities for pictures and links (Default: false)
|
||||||
|
* friendica_verbose: "true" enables different error returns (default: "false")
|
||||||
|
|
||||||
#### Unsupported parameters
|
#### Unsupported parameters
|
||||||
* skip_status
|
* skip_status
|
||||||
|
@ -116,6 +117,7 @@ Unofficial Twitter command. It shows all direct answers (excluding the original
|
||||||
* since_id: minimal id
|
* since_id: minimal id
|
||||||
* max_id: maximum id
|
* max_id: maximum id
|
||||||
* getText: Defines the format of the status field. Can be "html" or "plain"
|
* getText: Defines the format of the status field. Can be "html" or "plain"
|
||||||
|
* friendica_verbose: "true" enables different error returns (default: "false")
|
||||||
|
|
||||||
---
|
---
|
||||||
### direct_messages/conversation (*; AUTH)
|
### direct_messages/conversation (*; AUTH)
|
||||||
|
@ -127,6 +129,18 @@ Shows all direct messages of a conversation
|
||||||
* max_id: maximum id
|
* max_id: maximum id
|
||||||
* getText: Defines the format of the status field. Can be "html" or "plain"
|
* getText: Defines the format of the status field. Can be "html" or "plain"
|
||||||
* uri: URI of the conversation
|
* uri: URI of the conversation
|
||||||
|
* friendica_verbose: "true" enables different error returns (default: "false")
|
||||||
|
|
||||||
|
---
|
||||||
|
### direct_messages/sent (*; AUTH)
|
||||||
|
#### Parameters
|
||||||
|
* count: Items per page (default: 20)
|
||||||
|
* page: page number
|
||||||
|
* since_id: minimal id
|
||||||
|
* max_id: maximum id
|
||||||
|
* getText: Defines the format of the status field. Can be "html" or "plain"
|
||||||
|
* include_entities: "true" shows entities for pictures and links (Default: false)
|
||||||
|
* friendica_verbose: "true" enables different error returns (default: "false")
|
||||||
|
|
||||||
---
|
---
|
||||||
### direct_messages/new (POST,PUT; AUTH)
|
### direct_messages/new (POST,PUT; AUTH)
|
||||||
|
@ -138,14 +152,22 @@ Shows all direct messages of a conversation
|
||||||
* title: Title of the direct message
|
* title: Title of the direct message
|
||||||
|
|
||||||
---
|
---
|
||||||
### direct_messages/sent (*; AUTH)
|
### direct_messages/destroy (POST,DELETE; AUTH)
|
||||||
#### Parameters
|
#### Parameters
|
||||||
* count: Items per page (default: 20)
|
* id: id of the message to be deleted
|
||||||
* page: page number
|
* include_entities: optional, currently not yet implemented
|
||||||
* since_id: minimal id
|
* friendica_parenturi: optional, can be used for increased safety to delete only intended messages
|
||||||
* max_id: maximum id
|
* friendica_verbose: "true" enables different error returns (default: "false")
|
||||||
* getText: Defines the format of the status field. Can be "html" or "plain"
|
|
||||||
* include_entities: "true" shows entities for pictures and links (Default: false)
|
#### Return values
|
||||||
|
|
||||||
|
On success:
|
||||||
|
* JSON return as defined for Twitter API not yet implemented
|
||||||
|
* on friendica_verbose=true: JSON return {"result":"ok","message":"message deleted"}
|
||||||
|
|
||||||
|
On error:
|
||||||
|
HTTP 400 BadRequest
|
||||||
|
* on friendica_verbose=true: different JSON returns {"result":"error","message":"xyz"}
|
||||||
|
|
||||||
---
|
---
|
||||||
### favorites (*; AUTH)
|
### favorites (*; AUTH)
|
||||||
|
@ -694,6 +716,33 @@ xml
|
||||||
</photos>
|
</photos>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
### friendica/direct_messages_setseen (GET; AUTH)
|
||||||
|
#### Parameters
|
||||||
|
* id: id of the message to be updated as seen
|
||||||
|
|
||||||
|
#### Return values
|
||||||
|
|
||||||
|
On success:
|
||||||
|
* JSON return {"result":"ok","message":"message set to seen"}
|
||||||
|
|
||||||
|
On error:
|
||||||
|
* different JSON returns {"result":"error","message":"xyz"}
|
||||||
|
|
||||||
|
---
|
||||||
|
### friendica/direct_messages_search (GET; AUTH)
|
||||||
|
#### Parameters
|
||||||
|
* searchstring: string for which the API call should search as '%searchstring%' in field 'body' of all messages of the authenticated user (caption ignored)
|
||||||
|
|
||||||
|
#### Return values
|
||||||
|
Returns only tested with JSON, XML might work as well.
|
||||||
|
|
||||||
|
On success:
|
||||||
|
* JSON return {"success":"true","search_results": array of found messages}
|
||||||
|
* JSOn return {"success":"false","search_results":"nothing found"}
|
||||||
|
|
||||||
|
On error:
|
||||||
|
* different JSON returns {"result":"error","message":"searchstring not specified"}
|
||||||
|
|
||||||
---
|
---
|
||||||
## Not Implemented API calls
|
## Not Implemented API calls
|
||||||
|
@ -718,7 +767,6 @@ The following API calls from the Twitter API aren't implemented neither in Frien
|
||||||
* statuses/lookup
|
* statuses/lookup
|
||||||
* direct_messages/show
|
* direct_messages/show
|
||||||
* search/tweets
|
* search/tweets
|
||||||
* direct_messages/destroy
|
|
||||||
* friendships/no_retweets/ids
|
* friendships/no_retweets/ids
|
||||||
* friendships/incoming
|
* friendships/incoming
|
||||||
* friendships/outgoing
|
* friendships/outgoing
|
||||||
|
|
203
include/api.php
203
include/api.php
|
@ -2049,6 +2049,9 @@
|
||||||
'recipient_screen_name' => $recipient['screen_name'],
|
'recipient_screen_name' => $recipient['screen_name'],
|
||||||
'sender' => $sender,
|
'sender' => $sender,
|
||||||
'recipient' => $recipient,
|
'recipient' => $recipient,
|
||||||
|
'title' => "",
|
||||||
|
'friendica_seen' => $item['seen'],
|
||||||
|
'friendica_parent_uri' => $item['parent-uri'],
|
||||||
);
|
);
|
||||||
|
|
||||||
// "uid" and "self" are only needed for some internal stuff, so remove it from here
|
// "uid" and "self" are only needed for some internal stuff, so remove it from here
|
||||||
|
@ -2805,7 +2808,80 @@
|
||||||
}
|
}
|
||||||
api_register_func('api/direct_messages/new','api_direct_messages_new',true, API_METHOD_POST);
|
api_register_func('api/direct_messages/new','api_direct_messages_new',true, API_METHOD_POST);
|
||||||
|
|
||||||
function api_direct_messages_box($type, $box) {
|
|
||||||
|
/**
|
||||||
|
* @brief delete a direct_message from mail table through api
|
||||||
|
*
|
||||||
|
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function api_direct_messages_destroy($type){
|
||||||
|
$a = get_app();
|
||||||
|
|
||||||
|
if (api_user()===false) throw new ForbiddenException();
|
||||||
|
|
||||||
|
// params
|
||||||
|
$user_info = api_get_user($a);
|
||||||
|
//required
|
||||||
|
$id = (x($_REQUEST,'id') ? $_REQUEST['id'] : 0);
|
||||||
|
// optional
|
||||||
|
$parenturi = (x($_REQUEST, 'friendica_parenturi') ? $_REQUEST['friendica_parenturi'] : "");
|
||||||
|
$verbose = (x($_GET,'friendica_verbose')?strtolower($_GET['friendica_verbose']):"false");
|
||||||
|
/// @todo optional parameter 'include_entities' from Twitter API not yet implemented
|
||||||
|
|
||||||
|
$uid = $user_info['uid'];
|
||||||
|
// error if no id or parenturi specified (for clients posting parent-uri as well)
|
||||||
|
if ($verbose == "true") {
|
||||||
|
if ($id == 0 || $parenturi == "") {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'message id or parenturi not specified');
|
||||||
|
return api_format_data("direct_messages_delete", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BadRequestException if no id specified (for clients using Twitter API)
|
||||||
|
if ($id == 0) throw new BadRequestException('Message id not specified');
|
||||||
|
|
||||||
|
// add parent-uri to sql command if specified by calling app
|
||||||
|
$sql_extra = ($parenturi != "" ? " AND `parent-uri` = '" . dbesc($parenturi) . "'" : "");
|
||||||
|
|
||||||
|
// get data of the specified message id
|
||||||
|
$r = q("SELECT `id` FROM `mail` WHERE `uid` = %d AND `id` = %d" . $sql_extra,
|
||||||
|
intval($uid),
|
||||||
|
intval($id));
|
||||||
|
|
||||||
|
// error message if specified id is not in database
|
||||||
|
if (!dbm::is_result($r)) {
|
||||||
|
if ($verbose == "true") {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'message id not in database');
|
||||||
|
return api_format_data("direct_messages_delete", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
/// @todo BadRequestException ok for Twitter API clients?
|
||||||
|
throw new BadRequestException('message id not in database');
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete message
|
||||||
|
$result = q("DELETE FROM `mail` WHERE `uid` = %d AND `id` = %d" . $sql_extra,
|
||||||
|
intval($uid),
|
||||||
|
intval($id));
|
||||||
|
|
||||||
|
if ($verbose == "true") {
|
||||||
|
if ($result) {
|
||||||
|
// return success
|
||||||
|
$answer = array('result' => 'ok', 'message' => 'message deleted');
|
||||||
|
return api_format_data("direct_message_delete", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'unknown error');
|
||||||
|
return api_format_data("direct_messages_delete", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// @todo return JSON data like Twitter API not yet implemented
|
||||||
|
|
||||||
|
}
|
||||||
|
api_register_func('api/direct_messages/destroy', 'api_direct_messages_destroy', true, API_METHOD_DELETE);
|
||||||
|
|
||||||
|
|
||||||
|
function api_direct_messages_box($type, $box, $verbose) {
|
||||||
|
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
|
@ -2865,7 +2941,13 @@
|
||||||
intval($since_id),
|
intval($since_id),
|
||||||
intval($start), intval($count)
|
intval($start), intval($count)
|
||||||
);
|
);
|
||||||
|
if ($verbose == "true") {
|
||||||
|
// stop execution and return error message if no mails available
|
||||||
|
if($r == null) {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'no mails available');
|
||||||
|
return api_format_data("direct_messages_all", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$ret = Array();
|
$ret = Array();
|
||||||
foreach($r as $item) {
|
foreach($r as $item) {
|
||||||
|
@ -2894,16 +2976,20 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function api_direct_messages_sentbox($type){
|
function api_direct_messages_sentbox($type){
|
||||||
return api_direct_messages_box($type, "sentbox");
|
$verbose = (x($_GET,'friendica_verbose')?strtolower($_GET['friendica_verbose']):"false");
|
||||||
|
return api_direct_messages_box($type, "sentbox", $verbose);
|
||||||
}
|
}
|
||||||
function api_direct_messages_inbox($type){
|
function api_direct_messages_inbox($type){
|
||||||
return api_direct_messages_box($type, "inbox");
|
$verbose = (x($_GET,'friendica_verbose')?strtolower($_GET['friendica_verbose']):"false");
|
||||||
|
return api_direct_messages_box($type, "inbox", $verbose);
|
||||||
}
|
}
|
||||||
function api_direct_messages_all($type){
|
function api_direct_messages_all($type){
|
||||||
return api_direct_messages_box($type, "all");
|
$verbose = (x($_GET,'friendica_verbose')?strtolower($_GET['friendica_verbose']):"false");
|
||||||
|
return api_direct_messages_box($type, "all", $verbose);
|
||||||
}
|
}
|
||||||
function api_direct_messages_conversation($type){
|
function api_direct_messages_conversation($type){
|
||||||
return api_direct_messages_box($type, "conversation");
|
$verbose = (x($_GET,'friendica_verbose')?strtolower($_GET['friendica_verbose']):"false");
|
||||||
|
return api_direct_messages_box($type, "conversation", $verbose);
|
||||||
}
|
}
|
||||||
api_register_func('api/direct_messages/conversation','api_direct_messages_conversation',true);
|
api_register_func('api/direct_messages/conversation','api_direct_messages_conversation',true);
|
||||||
api_register_func('api/direct_messages/all','api_direct_messages_all',true);
|
api_register_func('api/direct_messages/all','api_direct_messages_all',true);
|
||||||
|
@ -3664,6 +3750,111 @@
|
||||||
api_register_func('api/friendica/notification', 'api_friendica_notification', true, API_METHOD_GET);
|
api_register_func('api/friendica/notification', 'api_friendica_notification', true, API_METHOD_GET);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief update a direct_message to seen state
|
||||||
|
*
|
||||||
|
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
|
||||||
|
* @return string (success result=ok, error result=error with error message)
|
||||||
|
*/
|
||||||
|
function api_friendica_direct_messages_setseen($type){
|
||||||
|
$a = get_app();
|
||||||
|
if (api_user()===false) throw new ForbiddenException();
|
||||||
|
|
||||||
|
// params
|
||||||
|
$user_info = api_get_user($a);
|
||||||
|
$uid = $user_info['uid'];
|
||||||
|
$id = (x($_REQUEST, 'id') ? $_REQUEST['id'] : 0);
|
||||||
|
|
||||||
|
// return error if id is zero
|
||||||
|
if ($id == "") {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'message id not specified');
|
||||||
|
return api_format_data("direct_messages_setseen", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
|
||||||
|
// get data of the specified message id
|
||||||
|
$r = q("SELECT `id` FROM `mail` WHERE `id` = %d AND `uid` = %d",
|
||||||
|
intval($id),
|
||||||
|
intval($uid));
|
||||||
|
// error message if specified id is not in database
|
||||||
|
if (!dbm::is_result($r)) {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'message id not in database');
|
||||||
|
return api_format_data("direct_messages_setseen", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
|
||||||
|
// update seen indicator
|
||||||
|
$result = q("UPDATE `mail` SET `seen` = 1 WHERE `id` = %d AND `uid` = %d",
|
||||||
|
intval($id),
|
||||||
|
intval($uid));
|
||||||
|
|
||||||
|
if ($result) {
|
||||||
|
// return success
|
||||||
|
$answer = array('result' => 'ok', 'message' => 'message set to seen');
|
||||||
|
return api_format_data("direct_message_setseen", $type, array('$result' => $answer));
|
||||||
|
} else {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'unknown error');
|
||||||
|
return api_format_data("direct_messages_setseen", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
api_register_func('api/friendica/direct_messages_setseen', 'api_friendica_direct_messages_setseen', true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief search for direct_messages containing a searchstring through api
|
||||||
|
*
|
||||||
|
* @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
|
||||||
|
* @return string (success: success=true if found and search_result contains found messages
|
||||||
|
* success=false if nothing was found, search_result='nothing found',
|
||||||
|
* error: result=error with error message)
|
||||||
|
*/
|
||||||
|
function api_friendica_direct_messages_search($type){
|
||||||
|
$a = get_app();
|
||||||
|
|
||||||
|
if (api_user()===false) throw new ForbiddenException();
|
||||||
|
|
||||||
|
// params
|
||||||
|
$user_info = api_get_user($a);
|
||||||
|
$searchstring = (x($_REQUEST,'searchstring') ? $_REQUEST['searchstring'] : "");
|
||||||
|
$uid = $user_info['uid'];
|
||||||
|
|
||||||
|
// error if no searchstring specified
|
||||||
|
if ($searchstring == "") {
|
||||||
|
$answer = array('result' => 'error', 'message' => 'searchstring not specified');
|
||||||
|
return api_format_data("direct_messages_search", $type, array('$result' => $answer));
|
||||||
|
}
|
||||||
|
|
||||||
|
// get data for the specified searchstring
|
||||||
|
$r = q("SELECT `mail`.*, `contact`.`nurl` AS `contact-url` FROM `mail`,`contact` WHERE `mail`.`contact-id` = `contact`.`id` AND `mail`.`uid`=%d AND `body` LIKE '%s' ORDER BY `mail`.`id` DESC",
|
||||||
|
intval($uid),
|
||||||
|
dbesc('%'.$searchstring.'%')
|
||||||
|
);
|
||||||
|
|
||||||
|
$profile_url = $user_info["url"];
|
||||||
|
// message if nothing was found
|
||||||
|
if (count($r) == 0)
|
||||||
|
$success = array('success' => false, 'search_results' => 'nothing found');
|
||||||
|
else {
|
||||||
|
$ret = Array();
|
||||||
|
foreach($r as $item) {
|
||||||
|
if ($box == "inbox" || $item['from-url'] != $profile_url){
|
||||||
|
$recipient = $user_info;
|
||||||
|
$sender = api_get_user($a,normalise_link($item['contact-url']));
|
||||||
|
}
|
||||||
|
elseif ($box == "sentbox" || $item['from-url'] == $profile_url){
|
||||||
|
$recipient = api_get_user($a,normalise_link($item['contact-url']));
|
||||||
|
$sender = $user_info;
|
||||||
|
}
|
||||||
|
$ret[]=api_format_messages($item, $recipient, $sender);
|
||||||
|
}
|
||||||
|
$success = array('success' => true, 'search_results' => $ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
return api_format_data("direct_message_search", $type, array('$result' => $success));
|
||||||
|
}
|
||||||
|
api_register_func('api/friendica/direct_messages_search', 'api_friendica_direct_messages_search', true);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
To.Do:
|
To.Do:
|
||||||
[pagename] => api/1.1/statuses/lookup.json
|
[pagename] => api/1.1/statuses/lookup.json
|
||||||
|
|
Loading…
Reference in a new issue