use Friendica\Core\System;
use Friendica\Core\Config;
use Friendica\Core\NotificationsManager;
+use Friendica\Core\PConfig;
use Friendica\Core\Worker;
use Friendica\Database\DBM;
use Friendica\Model\Contact;
*
* @param string $type Return type (xml, json, rss, as)
* @param object $e HTTPException Error object
- * @return strin error message formatted as $type
+ * @return string error message formatted as $type
*/
function api_error($type, $e)
{
'network' => $uinfo[0]['network'],
);
+ // If this is a local user and it uses Frio, we can get its color preferences.
+ if ($ret['self']) {
+ $theme_info = dba::select('user', ['theme'], ['uid' => $ret['uid']], ['limit' => 1]);
+ if ($theme_info['theme'] === 'frio') {
+ $schema = PConfig::get($ret['uid'], 'frio', 'schema');
+ if ($schema && ($schema != '---')) {
+ if (file_exists('view/theme/frio/schema/'.$schema.'.php')) {
+ $schemefile = 'view/theme/frio/schema/'.$schema.'.php';
+ require_once $schemefile;
+ }
+ } else {
+ $nav_bg = PConfig::get($ret['uid'], 'frio', 'nav_bg');
+ $link_color = PConfig::get($ret['uid'], 'frio', 'link_color');
+ $bgcolor = PConfig::get($ret['uid'], 'frio', 'background_color');
+ }
+ if (!$nav_bg) {
+ $nav_bg = "#708fa0";
+ }
+ if (!$link_color) {
+ $link_color = "#6fdbe8";
+ }
+ if (!$bgcolor) {
+ $bgcolor = "#ededed";
+ }
+
+ $ret['profile_sidebar_fill_color'] = str_replace('#', '', $nav_bg);
+ $ret['profile_link_color'] = str_replace('#', '', $link_color);
+ $ret['profile_background_color'] = str_replace('#', '', $bgcolor);
+ }
+ }
+
return $ret;
}
* @param string $type Return type (atom, rss, xml, json)
* @param array $data JSON style array
*
- * @return (string|object) XML data or JSON data
+ * @return (string|object|array) XML data or JSON data
*/
function api_format_data($root_element, $type, $data)
{
- $a = get_app();
-
switch ($type) {
case "atom":
case "rss":
/// @TODO move to top of file or somewhere better
api_register_func('api/users/search', 'api_users_search');
+/**
+ * Return user objects
+ *
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-lookup
+ *
+ * @param string $type Return format: json or xml
+ *
+ * @return array|string
+ * @throws NotFoundException if the results are empty.
+ */
+function api_users_lookup($type)
+{
+ $users = array();
+
+ if (x($_REQUEST['user_id'])) {
+ foreach (explode(',', $_REQUEST['user_id']) as $id) {
+ if (!empty($id)) {
+ $users[] = api_get_user(get_app(), $id);
+ }
+ }
+ }
+
+ if (empty($users)) {
+ throw new NotFoundException;
+ }
+
+ return api_format_data("users", $type, array('users' => $users));
+}
+
+/// @TODO move to top of file or somewhere better
+api_register_func('api/users/lookup', 'api_users_lookup', true);
+
/**
* Returns statuses that match a specified query.
*
* @param string $type Return format: json, xml, atom, rss
*
* @return array|string
- * @throws UnauthorizedException
- * @throws BadRequestException
+ * @throws BadRequestException if the "q" parameter is missing.
*/
function api_search($type)
{
"SELECT ".item_fieldlists()."
FROM `item` ".item_joins()."
WHERE ".item_condition()." AND (`item`.`uid` = 0 OR (`item`.`uid` = ? AND NOT `item`.`global`))
- AND `item`.`body` REGEXP ?
+ AND `item`.`body` LIKE CONCAT('%',?,'%')
$sql_extra
AND `item`.`id`>?
ORDER BY `item`.`id` DESC LIMIT ".intval($start)." ,".intval($count)." ",
- intval(api_user()),
+ api_user(),
$_REQUEST['q'],
- intval($since_id)
+ $since_id
);
- $statuses = array();
- while ($row = dba::fetch($r)) {
- $statuses[] = $row;
- }
-
- $data['status'] = api_format_items($statuses, api_get_user(get_app()));
+ $data['status'] = api_format_items(dba::inArray($r), api_get_user(get_app()));
return api_format_data("statuses", $type, $data);
}
$sql_extra = " AND false ";
}
+ if ($qtype == 'blocks') {
+ $sql_filter = 'AND `blocked` AND NOT `pending`';
+ } elseif ($qtype == 'incoming') {
+ $sql_filter = 'AND `pending`';
+ } else {
+ $sql_filter = 'AND (NOT `blocked` OR `pending`)';
+ }
+
$r = q(
"SELECT `nurl`
FROM `contact`
WHERE `uid` = %d
AND NOT `self`
- AND (NOT `blocked` OR `pending`)
+ $sql_filter
$sql_extra
ORDER BY `nick`
LIMIT %d, %d",
api_register_func('api/statuses/friends', 'api_statuses_friends', true);
api_register_func('api/statuses/followers', 'api_statuses_followers', true);
+/**
+ * Returns the list of blocked users
+ *
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/get-blocks-list
+ *
+ * @param string $type Either "json" or "xml"
+ *
+ * @return boolean|string|array
+ */
+function api_blocks_list($type)
+{
+ $data = api_statuses_f('blocks');
+ if ($data === false) {
+ return false;
+ }
+ return api_format_data("users", $type, $data);
+}
+
+/// @TODO move to top of file or somewhere better
+api_register_func('api/blocks/list', 'api_blocks_list', true);
+
+/**
+ * Returns the list of pending users IDs
+ *
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming
+ *
+ * @param string $type Either "json" or "xml"
+ *
+ * @return boolean|string|array
+ */
+function api_friendships_incoming($type)
+{
+ $data = api_statuses_f('incoming');
+ if ($data === false) {
+ return false;
+ }
+
+ $ids = array();
+ foreach ($data['user'] as $user) {
+ $ids[] = $user['id'];
+ }
+
+ return api_format_data("ids", $type, array('id' => $ids));
+}
+
+/// @TODO move to top of file or somewhere better
+api_register_func('api/friendships/incoming', 'api_friendships_incoming', true);
+
function api_statusnet_config($type)
{
$a = get_app();
}
api_register_func('api/friendica/profile/show', 'api_friendica_profile_show', true, API_METHOD_GET);
+/**
+ * Returns a list of saved searches.
+ *
+ * @see https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-saved_searches-list
+ *
+ * @param string $type Return format: json or xml
+ *
+ * @return string|array
+ */
+function api_saved_searches_list($type)
+{
+ $terms = dba::select('search', array('id', 'term'), array('uid' => local_user()));
+
+ $result = array();
+ while ($term = $terms->fetch()) {
+ $result[] = array(
+ 'name' => $term['term'],
+ 'query' => $term['term'],
+ 'id_str' => $term['id'],
+ 'id' => intval($term['id'])
+ );
+ }
+
+ dba::close($terms);
+
+ return api_format_data("terms", $type, array('terms' => $result));
+}
+
+/// @TODO move to top of file or somwhere better
+api_register_func('api/saved_searches/list', 'api_saved_searches_list', true);
+
/*
@TODO Maybe open to implement?
To.Do: