X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fapi.php;h=70022067293a556413b4939dfc079f9dc15d4835;hb=3df5c171248d1d27cd4026b6a87ac0824abb3f66;hp=35ebaef0341994589d4c51a5437ecd05ca9c71af;hpb=4528529968d0ef291c7307c534e792e1bb0013ed;p=friendica.git
diff --git a/include/api.php b/include/api.php
index 35ebaef034..7002206729 100644
--- a/include/api.php
+++ b/include/api.php
@@ -1,7 +1,30 @@
".$error."".$a->query_string."";
switch($type){
case "xml":
@@ -285,7 +309,7 @@
* Unique contact to contact url.
*/
function api_unique_id_to_url($id){
- $r = q("SELECT url FROM unique_contacts WHERE id=%d LIMIT 1",
+ $r = q("SELECT `url` FROM `unique_contacts` WHERE `id`=%d LIMIT 1",
intval($id));
if ($r)
return ($r[0]["url"]);
@@ -390,9 +414,9 @@
$r = array();
if ($url != "")
- $r = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1", $url);
+ $r = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", $url);
elseif ($nick != "")
- $r = q("SELECT * FROM unique_contacts WHERE nick='%s' LIMIT 1", $nick);
+ $r = q("SELECT * FROM `unique_contacts` WHERE `nick`='%s' LIMIT 1", $nick);
if ($r) {
// If no nick where given, extract it from the address
@@ -505,14 +529,14 @@
}
// Fetching unique id
- $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
+ $r = q("SELECT id FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
// If not there, then add it
if (count($r) == 0) {
- q("INSERT INTO unique_contacts (url, name, nick, avatar) VALUES ('%s', '%s', '%s', '%s')",
+ q("INSERT INTO `unique_contacts` (`url`, `name`, `nick`, `avatar`) VALUES ('%s', '%s', '%s', '%s')",
dbesc(normalise_link($uinfo[0]['url'])), dbesc($uinfo[0]['name']),dbesc($uinfo[0]['nick']), dbesc($uinfo[0]['micro']));
- $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
+ $r = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1", dbesc(normalise_link($uinfo[0]['url'])));
}
$network_name = network_to_name($uinfo[0]['network'], $uinfo[0]['url']);
@@ -539,7 +563,8 @@
'verified' => true,
'statusnet_blocking' => false,
'notifications' => false,
- 'statusnet_profile_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'],
+ //'statusnet_profile_url' => $a->get_baseurl()."/contacts/".$uinfo[0]['cid'],
+ 'statusnet_profile_url' => $uinfo[0]['url'],
'uid' => intval($uinfo[0]['uid']),
'cid' => intval($uinfo[0]['cid']),
'self' => $uinfo[0]['self'],
@@ -552,36 +577,44 @@
function api_item_get_user(&$a, $item) {
- $author = q("SELECT * FROM unique_contacts WHERE url='%s' LIMIT 1",
+ $author = q("SELECT * FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
dbesc(normalise_link($item['author-link'])));
if (count($author) == 0) {
- q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
- dbesc(normalise_link($item["author-link"])), dbesc($item["author-name"]), dbesc($item["author-avatar"]));
+ q("INSERT INTO `unique_contacts` (`url`, `name`, `avatar`) VALUES ('%s', '%s', '%s')",
+ dbesc(normalise_link($item["author-link"])), dbesc($item["author-name"]), dbesc($item["author-avatar"]));
- $author = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
+ $author = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
dbesc(normalise_link($item['author-link'])));
} else if ($item["author-link"].$item["author-name"] != $author[0]["url"].$author[0]["name"]) {
- q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE (`name` != '%s' OR `avatar` != '%s') AND url = '%s'",
- dbesc($item["author-name"]), dbesc($item["author-avatar"]),
- dbesc($item["author-name"]), dbesc($item["author-avatar"]),
- dbesc(normalise_link($item["author-link"])));
+ $r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'",
+ dbesc($item["author-name"]), dbesc($item["author-avatar"]),
+ dbesc(normalise_link($item["author-link"])));
+
+ if (!$r)
+ q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'",
+ dbesc($item["author-name"]), dbesc($item["author-avatar"]),
+ dbesc(normalise_link($item["author-link"])));
}
- $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
+ $owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
dbesc(normalise_link($item['owner-link'])));
if (count($owner) == 0) {
- q("INSERT INTO unique_contacts (url, name, avatar) VALUES ('%s', '%s', '%s')",
- dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"]));
+ q("INSERT INTO `unique_contacts` (`url`, `name`, `avatar`) VALUES ('%s', '%s', '%s')",
+ dbesc(normalise_link($item["owner-link"])), dbesc($item["owner-name"]), dbesc($item["owner-avatar"]));
- $owner = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
+ $owner = q("SELECT `id` FROM `unique_contacts` WHERE `url`='%s' LIMIT 1",
dbesc(normalise_link($item['owner-link'])));
} else if ($item["owner-link"].$item["owner-name"] != $owner[0]["url"].$owner[0]["name"]) {
- q("UPDATE unique_contacts SET name = '%s', avatar = '%s' WHERE (`name` != '%s' OR `avatar` != '%s') AND url = '%s'",
- dbesc($item["owner-name"]), dbesc($item["owner-avatar"]),
- dbesc($item["owner-name"]), dbesc($item["owner-avatar"]),
- dbesc(normalise_link($item["owner-link"])));
+ $r = q("SELECT `id` FROM `unique_contacts` WHERE `name` = '%s' AND `avatar` = '%s' AND url = '%s'",
+ dbesc($item["owner-name"]), dbesc($item["owner-avatar"]),
+ dbesc(normalise_link($item["owner-link"])));
+
+ if (!$r)
+ q("UPDATE `unique_contacts` SET `name` = '%s', `avatar` = '%s' WHERE `url` = '%s'",
+ dbesc($item["owner-name"]), dbesc($item["owner-avatar"]),
+ dbesc(normalise_link($item["owner-link"])));
}
// Comments in threads may appear as wall-to-wall postings.
@@ -849,7 +882,7 @@
$_REQUEST['body'] .= "\n\n".$media;
}
- // To-Do: Multiple IDs
+ /// @TODO Multiple IDs
if (requestdata('media_ids')) {
$r = q("SELECT `resource-id`, `scale`, `nickname`, `type` FROM `photo` INNER JOIN `user` ON `user`.`uid` = `photo`.`uid` WHERE `resource-id` IN (SELECT `resource-id` FROM `photo` WHERE `id` = %d) AND `scale` > 0 AND `photo`.`uid` = %d ORDER BY `photo`.`width` DESC LIMIT 1",
intval(requestdata('media_ids')), api_user());
@@ -952,7 +985,7 @@
$in_reply_to_status_id= intval($lastwall['parent']);
$in_reply_to_status_id_str = (string) intval($lastwall['parent']);
- $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author'])));
+ $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($lastwall['item-author'])));
if ($r) {
if ($r[0]['nick'] == "")
$r[0]['nick'] = api_get_nick($r[0]["url"]);
@@ -1074,7 +1107,7 @@
$in_reply_to_status_id = intval($lastwall['parent']);
$in_reply_to_status_id_str = (string) intval($lastwall['parent']);
- $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author'])));
+ $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($reply[0]['item-author'])));
if ($r) {
if ($r[0]['nick'] == "")
$r[0]['nick'] = api_get_nick($r[0]["url"]);
@@ -1135,9 +1168,9 @@
$userlist = array();
if (isset($_GET["q"])) {
- $r = q("SELECT id FROM unique_contacts WHERE name='%s'", dbesc($_GET["q"]));
+ $r = q("SELECT id FROM `unique_contacts` WHERE `name`='%s'", dbesc($_GET["q"]));
if (!count($r))
- $r = q("SELECT id FROM unique_contacts WHERE nick='%s'", dbesc($_GET["q"]));
+ $r = q("SELECT `id` FROM `unique_contacts` WHERE `nick`='%s'", dbesc($_GET["q"]));
if (count($r)) {
foreach ($r AS $user) {
@@ -1161,8 +1194,8 @@
*
* http://developer.twitter.com/doc/get/statuses/home_timeline
*
- * TODO: Optional parameters
- * TODO: Add reply info
+ * @TODO Optional parameters
+ * @TODO Add reply info
*/
function api_statuses_home_timeline(&$a, $type){
if (api_user()===false) return false;
@@ -1694,8 +1727,8 @@
function api_favorites_create_destroy(&$a, $type){
if (api_user()===false) return false;
- # for versioned api.
- # TODO: we need a better global soluton
+ // for versioned api.
+ /// @TODO We need a better global soluton
$action_argv_id=2;
if ($a->argv[1]=="1.1") $action_argv_id=3;
@@ -1982,10 +2015,8 @@
}
function api_get_entitities(&$text, $bbcode) {
- /*
- To-Do:
- * Links at the first character of the post
- */
+ /// @todo
+ /// Links at the first character of the post
$a = get_app();
@@ -2180,7 +2211,7 @@
intval(api_user()),
intval($in_reply_to_status_id));
if ($r) {
- $r = q("SELECT * FROM unique_contacts WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link'])));
+ $r = q("SELECT * FROM `unique_contacts` WHERE `url` = '%s'", dbesc(normalise_link($r[0]['author-link'])));
if ($r) {
if ($r[0]['nick'] == "")
@@ -2439,7 +2470,7 @@
$stringify_ids = (x($_REQUEST,'stringify_ids')?$_REQUEST['stringify_ids']:false);
- $r = q("SELECT unique_contacts.id FROM contact, unique_contacts WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
+ $r = q("SELECT `unique_contact`.`id` FROM contact, `unique_contacts` WHERE contact.nurl = unique_contacts.url AND `uid` = %d AND `self` = 0 AND `blocked` = 0 AND `pending` = 0 $sql_extra",
intval(api_user())
);
@@ -2840,16 +2871,28 @@ function api_share_as_retweet(&$item) {
}
function api_get_nick($profile) {
-/* To-Do:
- - remove trailing jung from profile url
- - pump.io check has to check the website
-*/
+/// @TODO Remove trailing junk from profile url
+/// @TODO pump.io check has to check the website
$nick = "";
- $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2", $profile);
- if ($friendica != $profile)
- $nick = $friendica;
+ $r = q("SELECT `nick` FROM `gcontact` WHERE `nurl` = '%s'",
+ dbesc(normalise_link($profile)));
+ if ($r)
+ $nick = $r[0]["nick"];
+
+ if (!$nick == "") {
+ $r = q("SELECT `nick` FROM `contact` WHERE `uid` = 0 AND `nurl` = '%s'",
+ dbesc(normalise_link($profile)));
+ if ($r)
+ $nick = $r[0]["nick"];
+ }
+
+ if (!$nick == "") {
+ $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2", $profile);
+ if ($friendica != $profile)
+ $nick = $friendica;
+ }
if (!$nick == "") {
$diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2", $profile);
@@ -2877,7 +2920,7 @@ function api_get_nick($profile) {
}
}
- // To-Do: look at the page if its really a pumpio site
+ /// @TODO Look at the page if its really a pumpio site
//if (!$nick == "") {
// $pumpio = preg_replace("=https?://(.*)/(.*)/=ism", "$2", $profile."/");
// if ($pumpio != $profile)
@@ -2887,7 +2930,7 @@ function api_get_nick($profile) {
//}
if ($nick != "") {
- q("UPDATE unique_contacts SET nick = '%s' WHERE `nick` != '%s' AND url = '%s'",
+ q("UPDATE `unique_contacts` SET `nick` = '%s' WHERE `nick` != '%s' AND url = '%s'",
dbesc($nick), dbesc($nick), dbesc(normalise_link($profile)));
return($nick);
}
@@ -2989,6 +3032,205 @@ function api_best_nickname(&$contacts) {
$contacts = array($contacts[0]);
}
+ // return all or a specified group of the user with the containing contacts
+ function api_friendica_group_show(&$a, $type) {
+ if (api_user()===false) return false;
+
+ // params
+ $user_info = api_get_user($a);
+ $gid = (x($_REQUEST,'gid') ? $_REQUEST['gid'] : 0);
+ $uid = $user_info['uid'];
+
+ // get data of the specified group id or all groups if not specified
+ if ($gid != 0) {
+ $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d AND `id` = %d",
+ intval($uid),
+ intval($gid));
+ // error message if specified gid is not in database
+ if (count($r) == 0)
+ die(api_error($a, $type, 'gid not available'));
+ }
+ else
+ $r = q("SELECT * FROM `group` WHERE `deleted` = 0 AND `uid` = %d",
+ intval($uid));
+
+ // loop through all groups and retrieve all members for adding data in the user array
+ foreach ($r as $rr) {
+ $members = group_get_members($rr['id']);
+ $users = array();
+ foreach ($members as $member) {
+ $user = api_get_user($a, $member['nurl']);
+ $users[] = $user;
+ }
+ $grps[] = array('name' => $rr['name'], 'gid' => $rr['id'], 'user' => $users);
+ }
+ return api_apply_template("group_show", $type, array('$groups' => $grps));
+ }
+ api_register_func('api/friendica/group_show', 'api_friendica_group_show', true);
+
+
+ // delete the specified group of the user
+ function api_friendica_group_delete(&$a, $type) {
+ if (api_user()===false) return false;
+
+ // params
+ $user_info = api_get_user($a);
+ $gid = (x($_REQUEST,'gid') ? $_REQUEST['gid'] : 0);
+ $name = (x($_REQUEST, 'name') ? $_REQUEST['name'] : "");
+ $uid = $user_info['uid'];
+
+ // error if no gid specified
+ if ($gid == 0 || $name == "")
+ die(api_error($a, $type, 'gid or name not specified'));
+
+ // get data of the specified group id
+ $r = q("SELECT * FROM `group` WHERE `uid` = %d AND `id` = %d",
+ intval($uid),
+ intval($gid));
+ // error message if specified gid is not in database
+ if (count($r) == 0)
+ die(api_error($a, $type, 'gid not available'));
+
+ // get data of the specified group id and group name
+ $rname = q("SELECT * FROM `group` WHERE `uid` = %d AND `id` = %d AND `name` = '%s'",
+ intval($uid),
+ intval($gid),
+ dbesc($name));
+ // error message if specified gid is not in database
+ if (count($rname) == 0)
+ die(api_error($a, $type, 'wrong group name'));
+
+ // delete group
+ $ret = group_rmv($uid, $name);
+ if ($ret) {
+ // return success
+ $success = array('success' => $ret, 'gid' => $gid, 'name' => $name, 'status' => 'deleted', 'wrong users' => array());
+ return api_apply_template("group_delete", $type, array('$result' => $success));
+ }
+ else
+ die(api_error($a, $type, 'other API error'));
+ }
+ api_register_func('api/friendica/group_delete', 'api_friendica_group_delete', true);
+
+
+ // create the specified group with the posted array of contacts
+ function api_friendica_group_create(&$a, $type) {
+ if (api_user()===false) return false;
+
+ // params
+ $user_info = api_get_user($a);
+ $name = (x($_REQUEST, 'name') ? $_REQUEST['name'] : "");
+ $uid = $user_info['uid'];
+ $json = json_decode($_POST['json'], true);
+ $users = $json['user'];
+
+ // error if no name specified
+ if ($name == "")
+ die(api_error($a, $type, 'group name not specified'));
+
+ // get data of the specified group name
+ $rname = q("SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' AND `deleted` = 0",
+ intval($uid),
+ dbesc($name));
+ // error message if specified group name already exists
+ if (count($rname) != 0)
+ die(api_error($a, $type, 'group name already exists'));
+
+ // check if specified group name is a deleted group
+ $rname = q("SELECT * FROM `group` WHERE `uid` = %d AND `name` = '%s' AND `deleted` = 1",
+ intval($uid),
+ dbesc($name));
+ // error message if specified group name already exists
+ if (count($rname) != 0)
+ $reactivate_group = true;
+
+ // create group
+ $ret = group_add($uid, $name);
+ if ($ret)
+ $gid = group_byname($uid, $name);
+ else
+ die(api_error($a, $type, 'other API error'));
+
+ // add members
+ $erroraddinguser = false;
+ $errorusers = array();
+ foreach ($users as $user) {
+ $cid = $user['cid'];
+ // check if user really exists as contact
+ $contact = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d",
+ intval($cid),
+ intval($uid));
+ if (count($contact))
+ $result = group_add_member($uid, $name, $cid, $gid);
+ else {
+ $erroraddinguser = true;
+ $errorusers[] = $cid;
+ }
+ }
+
+ // return success message incl. missing users in array
+ $status = ($erroraddinguser ? "missing user" : ($reactivate_group ? "reactivated" : "ok"));
+ $success = array('success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers);
+ return api_apply_template("group_create", $type, array('result' => $success));
+ }
+ api_register_func('api/friendica/group_create', 'api_friendica_group_create', true);
+
+
+ // update the specified group with the posted array of contacts
+ function api_friendica_group_update(&$a, $type) {
+ if (api_user()===false) return false;
+
+ // params
+ $user_info = api_get_user($a);
+ $uid = $user_info['uid'];
+ $gid = (x($_REQUEST, 'gid') ? $_REQUEST['gid'] : 0);
+ $name = (x($_REQUEST, 'name') ? $_REQUEST['name'] : "");
+ $json = json_decode($_POST['json'], true);
+ $users = $json['user'];
+
+ // error if no name specified
+ if ($name == "")
+ die(api_error($a, $type, 'group name not specified'));
+
+ // error if no gid specified
+ if ($gid == "")
+ die(api_error($a, $type, 'gid not specified'));
+
+ // remove members
+ $members = group_get_members($gid);
+ foreach ($members as $member) {
+ $cid = $member['id'];
+ foreach ($users as $user) {
+ $found = ($user['cid'] == $cid ? true : false);
+ }
+ if (!$found) {
+ $ret = group_rmv_member($uid, $name, $cid);
+ }
+ }
+
+ // add members
+ $erroraddinguser = false;
+ $errorusers = array();
+ foreach ($users as $user) {
+ $cid = $user['cid'];
+ // check if user really exists as contact
+ $contact = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d",
+ intval($cid),
+ intval($uid));
+ if (count($contact))
+ $result = group_add_member($uid, $name, $cid, $gid);
+ else {
+ $erroraddinguser = true;
+ $errorusers[] = $cid;
+ }
+ }
+
+ // return success message incl. missing users in array
+ $status = ($erroraddinguser ? "missing user" : "ok");
+ $success = array('success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers);
+ return api_apply_template("group_update", $type, array('result' => $success));
+ }
+ api_register_func('api/friendica/group_update', 'api_friendica_group_update', true);
/*
To.Do: