]> git.mxchange.org Git - friendica.git/commitdiff
Move API Response methods into an own class to make them mockable
authorPhilipp <admin@philipp.info>
Fri, 12 Nov 2021 18:52:01 +0000 (19:52 +0100)
committerPhilipp <admin@philipp.info>
Fri, 12 Nov 2021 18:52:01 +0000 (19:52 +0100)
22 files changed:
include/api.php
src/Module/Api/ApiResponse.php [new file with mode: 0644]
src/Module/Api/Friendica/Activity.php
src/Module/Api/Friendica/DirectMessages/Setseen.php
src/Module/Api/Friendica/Events/Index.php
src/Module/Api/Friendica/Notification.php
src/Module/Api/Friendica/Photo/Delete.php
src/Module/Api/Friendica/Photoalbum/Delete.php
src/Module/Api/Friendica/Photoalbum/Update.php
src/Module/Api/Friendica/Profile/Show.php
src/Module/Api/GNUSocial/GNUSocial/Version.php
src/Module/Api/GNUSocial/Help/Test.php
src/Module/Api/Mastodon/Accounts/UpdateCredentials.php
src/Module/Api/Mastodon/Filters.php
src/Module/Api/Mastodon/Lists/Accounts.php
src/Module/Api/Mastodon/Markers.php
src/Module/Api/Mastodon/ScheduledStatuses.php
src/Module/Api/Mastodon/Unimplemented.php
src/Module/Api/Twitter/Account/RateLimitStatus.php
src/Module/Api/Twitter/SavedSearches.php
src/Module/BaseApi.php
tests/legacy/ApiTest.php

index cf633374f7df8aa6ab0f1f90d0896f6fff1bde96..118db50bce8e2791163145f30061c562e17c423c 100644 (file)
@@ -42,6 +42,7 @@ use Friendica\Model\Post;
 use Friendica\Model\Profile;
 use Friendica\Model\User;
 use Friendica\Model\Verb;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Network\HTTPException;
 use Friendica\Network\HTTPException\BadRequestException;
@@ -282,7 +283,7 @@ function api_call(App $a, App\Arguments $args = null)
                Logger::warning(API_LOG_PREFIX . 'not implemented', ['module' => 'api', 'action' => 'call', 'query' => DI::args()->getQueryString()]);
                throw new NotFoundException();
        } catch (HTTPException $e) {
-               BaseApi::error($e->getCode(), $e->getDescription(), $e->getMessage(), $type);
+               ApiResponse::error($e->getCode(), $e->getDescription(), $e->getMessage(), $type);
        }
 }
 
@@ -420,7 +421,7 @@ function api_get_user($contact_id = null)
                if (!empty(DI::args()->getArgv()[$argid])) {
                        $data = explode(".", DI::args()->getArgv()[$argid]);
                        if (count($data) > 1) {
-                               list($user, $null) = $data;
+                               [$user, $null] = $data;
                        }
                }
                if (is_numeric($user)) {
@@ -706,7 +707,7 @@ function api_account_verify_credentials($type)
        unset($user_info["uid"]);
        unset($user_info["self"]);
 
-       return BaseApi::formatData("user", $type, ['user' => $user_info]);
+       return ApiResponse::formatData("user", $type, ['user' => $user_info]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1095,7 +1096,7 @@ function api_status_show($type, $item_id)
 
        Logger::info(API_LOG_PREFIX . 'End', ['action' => 'get_status', 'status_info' => $status_info]);
 
-       return BaseApi::formatData('statuses', $type, ['status' => $status_info]);
+       return ApiResponse::formatData('statuses', $type, ['status' => $status_info]);
 }
 
 /**
@@ -1161,7 +1162,7 @@ function api_users_show($type)
        unset($user_info['uid']);
        unset($user_info['self']);
 
-       return BaseApi::formatData('user', $type, ['user' => $user_info]);
+       return ApiResponse::formatData('user', $type, ['user' => $user_info]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1217,7 +1218,7 @@ function api_users_search($type)
                throw new BadRequestException('No search term specified.');
        }
 
-       return BaseApi::formatData('users', $type, $userlist);
+       return ApiResponse::formatData('users', $type, $userlist);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1253,7 +1254,7 @@ function api_users_lookup($type)
                throw new NotFoundException;
        }
 
-       return BaseApi::formatData("users", $type, ['users' => $users]);
+       return ApiResponse::formatData("users", $type, ['users' => $users]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1316,7 +1317,7 @@ function api_search($type)
                DBA::close($tags);
 
                if (empty($uriids)) {
-                       return BaseApi::formatData('statuses', $type, $data);
+                       return ApiResponse::formatData('statuses', $type, $data);
                }
 
                $condition = ['uri-id' => $uriids];
@@ -1357,7 +1358,7 @@ function api_search($type)
 
        bindComments($data['status']);
 
-       return BaseApi::formatData('statuses', $type, $data);
+       return ApiResponse::formatData('statuses', $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1454,7 +1455,7 @@ function api_statuses_home_timeline($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 
@@ -1540,7 +1541,7 @@ function api_statuses_public_timeline($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1599,7 +1600,7 @@ function api_statuses_networkpublic_timeline($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1675,10 +1676,10 @@ function api_statuses_show($type)
 
        if ($conversation) {
                $data = ['status' => $ret];
-               return BaseApi::formatData("statuses", $type, $data);
+               return ApiResponse::formatData("statuses", $type, $data);
        } else {
                $data = ['status' => $ret[0]];
-               return BaseApi::formatData("status", $type, $data);
+               return ApiResponse::formatData("status", $type, $data);
        }
 }
 
@@ -1757,7 +1758,7 @@ function api_conversation_show($type)
        $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type);
 
        $data = ['status' => $ret];
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -1968,7 +1969,7 @@ function api_statuses_mentions($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -2046,7 +2047,7 @@ function api_statuses_user_timeline($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -2128,7 +2129,7 @@ function api_favorites_create_destroy($type)
                        break;
        }
 
-       return BaseApi::formatData("status", $type, $data);
+       return ApiResponse::formatData("status", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -2201,7 +2202,7 @@ function api_favorites($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -2710,7 +2711,7 @@ function api_format_items($items, $user_info, $filter_user = false, $type = "jso
        }
 
        foreach ((array)$items as $item) {
-               list($status_user, $author_user, $owner_user) = api_item_get_user($a, $item);
+               [$status_user, $author_user, $owner_user] = api_item_get_user($a, $item);
 
                // Look if the posts are matching if they should be filtered by user id
                if ($filter_user && ($status_user["id"] != $user_info["id"])) {
@@ -2742,7 +2743,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use
        $a = Friendica\DI::app();
 
        if (empty($status_user) || empty($author_user) || empty($owner_user)) {
-               list($status_user, $author_user, $owner_user) = api_item_get_user($a, $item);
+               [$status_user, $author_user, $owner_user] = api_item_get_user($a, $item);
        }
 
        DI::contentItem()->localize($item);
@@ -2907,7 +2908,7 @@ function api_lists_list($type)
 {
        $ret = [];
        /// @TODO $ret is not filled here?
-       return BaseApi::formatData('lists', $type, ["lists_list" => $ret]);
+       return ApiResponse::formatData('lists', $type, ["lists_list" => $ret]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -2957,7 +2958,7 @@ function api_lists_ownerships($type)
                        'mode' => $mode
                ];
        }
-       return BaseApi::formatData("lists", $type, ['lists' => ['lists' => $lists]]);
+       return ApiResponse::formatData("lists", $type, ['lists' => ['lists' => $lists]]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3037,7 +3038,7 @@ function api_lists_statuses($type)
                        break;
        }
 
-       return BaseApi::formatData("statuses", $type, $data);
+       return ApiResponse::formatData("statuses", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3151,7 +3152,7 @@ function api_statuses_friends($type)
        if ($data === false) {
                return false;
        }
-       return BaseApi::formatData("users", $type, $data);
+       return ApiResponse::formatData("users", $type, $data);
 }
 
 /**
@@ -3170,7 +3171,7 @@ function api_statuses_followers($type)
        if ($data === false) {
                return false;
        }
-       return BaseApi::formatData("users", $type, $data);
+       return ApiResponse::formatData("users", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3194,7 +3195,7 @@ function api_blocks_list($type)
        if ($data === false) {
                return false;
        }
-       return BaseApi::formatData("users", $type, $data);
+       return ApiResponse::formatData("users", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3223,7 +3224,7 @@ function api_friendships_incoming($type)
                $ids[] = $user['id'];
        }
 
-       return BaseApi::formatData("ids", $type, ['id' => $ids]);
+       return ApiResponse::formatData("ids", $type, ['id' => $ids]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3264,7 +3265,7 @@ function api_statusnet_config($type)
                ],
        ];
 
-       return BaseApi::formatData('config', $type, ['config' => $config]);
+       return ApiResponse::formatData('config', $type, ['config' => $config]);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3348,7 +3349,7 @@ function api_direct_messages_new($type)
                        break;
        }
 
-       return BaseApi::formatData("direct-messages", $type, $data);
+       return ApiResponse::formatData("direct-messages", $type, $data);
 }
 
 /// @TODO move to top of file or somewhere better
@@ -3387,7 +3388,7 @@ function api_direct_messages_destroy($type)
        // error if no id or parenturi specified (for clients posting parent-uri as well)
        if ($verbose == "true" && ($id == 0 || $parenturi == "")) {
                $answer = ['result' => 'error', 'message' => 'message id or parenturi not specified'];
-               return BaseApi::formatData("direct_messages_delete", $type, ['$result' => $answer]);
+               return ApiResponse::formatData("direct_messages_delete", $type, ['$result' => $answer]);
        }
 
        // BadRequestException if no id specified (for clients using Twitter API)
@@ -3402,7 +3403,7 @@ function api_direct_messages_destroy($type)
        if (!DBA::exists('mail', ["`uid` = ? AND `id` = ? " . $sql_extra, $uid, $id])) {
                if ($verbose == "true") {
                        $answer = ['result' => 'error', 'message' => 'message id not in database'];
-                       return BaseApi::formatData("direct_messages_delete", $type, ['$result' => $answer]);
+                       return ApiResponse::formatData("direct_messages_delete", $type, ['$result' => $answer]);
                }
                /// @todo BadRequestException ok for Twitter API clients?
                throw new BadRequestException('message id not in database');
@@ -3415,10 +3416,10 @@ function api_direct_messages_destroy($type)
                if ($result) {
                        // return success
                        $answer = ['result' => 'ok', 'message' => 'message deleted'];
-                       return BaseApi::formatData("direct_message_delete", $type, ['$result' => $answer]);
+                       return ApiResponse::formatData("direct_message_delete", $type, ['$result' => $answer]);
                } else {
                        $answer = ['result' => 'error', 'message' => 'unknown error'];
-                       return BaseApi::formatData("direct_messages_delete", $type, ['$result' => $answer]);
+                       return ApiResponse::formatData("direct_messages_delete", $type, ['$result' => $answer]);
                }
        }
        /// @todo return JSON data like Twitter API not yet implemented
@@ -3503,8 +3504,9 @@ function api_friendships_destroy($type)
        // Set screen_name since Twidere requests it
        $contact['screen_name'] = $contact['nick'];
 
-       return BaseApi::formatData('friendships-destroy', $type, ['user' => $contact]);
+       return ApiResponse::formatData('friendships-destroy', $type, ['user' => $contact]);
 }
+
 api_register_func('api/friendships/destroy', 'api_friendships_destroy', true, API_METHOD_POST);
 
 /**
@@ -3584,7 +3586,7 @@ function api_direct_messages_box($type, $box, $verbose)
        ));
        if ($verbose == "true" && !DBA::isResult($r)) {
                $answer = ['result' => 'error', 'message' => 'no mails available'];
-               return BaseApi::formatData("direct_messages_all", $type, ['$result' => $answer]);
+               return ApiResponse::formatData("direct_messages_all", $type, ['$result' => $answer]);
        }
 
        $ret = [];
@@ -3612,7 +3614,7 @@ function api_direct_messages_box($type, $box, $verbose)
                        break;
        }
 
-       return BaseApi::formatData("direct-messages", $type, $data);
+       return ApiResponse::formatData("direct-messages", $type, $data);
 }
 
 /**
@@ -3726,7 +3728,7 @@ function api_fr_photos_list($type)
                        }
                }
        }
-       return BaseApi::formatData("photos", $type, $data);
+       return ApiResponse::formatData("photos", $type, $data);
 }
 
 /**
@@ -3798,7 +3800,7 @@ function api_fr_photo_create_update($type)
 
                // return success of updating or error message
                if (!is_null($data)) {
-                       return BaseApi::formatData("photo_create", $type, $data);
+                       return ApiResponse::formatData("photo_create", $type, $data);
                } else {
                        throw new InternalServerErrorException("unknown error - uploading photo failed, see Friendica log for more information");
                }
@@ -3849,18 +3851,18 @@ function api_fr_photo_create_update($type)
                        $media = $_FILES['media'];
                        $data = save_media_to_database("photo", $media, $type, $album, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $desc, Photo::DEFAULT, $visibility, $photo_id);
                        if (!is_null($data)) {
-                               return BaseApi::formatData("photo_update", $type, $data);
+                               return ApiResponse::formatData("photo_update", $type, $data);
                        }
                }
 
                // return success of updating or error message
                if ($result) {
                        $answer = ['result' => 'updated', 'message' => 'Image id `' . $photo_id . '` has been updated.'];
-                       return BaseApi::formatData("photo_update", $type, ['$result' => $answer]);
+                       return ApiResponse::formatData("photo_update", $type, ['$result' => $answer]);
                } else {
                        if ($nothingtodo) {
                                $answer = ['result' => 'cancelled', 'message' => 'Nothing to update for image id `' . $photo_id . '`.'];
-                               return BaseApi::formatData("photo_update", $type, ['$result' => $answer]);
+                               return ApiResponse::formatData("photo_update", $type, ['$result' => $answer]);
                        }
                        throw new InternalServerErrorException("unknown error - update photo entry in database failed");
                }
@@ -3893,7 +3895,7 @@ function api_fr_photo_detail($type)
        // prepare json/xml output with data from database for the requested photo
        $data = prepare_photo_data($type, $scale, $photo_id);
 
-       return BaseApi::formatData("photo_detail", $type, $data);
+       return ApiResponse::formatData("photo_detail", $type, $data);
 }
 
 
@@ -4624,8 +4626,9 @@ function api_friendica_group_show($type)
                }
                $grps[] = ['name' => $rr['name'], 'gid' => $rr['id'], $user_element => $users];
        }
-       return BaseApi::formatData("groups", $type, ['group' => $grps]);
+       return ApiResponse::formatData("groups", $type, ['group' => $grps]);
 }
+
 api_register_func('api/friendica/group_show', 'api_friendica_group_show', true);
 
 
@@ -4681,7 +4684,7 @@ function api_friendica_group_delete($type)
        if ($ret) {
                // return success
                $success = ['success' => $ret, 'gid' => $gid, 'name' => $name, 'status' => 'deleted', 'wrong users' => []];
-               return BaseApi::formatData("group_delete", $type, ['result' => $success]);
+               return ApiResponse::formatData("group_delete", $type, ['result' => $success]);
        } else {
                throw new BadRequestException('other API error');
        }
@@ -4734,9 +4737,10 @@ function api_lists_destroy($type)
                        'user' => $user_info
                ];
 
-               return BaseApi::formatData("lists", $type, ['lists' => $list]);
+               return ApiResponse::formatData("lists", $type, ['lists' => $list]);
        }
 }
+
 api_register_func('api/lists/destroy', 'api_lists_destroy', true, API_METHOD_DELETE);
 
 /**
@@ -4822,8 +4826,9 @@ function api_friendica_group_create($type)
 
        $success = group_create($name, $uid, $users);
 
-       return BaseApi::formatData("group_create", $type, ['result' => $success]);
+       return ApiResponse::formatData("group_create", $type, ['result' => $success]);
 }
+
 api_register_func('api/friendica/group_create', 'api_friendica_group_create', true, API_METHOD_POST);
 
 /**
@@ -4861,9 +4866,10 @@ function api_lists_create($type)
                        'user' => $user_info
                ];
 
-               return BaseApi::formatData("lists", $type, ['lists'=>$grp]);
+               return ApiResponse::formatData("lists", $type, ['lists' => $grp]);
        }
 }
+
 api_register_func('api/lists/create', 'api_lists_create', true, API_METHOD_POST);
 
 /**
@@ -4934,7 +4940,7 @@ function api_friendica_group_update($type)
        // return success message incl. missing users in array
        $status = ($erroraddinguser ? "missing user" : "ok");
        $success = ['success' => true, 'gid' => $gid, 'name' => $name, 'status' => $status, 'wrong users' => $errorusers];
-       return BaseApi::formatData("group_update", $type, ['result' => $success]);
+       return ApiResponse::formatData("group_update", $type, ['result' => $success]);
 }
 
 api_register_func('api/friendica/group_update', 'api_friendica_group_update', true, API_METHOD_POST);
@@ -4986,7 +4992,7 @@ function api_lists_update($type)
                        'user' => $user_info
                ];
 
-               return BaseApi::formatData("lists", $type, ['lists' => $list]);
+               return ApiResponse::formatData("lists", $type, ['lists' => $list]);
        }
 }
 
@@ -5038,12 +5044,12 @@ function api_friendica_notification_seen($type)
                                // we found the item, return it to the user
                                $ret  = api_format_items([$item], $user_info, false, $type);
                                $data = ['status' => $ret];
-                               return BaseApi::formatData('status', $type, $data);
+                               return ApiResponse::formatData('status', $type, $data);
                        }
                        // the item can't be found, but we set the notification as seen, so we count this as a success
                }
 
-               return BaseApi::formatData('result', $type, ['result' => 'success']);
+               return ApiResponse::formatData('result', $type, ['result' => 'success']);
        } catch (NotFoundException $e) {
                throw new BadRequestException('Invalid argument', $e);
        } catch (Exception $e) {
@@ -5084,7 +5090,7 @@ function api_friendica_direct_messages_search($type, $box = "")
        // error if no searchstring specified
        if ($searchstring == "") {
                $answer = ['result' => 'error', 'message' => 'searchstring not specified'];
-               return BaseApi::formatData("direct_messages_search", $type, ['$result' => $answer]);
+               return ApiResponse::formatData("direct_messages_search", $type, ['$result' => $answer]);
        }
 
        // get data for the specified searchstring
@@ -5119,7 +5125,7 @@ function api_friendica_direct_messages_search($type, $box = "")
                $success = ['success' => true, 'search_results' => $ret];
        }
 
-       return BaseApi::formatData("direct_message_search", $type, ['$result' => $success]);
+       return ApiResponse::formatData("direct_message_search", $type, ['$result' => $success]);
 }
 
 /// @TODO move to top of file or somewhere better
diff --git a/src/Module/Api/ApiResponse.php b/src/Module/Api/ApiResponse.php
new file mode 100644 (file)
index 0000000..768dacb
--- /dev/null
@@ -0,0 +1,215 @@
+<?php
+
+namespace Friendica\Module\Api;
+
+use Friendica\App\Arguments;
+use Friendica\Core\L10n;
+use Friendica\Core\Logger;
+use Friendica\Core\System;
+use Friendica\DI;
+use Friendica\Object\Api\Mastodon\Error;
+use Friendica\Util\Arrays;
+use Friendica\Util\HTTPInputData;
+use Friendica\Util\XML;
+
+/**
+ * This class is used to format and return API responses
+ */
+class ApiResponse
+{
+       /** @var L10n */
+       protected $l10n;
+       /** @var Arguments */
+       protected $args;
+
+       /**
+        * @param L10n      $l10n
+        * @param Arguments $args
+        */
+       public function __construct(L10n $l10n, Arguments $args)
+       {
+               $this->l10n = $l10n;
+               $this->args = $args;
+       }
+
+       /**
+        * Creates the XML from a JSON style array
+        *
+        * @param array  $data         JSON style array
+        * @param string $root_element Name of the root element
+        *
+        * @return string The XML data
+        */
+       public static function createXML(array $data, string $root_element): string
+       {
+               $childname = key($data);
+               $data2     = array_pop($data);
+
+               $namespaces = ['' => 'http://api.twitter.com',
+                       'statusnet'      => 'http://status.net/schema/api/1/',
+                       'friendica'      => 'http://friendi.ca/schema/api/1/',
+                       'georss'         => 'http://www.georss.org/georss'];
+
+               /// @todo Auto detection of needed namespaces
+               if (in_array($root_element, ['ok', 'hash', 'config', 'version', 'ids', 'notes', 'photos'])) {
+                       $namespaces = [];
+               }
+
+               if (is_array($data2)) {
+                       $key = key($data2);
+                       Arrays::walkRecursive($data2, ['Friendica\Module\Api\ApiResponse', 'reformatXML']);
+
+                       if ($key == '0') {
+                               $data4 = [];
+                               $i     = 1;
+
+                               foreach ($data2 as $item) {
+                                       $data4[$i++ . ':' . $childname] = $item;
+                               }
+
+                               $data2 = $data4;
+                       }
+               }
+
+               $data3 = [$root_element => $data2];
+
+               return XML::fromArray($data3, $xml, false, $namespaces);
+       }
+
+       /**
+        * Formats the data according to the data type
+        *
+        * @param string $root_element Name of the root element
+        * @param string $type         Return type (atom, rss, xml, json)
+        * @param array  $data         JSON style array
+        *
+        * @return array|string (string|array) XML data or JSON data
+        */
+       public static function formatData(string $root_element, string $type, array $data)
+       {
+               switch ($type) {
+                       case 'atom':
+                       case 'rss':
+                       case 'xml':
+                               $ret = static::createXML($data, $root_element);
+                               break;
+                       case 'json':
+                       default:
+                               $ret = $data;
+                               break;
+               }
+               return $ret;
+       }
+
+       /**
+        * Callback function to transform the array in an array that can be transformed in a XML file
+        *
+        * @param mixed  $item Array item value
+        * @param string $key  Array key
+        *
+        * @return boolean
+        */
+       public static function reformatXML(&$item, string &$key): bool
+       {
+               if (is_bool($item)) {
+                       $item = ($item ? 'true' : 'false');
+               }
+
+               if (substr($key, 0, 10) == 'statusnet_') {
+                       $key = 'statusnet:' . substr($key, 10);
+               } elseif (substr($key, 0, 10) == 'friendica_') {
+                       $key = 'friendica:' . substr($key, 10);
+               }
+               return true;
+       }
+
+       /**
+        * Exit with error code
+        *
+        * @param int         $code
+        * @param string      $description
+        * @param string      $message
+        * @param string|null $format
+        *
+        * @return void
+        */
+       public static function error(int $code, string $description, string $message, string $format = null)
+       {
+               $error = [
+                       'error'   => $message ?: $description,
+                       'code'    => $code . ' ' . $description,
+                       'request' => DI::args()->getQueryString()
+               ];
+
+               header(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' ' . $code . ' ' . $description);
+
+               self::exit('status', ['status' => $error], $format);
+       }
+
+       /**
+        * Outputs formatted data according to the data type and then exits the execution.
+        *
+        * @param string      $root_element
+        * @param array       $data   An array with a single element containing the returned result
+        * @param string|null $format Output format (xml, json, rss, atom)
+        *
+        * @return void
+        */
+       public static function exit(string $root_element, array $data, string $format = null)
+       {
+               $format = $format ?? 'json';
+
+               $return = static::formatData($root_element, $format, $data);
+
+               switch ($format) {
+                       case 'xml':
+                               header('Content-Type: text/xml');
+                               break;
+                       case 'json':
+                               header('Content-Type: application/json');
+                               if (!empty($return)) {
+                                       $json = json_encode(end($return));
+                                       if (!empty($_GET['callback'])) {
+                                               $json = $_GET['callback'] . '(' . $json . ')';
+                                       }
+                                       $return = $json;
+                               }
+                               break;
+                       case 'rss':
+                               header('Content-Type: application/rss+xml');
+                               $return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
+                               break;
+                       case 'atom':
+                               header('Content-Type: application/atom+xml');
+                               $return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
+                               break;
+               }
+
+               echo $return;
+               exit;
+       }
+
+       /**
+        * Quit execution with the message that the endpoint isn't implemented
+        *
+        * @param string $method
+        *
+        * @return void
+        * @throws \Exception
+        */
+       public static function unsupported(string $method = 'all')
+       {
+               $path = DI::args()->getQueryString();
+               Logger::info('Unimplemented API call',
+                       [
+                               'method'  => $method,
+                               'path'    => $path,
+                               'agent'   => $_SERVER['HTTP_USER_AGENT'] ?? '',
+                               'request' => HTTPInputData::process()
+                       ]);
+               $error             = DI::l10n()->t('API endpoint %s %s is not implemented', strtoupper($method), $path);
+               $error_description = DI::l10n()->t('The API endpoint is currently not implemented but might be in the future.');
+               $errorobj          = new Error($error, $error_description);
+               System::jsonError(501, $errorobj->toArray());
+       }
+}
index e88f6a7c9d4e5d896faa81660de7e28f20af1b3d..41500dfe01d2352f5ef2d984952d1f89f6c64eb7 100644 (file)
@@ -22,6 +22,7 @@
 namespace Friendica\Module\Api\Friendica;
 
 use Friendica\Model\Item;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -56,9 +57,9 @@ class Activity extends BaseApi
                        } else {
                                $ok = 'ok';
                        }
-                       self::exit('ok', ['ok' => $ok], $parameters['extension'] ?? null);
+                       ApiResponse::exit('ok', ['ok' => $ok], $parameters['extension'] ?? null);
                } else {
-                       self::error(500, 'Error adding activity', '', $parameters['extension'] ?? null);
+                       ApiResponse::error(500, 'Error adding activity', '', $parameters['extension'] ?? null);
                }
        }
 }
index 334f4e295fd5fc93fdd38051b66d358e193ede97..a7eab43e22bb096df417e7eb3a0edbf83d957b97 100644 (file)
@@ -22,6 +22,7 @@
 namespace Friendica\Module\Api\Friendica\DirectMessages;
 
 use Friendica\Database\DBA;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -41,13 +42,13 @@ class Setseen extends BaseApi
                // return error if id is zero
                if (empty($request['id'])) {
                        $answer = ['result' => 'error', 'message' => 'message id not specified'];
-                       self::exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null);
+                       ApiResponse::exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null);
                }
 
                // error message if specified id is not in database
                if (!DBA::exists('mail', ['id' => $request['id'], 'uid' => $uid])) {
                        $answer = ['result' => 'error', 'message' => 'message id not in database'];
-                       self::exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null);
+                       ApiResponse::exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null);
                }
 
                // update seen indicator
@@ -57,6 +58,6 @@ class Setseen extends BaseApi
                        $answer = ['result' => 'error', 'message' => 'unknown error'];
                }
 
-               self::exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null);
+               ApiResponse::exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null);
        }
 }
index b0ca78ac9e38d02b5ba409b696aa85d2299d49a0..7bfeaa2ef743760797a87b4c4ed67387f39259c1 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Friendica\Events;
 
 use Friendica\Content\Text\BBCode;
 use Friendica\Database\DBA;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Network\HTTPException;
 
@@ -70,6 +71,6 @@ class Index extends BaseApi
                        ];
                }
 
-               self::exit('events', ['events' => $items], $parameters['extension'] ?? null);
+               ApiResponse::exit('events', ['events' => $items], $parameters['extension'] ?? null);
        }
 }
index e3872040f20bebcecfc5a8b686766b0a541a6b3d..fb028dd752b15466993f1d2df569c8f3fb1680d6 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Friendica;
 
 use Friendica\Collection\Api\Notifications as ApiNotifications;
 use Friendica\DI;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Object\Api\Friendica\Notification as ApiNotification;
 
@@ -56,6 +57,6 @@ class Notification extends BaseApi
                        $result = false;
                }
 
-               self::exit('notes', ['note' => $result], $parameters['extension'] ?? null);
+               ApiResponse::exit('notes', ['note' => $result], $parameters['extension'] ?? null);
        }
 }
index 702c11ee8f325478c7e9d6e93367f767c4eccf1e..1e6b86ca858b35850308b37a3a7939f88005590c 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Friendica\Photo;
 
 use Friendica\Model\Item;
 use Friendica\Model\Photo;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Network\HTTPException\BadRequestException;
 use Friendica\Network\HTTPException\InternalServerErrorException;
@@ -63,7 +64,7 @@ class Delete extends BaseApi
                        Item::deleteForUser($condition, $uid);
 
                        $result = ['result' => 'deleted', 'message' => 'photo with id `' . $request['photo_id'] . '` has been deleted from server.'];
-                       self::exit('photo_delete', ['$result' => $result], $parameters['extension'] ?? null);
+                       ApiResponse::exit('photo_delete', ['$result' => $result], $parameters['extension'] ?? null);
                } else {
                        throw new InternalServerErrorException("unknown error on deleting photo from database table");
                }
index 0cb2158eb0ab589ea189b526216bc22644bad8dd..3ee3e2dc39ffa9731833bbf62495d12315cd7b9e 100644 (file)
@@ -24,6 +24,7 @@ namespace Friendica\Module\Api\Friendica\Photoalbum;
 use Friendica\Database\DBA;
 use Friendica\Model\Item;
 use Friendica\Model\Photo;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Network\HTTPException\BadRequestException;
 use Friendica\Network\HTTPException\InternalServerErrorException;
@@ -66,7 +67,7 @@ class Delete extends BaseApi
                // return success of deletion or error message
                if ($result) {
                        $answer = ['result' => 'deleted', 'message' => 'album `' . $request['album'] . '` with all containing photos has been deleted.'];
-                       self::exit('photoalbum_delete', ['$result' => $answer], $parameters['extension'] ?? null);
+                       ApiResponse::exit('photoalbum_delete', ['$result' => $answer], $parameters['extension'] ?? null);
                } else {
                        throw new InternalServerErrorException("unknown error - deleting from database failed");
                }
index d6c4725e4550ba7c04d7d57fb345ffada5c3f484..75ea48a82db11f077b511748208666485c834650 100644 (file)
@@ -22,6 +22,7 @@
 namespace Friendica\Module\Api\Friendica\Photoalbum;
 
 use Friendica\Model\Photo;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Network\HTTPException\BadRequestException;
 use Friendica\Network\HTTPException\InternalServerErrorException;
@@ -58,7 +59,7 @@ class Update extends BaseApi
                // return success of updating or error message
                if ($result) {
                        $answer = ['result' => 'updated', 'message' => 'album `' . $request['album'] . '` with all containing photos has been renamed to `' . $request['album_new'] . '`.'];
-                       self::exit('photoalbum_update', ['$result' => $answer], $parameters['extension'] ?? null);
+                       ApiResponse::exit('photoalbum_update', ['$result' => $answer], $parameters['extension'] ?? null);
                } else {
                        throw new InternalServerErrorException("unknown error - updating in database failed");
                }
index 18671e0dd5478dac5e8c8aaa77cbf2abd1380100..bb3197ad21973f0924c278c75f740bc5cc59d94e 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Friendica\Module\Api\Friendica\Profile;
 
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Profile\ProfileField\Collection\ProfileFields;
 use Friendica\Content\Text\BBCode;
 use Friendica\DI;
@@ -66,7 +67,7 @@ class Show extends BaseApi
                        'profiles' => $profiles
                ];
 
-               self::exit('friendica_profiles', ['$result' => $result], $parameters['extension'] ?? null);
+               ApiResponse::exit('friendica_profiles', ['$result' => $result], $parameters['extension'] ?? null);
        }
 
        /**
index 818e9a1c051df957a74acbdb8f7b5ab43f0e0f88..4b9d745030f47cae6eac0419c8df2407b2b781bc 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Friendica\Module\Api\GNUSocial\GNUSocial;
 
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -30,6 +31,6 @@ class Version extends BaseApi
 {
        public static function rawContent(array $parameters = [])
        {
-               self::exit('version', ['version' => '0.9.7'], $parameters['extension'] ?? null);
+               ApiResponse::exit('version', ['version' => '0.9.7'], $parameters['extension'] ?? null);
        }
 }
index 361610a8b57f623356127762e4409dd99f7d085d..bfd7559a45fdc6cd6ace09c7472100cb6c3280c7 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Friendica\Module\Api\GNUSocial\Help;
 
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -36,6 +37,6 @@ class Test extends BaseApi
                        $ok = 'ok';
                }
 
-               self::exit('ok', ['ok' => $ok], $parameters['extension'] ?? null);
+               ApiResponse::exit('ok', ['ok' => $ok], $parameters['extension'] ?? null);
        }
 }
index 5051aec4ec2ef135dee177e8e571d79ebf2bdfbc..ccd2e903c08be497635eae80d1263ee307a92255 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Mastodon\Accounts;
 
 use Friendica\App\Router;
 use Friendica\Core\Logger;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Util\HTTPInputData;
 
@@ -40,6 +41,6 @@ class UpdateCredentials extends BaseApi
 
                Logger::info('Patch data', ['data' => $data]);
 
-               self::unsupported(Router::PATCH);
+               ApiResponse::unsupported(Router::PATCH);
        }
 }
index 2b505e0f29bde4bd17ea53433b3200ee28e03430..8a9cd810b6154a998560e393ad359469fdb286f1 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Mastodon;
 
 use Friendica\App\Router;
 use Friendica\Core\System;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -34,7 +35,7 @@ class Filters extends BaseApi
        {
                self::checkAllowedScope(self::SCOPE_WRITE);
 
-               self::unsupported(Router::POST);
+               ApiResponse::unsupported(Router::POST);
        }
 
        /**
index 6e112356303fa2ee7b473cac83fa1f364e423f1f..e1de45b64d837e3598caaf3b18ecda2fc3f2c184 100644 (file)
@@ -25,6 +25,7 @@ use Friendica\App\Router;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -36,12 +37,12 @@ class Accounts extends BaseApi
 {
        public static function delete(array $parameters = [])
        {
-               self::unsupported(Router::DELETE);
+               ApiResponse::unsupported(Router::DELETE);
        }
 
        public static function post(array $parameters = [])
        {
-               self::unsupported(Router::POST);
+               ApiResponse::unsupported(Router::POST);
        }
 
        /**
index 50c0864990d860f18174d3a713d32ae511c57f1d..a45611c2dcba613508707d10bd0f1d3c40d0755b 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Mastodon;
 
 use Friendica\App\Router;
 use Friendica\Core\System;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -34,7 +35,7 @@ class Markers extends BaseApi
        {
                self::checkAllowedScope(self::SCOPE_WRITE);
 
-               self::unsupported(Router::POST);
+               ApiResponse::unsupported(Router::POST);
        }
 
        /**
index 5b43f4515af62db0440541bbe88d4e960991c8f0..9f3e53c046838e44cbb057fc71cd6eb736f7fdbc 100644 (file)
@@ -26,6 +26,7 @@ use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\Post;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -38,7 +39,7 @@ class ScheduledStatuses extends BaseApi
                self::checkAllowedScope(self::SCOPE_WRITE);
                $uid = self::getCurrentUserID();
 
-               self::unsupported(Router::PUT);
+               ApiResponse::unsupported(Router::PUT);
        }
 
        public static function delete(array $parameters = [])
index 035b6d2c950d01d738fbe35abcec6b30c6a1f8f7..d0b32b99743be579135422180d9013c59bb36480 100644 (file)
@@ -22,6 +22,7 @@
 namespace Friendica\Module\Api\Mastodon;
 
 use Friendica\App\Router;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -35,7 +36,7 @@ class Unimplemented extends BaseApi
         */
        public static function delete(array $parameters = [])
        {
-               self::unsupported(Router::DELETE);
+               ApiResponse::unsupported(Router::DELETE);
        }
 
        /**
@@ -44,7 +45,7 @@ class Unimplemented extends BaseApi
         */
        public static function patch(array $parameters = [])
        {
-               self::unsupported(Router::PATCH);
+               ApiResponse::unsupported(Router::PATCH);
        }
 
        /**
@@ -53,7 +54,7 @@ class Unimplemented extends BaseApi
         */
        public static function post(array $parameters = [])
        {
-               self::unsupported(Router::POST);
+               ApiResponse::unsupported(Router::POST);
        }
 
        /**
@@ -62,7 +63,7 @@ class Unimplemented extends BaseApi
         */
        public static function put(array $parameters = [])
        {
-               self::unsupported(Router::PUT);
+               ApiResponse::unsupported(Router::PUT);
        }
 
        /**
@@ -71,6 +72,6 @@ class Unimplemented extends BaseApi
         */
        public static function rawContent(array $parameters = [])
        {
-               self::unsupported(Router::GET);
+               ApiResponse::unsupported(Router::GET);
        }
 }
index 1f410e4cfadbd8bcc5b2a91f7ed84905b45f6b80..1ef3c8d67b269e1c74d7a8184871ed4da35a7857 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Friendica\Module\Api\Twitter\Account;
 
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Util\DateTimeFormat;
 
@@ -51,6 +52,6 @@ class RateLimitStatus extends BaseApi
                        ];
                }
 
-               self::exit('hash', ['hash' => $hash], $parameters['extension'] ?? null);
+               ApiResponse::exit('hash', ['hash' => $hash], $parameters['extension'] ?? null);
        }
 }
index ce183168b5340e84de3e723e34fbbd7bac28c671..7a65b917a979f97c4ac58f011c698411847fe778 100644 (file)
@@ -22,6 +22,7 @@
 namespace Friendica\Module\Api\Twitter;
 
 use Friendica\Database\DBA;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 
 /**
@@ -44,6 +45,6 @@ class SavedSearches extends BaseApi
 
                DBA::close($terms);
 
-               self::exit('terms', ['terms' => $result], $parameters['extension'] ?? null);
+               ApiResponse::exit('terms', ['terms' => $result], $parameters['extension'] ?? null);
        }
 }
index 44461117da6a6fe8bd954ecd54028b73f65dce02..a0a94c336f0cf8e9b83bc848f0cdc2b0ec83acf8 100644 (file)
@@ -89,22 +89,6 @@ class BaseApi extends BaseModule
                }
        }
 
-       /**
-        * Quit execution with the message that the endpoint isn't implemented
-        *
-        * @param string $method
-        * @return void
-        */
-       public static function unsupported(string $method = 'all')
-       {
-               $path = DI::args()->getQueryString();
-               Logger::info('Unimplemented API call', ['method' => $method, 'path' => $path, 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '', 'request' => HTTPInputData::process()]);
-               $error = DI::l10n()->t('API endpoint %s %s is not implemented', strtoupper($method), $path);
-               $error_description = DI::l10n()->t('The API endpoint is currently not implemented but might be in the future.');
-               $errorobj = new \Friendica\Object\Api\Mastodon\Error($error, $error_description);
-               System::jsonError(501, $errorobj->toArray());
-       }
-
        /**
         * Processes data from GET requests and sets defaults
         *
@@ -326,160 +310,4 @@ class BaseApi extends BaseModule
        {
                return api_get_user($contact_id);
        }
-
-       /**
-        * Exit with error code
-        *
-        * @param int $code
-        * @param string $description
-        * @param string $message
-        * @param string|null $format
-        * @return void
-        */
-       public static function error(int $code, string $description, string $message, string $format = null)
-       {
-               $error = [
-                       'error'   => $message ?: $description,
-                       'code'    => $code . ' ' . $description,
-                       'request' => DI::args()->getQueryString()
-               ];
-
-               header(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' ' . $code . ' ' . $description);
-
-               self::exit('status', ['status' => $error], $format);
-       }
-
-       /**
-        * Outputs formatted data according to the data type and then exits the execution.
-        *
-        * @param string $root_element
-        * @param array  $data         An array with a single element containing the returned result
-        * @param string $format       Output format (xml, json, rss, atom)
-        * @return false|string
-        */
-       protected static function exit(string $root_element, array $data, string $format = null)
-       {
-               $format = $format ?? 'json';
-
-               $return = self::formatData($root_element, $format, $data);
-
-               switch ($format) {
-                       case 'xml':
-                               header('Content-Type: text/xml');
-                               break;
-                       case 'json':
-                               header('Content-Type: application/json');
-                               if (!empty($return)) {
-                                       $json = json_encode(end($return));
-                                       if (!empty($_GET['callback'])) {
-                                               $json = $_GET['callback'] . '(' . $json . ')';
-                                       }
-                                       $return = $json;
-                               }
-                               break;
-                       case 'rss':
-                               header('Content-Type: application/rss+xml');
-                               $return  = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
-                               break;
-                       case 'atom':
-                               header('Content-Type: application/atom+xml');
-                               $return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
-                               break;
-               }
-
-               echo $return;
-               exit;
-       }
-
-       /**
-        * Formats the data according to the data type
-        *
-        * @param string $root_element Name of the root element
-        * @param string $type         Return type (atom, rss, xml, json)
-        * @param array  $data         JSON style array
-        *
-        * @return array|string (string|array) XML data or JSON data
-        */
-       public static function formatData($root_element, string $type, array $data)
-       {
-               switch ($type) {
-                       case 'atom':
-                       case 'rss':
-                       case 'xml':
-                               $ret = self::createXML($data, $root_element);
-                               break;
-                       case 'json':
-                       default:
-                               $ret = $data;
-                               break;
-               }
-               return $ret;
-       }
-
-       /**
-       * Callback function to transform the array in an array that can be transformed in a XML file
-       *
-       * @param mixed  $item Array item value
-       * @param string $key  Array key
-       *
-       * @return boolean
-       */
-       public static function reformatXML(&$item, &$key)
-       {
-               if (is_bool($item)) {
-                       $item = ($item ? 'true' : 'false');
-               }
-
-               if (substr($key, 0, 10) == 'statusnet_') {
-                       $key = 'statusnet:'.substr($key, 10);
-               } elseif (substr($key, 0, 10) == 'friendica_') {
-                       $key = 'friendica:'.substr($key, 10);
-               }
-               return true;
-       }
-
-       /**
-        * Creates the XML from a JSON style array
-        *
-        * @param array  $data         JSON style array
-        * @param string $root_element Name of the root element
-        *
-        * @return string The XML data
-        */
-       public static function createXML(array $data, $root_element)
-       {
-               $childname = key($data);
-               $data2 = array_pop($data);
-
-               $namespaces = ['' => 'http://api.twitter.com',
-                       'statusnet' => 'http://status.net/schema/api/1/',
-                       'friendica' => 'http://friendi.ca/schema/api/1/',
-                       'georss' => 'http://www.georss.org/georss'];
-
-               /// @todo Auto detection of needed namespaces
-               if (in_array($root_element, ['ok', 'hash', 'config', 'version', 'ids', 'notes', 'photos'])) {
-                       $namespaces = [];
-               }
-
-               if (is_array($data2)) {
-                       $key = key($data2);
-                       Arrays::walkRecursive($data2, ['Friendica\Module\BaseApi', 'reformatXML']);
-
-                       if ($key == '0') {
-                               $data4 = [];
-                               $i = 1;
-
-                               foreach ($data2 as $item) {
-                                       $data4[$i++ . ':' . $childname] = $item;
-                               }
-
-                               $data2 = $data4;
-                       }
-               }
-
-               $data3 = [$root_element => $data2];
-
-               $ret = XML::fromArray($data3, $xml, false, $namespaces);
-               return $ret;
-       }
 }
index 6f57f3bbd7b4263485bdbc65a99ab30f5c01c52d..4ea5c784a61760457b91963cdedaa607d23e4a87 100644 (file)
@@ -10,6 +10,7 @@ use Friendica\Core\Config\Capability\IManageConfigValues;
 use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
 use Friendica\Core\Protocol;
 use Friendica\DI;
+use Friendica\Module\Api\ApiResponse;
 use Friendica\Module\BaseApi;
 use Friendica\Network\HTTPException;
 use Friendica\Security\BasicAuth;
@@ -1069,7 +1070,7 @@ class ApiTest extends FixtureTest
        {
                $item = true;
                $key  = '';
-               self::assertTrue(BaseApi::reformatXML($item, $key));
+               self::assertTrue(ApiResponse::reformatXML($item, $key));
                self::assertEquals('true', $item);
        }
 
@@ -1082,7 +1083,7 @@ class ApiTest extends FixtureTest
        {
                $item = '';
                $key  = 'statusnet_api';
-               self::assertTrue(BaseApi::reformatXML($item, $key));
+               self::assertTrue(ApiResponse::reformatXML($item, $key));
                self::assertEquals('statusnet:api', $key);
        }
 
@@ -1095,7 +1096,7 @@ class ApiTest extends FixtureTest
        {
                $item = '';
                $key  = 'friendica_api';
-               self::assertTrue(BaseApi::reformatXML($item, $key));
+               self::assertTrue(ApiResponse::reformatXML($item, $key));
                self::assertEquals('friendica:api', $key);
        }
 
@@ -1113,7 +1114,7 @@ class ApiTest extends FixtureTest
                        'xmlns:georss="http://www.georss.org/georss">' . "\n" .
                        '  <data>some_data</data>' . "\n" .
                        '</root_element>' . "\n",
-                       BaseApi::createXML(['data' => ['some_data']], 'root_element')
+                       ApiResponse::createXML(['data' => ['some_data']], 'root_element')
                );
        }
 
@@ -1129,7 +1130,7 @@ class ApiTest extends FixtureTest
                        '<ok>' . "\n" .
                        '  <data>some_data</data>' . "\n" .
                        '</ok>' . "\n",
-                       BaseApi::createXML(['data' => ['some_data']], 'ok')
+                       ApiResponse::createXML(['data' => ['some_data']], 'ok')
                );
        }
 
@@ -1141,7 +1142,7 @@ class ApiTest extends FixtureTest
        public function testApiFormatData()
        {
                $data = ['some_data'];
-               self::assertEquals($data, BaseApi::formatData('root_element', 'json', $data));
+               self::assertEquals($data, ApiResponse::formatData('root_element', 'json', $data));
        }
 
        /**
@@ -1158,7 +1159,7 @@ class ApiTest extends FixtureTest
                        'xmlns:georss="http://www.georss.org/georss">' . "\n" .
                        '  <data>some_data</data>' . "\n" .
                        '</root_element>' . "\n",
-                       BaseApi::formatData('root_element', 'xml', ['data' => ['some_data']])
+                       ApiResponse::formatData('root_element', 'xml', ['data' => ['some_data']])
                );
        }