diff --git a/doc/Addons.md b/doc/Addons.md index 6b3cd169b..230e9e93b 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -566,7 +566,6 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep- Hook::callAll($a->module.'_mod_init', $placeholder); Hook::callAll($a->module.'_mod_init', $placeholder); Hook::callAll($a->module.'_mod_post', $_POST); - Hook::callAll($a->module.'_mod_afterpost', $placeholder); Hook::callAll($a->module.'_mod_content', $arr); Hook::callAll($a->module.'_mod_aftercontent', $arr); Hook::callAll('page_end', DI::page()['content']); diff --git a/doc/FAQ.md b/doc/FAQ.md index 24625a998..e8d2962dd 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -177,7 +177,7 @@ Friendica supports [Mastodon API](help/API-Mastodon) and [Twitter API](help/api) * [AndStatus](http://andstatus.org) ([F-Droid](https://f-droid.org/repository/browse/?fdid=org.andstatus.app), [Google Play](https://play.google.com/store/apps/details?id=org.andstatus.app)) * [B4X for Pleroma & Mastodon](https://github.com/AnywhereSoftware/B4X-Pleroma) -* [DiCa](https://dica.mixi.cool/) (Available at Google Play) +* DiCa ([Google Play](https://play.google.com/store/apps/details?id=cool.mixi.dica), last updated 2019) * [Fedi](https://play.google.com/store/apps/details?id=com.fediverse.app) * [Fedilab](https://fedilab.app) ([F-Droid](https://f-droid.org/app/fr.gouv.etalab.mastodon), [Google Play](https://play.google.com/store/apps/details?id=app.fedilab.android)) * [Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa) ([F-Droid](https://git.friendi.ca/lubuwest/Friendiqa#install), [Google Play](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa)) diff --git a/doc/de/Addons.md b/doc/de/Addons.md index a20cf4a59..3381ef48f 100644 --- a/doc/de/Addons.md +++ b/doc/de/Addons.md @@ -202,7 +202,6 @@ Eine komplette Liste aller Hook-Callbacks mit den zugehörigen Dateien (am 01-Ap Hook::callAll($a->module.'_mod_init', $placeholder); Hook::callAll($a->module.'_mod_init', $placeholder); Hook::callAll($a->module.'_mod_post', $_POST); - Hook::callAll($a->module.'_mod_afterpost', $placeholder); Hook::callAll($a->module.'_mod_content', $arr); Hook::callAll($a->module.'_mod_aftercontent', $arr); Hook::callAll('page_end', DI::page()['content']); diff --git a/doc/de/FAQ.md b/doc/de/FAQ.md index 16bbfa3fe..43d7f8554 100644 --- a/doc/de/FAQ.md +++ b/doc/de/FAQ.md @@ -186,7 +186,7 @@ Friendica unterstützt [Mastodon API](help/API-Mastodon) und [Twitter API](help/ * [AndStatus](http://andstatus.org) ([F-Droid](https://f-droid.org/repository/browse/?fdid=org.andstatus.app), [Google Play](https://play.google.com/store/apps/details?id=org.andstatus.app)) * [B4X for Pleroma & Mastodon](https://github.com/AnywhereSoftware/B4X-Pleroma) -* [DiCa](https://dica.mixi.cool/) (Gibt es bei Google Play) +* DiCa ([Google Play](https://play.google.com/store/apps/details?id=cool.mixi.dica), letztes Update 2019) * [Fedi](https://play.google.com/store/apps/details?id=com.fediverse.app) * [Fedilab](https://fedilab.app) ([F-Droid](https://f-droid.org/app/fr.gouv.etalab.mastodon), [Google Play](https://play.google.com/store/apps/details?id=app.fedilab.android)) * [Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa) (Gibt es im Google Playstore oder als [binary Repository](https://freunde.ma-nic.de/display/3e98eba8185a13c5bdbf3d1539646854) für F-Droid) diff --git a/include/api.php b/include/api.php index 164a9de53..d1ff1458e 100644 --- a/include/api.php +++ b/include/api.php @@ -42,7 +42,6 @@ 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; @@ -55,11 +54,9 @@ use Friendica\Network\HTTPException\UnauthorizedException; use Friendica\Object\Image; use Friendica\Protocol\Activity; use Friendica\Security\BasicAuth; -use Friendica\Security\OAuth; use Friendica\Util\DateTimeFormat; use Friendica\Util\Images; use Friendica\Util\Network; -use Friendica\Util\Proxy; use Friendica\Util\Strings; require_once __DIR__ . '/../mod/item.php'; @@ -73,28 +70,6 @@ define('API_METHOD_DELETE', 'POST,DELETE'); define('API_LOG_PREFIX', 'API {action} - '); $API = []; -$called_api = []; - -/** - * Auth API user - * - * It is not sufficient to use local_user() to check whether someone is allowed to use the API, - * because this will open CSRF holes (just embed an image with src=friendicasite.com/api/statuses/update?status=CSRF - * into a page, and visitors will post something without noticing it). - */ -function api_user() -{ - $user = OAuth::getCurrentUserID(); - if (!empty($user)) { - return $user; - } - - if (!empty($_SESSION['allow_api'])) { - return local_user(); - } - - return false; -} /** * Get source name from API client @@ -128,19 +103,6 @@ function api_source() return "api"; } -/** - * Format date for API - * - * @param string $str Source date, as UTC - * @return string Date in UTC formatted as "D M d H:i:s +0000 Y" - * @throws Exception - */ -function api_date($str) -{ - // Wed May 23 06:01:13 +0000 2007 - return DateTimeFormat::utc($str, "D M d H:i:s +0000 Y"); -} - /** * Register a function to be the endpoint for defined API path. * @@ -171,24 +133,6 @@ function api_register_func($path, $func, $auth = false, $method = API_METHOD_ANY ]; } -/** - * Check HTTP method of called API - * - * API endpoints can define which HTTP method to accept when called. - * This function check the current HTTP method agains endpoint - * registered method. - * - * @param string $method Required methods, uppercase, separated by comma - * @return bool - */ -function api_check_method($method) -{ - if ($method == "*") { - return true; - } - return (stripos($method, $_SERVER['REQUEST_METHOD'] ?? 'GET') !== false); -} - /** * Main API entry point * @@ -201,7 +145,7 @@ function api_check_method($method) */ function api_call(App $a, App\Arguments $args = null) { - global $API, $called_api; + global $API; if ($args == null) { $args = DI::args(); @@ -224,13 +168,7 @@ function api_call(App $a, App\Arguments $args = null) try { foreach ($API as $p => $info) { if (strpos($args->getCommand(), $p) === 0) { - if (!api_check_method($info['method'])) { - throw new MethodNotAllowedException(); - } - - $called_api = explode("/", $p); - - if (!empty($info['auth']) && api_user() === false) { + if (!empty($info['auth']) && BaseApi::getCurrentUserID() === false) { BasicAuth::getCurrentUserID(true); Logger::info(API_LOG_PREFIX . 'nickname {nickname}', ['module' => 'api', 'action' => 'call', 'nickname' => $a->getLoggedInUserNickname()]); } @@ -290,7 +228,6 @@ function api_call(App $a, App\Arguments $args = null) /** * Set values for RSS template * - * @param App $a * @param array $arr Array to be passed to template * @param array $user_info User info * @return array @@ -300,10 +237,15 @@ function api_call(App $a, App\Arguments $args = null) * @throws UnauthorizedException * @todo find proper type-hints */ -function api_rss_extra(App $a, $arr, $user_info) +function api_rss_extra($arr, $user_info) { if (is_null($user_info)) { - $user_info = api_get_user(); + $uid = BaseApi::getCurrentUserID(); + if (empty($uid)) { + throw new ForbiddenException(); + } + + $user_info = DI::twitterUser()->createFromUserId($uid)->toArray(); } $arr['$user'] = $user_info; @@ -311,7 +253,7 @@ function api_rss_extra(App $a, $arr, $user_info) 'alternate' => $user_info['url'], 'self' => DI::baseUrl() . "/" . DI::args()->getQueryString(), 'base' => DI::baseUrl(), - 'updated' => api_date(null), + 'updated' => DateTimeFormat::utc(null, DateTimeFormat::API), 'atom_updated' => DateTimeFormat::utcNow(DateTimeFormat::ATOM), 'language' => $user_info['lang'], 'logo' => DI::baseUrl() . "/images/friendica-32.png", @@ -340,294 +282,6 @@ function api_unique_id_to_nurl($id) } } -/** - * Get user info array. - * - * @param App $a App - * @param int|string $contact_id Contact ID or URL - * @return array|bool - * @throws BadRequestException - * @throws ImagickException - * @throws InternalServerErrorException - * @throws UnauthorizedException - */ -function api_get_user($contact_id = null) -{ - global $called_api; - - $user = null; - $extra_query = ""; - $url = ""; - - Logger::info(API_LOG_PREFIX . 'Fetching data for user {user}', ['module' => 'api', 'action' => 'get_user', 'user' => $contact_id]); - - // Searching for contact URL - if (!is_null($contact_id) && (intval($contact_id) == 0)) { - $user = Strings::normaliseLink($contact_id); - $url = $user; - $extra_query = "AND `contact`.`nurl` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=" . intval(api_user()); - } - } - - // Searching for contact id with uid = 0 - if (!is_null($contact_id) && (intval($contact_id) != 0)) { - $user = api_unique_id_to_nurl(intval($contact_id)); - - if ($user == "") { - throw new BadRequestException("User ID ".$contact_id." not found."); - } - - $url = $user; - $extra_query = "AND `contact`.`nurl` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=" . intval(api_user()); - } - } - - if (is_null($user) && !empty($_GET['user_id'])) { - $user = api_unique_id_to_nurl($_GET['user_id']); - - if ($user == "") { - throw new BadRequestException("User ID ".$_GET['user_id']." not found."); - } - - $url = $user; - $extra_query = "AND `contact`.`nurl` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=" . intval(api_user()); - } - } - if (is_null($user) && !empty($_GET['screen_name'])) { - $user = $_GET['screen_name']; - $extra_query = "AND `contact`.`nick` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=".intval(api_user()); - } - } - - if (is_null($user) && !empty($_GET['profileurl'])) { - $user = Strings::normaliseLink($_GET['profileurl']); - $extra_query = "AND `contact`.`nurl` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=".intval(api_user()); - } - } - - // $called_api is the API path exploded on / and is expected to have at least 2 elements - if (is_null($user) && (DI::args()->getArgc() > (count($called_api) - 1)) && (count($called_api) > 0)) { - $argid = count($called_api); - if (!empty(DI::args()->getArgv()[$argid])) { - $data = explode(".", DI::args()->getArgv()[$argid]); - if (count($data) > 1) { - [$user, $null] = $data; - } - } - if (is_numeric($user)) { - $user = api_unique_id_to_nurl(intval($user)); - - if ($user != "") { - $url = $user; - $extra_query = "AND `contact`.`nurl` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=" . intval(api_user()); - } - } - } else { - $extra_query = "AND `contact`.`nick` = ? "; - if (api_user() !== false) { - $extra_query .= "AND `contact`.`uid`=" . intval(api_user()); - } - } - } - - Logger::info(API_LOG_PREFIX . 'getting user {user}', ['module' => 'api', 'action' => 'get_user', 'user' => $user]); - - if (!$user) { - if (api_user() === false) { - BasicAuth::getCurrentUserID(true); - return false; - } else { - $user = api_user(); - $extra_query = "AND `contact`.`uid` = ? AND `contact`.`self` "; - } - } - - Logger::info(API_LOG_PREFIX . 'found user {user}', ['module' => 'api', 'action' => 'get_user', 'user' => $user, 'extra_query' => $extra_query]); - - // user info - $uinfo = DBA::toArray(DBA::p( - "SELECT *, `contact`.`id` AS `cid` FROM `contact` - WHERE 1 - $extra_query", - $user - )); - - // Selecting the id by priority, friendica first - if (is_array($uinfo)) { - api_best_nickname($uinfo); - } - - // if the contact wasn't found, fetch it from the contacts with uid = 0 - if (!DBA::isResult($uinfo)) { - if ($url == "") { - throw new BadRequestException("User not found."); - } - - $contact = DBA::selectFirst('contact', [], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]); - - if (DBA::isResult($contact)) { - $ret = [ - 'id' => $contact["id"], - 'id_str' => (string) $contact["id"], - 'name' => $contact["name"], - 'screen_name' => (($contact['nick']) ? $contact['nick'] : $contact['name']), - 'location' => ($contact["location"] != "") ? $contact["location"] : ContactSelector::networkToName($contact['network'], $contact['url'], $contact['protocol']), - 'description' => BBCode::toPlaintext($contact["about"] ?? ''), - 'profile_image_url' => Contact::getAvatarUrlForUrl($contact['url'], api_user(), Proxy::SIZE_MICRO), - 'profile_image_url_https' => Contact::getAvatarUrlForUrl($contact['url'], api_user(), Proxy::SIZE_MICRO), - 'profile_image_url_profile_size' => Contact::getAvatarUrlForUrl($contact['url'], api_user(), Proxy::SIZE_THUMB), - 'profile_image_url_large' => Contact::getAvatarUrlForUrl($contact['url'], api_user(), Proxy::SIZE_SMALL), - 'url' => $contact["url"], - 'protected' => false, - 'followers_count' => 0, - 'friends_count' => 0, - 'listed_count' => 0, - 'created_at' => api_date($contact["created"]), - 'favourites_count' => 0, - 'utc_offset' => 0, - 'time_zone' => 'UTC', - 'geo_enabled' => false, - 'verified' => false, - 'statuses_count' => 0, - 'lang' => '', - 'contributors_enabled' => false, - 'is_translator' => false, - 'is_translation_enabled' => false, - 'following' => false, - 'follow_request_sent' => false, - 'statusnet_blocking' => false, - 'notifications' => false, - 'statusnet_profile_url' => $contact["url"], - 'uid' => 0, - 'cid' => Contact::getIdForURL($contact["url"], api_user(), false), - 'pid' => Contact::getIdForURL($contact["url"], 0, false), - 'self' => 0, - 'network' => $contact["network"], - ]; - - return $ret; - } else { - throw new BadRequestException("User ".$url." not found."); - } - } - - if ($uinfo[0]['self']) { - if ($uinfo[0]['network'] == "") { - $uinfo[0]['network'] = Protocol::DFRN; - } - - $usr = DBA::selectFirst('user', ['default-location'], ['uid' => api_user()]); - $profile = DBA::selectFirst('profile', ['about'], ['uid' => api_user(), 'is-default' => true]); - } - $countitems = 0; - $countfriends = 0; - $countfollowers = 0; - $starred = 0; - - $pcontact_id = Contact::getIdForURL($uinfo[0]['url'], 0, false); - - if (!empty($profile['about'])) { - $description = $profile['about']; - } else { - $description = $uinfo[0]["about"]; - } - - if (!empty($usr['default-location'])) { - $location = $usr['default-location']; - } elseif (!empty($uinfo[0]["location"])) { - $location = $uinfo[0]["location"]; - } else { - $location = ContactSelector::networkToName($uinfo[0]['network'], $uinfo[0]['url'], $uinfo[0]['protocol']); - } - - $ret = [ - 'id' => intval($pcontact_id), - 'id_str' => (string) intval($pcontact_id), - 'name' => (($uinfo[0]['name']) ? $uinfo[0]['name'] : $uinfo[0]['nick']), - 'screen_name' => (($uinfo[0]['nick']) ? $uinfo[0]['nick'] : $uinfo[0]['name']), - 'location' => $location, - 'description' => BBCode::toPlaintext($description ?? ''), - 'profile_image_url' => Contact::getAvatarUrlForUrl($uinfo[0]['url'], api_user(), Proxy::SIZE_MICRO), - 'profile_image_url_https' => Contact::getAvatarUrlForUrl($uinfo[0]['url'], api_user(), Proxy::SIZE_MICRO), - 'profile_image_url_profile_size' => Contact::getAvatarUrlForUrl($uinfo[0]['url'], api_user(), Proxy::SIZE_THUMB), - 'profile_image_url_large' => Contact::getAvatarUrlForUrl($uinfo[0]['url'], api_user(), Proxy::SIZE_SMALL), - 'url' => $uinfo[0]['url'], - 'protected' => false, - 'followers_count' => intval($countfollowers), - 'friends_count' => intval($countfriends), - 'listed_count' => 0, - 'created_at' => api_date($uinfo[0]['created']), - 'favourites_count' => intval($starred), - 'utc_offset' => "0", - 'time_zone' => 'UTC', - 'geo_enabled' => false, - 'verified' => true, - 'statuses_count' => intval($countitems), - 'lang' => '', - 'contributors_enabled' => false, - 'is_translator' => false, - 'is_translation_enabled' => false, - 'following' => (($uinfo[0]['rel'] == Contact::FOLLOWER) || ($uinfo[0]['rel'] == Contact::FRIEND)), - 'follow_request_sent' => false, - 'statusnet_blocking' => false, - 'notifications' => false, - /// @TODO old way? - //'statusnet_profile_url' => DI::baseUrl()."/contact/".$uinfo[0]['cid'], - 'statusnet_profile_url' => $uinfo[0]['url'], - 'uid' => intval($uinfo[0]['uid']), - 'cid' => intval($uinfo[0]['cid']), - 'pid' => Contact::getIdForURL($uinfo[0]["url"], 0, false), - 'self' => $uinfo[0]['self'], - '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::selectFirst('user', ['theme'], ['uid' => $ret['uid']]); - if ($theme_info['theme'] === 'frio') { - $schema = DI::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 = DI::pConfig()->get($ret['uid'], 'frio', 'nav_bg'); - $link_color = DI::pConfig()->get($ret['uid'], 'frio', 'link_color'); - $bgcolor = DI::pConfig()->get($ret['uid'], 'frio', 'background_color'); - } - if (empty($nav_bg)) { - $nav_bg = "#708fa0"; - } - if (empty($link_color)) { - $link_color = "#6fdbe8"; - } - if (empty($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; -} - /** * return api-formatted array for item's author and owner * @@ -641,14 +295,20 @@ function api_get_user($contact_id = null) */ function api_item_get_user(App $a, $item) { - $status_user = api_get_user($item['author-id'] ?? null); + if (empty($item['author-id'])) { + $item['author-id'] = Contact::getPublicIdByUserId(BaseApi::getCurrentUserID()); + } + $status_user = DI::twitterUser()->createFromContactId($item['author-id'], BaseApi::getCurrentUserID())->toArray(); $author_user = $status_user; $status_user["protected"] = isset($item['private']) && ($item['private'] == Item::PRIVATE); if (($item['thr-parent'] ?? '') == ($item['uri'] ?? '')) { - $owner_user = api_get_user($item['owner-id'] ?? null); + if (empty($item['owner-id'])) { + $item['owner-id'] = Contact::getPublicIdByUserId(BaseApi::getCurrentUserID()); + } + $owner_user = DI::twitterUser()->createFromContactId($item['owner-id'], BaseApi::getCurrentUserID())->toArray(); } else { $owner_user = $author_user; } @@ -676,21 +336,17 @@ function api_item_get_user(App $a, $item) */ function api_account_verify_credentials($type) { - $a = DI::app(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false) { - throw new ForbiddenException(); - } + unset($_REQUEST['user_id']); + unset($_GET['user_id']); - unset($_REQUEST["user_id"]); - unset($_GET["user_id"]); - - unset($_REQUEST["screen_name"]); - unset($_GET["screen_name"]); + unset($_REQUEST['screen_name']); + unset($_GET['screen_name']); $skip_status = $_REQUEST['skip_status'] ?? false; - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); // "verified" isn't used here in the standard unset($user_info["verified"]); @@ -746,13 +402,11 @@ function api_statuses_mediap($type) { $a = DI::app(); - if (api_user() === false) { - logger::notice('api_statuses_update: no user'); - throw new ForbiddenException(); - } - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); - $_REQUEST['profile_uid'] = api_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); + + $_REQUEST['profile_uid'] = BaseApi::getCurrentUserID(); $_REQUEST['api_source'] = true; $txt = requestdata('status') ?? ''; /// @TODO old-lost code? @@ -800,12 +454,7 @@ function api_statuses_update($type) { $a = DI::app(); - if (api_user() === false) { - logger::notice('api_statuses_update: no user'); - throw new ForbiddenException(); - } - - api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // convert $_POST array items to the form we use for web posts. if (requestdata('htmlstatus')) { @@ -843,7 +492,7 @@ function api_statuses_update($type) if (requestdata('lat') && requestdata('long')) { $_REQUEST['coord'] = sprintf("%s %s", requestdata('lat'), requestdata('long')); } - $_REQUEST['profile_uid'] = api_user(); + $_REQUEST['profile_uid'] = BaseApi::getCurrentUserID(); if (!$parent) { // Check for throttling (maximum posts per day, week and month) @@ -851,11 +500,11 @@ function api_statuses_update($type) if ($throttle_day > 0) { $datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60); - $condition = ["`gravity` = ? AND `uid` = ? AND `wall` AND `received` > ?", GRAVITY_PARENT, api_user(), $datefrom]; + $condition = ["`gravity` = ? AND `uid` = ? AND `wall` AND `received` > ?", GRAVITY_PARENT, BaseApi::getCurrentUserID(), $datefrom]; $posts_day = Post::count($condition); if ($posts_day > $throttle_day) { - logger::info('Daily posting limit reached for user '.api_user()); + logger::info('Daily posting limit reached for user '.BaseApi::getCurrentUserID()); // die(api_error($type, DI::l10n()->t("Daily posting limit of %d posts reached. The post was rejected.", $throttle_day)); throw new TooManyRequestsException(DI::l10n()->tt("Daily posting limit of %d post reached. The post was rejected.", "Daily posting limit of %d posts reached. The post was rejected.", $throttle_day)); } @@ -865,11 +514,11 @@ function api_statuses_update($type) if ($throttle_week > 0) { $datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*7); - $condition = ["`gravity` = ? AND `uid` = ? AND `wall` AND `received` > ?", GRAVITY_PARENT, api_user(), $datefrom]; + $condition = ["`gravity` = ? AND `uid` = ? AND `wall` AND `received` > ?", GRAVITY_PARENT, BaseApi::getCurrentUserID(), $datefrom]; $posts_week = Post::count($condition); if ($posts_week > $throttle_week) { - logger::info('Weekly posting limit reached for user '.api_user()); + logger::info('Weekly posting limit reached for user '.BaseApi::getCurrentUserID()); // die(api_error($type, DI::l10n()->t("Weekly posting limit of %d posts reached. The post was rejected.", $throttle_week))); throw new TooManyRequestsException(DI::l10n()->tt("Weekly posting limit of %d post reached. The post was rejected.", "Weekly posting limit of %d posts reached. The post was rejected.", $throttle_week)); } @@ -879,11 +528,11 @@ function api_statuses_update($type) if ($throttle_month > 0) { $datefrom = date(DateTimeFormat::MYSQL, time() - 24*60*60*30); - $condition = ["`gravity` = ? AND `uid` = ? AND `wall` AND `received` > ?", GRAVITY_PARENT, api_user(), $datefrom]; + $condition = ["`gravity` = ? AND `uid` = ? AND `wall` AND `received` > ?", GRAVITY_PARENT, BaseApi::getCurrentUserID(), $datefrom]; $posts_month = Post::count($condition); if ($posts_month > $throttle_month) { - logger::info('Monthly posting limit reached for user '.api_user()); + logger::info('Monthly posting limit reached for user '.BaseApi::getCurrentUserID()); // die(api_error($type, DI::l10n()->t("Monthly posting limit of %d posts reached. The post was rejected.", $throttle_month)); throw new TooManyRequestsException(DI::l10n()->t("Monthly posting limit of %d post reached. The post was rejected.", "Monthly posting limit of %d posts reached. The post was rejected.", $throttle_month)); } @@ -908,7 +557,7 @@ function api_statuses_update($type) $media = DBA::toArray(DBA::p("SELECT `resource-id`, `scale`, `nickname`, `type`, `desc`, `filename`, `datasize`, `width`, `height` FROM `photo` INNER JOIN `user` ON `user`.`uid` = `photo`.`uid` WHERE `resource-id` IN (SELECT `resource-id` FROM `photo` WHERE `id` = ?) AND `photo`.`uid` = ? - ORDER BY `photo`.`width` DESC LIMIT 2", $id, api_user())); + ORDER BY `photo`.`width` DESC LIMIT 2", $id, BaseApi::getCurrentUserID())); if (!empty($media)) { $ressources[] = $media[0]['resource-id']; @@ -947,7 +596,7 @@ function api_statuses_update($type) $_REQUEST['api_source'] = true; if (empty($_REQUEST['source'])) { - $_REQUEST["source"] = api_source(); + $_REQUEST['source'] = api_source(); } // call out normal post function @@ -956,7 +605,7 @@ function api_statuses_update($type) if (!empty($ressources) && !empty($item_id)) { $item = Post::selectFirst(['uri-id', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['id' => $item_id]); foreach ($ressources as $ressource) { - Photo::setPermissionForRessource($ressource, api_user(), $item['allow_cid'], $item['allow_gid'], $item['deny_cid'], $item['deny_gid']); + Photo::setPermissionForRessource($ressource, BaseApi::getCurrentUserID(), $item['allow_cid'], $item['allow_gid'], $item['deny_cid'], $item['deny_gid']); } } @@ -983,12 +632,7 @@ function api_media_upload() { $a = DI::app(); - if (api_user() === false) { - logger::notice('no user'); - throw new ForbiddenException(); - } - - api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); if (empty($_FILES['media'])) { // Output error @@ -1036,14 +680,7 @@ api_register_func('api/media/upload', 'api_media_upload', true, API_METHOD_POST) */ function api_media_metadata_create($type) { - $a = DI::app(); - - if (api_user() === false) { - Logger::info('no user'); - throw new ForbiddenException(); - } - - api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); $postdata = Network::postdata(); @@ -1066,7 +703,7 @@ function api_media_metadata_create($type) Logger::info('Updating metadata', ['media_id' => $data['media_id']]); - $condition = ['id' => $data['media_id'], 'uid' => api_user()]; + $condition = ['id' => $data['media_id'], 'uid' => BaseApi::getCurrentUserID()]; $photo = DBA::selectFirst('photo', ['resource-id'], $condition); if (!DBA::isResult($photo)) { throw new BadRequestException("Metadata not found."); @@ -1149,9 +786,9 @@ function api_get_item(array $condition) */ function api_users_show($type) { - $a = Friendica\DI::app(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $item = api_get_last_status($user_info['pid'], $user_info['uid']); if (!empty($item)) { @@ -1183,8 +820,6 @@ api_register_func('api/externalprofile/show', 'api_users_show'); */ function api_users_search($type) { - $a = DI::app(); - $userlist = []; if (!empty($_GET['q'])) { @@ -1202,7 +837,7 @@ function api_users_search($type) if (DBA::isResult($contacts)) { $k = 0; foreach ($contacts as $contact) { - $user_info = api_get_user($contact['id']); + $user_info = DI::twitterUser()->createFromContactId($contact['id'], BaseApi::getCurrentUserID())->toArray(); if ($type == 'xml') { $userlist[$k++ . ':user'] = $user_info; @@ -1245,7 +880,10 @@ function api_users_lookup($type) if (!empty($_REQUEST['user_id'])) { foreach (explode(',', $_REQUEST['user_id']) as $id) { if (!empty($id)) { - $users[] = api_get_user($id); + $cid = BaseApi::getContactIDForSearchterm($id); + if (!empty($cid)) { + $users[] = DI::twitterUser()->createFromContactId($cid, BaseApi::getCurrentUserID())->toArray(); + } } } } @@ -1276,12 +914,9 @@ api_register_func('api/users/lookup', 'api_users_lookup', true); */ function api_search($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); if (empty($_REQUEST['q'])) { throw new BadRequestException('q parameter is required.'); @@ -1308,7 +943,7 @@ function api_search($type) $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; if (preg_match('/^#(\w+)$/', $searchTerm, $matches) === 1 && isset($matches[1])) { $searchTerm = $matches[1]; - $condition = ["`iid` > ? AND `name` = ? AND (NOT `private` OR (`private` AND `uid` = ?))", $since_id, $searchTerm, local_user()]; + $condition = ["`iid` > ? AND `name` = ? AND (NOT `private` OR (`private` AND `uid` = ?))", $since_id, $searchTerm, BaseApi::getCurrentUserID()]; $tags = DBA::select('tag-search-view', ['uri-id'], $condition); $uriids = []; while ($tag = DBA::fetch($tags)) { @@ -1331,7 +966,7 @@ function api_search($type) " . ($exclude_replies ? " AND `gravity` = " . GRAVITY_PARENT : ' ') . " AND (`uid` = 0 OR (`uid` = ? AND NOT `global`)) AND `body` LIKE CONCAT('%',?,'%')", - $since_id, api_user(), $_REQUEST['q']]; + $since_id, BaseApi::getCurrentUserID(), $_REQUEST['q']]; if ($max_id > 0) { $condition[0] .= ' AND `id` <= ?'; $condition[] = $max_id; @@ -1341,7 +976,7 @@ function api_search($type) $statuses = []; if (parse_url($searchTerm, PHP_URL_SCHEME) != '') { - $id = Item::fetchByLink($searchTerm, api_user()); + $id = Item::fetchByLink($searchTerm, BaseApi::getCurrentUserID()); if (!$id) { // Public post $id = Item::fetchByLink($searchTerm); @@ -1352,7 +987,7 @@ function api_search($type) } } - $statuses = $statuses ?: Post::selectForUser(api_user(), [], $condition, $params); + $statuses = $statuses ?: Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $data['status'] = api_format_items(Post::toArray($statuses), $user_info); @@ -1383,18 +1018,15 @@ api_register_func('api/search', 'api_search', true); */ function api_statuses_home_timeline($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); - unset($_REQUEST["user_id"]); - unset($_GET["user_id"]); + unset($_REQUEST['user_id']); + unset($_GET['user_id']); - unset($_REQUEST["screen_name"]); - unset($_GET["screen_name"]); + unset($_REQUEST['screen_name']); + unset($_GET['screen_name']); // get last network messages @@ -1409,7 +1041,7 @@ function api_statuses_home_timeline($type) $start = max(0, ($page - 1) * $count); $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ?", - api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id]; + BaseApi::getCurrentUserID(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id]; if ($max_id > 0) { $condition[0] .= " AND `id` <= ?"; @@ -1425,7 +1057,7 @@ function api_statuses_home_timeline($type) } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $items = Post::toArray($statuses); @@ -1451,7 +1083,7 @@ function api_statuses_home_timeline($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -1477,12 +1109,9 @@ api_register_func('api/statuses/friends_timeline', 'api_statuses_home_timeline', */ function api_statuses_public_timeline($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); // get last network messages @@ -1506,7 +1135,7 @@ function api_statuses_public_timeline($type) } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $r = Post::toArray($statuses); } else { @@ -1523,7 +1152,7 @@ function api_statuses_public_timeline($type) } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $r = Post::toArray($statuses); } @@ -1537,7 +1166,7 @@ function api_statuses_public_timeline($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -1560,12 +1189,9 @@ api_register_func('api/statuses/public_timeline', 'api_statuses_public_timeline' */ function api_statuses_networkpublic_timeline($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $since_id = $_REQUEST['since_id'] ?? 0; $max_id = $_REQUEST['max_id'] ?? 0; @@ -1585,7 +1211,7 @@ function api_statuses_networkpublic_timeline($type) } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::toArray(Post::selectForUser(api_user(), Item::DISPLAY_FIELDLIST, $condition, $params)); + $statuses = Post::toArray(Post::selectForUser(BaseApi::getCurrentUserID(), Item::DISPLAY_FIELDLIST, $condition, $params)); $ret = api_format_items($statuses, $user_info, false, $type); @@ -1596,7 +1222,7 @@ function api_statuses_networkpublic_timeline($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -1621,12 +1247,9 @@ api_register_func('api/statuses/networkpublic_timeline', 'api_statuses_networkpu */ function api_statuses_show($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); // params $id = intval(DI::args()->getArgv()[3] ?? 0); @@ -1650,7 +1273,7 @@ function api_statuses_show($type) throw new BadRequestException(sprintf("There is no status with the id %d", $id)); } - $item = Post::selectFirst(['id'], ['uri-id' => $uri_item['uri-id'], 'uid' => [0, api_user()]], ['order' => ['uid' => true]]); + $item = Post::selectFirst(['id'], ['uri-id' => $uri_item['uri-id'], 'uid' => [0, BaseApi::getCurrentUserID()]], ['order' => ['uid' => true]]); if (!DBA::isResult($item)) { throw new BadRequestException(sprintf("There is no status with the uri-id %d for the given user.", $uri_item['uri-id'])); } @@ -1665,7 +1288,7 @@ function api_statuses_show($type) $params = []; } - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); /// @TODO How about copying this to above methods which don't check $r ? if (!DBA::isResult($statuses)) { @@ -1700,12 +1323,9 @@ api_register_func('api/statuses/show', 'api_statuses_show', true); */ function api_conversation_show($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); // params $id = intval(DI::args()->getArgv()[3] ?? 0); @@ -1733,7 +1353,7 @@ function api_conversation_show($type) throw new BadRequestException("There is no status with the id $id."); } - $parent = Post::selectFirst(['id'], ['uri-id' => $item['parent-uri-id'], 'uid' => [0, api_user()]], ['order' => ['uid' => true]]); + $parent = Post::selectFirst(['id'], ['uri-id' => $item['parent-uri-id'], 'uid' => [0, BaseApi::getCurrentUserID()]], ['order' => ['uid' => true]]); if (!DBA::isResult($parent)) { throw new BadRequestException("There is no status with this id."); } @@ -1741,7 +1361,7 @@ function api_conversation_show($type) $id = $parent['id']; $condition = ["`parent` = ? AND `uid` IN (0, ?) AND `gravity` IN (?, ?) AND `id` > ?", - $id, api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id]; + $id, BaseApi::getCurrentUserID(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id]; if ($max_id > 0) { $condition[0] .= " AND `id` <= ?"; @@ -1749,7 +1369,7 @@ function api_conversation_show($type) } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); if (!DBA::isResult($statuses)) { throw new BadRequestException("There is no status with id $id."); @@ -1780,15 +1400,9 @@ api_register_func('api/statusnet/conversation', 'api_conversation_show', true); */ function api_statuses_repeat($type) { - global $called_api; - $a = DI::app(); - if (api_user() === false) { - throw new ForbiddenException(); - } - - api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params $id = intval(DI::args()->getArgv()[3] ?? 0); @@ -1809,7 +1423,7 @@ function api_statuses_repeat($type) if (DBA::isResult($item) && !empty($item['body'])) { if (in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::TWITTER])) { - if (!Item::performActivity($id, 'announce', local_user())) { + if (!Item::performActivity($id, 'announce', BaseApi::getCurrentUserID())) { throw new InternalServerErrorException(); } @@ -1829,11 +1443,11 @@ function api_statuses_repeat($type) $post .= "[/share]"; } $_REQUEST['body'] = $post; - $_REQUEST['profile_uid'] = api_user(); + $_REQUEST['profile_uid'] = BaseApi::getCurrentUserID(); $_REQUEST['api_source'] = true; if (empty($_REQUEST['source'])) { - $_REQUEST["source"] = api_source(); + $_REQUEST['source'] = api_source(); } $item_id = item_post($a); @@ -1843,7 +1457,6 @@ function api_statuses_repeat($type) } // output the post that we just posted. - $called_api = []; return api_status_show($type, $item_id); } @@ -1865,13 +1478,7 @@ api_register_func('api/statuses/retweet', 'api_statuses_repeat', true, API_METHO */ function api_statuses_destroy($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } - - api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params $id = intval(DI::args()->getArgv()[3] ?? 0); @@ -1889,7 +1496,7 @@ function api_statuses_destroy($type) $ret = api_statuses_show($type); - Item::deleteForUser(['id' => $id], api_user()); + Item::deleteForUser(['id' => $id], BaseApi::getCurrentUserID()); return $ret; } @@ -1912,18 +1519,15 @@ api_register_func('api/statuses/destroy', 'api_statuses_destroy', true, API_METH */ function api_statuses_mentions($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); - unset($_REQUEST["user_id"]); - unset($_GET["user_id"]); + unset($_REQUEST['user_id']); + unset($_GET['user_id']); - unset($_REQUEST["screen_name"]); - unset($_GET["screen_name"]); + unset($_REQUEST['screen_name']); + unset($_GET['screen_name']); // get last network messages @@ -1941,11 +1545,11 @@ function api_statuses_mentions($type) $condition = [ GRAVITY_PARENT, GRAVITY_COMMENT, - api_user(), + BaseApi::getCurrentUserID(), Post\UserNotification::TYPE_EXPLICIT_TAGGED | Post\UserNotification::TYPE_IMPLICIT_TAGGED | Post\UserNotification::TYPE_THREAD_COMMENT | Post\UserNotification::TYPE_DIRECT_COMMENT | Post\UserNotification::TYPE_DIRECT_THREAD_COMMENT, - api_user(), $since_id, + BaseApi::getCurrentUserID(), $since_id, ]; if ($max_id > 0) { @@ -1956,7 +1560,7 @@ function api_statuses_mentions($type) array_unshift($condition, $query); $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type); @@ -1965,7 +1569,7 @@ function api_statuses_mentions($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -1990,14 +1594,11 @@ api_register_func('api/statuses/replies', 'api_statuses_mentions', true); */ function api_statuses_user_timeline($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); - Logger::info('api_statuses_user_timeline', ['api_user' => api_user(), 'user_info' => $user_info, '_REQUEST' => $_REQUEST]); + Logger::info('api_statuses_user_timeline', ['api_user' => BaseApi::getCurrentUserID(), 'user_info' => $user_info, '_REQUEST' => $_REQUEST]); $since_id = $_REQUEST['since_id'] ?? 0; $max_id = $_REQUEST['max_id'] ?? 0; @@ -2011,7 +1612,7 @@ function api_statuses_user_timeline($type) $start = max(0, ($page - 1) * $count); $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ? AND `contact-id` = ?", - api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id, $user_info['cid']]; + BaseApi::getCurrentUserID(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id, $user_info['cid']]; if ($user_info['self'] == 1) { $condition[0] .= ' AND `wall` '; @@ -2032,7 +1633,7 @@ function api_statuses_user_timeline($type) $condition[] = $max_id; } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $ret = api_format_items(Post::toArray($statuses), $user_info, true, $type); @@ -2043,7 +1644,7 @@ function api_statuses_user_timeline($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -2069,11 +1670,7 @@ api_register_func('api/statuses/user_timeline', 'api_statuses_user_timeline', tr */ function api_favorites_create_destroy($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // for versioned api. /// @TODO We need a better global soluton @@ -2092,7 +1689,7 @@ function api_favorites_create_destroy($type) $itemid = intval($_REQUEST['id'] ?? 0); } - $item = Post::selectFirstForUser(api_user(), [], ['id' => $itemid, 'uid' => api_user()]); + $item = Post::selectFirstForUser(BaseApi::getCurrentUserID(), [], ['id' => $itemid, 'uid' => BaseApi::getCurrentUserID()]); if (!DBA::isResult($item)) { throw new BadRequestException("Invalid item."); @@ -2115,8 +1712,7 @@ function api_favorites_create_destroy($type) throw new InternalServerErrorException("DB error"); } - - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $rets = api_format_items([$item], $user_info, false, $type); $ret = $rets[0]; @@ -2125,7 +1721,7 @@ function api_favorites_create_destroy($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -2150,16 +1746,9 @@ api_register_func('api/favorites/destroy', 'api_favorites_create_destroy', true, */ function api_favorites($type) { - global $called_api; + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - $a = DI::app(); - $user_info = api_get_user(); - - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } - - $called_api = []; + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); // in friendica starred item are private // return favorites only for self @@ -2177,7 +1766,7 @@ function api_favorites($type) $start = max(0, ($page - 1) * $count); $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `id` > ? AND `starred`", - api_user(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id]; + BaseApi::getCurrentUserID(), GRAVITY_PARENT, GRAVITY_COMMENT, $since_id]; $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; @@ -2186,7 +1775,7 @@ function api_favorites($type) $condition[] = $max_id; } - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $ret = api_format_items(Post::toArray($statuses), $user_info, false, $type); } @@ -2198,7 +1787,7 @@ function api_favorites($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -2225,7 +1814,7 @@ function api_format_messages($item, $recipient, $sender) 'sender_id' => $sender['id'], 'text' => "", 'recipient_id' => $recipient['id'], - 'created_at' => api_date($item['created'] ?? DateTimeFormat::utcNow()), + 'created_at' => DateTimeFormat::utc($item['created'] ?? 'now', DateTimeFormat::API), 'sender_screen_name' => $sender['screen_name'], 'recipient_screen_name' => $recipient['screen_name'], 'sender' => $sender, @@ -2624,8 +2213,6 @@ function api_contactlink_to_array($txt) */ function api_format_items_activities($item, $type = "json") { - $a = DI::app(); - $activities = [ 'like' => [], 'dislike' => [], @@ -2643,7 +2230,7 @@ function api_format_items_activities($item, $type = "json") //builtin_activity_puller($i, $activities); // get user data and add it to the array of the activity - $user = api_get_user($parent_item['author-id']); + $user = DI::twitterUser()->createFromContactId($parent_item['author-id'], BaseApi::getCurrentUserID())->toArray(); switch ($parent_item['verb']) { case Activity::LIKE: $activities['like'][] = $user; @@ -2702,7 +2289,7 @@ function api_format_items_activities($item, $type = "json") */ function api_format_items($items, $user_info, $filter_user = false, $type = "json") { - $a = Friendica\DI::app(); + $a = DI::app(); $ret = []; @@ -2740,7 +2327,7 @@ function api_format_items($items, $user_info, $filter_user = false, $type = "jso */ function api_format_item($item, $type = "json", $status_user = null, $author_user = null, $owner_user = null) { - $a = Friendica\DI::app(); + $a = DI::app(); if (empty($status_user) || empty($author_user) || empty($owner_user)) { [$status_user, $author_user, $owner_user] = api_item_get_user($a, $item); @@ -2761,7 +2348,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use $status = [ 'text' => $converted["text"], 'truncated' => false, - 'created_at'=> api_date($item['created']), + 'created_at'=> DateTimeFormat::utc($item['created'], DateTimeFormat::API), 'in_reply_to_status_id' => $in_reply_to['status_id'], 'in_reply_to_status_id_str' => $in_reply_to['status_id_str'], 'source' => (($item['app']) ? $item['app'] : 'web'), @@ -2807,7 +2394,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use if (!empty($announce)) { $retweeted_item = $item; $item = $announce; - $status['friendica_owner'] = api_get_user($announce['author-id']); + $status['friendica_owner'] = DI::twitterUser()->createFromContactId($announce['author-id'], BaseApi::getCurrentUserID())->toArray(); } } @@ -2826,7 +2413,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use $quoted_status['text'] = $conv_quoted['text']; $quoted_status['statusnet_html'] = $conv_quoted['html']; try { - $quoted_status["user"] = api_get_user($quoted_item["author-id"]); + $quoted_status["user"] = DI::twitterUser()->createFromContactId($quoted_item['author-id'], BaseApi::getCurrentUserID())->toArray(); } catch (BadRequestException $e) { // user not found. should be found? /// @todo check if the user should be always found @@ -2848,7 +2435,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use unset($retweeted_status['statusnet_conversation_id']); $status['user'] = $status['friendica_owner']; try { - $retweeted_status["user"] = api_get_user($retweeted_item["author-id"]); + $retweeted_status["user"] = DI::twitterUser()->createFromContactId($retweeted_item['author-id'], BaseApi::getCurrentUserID())->toArray(); } catch (BadRequestException $e) { // user not found. should be found? /// @todo check if the user should be always found @@ -2860,7 +2447,7 @@ function api_format_item($item, $type = "json", $status_user = null, $author_use $retweeted_status['text'] = $rt_converted["text"]; $retweeted_status['statusnet_html'] = $rt_converted["html"]; $retweeted_status['friendica_html'] = $rt_converted["html"]; - $retweeted_status['created_at'] = api_date($retweeted_item['created']); + $retweeted_status['created_at'] = DateTimeFormat::utc($retweeted_item['created'], DateTimeFormat::API); if (!empty($quoted_status)) { $retweeted_status['quoted_status'] = $quoted_status; @@ -2930,14 +2517,10 @@ api_register_func('api/lists/subscriptions', 'api_lists_list', true); */ function api_lists_ownerships($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $uid = $user_info['uid']; $groups = DBA::select('group', [], ['deleted' => 0, 'uid' => $uid]); @@ -2979,18 +2562,15 @@ api_register_func('api/lists/ownerships', 'api_lists_ownerships', true); */ function api_lists_statuses($type) { - $a = DI::app(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); - $user_info = api_get_user(); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); - unset($_REQUEST["user_id"]); - unset($_GET["user_id"]); + unset($_REQUEST['user_id']); + unset($_GET['user_id']); - unset($_REQUEST["screen_name"]); - unset($_GET["screen_name"]); + unset($_REQUEST['screen_name']); + unset($_GET['screen_name']); if (empty($_REQUEST['list_id'])) { throw new BadRequestException('list_id not specified'); @@ -3008,7 +2588,7 @@ function api_lists_statuses($type) $groups = DBA::selectToArray('group_member', ['contact-id'], ['gid' => 1]); $gids = array_column($groups, 'contact-id'); - $condition = ['uid' => api_user(), 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT], 'group-id' => $gids]; + $condition = ['uid' => BaseApi::getCurrentUserID(), 'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT], 'group-id' => $gids]; $condition = DBA::mergeConditions($condition, ["`id` > ?", $since_id]); if ($max_id > 0) { @@ -3025,7 +2605,7 @@ function api_lists_statuses($type) } $params = ['order' => ['id' => true], 'limit' => [$start, $count]]; - $statuses = Post::selectForUser(api_user(), [], $condition, $params); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition, $params); $items = api_format_items(Post::toArray($statuses), $user_info, false, $type); @@ -3034,7 +2614,7 @@ function api_lists_statuses($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -3060,11 +2640,7 @@ api_register_func('api/lists/statuses', 'api_lists_statuses', true); */ function api_statuses_f($qtype) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); // pagination $count = $_GET['count'] ?? 20; @@ -3072,7 +2648,7 @@ function api_statuses_f($qtype) $start = max(0, ($page - 1) * $count); - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); if (!empty($_GET['cursor']) && $_GET['cursor'] == 'undefined') { /* this is to stop Hotot to load friends multiple times @@ -3107,7 +2683,7 @@ function api_statuses_f($qtype) // @todo This query most likely can be replaced with a Contact::select... $r = DBA::toArray(DBA::p( - "SELECT `nurl` + "SELECT `id` FROM `contact` WHERE `uid` = ? AND NOT `self` @@ -3115,14 +2691,14 @@ function api_statuses_f($qtype) $sql_extra ORDER BY `nick` LIMIT ?, ?", - api_user(), + BaseApi::getCurrentUserID(), $start, $count )); $ret = []; foreach ($r as $cid) { - $user = api_get_user($cid['nurl']); + $user = DI::twitterUser()->createFromContactId($cid['id'], BaseApi::getCurrentUserID())->toArray(); // "uid" and "self" are only needed for some internal stuff, so remove it from here unset($user["uid"]); unset($user["self"]); @@ -3246,29 +2822,30 @@ api_register_func('api/friendships/incoming', 'api_friendships_incoming', true); */ function api_direct_messages_new($type) { - $a = DI::app(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); - if (api_user() === false) { - throw new ForbiddenException(); - } + $uid = BaseApi::getCurrentUserID(); - if (empty($_POST["text"]) || empty($_POST["screen_name"]) && empty($_POST["user_id"])) { + if (empty($_POST["text"]) || empty($_POST['screen_name']) && empty($_POST['user_id'])) { return; } - $sender = api_get_user(); + $sender = DI::twitterUser()->createFromUserId($uid)->toArray(); $recipient = null; if (!empty($_POST['screen_name'])) { - $contacts = Contact::selectToArray(['id', 'nurl', 'network'], ['uid' => api_user(), 'nick' => $_POST['screen_name']]); + $contacts = Contact::selectToArray(['id', 'nurl', 'network'], ['uid' => BaseApi::getCurrentUserID(), 'nick' => $_POST['screen_name']]); if (DBA::isResult($contacts)) { // Selecting the id by priority, friendica first api_best_nickname($contacts); - $recipient = api_get_user($contacts[0]['nurl']); + $recipient = DI::twitterUser()->createFromContactId($contacts[0]['id'], $uid)->toArray(); } } else { - $recipient = api_get_user($_POST['user_id']); + $cid = BaseApi::getContactIDForSearchterm($_POST['user_id']); + if (!empty($cid)) { + $recipient = DI::twitterUser()->createFromContactId($cid, $uid)->toArray(); + } } if (empty($recipient)) { @@ -3277,7 +2854,7 @@ function api_direct_messages_new($type) $replyto = ''; if (!empty($_REQUEST['replyto'])) { - $mail = DBA::selectFirst('mail', ['parent-uri', 'title'], ['uid' => api_user(), 'id' => $_REQUEST['replyto']]); + $mail = DBA::selectFirst('mail', ['parent-uri', 'title'], ['uid' => BaseApi::getCurrentUserID(), 'id' => $_REQUEST['replyto']]); $replyto = $mail['parent-uri']; $sub = $mail['title']; } else { @@ -3303,7 +2880,7 @@ function api_direct_messages_new($type) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $sender); + $data = api_rss_extra($data, $sender); break; } @@ -3327,14 +2904,10 @@ api_register_func('api/direct_messages/new', 'api_direct_messages_new', true, AP */ function api_direct_messages_destroy($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); //required $id = $_REQUEST['id'] ?? 0; // optional @@ -3400,11 +2973,8 @@ api_register_func('api/direct_messages/destroy', 'api_direct_messages_destroy', */ function api_friendships_destroy($type) { - $uid = api_user(); - - if ($uid === false) { - throw new HTTPException\ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); + $uid = BaseApi::getCurrentUserID(); $owner = User::getOwnerDataById($uid); if (!$owner) { @@ -3482,10 +3052,8 @@ api_register_func('api/friendships/destroy', 'api_friendships_destroy', true, AP */ function api_direct_messages_box($type, $box, $verbose) { - $a = DI::app(); - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); + // params $count = $_GET['count'] ?? 20; $page = $_REQUEST['page'] ?? 1; @@ -3497,16 +3065,14 @@ function api_direct_messages_box($type, $box, $verbose) $screen_name = $_REQUEST['screen_name'] ?? ''; // caller user info - unset($_REQUEST["user_id"]); - unset($_GET["user_id"]); + unset($_REQUEST['user_id']); + unset($_GET['user_id']); - unset($_REQUEST["screen_name"]); - unset($_GET["screen_name"]); + unset($_REQUEST['screen_name']); + unset($_GET['screen_name']); + + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); - $user_info = api_get_user(); - if ($user_info === false) { - throw new ForbiddenException(); - } $profile_url = $user_info["url"]; // pagination @@ -3537,7 +3103,7 @@ function api_direct_messages_box($type, $box, $verbose) $r = DBA::toArray(DBA::p( "SELECT `mail`.*, `contact`.`nurl` AS `contact-url` FROM `mail`,`contact` WHERE `mail`.`contact-id` = `contact`.`id` AND `mail`.`uid` = ? AND $sql_extra AND `mail`.`id` > ? ORDER BY `mail`.`id` DESC LIMIT ?,?", - api_user(), + BaseApi::getCurrentUserID(), $since_id, $start, $count @@ -3551,9 +3117,9 @@ function api_direct_messages_box($type, $box, $verbose) foreach ($r as $item) { if ($box == "inbox" || $item['from-url'] != $profile_url) { $recipient = $user_info; - $sender = api_get_user(Strings::normaliseLink($item['contact-url'])); + $sender = DI::twitterUser()->createFromContactId($item['contact-id'], BaseApi::getCurrentUserID())->toArray(); } elseif ($box == "sentbox" || $item['from-url'] == $profile_url) { - $recipient = api_get_user(Strings::normaliseLink($item['contact-url'])); + $recipient = DI::twitterUser()->createFromContactId($item['contact-id'], BaseApi::getCurrentUserID())->toArray(); $sender = $user_info; } @@ -3568,7 +3134,7 @@ function api_direct_messages_box($type, $box, $verbose) case "atom": break; case "rss": - $data = api_rss_extra($a, $data, $user_info); + $data = api_rss_extra($data, $user_info); break; } @@ -3651,14 +3217,13 @@ api_register_func('api/direct_messages', 'api_direct_messages_inbox', true); */ function api_fr_photos_list($type) { - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); + $r = DBA::toArray(DBA::p( "SELECT `resource-id`, MAX(scale) AS `scale`, `album`, `filename`, `type`, MAX(`created`) AS `created`, MAX(`edited`) AS `edited`, MAX(`desc`) AS `desc` FROM `photo` WHERE `uid` = ? AND NOT `photo-type` IN (?, ?) GROUP BY `resource-id`, `album`, `filename`, `type`", - local_user(), Photo::CONTACT_AVATAR, Photo::CONTACT_BANNER + BaseApi::getCurrentUserID(), Photo::CONTACT_AVATAR, Photo::CONTACT_BANNER )); $typetoext = [ 'image/jpeg' => 'jpg', @@ -3702,9 +3267,8 @@ function api_fr_photos_list($type) */ function api_fr_photo_create_update($type) { - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); + // input params $photo_id = $_REQUEST['photo_id'] ?? null; $desc = $_REQUEST['desc'] ?? null; @@ -3737,7 +3301,7 @@ function api_fr_photo_create_update($type) $mode = "update"; // check if photo is existing in databasei - if (!Photo::exists(['resource-id' => $photo_id, 'uid' => api_user(), 'album' => $album])) { + if (!Photo::exists(['resource-id' => $photo_id, 'uid' => BaseApi::getCurrentUserID(), 'album' => $album])) { throw new BadRequestException("photo not available"); } } @@ -3799,7 +3363,7 @@ function api_fr_photo_create_update($type) $result = false; if (count($updated_fields) > 0) { $nothingtodo = false; - $result = Photo::update($updated_fields, ['uid' => api_user(), 'resource-id' => $photo_id, 'album' => $album]); + $result = Photo::update($updated_fields, ['uid' => BaseApi::getCurrentUserID(), 'resource-id' => $photo_id, 'album' => $album]); } else { $nothingtodo = true; } @@ -3840,9 +3404,8 @@ function api_fr_photo_create_update($type) */ function api_fr_photo_detail($type) { - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); + if (empty($_REQUEST['photo_id'])) { throw new BadRequestException("No photo id."); } @@ -3872,9 +3435,8 @@ function api_fr_photo_detail($type) */ function api_account_update_profile_image($type) { - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); + // input params $profile_id = $_REQUEST['profile_id'] ?? 0; @@ -3885,7 +3447,7 @@ function api_account_update_profile_image($type) // check if specified profile id is valid if ($profile_id != 0) { - $profile = DBA::selectFirst('profile', ['is-default'], ['uid' => api_user(), 'id' => $profile_id]); + $profile = DBA::selectFirst('profile', ['is-default'], ['uid' => BaseApi::getCurrentUserID(), 'id' => $profile_id]); // error message if specified profile id is not in database if (!DBA::isResult($profile)) { throw new BadRequestException("profile_id not available"); @@ -3921,18 +3483,18 @@ function api_account_update_profile_image($type) // change specified profile or all profiles to the new resource-id if ($is_default_profile) { - $condition = ["`profile` AND `resource-id` != ? AND `uid` = ?", $data['photo']['id'], api_user()]; + $condition = ["`profile` AND `resource-id` != ? AND `uid` = ?", $data['photo']['id'], BaseApi::getCurrentUserID()]; Photo::update(['profile' => false, 'photo-type' => Photo::DEFAULT], $condition); } else { $fields = ['photo' => DI::baseUrl() . '/photo/' . $data['photo']['id'] . '-4.' . $fileext, 'thumb' => DI::baseUrl() . '/photo/' . $data['photo']['id'] . '-5.' . $fileext]; - DBA::update('profile', $fields, ['id' => $_REQUEST['profile'], 'uid' => api_user()]); + DBA::update('profile', $fields, ['id' => $_REQUEST['profile'], 'uid' => BaseApi::getCurrentUserID()]); } - Contact::updateSelfFromUserID(api_user(), true); + Contact::updateSelfFromUserID(BaseApi::getCurrentUserID(), true); // Update global directory in background - Profile::publishUpdate(api_user()); + Profile::publishUpdate(BaseApi::getCurrentUserID()); // output for client if ($data) { @@ -3964,8 +3526,11 @@ api_register_func('api/account/update_profile_image', 'api_account_update_profil */ function api_account_update_profile($type) { - $local_user = api_user(); - $api_user = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); + + $local_user = BaseApi::getCurrentUserID(); + + $api_user = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); if (!empty($_POST['name'])) { DBA::update('profile', ['name' => $_POST['name']], ['uid' => $local_user]); @@ -4010,7 +3575,7 @@ function check_acl_input($acl_string) foreach ($cid_array as $cid) { $cid = str_replace("<", "", $cid); $cid = str_replace(">", "", $cid); - $condition = ['id' => $cid, 'uid' => api_user()]; + $condition = ['id' => $cid, 'uid' => BaseApi::getCurrentUserID()]; $contact_not_found |= !DBA::exists('contact', $condition); } return $contact_not_found; @@ -4112,13 +3677,13 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ // upload normal image (scales 0, 1, 2) logger::info("photo upload: starting new photo upload"); - $r = Photo::store($Image, local_user(), $visitor, $resource_id, $filename, $album, 0, Photo::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, BaseApi::getCurrentUserID(), $visitor, $resource_id, $filename, $album, 0, Photo::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (!$r) { logger::notice("photo upload: image upload with scale 0 (original size) failed"); } if ($width > 640 || $height > 640) { $Image->scaleDown(640); - $r = Photo::store($Image, local_user(), $visitor, $resource_id, $filename, $album, 1, Photo::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, BaseApi::getCurrentUserID(), $visitor, $resource_id, $filename, $album, 1, Photo::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (!$r) { logger::notice("photo upload: image upload with scale 1 (640x640) failed"); } @@ -4126,7 +3691,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ if ($width > 320 || $height > 320) { $Image->scaleDown(320); - $r = Photo::store($Image, local_user(), $visitor, $resource_id, $filename, $album, 2, Photo::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, BaseApi::getCurrentUserID(), $visitor, $resource_id, $filename, $album, 2, Photo::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (!$r) { logger::notice("photo upload: image upload with scale 2 (320x320) failed"); } @@ -4138,7 +3703,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ if ($width > 300 || $height > 300) { $Image->scaleDown(300); - $r = Photo::store($Image, local_user(), $visitor, $resource_id, $filename, $album, 4, $phototype, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, BaseApi::getCurrentUserID(), $visitor, $resource_id, $filename, $album, 4, $phototype, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (!$r) { logger::notice("photo upload: profile image upload with scale 4 (300x300) failed"); } @@ -4146,7 +3711,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ if ($width > 80 || $height > 80) { $Image->scaleDown(80); - $r = Photo::store($Image, local_user(), $visitor, $resource_id, $filename, $album, 5, $phototype, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, BaseApi::getCurrentUserID(), $visitor, $resource_id, $filename, $album, 5, $phototype, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (!$r) { logger::notice("photo upload: profile image upload with scale 5 (80x80) failed"); } @@ -4154,7 +3719,7 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ if ($width > 48 || $height > 48) { $Image->scaleDown(48); - $r = Photo::store($Image, local_user(), $visitor, $resource_id, $filename, $album, 6, $phototype, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); + $r = Photo::store($Image, BaseApi::getCurrentUserID(), $visitor, $resource_id, $filename, $album, 6, $phototype, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc); if (!$r) { logger::notice("photo upload: profile image upload with scale 6 (48x48) failed"); } @@ -4189,12 +3754,12 @@ function save_media_to_database($mediatype, $media, $type, $album, $allow_cid, $ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $filetype, $visibility = false) { // get data about the api authenticated user - $uri = Item::newURI(intval(api_user())); - $owner_record = DBA::selectFirst('contact', [], ['uid' => api_user(), 'self' => true]); + $uri = Item::newURI(intval(BaseApi::getCurrentUserID())); + $owner_record = DBA::selectFirst('contact', [], ['uid' => BaseApi::getCurrentUserID(), 'self' => true]); $arr = []; $arr['guid'] = System::createUUID(); - $arr['uid'] = intval(api_user()); + $arr['uid'] = intval(BaseApi::getCurrentUserID()); $arr['uri'] = $uri; $arr['type'] = 'photo'; $arr['wall'] = 1; @@ -4245,12 +3810,9 @@ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $f */ function prepare_photo_data($type, $scale, $photo_id) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); - if ($user_info === false) { - throw new ForbiddenException(); - } + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $scale_sql = ($scale === false ? "" : sprintf("AND scale=%d", intval($scale))); $data_sql = ($scale === false ? "" : "data, "); @@ -4264,7 +3826,7 @@ function prepare_photo_data($type, $scale, $photo_id) FROM `photo` WHERE `uid` = ? AND `resource-id` = ? $scale_sql GROUP BY `resource-id`, `created`, `edited`, `title`, `desc`, `album`, `filename`, `type`, `height`, `width`, `datasize`, `profile`, `allow_cid`, `deny_cid`, `allow_gid`, `deny_gid`", - local_user(), + BaseApi::getCurrentUserID(), $photo_id )); @@ -4307,7 +3869,7 @@ function prepare_photo_data($type, $scale, $photo_id) } // retrieve item element for getting activities (like, dislike etc.) related to photo - $condition = ['uid' => api_user(), 'resource-id' => $photo_id]; + $condition = ['uid' => BaseApi::getCurrentUserID(), 'resource-id' => $photo_id]; $item = Post::selectFirst(['id', 'uid', 'uri', 'parent', 'allow_cid', 'deny_cid', 'allow_gid', 'deny_gid'], $condition); if (!DBA::isResult($item)) { throw new NotFoundException('Photo-related item not found.'); @@ -4317,9 +3879,9 @@ function prepare_photo_data($type, $scale, $photo_id) // retrieve comments on photo $condition = ["`parent` = ? AND `uid` = ? AND `gravity` IN (?, ?)", - $item['parent'], api_user(), GRAVITY_PARENT, GRAVITY_COMMENT]; + $item['parent'], BaseApi::getCurrentUserID(), GRAVITY_PARENT, GRAVITY_COMMENT]; - $statuses = Post::selectForUser(api_user(), [], $condition); + $statuses = Post::selectForUser(BaseApi::getCurrentUserID(), [], $condition); // prepare output of comments $commentData = api_format_items(Post::toArray($statuses), $user_info, false, $type); @@ -4539,14 +4101,10 @@ function api_best_nickname(&$contacts) */ function api_friendica_group_show($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $gid = $_REQUEST['gid'] ?? 0; $uid = $user_info['uid']; @@ -4572,13 +4130,13 @@ function api_friendica_group_show($type) $user_element = "users"; $k = 0; foreach ($members as $member) { - $user = api_get_user($member['nurl']); + $user = DI::twitterUser()->createFromContactId($member['contact-id'], BaseApi::getCurrentUserID())->toArray(); $users[$k++.":user"] = $user; } } else { $user_element = "user"; foreach ($members as $member) { - $user = api_get_user($member['nurl']); + $user = DI::twitterUser()->createFromContactId($member['contact-id'], BaseApi::getCurrentUserID())->toArray(); $users[] = $user; } } @@ -4604,14 +4162,10 @@ api_register_func('api/friendica/group_show', 'api_friendica_group_show', true); */ function api_lists_destroy($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $gid = $_REQUEST['list_id'] ?? 0; $uid = $user_info['uid']; @@ -4709,14 +4263,10 @@ function group_create($name, $uid, $users = []) */ function api_friendica_group_create($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $name = $_REQUEST['name'] ?? ''; $uid = $user_info['uid']; $json = json_decode($_POST['json'], true); @@ -4744,14 +4294,10 @@ api_register_func('api/friendica/group_create', 'api_friendica_group_create', tr */ function api_lists_create($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $name = $_REQUEST['name'] ?? ''; $uid = $user_info['uid']; @@ -4784,14 +4330,10 @@ api_register_func('api/lists/create', 'api_lists_create', true, API_METHOD_POST) */ function api_friendica_group_update($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $uid = $user_info['uid']; $gid = $_REQUEST['gid'] ?? 0; $name = $_REQUEST['name'] ?? ''; @@ -4858,14 +4400,10 @@ api_register_func('api/friendica/group_update', 'api_friendica_group_update', tr */ function api_lists_update($type) { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $gid = $_REQUEST['list_id'] ?? 0; $name = $_REQUEST['name'] ?? ''; $uid = $user_info['uid']; @@ -4911,12 +4449,10 @@ api_register_func('api/lists/update', 'api_lists_update', true, API_METHOD_POST) */ function api_friendica_notification_seen($type) { - $a = DI::app(); - $user_info = api_get_user(); + BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE); + + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); - if (api_user() === false || $user_info === false) { - throw new ForbiddenException(); - } if (DI::args()->getArgc() !== 4) { throw new BadRequestException('Invalid argument count'); } @@ -4925,7 +4461,7 @@ function api_friendica_notification_seen($type) try { $Notify = DI::notify()->selectOneById($id); - if ($Notify->uid !== api_user()) { + if ($Notify->uid !== BaseApi::getCurrentUserID()) { throw new NotFoundException(); } @@ -4937,7 +4473,7 @@ function api_friendica_notification_seen($type) DI::notify()->save($Notify); if ($Notify->otype === Notification\ObjectType::ITEM) { - $item = Post::selectFirstForUser(api_user(), [], ['id' => $Notify->iid, 'uid' => api_user()]); + $item = Post::selectFirstForUser(BaseApi::getCurrentUserID(), [], ['id' => $Notify->iid, 'uid' => BaseApi::getCurrentUserID()]); if (DBA::isResult($item)) { // we found the item, return it to the user $ret = api_format_items([$item], $user_info, false, $type); @@ -4974,14 +4510,10 @@ api_register_func('api/friendica/notification/seen', 'api_friendica_notification */ function api_friendica_direct_messages_search($type, $box = "") { - $a = DI::app(); - - if (api_user() === false) { - throw new ForbiddenException(); - } + BaseApi::checkAllowedScope(BaseApi::SCOPE_READ); // params - $user_info = api_get_user(); + $user_info = DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray(); $searchstring = $_REQUEST['searchstring'] ?? ''; $uid = $user_info['uid']; @@ -5010,9 +4542,9 @@ function api_friendica_direct_messages_search($type, $box = "") foreach ($r as $item) { if ($box == "inbox" || $item['from-url'] != $profile_url) { $recipient = $user_info; - $sender = api_get_user(Strings::normaliseLink($item['contact-url'])); + $sender = DI::twitterUser()->createFromContactId($item['contact-id'], BaseApi::getCurrentUserID())->toArray(); } elseif ($box == "sentbox" || $item['from-url'] == $profile_url) { - $recipient = api_get_user(Strings::normaliseLink($item['contact-url'])); + $recipient = DI::twitterUser()->createFromContactId($item['contact-id'], BaseApi::getCurrentUserID())->toArray(); $sender = $user_info; } diff --git a/index.php b/index.php index 4f690ed51..0afd2c7d3 100644 --- a/index.php +++ b/index.php @@ -41,10 +41,11 @@ $a = \Friendica\DI::app(); \Friendica\DI::mode()->setExecutor(\Friendica\App\Mode::INDEX); $a->runFrontend( - $dice->create(\Friendica\App\Module::class), + $dice->create(\Friendica\App\ModuleController::class), $dice->create(\Friendica\App\Router::class), $dice->create(\Friendica\Core\PConfig\Capability\IManagePersonalConfigValues::class), $dice->create(\Friendica\Security\Authentication::class), $dice->create(\Friendica\App\Page::class), + $dice, $start_time ); diff --git a/mod/display.php b/mod/display.php index b53dd3543..daa78b03e 100644 --- a/mod/display.php +++ b/mod/display.php @@ -40,7 +40,7 @@ use Friendica\Protocol\DFRN; function display_init(App $a) { if (ActivityPub::isRequest()) { - Objects::rawContent(['guid' => DI::args()->getArgv()[1] ?? null]); + (new Objects(DI::l10n(), ['guid' => DI::args()->getArgv()[1] ?? null]))->rawContent(); } if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { diff --git a/mod/editpost.php b/mod/editpost.php index cc72dbd3c..9f9041811 100644 --- a/mod/editpost.php +++ b/mod/editpost.php @@ -130,6 +130,15 @@ function editpost_content(App $a) '$cancel' => DI::l10n()->t('Cancel'), '$rand_num' => Crypto::randomDigits(12), + // Formatting button labels + '$edbold' => DI::l10n()->t('Bold'), + '$editalic' => DI::l10n()->t('Italic'), + '$eduline' => DI::l10n()->t('Underline'), + '$edquote' => DI::l10n()->t('Quote'), + '$edcode' => DI::l10n()->t('Code'), + '$edurl' => DI::l10n()->t('Link'), + '$edattach' => DI::l10n()->t('Link or Media'), + //jot nav tab (used in some themes) '$message' => DI::l10n()->t('Message'), '$browser' => DI::l10n()->t('Browser'), diff --git a/mod/unfollow.php b/mod/unfollow.php index 92bded2fa..633721164 100644 --- a/mod/unfollow.php +++ b/mod/unfollow.php @@ -122,7 +122,7 @@ function unfollow_process(string $url) $owner = User::getOwnerDataById($uid); if (!$owner) { - \Friendica\Module\Security\Logout::init(); + (new \Friendica\Module\Security\Logout())->init(); // NOTREACHED } diff --git a/mod/wall_upload.php b/mod/wall_upload.php index 88d5008c2..5a23664ed 100644 --- a/mod/wall_upload.php +++ b/mod/wall_upload.php @@ -32,6 +32,7 @@ use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Photo; use Friendica\Model\User; +use Friendica\Module\BaseApi; use Friendica\Object\Image; use Friendica\Util\Images; use Friendica\Util\Strings; @@ -55,8 +56,7 @@ function wall_upload_post(App $a, $desktopmode = true) return; } } else { - $user_info = api_get_user(); - $user = DBA::selectFirst('owner-view', ['id', 'uid', 'nickname', 'page-flags'], ['nickname' => $user_info['screen_name'], 'blocked' => false]); + $user = DBA::selectFirst('owner-view', ['id', 'uid', 'nickname', 'page-flags'], ['uid' => BaseApi::getCurrentUserID(), 'blocked' => false]); } } else { if ($r_json) { diff --git a/src/App.php b/src/App.php index 75f5314af..f4534c015 100644 --- a/src/App.php +++ b/src/App.php @@ -21,10 +21,11 @@ namespace Friendica; +use Dice\Dice; use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; -use Friendica\App\Module; +use Friendica\App\ModuleController; use Friendica\Core\Config\Factory\Config; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; @@ -566,16 +567,16 @@ class App * * This probably should change to limit the size of this monster method. * - * @param App\Module $module The determined module + * @param App\ModuleController $module The determined module * @param App\Router $router * @param IManagePersonalConfigValues $pconfig - * @param Authentication $auth The Authentication backend of the node - * @param App\Page $page The Friendica page printing container + * @param Authentication $auth The Authentication backend of the node + * @param App\Page $page The Friendica page printing container * * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - public function runFrontend(App\Module $module, App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, float $start_time) + public function runFrontend(App\ModuleController $module, App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, Dice $dice, float $start_time) { $this->profiler->set($start_time, 'start'); $this->profiler->set(microtime(true), 'classinit'); @@ -702,17 +703,17 @@ class App $page['page_title'] = $moduleName; if (!$this->mode->isInstall() && !$this->mode->has(App\Mode::MAINTENANCEDISABLED)) { - $module = new Module('maintenance', Maintenance::class); + $module = new ModuleController('maintenance', new Maintenance($this->l10n)); } else { // determine the module class and save it to the module instance // @todo there's an implicit dependency due SESSION::start(), so it has to be called here (yet) - $module = $module->determineClass($this->args, $router, $this->config); + $module = $module->determineClass($this->args, $router, $this->config, $dice); } // Let the module run it's internal process (init, get, post, ...) $module->run($this->l10n, $this->baseURL, $this->logger, $this->profiler, $_SERVER, $_POST); } catch (HTTPException $e) { - ModuleHTTPException::rawContent($e); + (new ModuleHTTPException())->rawContent($e); } $page->run($this, $this->baseURL, $this->mode, $module, $this->l10n, $this->profiler, $this->config, $pconfig); diff --git a/src/App/Mode.php b/src/App/Mode.php index 1087b08a0..4a1213ae1 100644 --- a/src/App/Mode.php +++ b/src/App/Mode.php @@ -139,14 +139,14 @@ class Mode /** * Checks if the site is called via a backend process * - * @param bool $isBackend True, if the call is from a backend script (daemon, worker, ...) - * @param Module $module The pre-loaded module (just name, not class!) - * @param array $server The $_SERVER variable - * @param MobileDetect $mobileDetect The mobile detection library + * @param bool $isBackend True, if the call is from a backend script (daemon, worker, ...) + * @param ModuleController $module The pre-loaded module (just name, not class!) + * @param array $server The $_SERVER variable + * @param MobileDetect $mobileDetect The mobile detection library * * @return Mode returns the determined mode */ - public function determineRunMode(bool $isBackend, Module $module, array $server, MobileDetect $mobileDetect) + public function determineRunMode(bool $isBackend, ModuleController $module, array $server, MobileDetect $mobileDetect) { foreach (self::BACKEND_CONTENT_TYPES as $type) { if (strpos(strtolower($server['HTTP_ACCEPT'] ?? ''), $type) !== false) { diff --git a/src/App/Module.php b/src/App/ModuleController.php similarity index 73% rename from src/App/Module.php rename to src/App/ModuleController.php index 5b7c3d150..ae2723639 100644 --- a/src/App/Module.php +++ b/src/App/ModuleController.php @@ -21,8 +21,9 @@ namespace Friendica\App; +use Dice\Dice; use Friendica\App; -use Friendica\BaseModule; +use Friendica\Capabilities\ICanHandleRequests; use Friendica\Core; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\LegacyModule; @@ -38,7 +39,7 @@ use Psr\Log\LoggerInterface; /** * Holds the common context of the current, loaded module */ -class Module +class ModuleController { const DEFAULT = 'home'; const DEFAULT_CLASS = Home::class; @@ -77,18 +78,13 @@ class Module /** * @var string The module name */ + private $moduleName; + + /** + * @var ?ICanHandleRequests The module object + */ private $module; - /** - * @var BaseModule The module class - */ - private $module_class; - - /** - * @var array The module parameters - */ - private $module_parameters; - /** * @var bool true, if the module is a backend module */ @@ -103,40 +99,31 @@ class Module * @return string */ public function getName() + { + return $this->moduleName; + } + + /** + * @return ?ICanHandleRequests The base module object + */ + public function getModule(): ?ICanHandleRequests { return $this->module; } - /** - * @return string The base class name - */ - public function getClassName() - { - return $this->module_class; - } - - /** - * @return array The module parameters extracted from the route - */ - public function getParameters() - { - return $this->module_parameters; - } - /** * @return bool True, if the current module is a backend module - * @see Module::BACKEND_MODULES for a list + * @see ModuleController::BACKEND_MODULES for a list */ public function isBackend() { return $this->isBackend; } - public function __construct(string $module = self::DEFAULT, string $moduleClass = self::DEFAULT_CLASS, array $moduleParameters = [], bool $isBackend = false, bool $printNotAllowedAddon = false) + public function __construct(string $moduleName = self::DEFAULT, ?ICanHandleRequests $module = null, bool $isBackend = false, bool $printNotAllowedAddon = false) { + $this->moduleName = $moduleName; $this->module = $module; - $this->module_class = $moduleClass; - $this->module_parameters = $moduleParameters; $this->isBackend = $isBackend; $this->printNotAllowedAddon = $printNotAllowedAddon; } @@ -146,9 +133,9 @@ class Module * * @param Arguments $args The Friendica arguments * - * @return Module The module with the determined module + * @return ModuleController The module with the determined module */ - public function determineModule(Arguments $args) + public function determineName(Arguments $args) { if ($args->getArgc() > 0) { $module = str_replace('.', '_', $args->get(0)); @@ -162,27 +149,28 @@ class Module $module = "login"; } - $isBackend = in_array($module, Module::BACKEND_MODULES);; + $isBackend = in_array($module, ModuleController::BACKEND_MODULES); - return new Module($module, $this->module_class, [], $isBackend, $this->printNotAllowedAddon); + return new ModuleController($module, null, $isBackend, $this->printNotAllowedAddon); } /** * Determine the class of the current module * - * @param Arguments $args The Friendica execution arguments - * @param Router $router The Friendica routing instance + * @param Arguments $args The Friendica execution arguments + * @param Router $router The Friendica routing instance * @param IManageConfigValues $config The Friendica Configuration + * @param Dice $dice The Dependency Injection container * - * @return Module The determined module of this call + * @return ModuleController The determined module of this call * * @throws \Exception */ - public function determineClass(Arguments $args, Router $router, IManageConfigValues $config) + public function determineClass(Arguments $args, Router $router, IManageConfigValues $config, Dice $dice) { $printNotAllowedAddon = false; - $module_class = null; + $module_class = null; $module_parameters = []; /** * ROUTING @@ -191,22 +179,22 @@ class Module * post() and/or content() static methods can be respectively called to produce a data change or an output. **/ try { - $module_class = $router->getModuleClass($args->getCommand()); - $module_parameters = $router->getModuleParameters(); + $module_class = $router->getModuleClass($args->getCommand()); + $module_parameters[] = $router->getModuleParameters(); } catch (MethodNotAllowedException $e) { $module_class = MethodNotAllowed::class; } catch (NotFoundException $e) { // Then we try addon-provided modules that we wrap in the LegacyModule class - if (Core\Addon::isEnabled($this->module) && file_exists("addon/{$this->module}/{$this->module}.php")) { + if (Core\Addon::isEnabled($this->moduleName) && file_exists("addon/{$this->moduleName}/{$this->moduleName}.php")) { //Check if module is an app and if public access to apps is allowed or not $privateapps = $config->get('config', 'private_addons', false); - if ((!local_user()) && Core\Hook::isAddonApp($this->module) && $privateapps) { + if ((!local_user()) && Core\Hook::isAddonApp($this->moduleName) && $privateapps) { $printNotAllowedAddon = true; } else { - include_once "addon/{$this->module}/{$this->module}.php"; - if (function_exists($this->module . '_module')) { - LegacyModule::setModuleFile("addon/{$this->module}/{$this->module}.php"); - $module_class = LegacyModule::class; + include_once "addon/{$this->moduleName}/{$this->moduleName}.php"; + if (function_exists($this->moduleName . '_module')) { + $module_parameters[] = "addon/{$this->moduleName}/{$this->moduleName}.php"; + $module_class = LegacyModule::class; } } } @@ -214,15 +202,18 @@ class Module /* Finally, we look for a 'standard' program module in the 'mod' directory * We emulate a Module class through the LegacyModule class */ - if (!$module_class && file_exists("mod/{$this->module}.php")) { - LegacyModule::setModuleFile("mod/{$this->module}.php"); - $module_class = LegacyModule::class; + if (!$module_class && file_exists("mod/{$this->moduleName}.php")) { + $module_parameters[] = "mod/{$this->moduleName}.php"; + $module_class = LegacyModule::class; } $module_class = $module_class ?: PageNotFound::class; } - return new Module($this->module, $module_class, $module_parameters, $this->isBackend, $printNotAllowedAddon); + /** @var ICanHandleRequests $module */ + $module = $dice->create($module_class, $module_parameters); + + return new ModuleController($this->moduleName, $module, $this->isBackend, $printNotAllowedAddon); } /** @@ -251,7 +242,7 @@ class Module * * Otherwise we are going to emit a 404 not found. */ - if ($this->module_class === PageNotFound::class) { + if ($this->module === PageNotFound::class) { $queryString = $server['QUERY_STRING']; // Stupid browser tried to pre-fetch our Javascript img template. Don't log the event or return anything - just quietly exit. if (!empty($queryString) && preg_match('/{[0-9]}/', $queryString) !== 0) { @@ -302,34 +293,29 @@ class Module $profiler->set(microtime(true), 'ready'); $timestamp = microtime(true); - Core\Hook::callAll($this->module . '_mod_init', $placeholder); - - call_user_func([$this->module_class, 'init'], $this->module_parameters); + Core\Hook::callAll($this->moduleName . '_mod_init', $placeholder); $profiler->set(microtime(true) - $timestamp, 'init'); if ($server['REQUEST_METHOD'] === Router::DELETE) { - call_user_func([$this->module_class, 'delete'], $this->module_parameters); + $this->module->delete(); } if ($server['REQUEST_METHOD'] === Router::PATCH) { - call_user_func([$this->module_class, 'patch'], $this->module_parameters); + $this->module->patch(); } if ($server['REQUEST_METHOD'] === Router::POST) { - Core\Hook::callAll($this->module . '_mod_post', $post); - call_user_func([$this->module_class, 'post'], $this->module_parameters); + Core\Hook::callAll($this->moduleName . '_mod_post', $post); + $this->module->post(); } if ($server['REQUEST_METHOD'] === Router::PUT) { - call_user_func([$this->module_class, 'put'], $this->module_parameters); + $this->module->put(); } - Core\Hook::callAll($this->module . '_mod_afterpost', $placeholder); - call_user_func([$this->module_class, 'afterpost'], $this->module_parameters); - // "rawContent" is especially meant for technical endpoints. // This endpoint doesn't need any theme initialization or other comparable stuff. - call_user_func([$this->module_class, 'rawContent'], $this->module_parameters); + $this->module->rawContent(); } } diff --git a/src/App/Page.php b/src/App/Page.php index fcb2d1853..c1a0e4aa5 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -191,14 +191,14 @@ class Page implements ArrayAccess * - head.tpl template * * @param App $app The Friendica App instance - * @param Module $module The loaded Friendica module + * @param ModuleController $module The loaded Friendica module * @param L10n $l10n The l10n language instance * @param IManageConfigValues $config The Friendica configuration * @param IManagePersonalConfigValues $pConfig The Friendica personal configuration (for user) * * @throws HTTPException\InternalServerErrorException */ - private function initHead(App $app, Module $module, L10n $l10n, IManageConfigValues $config, IManagePersonalConfigValues $pConfig) + private function initHead(App $app, ModuleController $module, L10n $l10n, IManageConfigValues $config, IManagePersonalConfigValues $pConfig) { $interval = ((local_user()) ? $pConfig->get(local_user(), 'system', 'update_interval') : 40000); @@ -337,26 +337,24 @@ class Page implements ArrayAccess * - module content * - hooks for content * - * @param Module $module The module - * @param Mode $mode The Friendica execution mode + * @param ModuleController $module The module + * @param Mode $mode The Friendica execution mode * * @throws HTTPException\InternalServerErrorException */ - private function initContent(Module $module, Mode $mode) + private function initContent(ModuleController $module, Mode $mode) { $content = ''; try { - $moduleClass = $module->getClassName(); + $moduleClass = $module->getModule(); $arr = ['content' => $content]; - Hook::callAll($moduleClass . '_mod_content', $arr); + Hook::callAll($moduleClass->getClassName() . '_mod_content', $arr); $content = $arr['content']; - $arr = ['content' => call_user_func([$moduleClass, 'content'], $module->getParameters())]; - Hook::callAll($moduleClass . '_mod_aftercontent', $arr); - $content .= $arr['content']; + $content .= $module->getModule()->content(); } catch (HTTPException $e) { - $content = ModuleHTTPException::content($e); + $content = (new ModuleHTTPException())->content($e); } // initialise content region @@ -392,14 +390,14 @@ class Page implements ArrayAccess * @param App $app The Friendica App * @param BaseURL $baseURL The Friendica Base URL * @param Mode $mode The current node mode - * @param Module $module The loaded Friendica module + * @param ModuleController $module The loaded Friendica module * @param L10n $l10n The l10n language class * @param IManageConfigValues $config The Configuration of this node * @param IManagePersonalConfigValues $pconfig The personal/user configuration * * @throws HTTPException\InternalServerErrorException */ - public function run(App $app, BaseURL $baseURL, Mode $mode, Module $module, L10n $l10n, Profiler $profiler, IManageConfigValues $config, IManagePersonalConfigValues $pconfig) + public function run(App $app, BaseURL $baseURL, Mode $mode, ModuleController $module, L10n $l10n, Profiler $profiler, IManageConfigValues $config, IManagePersonalConfigValues $pconfig) { $moduleName = $module->getName(); diff --git a/src/BaseModule.php b/src/BaseModule.php index ced1e55c3..be4788045 100644 --- a/src/BaseModule.php +++ b/src/BaseModule.php @@ -21,6 +21,8 @@ namespace Friendica; +use Friendica\Capabilities\ICanHandleRequests; +use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Model\User; @@ -33,94 +35,90 @@ use Friendica\Model\User; * * @author Hypolite Petovan */ -abstract class BaseModule +abstract class BaseModule implements ICanHandleRequests { - /** - * Initialization method common to both content() and post() - * - * Extend this method if you need to do any shared processing before both - * content() or post() - */ - public static function init(array $parameters = []) + /** @var array */ + protected $parameters = []; + + /** @var L10n */ + protected $l10n; + + public function __construct(L10n $l10n, array $parameters = []) { + $this->parameters = $parameters; + $this->l10n = $l10n; } /** - * Module GET method to display raw content from technical endpoints + * Wraps the L10n::t() function for Modules * - * Extend this method if the module is supposed to return communication data, - * e.g. from protocol implementations. + * @see L10n::t() */ - public static function rawContent(array $parameters = []) + protected function t(string $s, ...$args): string + { + return $this->l10n->t($s, $args); + } + + /** + * Wraps the L10n::tt() function for Modules + * + * @see L10n::tt() + */ + protected function tt(string $singular, string $plurarl, int $count): string + { + return $this->l10n->tt($singular, $plurarl, $count); + } + + /** + * {@inheritDoc} + */ + public function rawContent() { // echo ''; // exit; } /** - * Module GET method to display any content - * - * Extend this method if the module is supposed to return any display - * through a GET request. It can be an HTML page through templating or a - * XML feed or a JSON output. - * - * @return string + * {@inheritDoc} */ - public static function content(array $parameters = []) + public function content(): string { - $o = ''; - - return $o; + return ''; } /** - * Module DELETE method to process submitted data - * - * Extend this method if the module is supposed to process DELETE requests. - * Doesn't display any content + * {@inheritDoc} */ - public static function delete(array $parameters = []) + public function delete() { } /** - * Module PATCH method to process submitted data - * - * Extend this method if the module is supposed to process PATCH requests. - * Doesn't display any content + * {@inheritDoc} */ - public static function patch(array $parameters = []) + public function patch() { } /** - * Module POST method to process submitted data - * - * Extend this method if the module is supposed to process POST requests. - * Doesn't display any content + * {@inheritDoc} */ - public static function post(array $parameters = []) + public function post() { // DI::baseurl()->redirect('module'); } /** - * Called after post() - * - * Unknown purpose + * {@inheritDoc} */ - public static function afterpost(array $parameters = []) + public function put() { } - /** - * Module PUT method to process submitted data - * - * Extend this method if the module is supposed to process PUT requests. - * Doesn't display any content - */ - public static function put(array $parameters = []) + /** Gets the name of the current class */ + public function getClassName(): string { + return static::class; } /* diff --git a/src/Capabilities/ICanHandleRequests.php b/src/Capabilities/ICanHandleRequests.php new file mode 100644 index 000000000..23feec2b7 --- /dev/null +++ b/src/Capabilities/ICanHandleRequests.php @@ -0,0 +1,60 @@ +create(App\Module::class); + return self::$dice->create(App\ModuleController::class); } /** diff --git a/src/Factory/Api/Twitter/User.php b/src/Factory/Api/Twitter/User.php index ad73df1f5..e545bd78c 100644 --- a/src/Factory/Api/Twitter/User.php +++ b/src/Factory/Api/Twitter/User.php @@ -52,4 +52,9 @@ class User extends BaseFactory return new \Friendica\Object\Api\Twitter\User($publicContact, $apcontact, $userContact, $skip_status, $include_user_entities); } + + public function createFromUserId(int $uid, $skip_status = false, $include_user_entities = true) + { + return $this->createFromContactId(Contact::getPublicIdByUserId($uid), $uid, $skip_status, $include_user_entities); + } } diff --git a/src/LegacyModule.php b/src/LegacyModule.php index 224b94deb..d307d84ac 100644 --- a/src/LegacyModule.php +++ b/src/LegacyModule.php @@ -21,6 +21,8 @@ namespace Friendica; +use Friendica\Core\L10n; + /** * This mock module enable class encapsulation of legacy global function modules. * After having provided the module file name, all the methods will behave like a normal Module class. @@ -35,7 +37,16 @@ class LegacyModule extends BaseModule * * @var string */ - private static $moduleName = ''; + private $moduleName = ''; + + public function __construct(L10n $l10n, string $file_path = '', array $parameters = []) + { + parent::__construct($l10n, $parameters); + + $this->setModuleFile($file_path); + + $this->runModuleFunction('init'); + } /** * The only method that needs to be called, with the module/addon file name. @@ -43,35 +54,25 @@ class LegacyModule extends BaseModule * @param string $file_path * @throws \Exception */ - public static function setModuleFile($file_path) + private function setModuleFile($file_path) { if (!is_readable($file_path)) { throw new \Exception(DI::l10n()->t('Legacy module file not found: %s', $file_path)); } - self::$moduleName = basename($file_path, '.php'); + $this->moduleName = basename($file_path, '.php'); require_once $file_path; } - public static function init(array $parameters = []) + public function content(): string { - self::runModuleFunction('init', $parameters); + return $this->runModuleFunction('content'); } - public static function content(array $parameters = []) + public function post() { - return self::runModuleFunction('content', $parameters); - } - - public static function post(array $parameters = []) - { - self::runModuleFunction('post', $parameters); - } - - public static function afterpost(array $parameters = []) - { - self::runModuleFunction('afterpost', $parameters); + $this->runModuleFunction('post'); } /** @@ -81,15 +82,15 @@ class LegacyModule extends BaseModule * @return string * @throws \Exception */ - private static function runModuleFunction($function_suffix, array $parameters = []) + private function runModuleFunction(string $function_suffix) { - $function_name = static::$moduleName . '_' . $function_suffix; + $function_name = $this->moduleName . '_' . $function_suffix; if (\function_exists($function_name)) { $a = DI::app(); return $function_name($a); - } else { - return parent::{$function_suffix}($parameters); } + + return ''; } } diff --git a/src/Module/AccountManagementControlDocument.php b/src/Module/AccountManagementControlDocument.php index ddd22dc3d..8de9e80af 100644 --- a/src/Module/AccountManagementControlDocument.php +++ b/src/Module/AccountManagementControlDocument.php @@ -30,7 +30,7 @@ use Friendica\BaseModule; */ class AccountManagementControlDocument extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $output = [ 'version' => 1, diff --git a/src/Module/Acctlink.php b/src/Module/Acctlink.php index 898386f3f..81b2c2391 100644 --- a/src/Module/Acctlink.php +++ b/src/Module/Acctlink.php @@ -24,22 +24,25 @@ namespace Friendica\Module; use Friendica\BaseModule; use Friendica\Core\System; use Friendica\Model\Contact; +use Friendica\Network\HTTPException\NotFoundException; /** * Redirects to another URL based on the parameter 'addr' */ class Acctlink extends BaseModule { - public static function content(array $parameters = []) + public function rawContent() { $addr = trim($_GET['addr'] ?? ''); - - if ($addr) { - $url = Contact::getByURL($addr)['url'] ?? ''; - if ($url) { - System::externalRedirect($url['url']); - exit(); - } + if (!$addr) { + throw new NotFoundException('Parameter "addr" is missing or empty'); } + + $contact = Contact::getByURL($addr, null, ['url']) ?? ''; + if (!$contact) { + throw new NotFoundException('Contact not found'); + } + + System::externalRedirect($contact['url']); } } diff --git a/src/Module/ActivityPub/Followers.php b/src/Module/ActivityPub/Followers.php index e1f1ccc4c..d25e4693c 100644 --- a/src/Module/ActivityPub/Followers.php +++ b/src/Module/ActivityPub/Followers.php @@ -31,14 +31,14 @@ use Friendica\Protocol\ActivityPub; */ class Followers extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (empty($parameters['nickname'])) { + if (empty($this->parameters['nickname'])) { throw new \Friendica\Network\HTTPException\NotFoundException(); } // @TODO: Replace with parameter from router - $owner = User::getOwnerDataByNick($parameters['nickname']); + $owner = User::getOwnerDataByNick($this->parameters['nickname']); if (empty($owner)) { throw new \Friendica\Network\HTTPException\NotFoundException(); } diff --git a/src/Module/ActivityPub/Following.php b/src/Module/ActivityPub/Following.php index e9cb10be1..3b45cf09a 100644 --- a/src/Module/ActivityPub/Following.php +++ b/src/Module/ActivityPub/Following.php @@ -31,13 +31,13 @@ use Friendica\Protocol\ActivityPub; */ class Following extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (empty($parameters['nickname'])) { + if (empty($this->parameters['nickname'])) { throw new \Friendica\Network\HTTPException\NotFoundException(); } - $owner = User::getOwnerDataByNick($parameters['nickname']); + $owner = User::getOwnerDataByNick($this->parameters['nickname']); if (empty($owner)) { throw new \Friendica\Network\HTTPException\NotFoundException(); } diff --git a/src/Module/ActivityPub/Inbox.php b/src/Module/ActivityPub/Inbox.php index 2ef12a83d..149e51106 100644 --- a/src/Module/ActivityPub/Inbox.php +++ b/src/Module/ActivityPub/Inbox.php @@ -35,7 +35,7 @@ use Friendica\Util\Network; */ class Inbox extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $postdata = Network::postdata(); @@ -50,12 +50,12 @@ class Inbox extends BaseModule $filename = 'failed-activitypub'; } $tempfile = tempnam(System::getTempPath(), $filename); - file_put_contents($tempfile, json_encode(['parameters' => $parameters, 'header' => $_SERVER, 'body' => $postdata], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + file_put_contents($tempfile, json_encode(['parameters' => $this->parameters, 'header' => $_SERVER, 'body' => $postdata], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); Logger::notice('Incoming message stored', ['file' => $tempfile]); } - if (!empty($parameters['nickname'])) { - $user = DBA::selectFirst('user', ['uid'], ['nickname' => $parameters['nickname']]); + if (!empty($this->parameters['nickname'])) { + $user = DBA::selectFirst('user', ['uid'], ['nickname' => $this->parameters['nickname']]); if (!DBA::isResult($user)) { throw new \Friendica\Network\HTTPException\NotFoundException(); } diff --git a/src/Module/ActivityPub/Objects.php b/src/Module/ActivityPub/Objects.php index 232c80e5b..5798c5685 100644 --- a/src/Module/ActivityPub/Objects.php +++ b/src/Module/ActivityPub/Objects.php @@ -41,9 +41,9 @@ use Friendica\Util\Strings; */ class Objects extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (empty($parameters['guid'])) { + if (empty($this->parameters['guid'])) { throw new HTTPException\BadRequestException(); } @@ -51,10 +51,10 @@ class Objects extends BaseModule DI::baseUrl()->redirect(str_replace('objects/', 'display/', DI::args()->getQueryString())); } - $itemuri = DBA::selectFirst('item-uri', ['id'], ['guid' => $parameters['guid']]); + $itemuri = DBA::selectFirst('item-uri', ['id'], ['guid' => $this->parameters['guid']]); if (DBA::isResult($itemuri)) { - Logger::info('Provided GUID found.', ['guid' => $parameters['guid'], 'uri-id' => $itemuri['id']]); + Logger::info('Provided GUID found.', ['guid' => $this->parameters['guid'], 'uri-id' => $itemuri['id']]); } else { // The item URI does not always contain the GUID. This means that we have to search the URL instead $url = DI::baseUrl()->get() . '/' . DI::args()->getQueryString(); @@ -104,11 +104,11 @@ class Objects extends BaseModule throw new HTTPException\NotFoundException(); } - $etag = md5($parameters['guid'] . '-' . $item['changed']); + $etag = md5($this->parameters['guid'] . '-' . $item['changed']); $last_modified = $item['changed']; Network::checkEtagModified($etag, $last_modified); - if (empty($parameters['activity']) && ($item['gravity'] != GRAVITY_ACTIVITY)) { + if (empty($this->parameters['activity']) && ($item['gravity'] != GRAVITY_ACTIVITY)) { $activity = ActivityPub\Transmitter::createActivityFromItem($item['id'], true); if (empty($activity['type'])) { throw new HTTPException\NotFoundException(); @@ -123,16 +123,16 @@ class Objects extends BaseModule $data = ['@context' => ActivityPub::CONTEXT]; $data = array_merge($data, $activity['object']); - } elseif (empty($parameters['activity']) || in_array($parameters['activity'], + } elseif (empty($this->parameters['activity']) || in_array($this->parameters['activity'], ['Create', 'Announce', 'Update', 'Like', 'Dislike', 'Accept', 'Reject', 'TentativeAccept', 'Follow', 'Add'])) { $data = ActivityPub\Transmitter::createActivityFromItem($item['id']); if (empty($data)) { throw new HTTPException\NotFoundException(); } - if (!empty($parameters['activity']) && ($parameters['activity'] != 'Create')) { - $data['type'] = $parameters['activity']; - $data['id'] = str_replace('/Create', '/' . $parameters['activity'], $data['id']); + if (!empty($this->parameters['activity']) && ($this->parameters['activity'] != 'Create')) { + $data['type'] = $this->parameters['activity']; + $data['id'] = str_replace('/Create', '/' . $this->parameters['activity'], $data['id']); } } else { throw new HTTPException\NotFoundException(); diff --git a/src/Module/ActivityPub/Outbox.php b/src/Module/ActivityPub/Outbox.php index fe838960d..c459a55e3 100644 --- a/src/Module/ActivityPub/Outbox.php +++ b/src/Module/ActivityPub/Outbox.php @@ -31,13 +31,13 @@ use Friendica\Util\HTTPSignature; */ class Outbox extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (empty($parameters['nickname'])) { + if (empty($this->parameters['nickname'])) { throw new \Friendica\Network\HTTPException\NotFoundException(); } - $owner = User::getOwnerDataByNick($parameters['nickname']); + $owner = User::getOwnerDataByNick($this->parameters['nickname']); if (empty($owner)) { throw new \Friendica\Network\HTTPException\NotFoundException(); } diff --git a/src/Module/Admin/Addons/Details.php b/src/Module/Admin/Addons/Details.php index 79660dee3..bab52fb0d 100644 --- a/src/Module/Admin/Addons/Details.php +++ b/src/Module/Admin/Addons/Details.php @@ -30,11 +30,11 @@ use Friendica\Util\Strings; class Details extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); - $addon = Strings::sanitizeFilePathItem($parameters['addon']); + $addon = Strings::sanitizeFilePathItem($this->parameters['addon']); $redirect = 'admin/addons/' . $addon; @@ -52,15 +52,15 @@ class Details extends BaseAdmin DI::baseUrl()->redirect($redirect); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $a = DI::app(); $addons_admin = Addon::getAdminList(); - $addon = Strings::sanitizeFilePathItem($parameters['addon']); + $addon = Strings::sanitizeFilePathItem($this->parameters['addon']); if (!is_file("addon/$addon/$addon.php")) { notice(DI::l10n()->t('Addon not found.')); Addon::uninstall($addon); diff --git a/src/Module/Admin/Addons/Index.php b/src/Module/Admin/Addons/Index.php index 56d570b28..6330ee2cf 100644 --- a/src/Module/Admin/Addons/Index.php +++ b/src/Module/Admin/Addons/Index.php @@ -28,9 +28,9 @@ use Friendica\Module\BaseAdmin; class Index extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); // reload active themes if (!empty($_GET['action'])) { diff --git a/src/Module/Admin/Blocklist/Contact.php b/src/Module/Admin/Blocklist/Contact.php index bd30e2f8d..a0a5c282f 100644 --- a/src/Module/Admin/Blocklist/Contact.php +++ b/src/Module/Admin/Blocklist/Contact.php @@ -32,7 +32,7 @@ use Friendica\Util\Network; class Contact extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -76,9 +76,9 @@ class Contact extends BaseAdmin DI::baseUrl()->redirect('admin/blocklist/contact'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $condition = ['uid' => 0, 'blocked' => true]; diff --git a/src/Module/Admin/Blocklist/Server/Add.php b/src/Module/Admin/Blocklist/Server/Add.php index 03f102640..47c9016d9 100644 --- a/src/Module/Admin/Blocklist/Server/Add.php +++ b/src/Module/Admin/Blocklist/Server/Add.php @@ -32,7 +32,7 @@ use GuzzleHttp\Psr7\Uri; class Add extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -66,9 +66,9 @@ class Add extends BaseAdmin DI::baseUrl()->redirect('admin/blocklist/server'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $gservers = []; diff --git a/src/Module/Admin/Blocklist/Server/Index.php b/src/Module/Admin/Blocklist/Server/Index.php index 7dd59678a..ebd39d36a 100644 --- a/src/Module/Admin/Blocklist/Server/Index.php +++ b/src/Module/Admin/Blocklist/Server/Index.php @@ -27,7 +27,7 @@ use Friendica\Module\BaseAdmin; class Index extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -56,9 +56,9 @@ class Index extends BaseAdmin DI::baseUrl()->redirect('admin/blocklist/server'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $blocklist = DI::config()->get('system', 'blocklist'); $blocklistform = []; diff --git a/src/Module/Admin/DBSync.php b/src/Module/Admin/DBSync.php index 9449e3be7..6ef8d804a 100644 --- a/src/Module/Admin/DBSync.php +++ b/src/Module/Admin/DBSync.php @@ -30,14 +30,14 @@ use Friendica\Module\BaseAdmin; class DBSync extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $a = DI::app(); - $action = $parameters['action'] ?? ''; - $update = $parameters['update'] ?? 0; + $action = $this->parameters['action'] ?? ''; + $update = $this->parameters['update'] ?? 0; switch ($action) { case 'mark': diff --git a/src/Module/Admin/Features.php b/src/Module/Admin/Features.php index d3af3ebc0..d2c8e2d83 100644 --- a/src/Module/Admin/Features.php +++ b/src/Module/Admin/Features.php @@ -28,7 +28,7 @@ use Friendica\Module\BaseAdmin; class Features extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -60,9 +60,9 @@ class Features extends BaseAdmin DI::baseUrl()->redirect('admin/features'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $features = []; diff --git a/src/Module/Admin/Federation.php b/src/Module/Admin/Federation.php index 4be231975..65d0453d9 100644 --- a/src/Module/Admin/Federation.php +++ b/src/Module/Admin/Federation.php @@ -28,9 +28,9 @@ use Friendica\Module\BaseAdmin; class Federation extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); // get counts on active federation systems this node is knowing // We list the more common systems by name. The rest is counted as "other" diff --git a/src/Module/Admin/Item/Delete.php b/src/Module/Admin/Item/Delete.php index 7afc3b090..91bb71932 100644 --- a/src/Module/Admin/Item/Delete.php +++ b/src/Module/Admin/Item/Delete.php @@ -29,7 +29,7 @@ use Friendica\Util\Strings; class Delete extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -55,9 +55,9 @@ class Delete extends BaseAdmin DI::baseUrl()->redirect('admin/item/delete'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $t = Renderer::getMarkupTemplate('admin/item/delete.tpl'); diff --git a/src/Module/Admin/Item/Source.php b/src/Module/Admin/Item/Source.php index 61e598a68..c1edabf60 100644 --- a/src/Module/Admin/Item/Source.php +++ b/src/Module/Admin/Item/Source.php @@ -29,11 +29,11 @@ use Friendica\Module\BaseAdmin; class Source extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $guid = basename($_REQUEST['guid'] ?? $parameters['guid'] ?? ''); + $guid = basename($_REQUEST['guid'] ?? $this->parameters['guid'] ?? ''); $source = ''; $item_uri = ''; diff --git a/src/Module/Admin/Logs/Settings.php b/src/Module/Admin/Logs/Settings.php index b0fcaebc3..aaf603f82 100644 --- a/src/Module/Admin/Logs/Settings.php +++ b/src/Module/Admin/Logs/Settings.php @@ -29,7 +29,7 @@ use Psr\Log\LogLevel; class Settings extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -56,9 +56,9 @@ class Settings extends BaseAdmin DI::baseUrl()->redirect('admin/logs'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $log_choices = [ LogLevel::ERROR => 'Error', diff --git a/src/Module/Admin/Logs/View.php b/src/Module/Admin/Logs/View.php index e0e12760b..3e312204b 100644 --- a/src/Module/Admin/Logs/View.php +++ b/src/Module/Admin/Logs/View.php @@ -31,9 +31,9 @@ class View extends BaseAdmin { const LIMIT = 500; - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $t = Renderer::getMarkupTemplate('admin/logs/view.tpl'); DI::page()->registerFooterScript(Theme::getPathForFile('js/module/admin/logs/view.js')); @@ -75,7 +75,7 @@ class View extends BaseAdmin ->withLimit(self::LIMIT) ->withFilters($filters) ->withSearch($search); - } catch (Exception $e) { + } catch (\Exception $e) { $error = DI::l10n()->t('Couldn\'t open %1$s log file.
Check to see if file %1$s is readable.', $f); } } diff --git a/src/Module/Admin/PhpInfo.php b/src/Module/Admin/PhpInfo.php index 74cbc3d90..e6cad66c7 100644 --- a/src/Module/Admin/PhpInfo.php +++ b/src/Module/Admin/PhpInfo.php @@ -25,7 +25,7 @@ use Friendica\Module\BaseAdmin; class PhpInfo extends BaseAdmin { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAdminAccess(); diff --git a/src/Module/Admin/Queue.php b/src/Module/Admin/Queue.php index f0883b361..f43dfdc09 100644 --- a/src/Module/Admin/Queue.php +++ b/src/Module/Admin/Queue.php @@ -38,11 +38,11 @@ use Friendica\Util\DateTimeFormat; */ class Queue extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $status = $parameters['status'] ?? ''; + $status = $this->parameters['status'] ?? ''; // get jobs from the workerqueue table if ($status == 'deferred') { diff --git a/src/Module/Admin/Site.php b/src/Module/Admin/Site.php index 0edc713ae..27623880a 100644 --- a/src/Module/Admin/Site.php +++ b/src/Module/Admin/Site.php @@ -43,7 +43,7 @@ require_once __DIR__ . '/../../../boot.php'; class Site extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -384,9 +384,9 @@ class Site extends BaseAdmin DI::baseUrl()->redirect('admin/site' . $active_panel); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); /* Installed langs */ $lang_choices = DI::l10n()->getAvailableLanguages(); diff --git a/src/Module/Admin/Storage.php b/src/Module/Admin/Storage.php index 51e70d841..68d7d065d 100644 --- a/src/Module/Admin/Storage.php +++ b/src/Module/Admin/Storage.php @@ -31,13 +31,13 @@ use Friendica\Util\Strings; class Storage extends BaseAdmin { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); self::checkFormSecurityTokenRedirectOnError('/admin/storage', 'admin_storage'); - $storagebackend = trim($parameters['name'] ?? ''); + $storagebackend = trim($this->parameters['name'] ?? ''); try { /** @var ICanConfigureStorage|false $newStorageConfig */ @@ -91,9 +91,9 @@ class Storage extends BaseAdmin DI::baseUrl()->redirect('admin/storage'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $current_storage_backend = DI::storage(); $available_storage_forms = []; diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php index ca244260f..5b2efca1e 100644 --- a/src/Module/Admin/Summary.php +++ b/src/Module/Admin/Summary.php @@ -37,9 +37,9 @@ use Friendica\Util\DateTimeFormat; class Summary extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $a = DI::app(); diff --git a/src/Module/Admin/Themes/Details.php b/src/Module/Admin/Themes/Details.php index b8ecfe1ce..b7161d1b9 100644 --- a/src/Module/Admin/Themes/Details.php +++ b/src/Module/Admin/Themes/Details.php @@ -30,11 +30,11 @@ use Friendica\Util\Strings; class Details extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $theme = Strings::sanitizeFilePathItem($parameters['theme']); + $theme = Strings::sanitizeFilePathItem($this->parameters['theme']); if (!is_dir("view/theme/$theme")) { notice(DI::l10n()->t("Item not found.")); return ''; diff --git a/src/Module/Admin/Themes/Embed.php b/src/Module/Admin/Themes/Embed.php index dabc9209e..0d2a2dc04 100644 --- a/src/Module/Admin/Themes/Embed.php +++ b/src/Module/Admin/Themes/Embed.php @@ -21,48 +21,62 @@ namespace Friendica\Module\Admin\Themes; +use Friendica\App; +use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Module\BaseAdmin; use Friendica\Util\Strings; class Embed extends BaseAdmin { - public static function init(array $parameters = []) + /** @var App */ + protected $app; + /** @var App\BaseURL */ + protected $baseUrl; + /** @var App\Mode */ + protected $mode; + + public function __construct(App $app, App\BaseURL $baseUrl, App\Mode $mode, L10n $l10n, array $parameters = []) { - $theme = Strings::sanitizeFilePathItem($parameters['theme']); + parent::__construct($l10n, $parameters); + + $this->app = $app; + $this->baseUrl = $baseUrl; + $this->mode = $mode; + + $theme = Strings::sanitizeFilePathItem($this->parameters['theme']); if (is_file("view/theme/$theme/config.php")) { - DI::app()->setCurrentTheme($theme); + $this->app->setCurrentTheme($theme); } } - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); - $theme = Strings::sanitizeFilePathItem($parameters['theme']); + $theme = Strings::sanitizeFilePathItem($this->parameters['theme']); if (is_file("view/theme/$theme/config.php")) { require_once "view/theme/$theme/config.php"; if (function_exists('theme_admin_post')) { self::checkFormSecurityTokenRedirectOnError('/admin/themes/' . $theme . '/embed?mode=minimal', 'admin_theme_settings'); - theme_admin_post(DI::app()); + theme_admin_post($this->app); } } - if (DI::mode()->isAjax()) { + if ($this->mode->isAjax()) { return; } - DI::baseUrl()->redirect('admin/themes/' . $theme . '/embed?mode=minimal'); + $this->baseUrl->redirect('admin/themes/' . $theme . '/embed?mode=minimal'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $theme = Strings::sanitizeFilePathItem($parameters['theme']); + $theme = Strings::sanitizeFilePathItem($this->parameters['theme']); if (!is_dir("view/theme/$theme")) { - notice(DI::l10n()->t('Unknown theme.')); + notice($this->t('Unknown theme.')); return ''; } @@ -71,7 +85,7 @@ class Embed extends BaseAdmin require_once "view/theme/$theme/config.php"; if (function_exists('theme_admin')) { - $admin_form = theme_admin(DI::app()); + $admin_form = theme_admin($this->app); } } diff --git a/src/Module/Admin/Themes/Index.php b/src/Module/Admin/Themes/Index.php index d9cb326b4..ad4dfef94 100644 --- a/src/Module/Admin/Themes/Index.php +++ b/src/Module/Admin/Themes/Index.php @@ -29,9 +29,9 @@ use Friendica\Util\Strings; class Index extends BaseAdmin { - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $allowed_themes = Theme::getAllowedList(); diff --git a/src/Module/Admin/Tos.php b/src/Module/Admin/Tos.php index 282e5daf1..0e019cc32 100644 --- a/src/Module/Admin/Tos.php +++ b/src/Module/Admin/Tos.php @@ -21,13 +21,31 @@ namespace Friendica\Module\Admin; +use Friendica\App\BaseURL; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Module\BaseAdmin; class Tos extends BaseAdmin { - public static function post(array $parameters = []) + /** @var \Friendica\Module\Tos */ + protected $tos; + /** @var IManageConfigValues */ + protected $config; + /** @var BaseURL */ + protected $baseUrl; + + public function __construct(\Friendica\Module\Tos $tos, IManageConfigValues $config, BaseURL $baseUrl, L10n $l10n, array $parameters = []) + { + parent::__construct($l10n, $parameters); + + $this->tos = $tos; + $this->config = $config; + $this->baseUrl = $baseUrl; + } + + public function post() { self::checkAdminAccess(); @@ -41,29 +59,28 @@ class Tos extends BaseAdmin $displayprivstatement = !empty($_POST['displayprivstatement']); $tostext = (!empty($_POST['tostext']) ? strip_tags(trim($_POST['tostext'])) : ''); - DI::config()->set('system', 'tosdisplay', $displaytos); - DI::config()->set('system', 'tosprivstatement', $displayprivstatement); - DI::config()->set('system', 'tostext', $tostext); + $this->config->set('system', 'tosdisplay', $displaytos); + $this->config->set('system', 'tosprivstatement', $displayprivstatement); + $this->config->set('system', 'tostext', $tostext); - DI::baseUrl()->redirect('admin/tos'); + $this->baseUrl->redirect('admin/tos'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $tos = new \Friendica\Module\Tos(); $t = Renderer::getMarkupTemplate('admin/tos.tpl'); return Renderer::replaceMacros($t, [ - '$title' => DI::l10n()->t('Administration'), - '$page' => DI::l10n()->t('Terms of Service'), - '$displaytos' => ['displaytos', DI::l10n()->t('Display Terms of Service'), DI::config()->get('system', 'tosdisplay'), DI::l10n()->t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')], - '$displayprivstatement' => ['displayprivstatement', DI::l10n()->t('Display Privacy Statement'), DI::config()->get('system', 'tosprivstatement'), DI::l10n()->t('Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR.', 'https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')], - '$preview' => DI::l10n()->t('Privacy Statement Preview'), - '$privtext' => $tos->privacy_complete, - '$tostext' => ['tostext', DI::l10n()->t('The Terms of Service'), DI::config()->get('system', 'tostext'), DI::l10n()->t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')], + '$title' => $this->t('Administration'), + '$page' => $this->t('Terms of Service'), + '$displaytos' => ['displaytos', $this->t('Display Terms of Service'), $this->config->get('system', 'tosdisplay'), $this->t('Enable the Terms of Service page. If this is enabled a link to the terms will be added to the registration form and the general information page.')], + '$displayprivstatement' => ['displayprivstatement', $this->t('Display Privacy Statement'), $this->config->get('system', 'tosprivstatement'), $this->t('Show some informations regarding the needed information to operate the node according e.g. to EU-GDPR.', 'https://en.wikipedia.org/wiki/General_Data_Protection_Regulation')], + '$preview' => $this->t('Privacy Statement Preview'), + '$privtext' => $this->tos->privacy_complete, + '$tostext' => ['tostext', $this->t('The Terms of Service'), $this->config->get('system', 'tostext'), $this->t('Enter the Terms of Service for your node here. You can use BBCode. Headers of sections should be [h2] and below.')], '$form_security_token' => self::getFormSecurityToken('admin_tos'), - '$submit' => DI::l10n()->t('Save Settings'), + '$submit' => $this->t('Save Settings'), ]); } } diff --git a/src/Module/Admin/Users/Active.php b/src/Module/Admin/Users/Active.php index 7eac47d11..6bcd22be4 100644 --- a/src/Module/Admin/Users/Active.php +++ b/src/Module/Admin/Users/Active.php @@ -30,7 +30,7 @@ use Friendica\Module\Admin\BaseUsers; class Active extends BaseUsers { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -60,12 +60,12 @@ class Active extends BaseUsers DI::baseUrl()->redirect(DI::args()->getQueryString()); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $action = $parameters['action'] ?? ''; - $uid = $parameters['uid'] ?? 0; + $action = $this->parameters['action'] ?? ''; + $uid = $this->parameters['uid'] ?? 0; if ($uid) { $user = User::getById($uid, ['username', 'blocked']); diff --git a/src/Module/Admin/Users/Blocked.php b/src/Module/Admin/Users/Blocked.php index 35e7c25bf..a24c95df0 100644 --- a/src/Module/Admin/Users/Blocked.php +++ b/src/Module/Admin/Users/Blocked.php @@ -31,7 +31,7 @@ use Friendica\Util\Temporal; class Blocked extends BaseUsers { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -61,12 +61,12 @@ class Blocked extends BaseUsers DI::baseUrl()->redirect('admin/users/blocked'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $action = $parameters['action'] ?? ''; - $uid = $parameters['uid'] ?? 0; + $action = $this->parameters['action'] ?? ''; + $uid = $this->parameters['uid'] ?? 0; if ($uid) { $user = User::getById($uid, ['username', 'blocked']); diff --git a/src/Module/Admin/Users/Create.php b/src/Module/Admin/Users/Create.php index 078547f46..71ab5b4cb 100644 --- a/src/Module/Admin/Users/Create.php +++ b/src/Module/Admin/Users/Create.php @@ -28,7 +28,7 @@ use Friendica\Module\Admin\BaseUsers; class Create extends BaseUsers { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -51,9 +51,9 @@ class Create extends BaseUsers DI::baseUrl()->redirect('admin/users/create'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $t = Renderer::getMarkupTemplate('admin/users/create.tpl'); return self::getTabsHTML('all') . Renderer::replaceMacros($t, [ diff --git a/src/Module/Admin/Users/Deleted.php b/src/Module/Admin/Users/Deleted.php index 2ebaec8b7..6357b2396 100644 --- a/src/Module/Admin/Users/Deleted.php +++ b/src/Module/Admin/Users/Deleted.php @@ -33,7 +33,7 @@ use Friendica\Util\Temporal; class Deleted extends BaseUsers { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -44,9 +44,9 @@ class Deleted extends BaseUsers DI::baseUrl()->redirect('admin/users/deleted'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), 100); diff --git a/src/Module/Admin/Users/Index.php b/src/Module/Admin/Users/Index.php index d391feb44..eb7b57c25 100644 --- a/src/Module/Admin/Users/Index.php +++ b/src/Module/Admin/Users/Index.php @@ -30,7 +30,7 @@ use Friendica\Module\Admin\BaseUsers; class Index extends BaseUsers { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -67,12 +67,12 @@ class Index extends BaseUsers DI::baseUrl()->redirect(DI::args()->getQueryString()); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $action = $parameters['action'] ?? ''; - $uid = $parameters['uid'] ?? 0; + $action = $this->parameters['action'] ?? ''; + $uid = $this->parameters['uid'] ?? 0; if ($uid) { $user = User::getById($uid, ['username', 'blocked']); diff --git a/src/Module/Admin/Users/Pending.php b/src/Module/Admin/Users/Pending.php index 14381682f..801c15974 100644 --- a/src/Module/Admin/Users/Pending.php +++ b/src/Module/Admin/Users/Pending.php @@ -33,7 +33,7 @@ use Friendica\Util\Temporal; class Pending extends BaseUsers { - public static function post(array $parameters = []) + public function post() { self::checkAdminAccess(); @@ -58,12 +58,12 @@ class Pending extends BaseUsers DI::baseUrl()->redirect('admin/users/pending'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); - $action = $parameters['action'] ?? ''; - $uid = $parameters['uid'] ?? 0; + $action = $this->parameters['action'] ?? ''; + $uid = $this->parameters['uid'] ?? 0; if ($uid) { $user = User::getById($uid, ['username', 'blocked']); diff --git a/src/Module/Api/Friendica/Activity.php b/src/Module/Api/Friendica/Activity.php index 00228c0cc..1b2b95d06 100644 --- a/src/Module/Api/Friendica/Activity.php +++ b/src/Module/Api/Friendica/Activity.php @@ -40,7 +40,7 @@ use Friendica\Module\BaseApi; */ class Activity extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -49,17 +49,17 @@ class Activity extends BaseApi 'id' => 0, // Id of the post ]); - $res = Item::performActivity($request['id'], $parameters['verb'], $uid); + $res = Item::performActivity($request['id'], $this->parameters['verb'], $uid); if ($res) { - if (!empty($parameters['extension']) && ($parameters['extension'] == 'xml')) { + if (!empty($this->parameters['extension']) && ($this->parameters['extension'] == 'xml')) { $ok = 'true'; } else { $ok = 'ok'; } - DI::apiResponse()->exit('ok', ['ok' => $ok], $parameters['extension'] ?? null); + DI::apiResponse()->exit('ok', ['ok' => $ok], $this->parameters['extension'] ?? null); } else { - DI::apiResponse()->error(500, 'Error adding activity', '', $parameters['extension'] ?? null); + DI::apiResponse()->error(500, 'Error adding activity', '', $this->parameters['extension'] ?? null); } } } diff --git a/src/Module/Api/Friendica/DirectMessages/Setseen.php b/src/Module/Api/Friendica/DirectMessages/Setseen.php index e55ad74b9..600d5fe17 100644 --- a/src/Module/Api/Friendica/DirectMessages/Setseen.php +++ b/src/Module/Api/Friendica/DirectMessages/Setseen.php @@ -30,7 +30,7 @@ use Friendica\Module\BaseApi; */ class Setseen extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -42,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']; - DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null); + DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $this->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']; - DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null); + DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null); } // update seen indicator @@ -58,6 +58,6 @@ class Setseen extends BaseApi $answer = ['result' => 'error', 'message' => 'unknown error']; } - DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $parameters['extension'] ?? null); + DI::apiResponse()->exit('direct_messages_setseen', ['$result' => $answer], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/Friendica/Events/Index.php b/src/Module/Api/Friendica/Events/Index.php index 31c55069d..b6cfdd098 100644 --- a/src/Module/Api/Friendica/Events/Index.php +++ b/src/Module/Api/Friendica/Events/Index.php @@ -33,7 +33,7 @@ use Friendica\Module\BaseApi; */ class Index extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); @@ -70,6 +70,6 @@ class Index extends BaseApi ]; } - DI::apiResponse()->exit('events', ['events' => $items], $parameters['extension'] ?? null); + DI::apiResponse()->exit('events', ['events' => $items], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/Friendica/Group/Delete.php b/src/Module/Api/Friendica/Group/Delete.php index 7d27222f4..d78ea658e 100644 --- a/src/Module/Api/Friendica/Group/Delete.php +++ b/src/Module/Api/Friendica/Group/Delete.php @@ -22,6 +22,7 @@ namespace Friendica\Module\Api\Friendica\Group; use Friendica\Database\DBA; +use Friendica\DI; use Friendica\Model\Group; use Friendica\Module\BaseApi; use Friendica\Network\HTTPException\BadRequestException; @@ -31,7 +32,7 @@ use Friendica\Network\HTTPException\BadRequestException; */ class Delete extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -69,7 +70,7 @@ class Delete extends BaseApi if ($ret) { // return success $success = ['success' => $ret, 'gid' => $request['gid'], 'name' => $request['name'], 'status' => 'deleted', 'wrong users' => []]; - self::exit('group_delete', ['$result' => $success], $parameters['extension'] ?? null); + DI::apiResponse()->exit('group_delete', ['$result' => $success], $parameters['extension'] ?? null); } else { throw new BadRequestException('other API error'); } diff --git a/src/Module/Api/Friendica/Index.php b/src/Module/Api/Friendica/Index.php index 8891d218a..dbe45f545 100644 --- a/src/Module/Api/Friendica/Index.php +++ b/src/Module/Api/Friendica/Index.php @@ -31,17 +31,17 @@ use Friendica\Module\BaseApi; */ class Index extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); } - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_WRITE); } - public static function rawContent(array $parameters = []) + public function rawContent() { echo api_call(DI::app()); exit(); diff --git a/src/Module/Api/Friendica/Notification.php b/src/Module/Api/Friendica/Notification.php index 2a50bde7b..9d316d94d 100644 --- a/src/Module/Api/Friendica/Notification.php +++ b/src/Module/Api/Friendica/Notification.php @@ -31,7 +31,7 @@ use Friendica\Object\Api\Friendica\Notification as ApiNotification; */ class Notification extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); @@ -43,7 +43,7 @@ class Notification extends BaseApi $notifications[] = new ApiNotification($Notify); } - if (!empty($parameters['extension']) && ($parameters['extension'] == 'xml')) { + if (!empty($this->parameters['extension']) && ($this->parameters['extension'] == 'xml')) { $xmlnotes = []; foreach ($notifications as $notification) { $xmlnotes[] = ['@attributes' => $notification->toArray()]; @@ -56,6 +56,6 @@ class Notification extends BaseApi $result = false; } - DI::apiResponse()->exit('notes', ['note' => $result], $parameters['extension'] ?? null); + DI::apiResponse()->exit('notes', ['note' => $result], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/Friendica/Photo/Delete.php b/src/Module/Api/Friendica/Photo/Delete.php index cf287d3d3..ab749b4e8 100644 --- a/src/Module/Api/Friendica/Photo/Delete.php +++ b/src/Module/Api/Friendica/Photo/Delete.php @@ -33,7 +33,7 @@ use Friendica\Network\HTTPException\InternalServerErrorException; */ class Delete extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -64,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.']; - DI::apiResponse()->exit('photo_delete', ['$result' => $result], $parameters['extension'] ?? null); + DI::apiResponse()->exit('photo_delete', ['$result' => $result], $this->parameters['extension'] ?? null); } else { throw new InternalServerErrorException("unknown error on deleting photo from database table"); } diff --git a/src/Module/Api/Friendica/Photoalbum/Delete.php b/src/Module/Api/Friendica/Photoalbum/Delete.php index dd18365b4..0a403270d 100644 --- a/src/Module/Api/Friendica/Photoalbum/Delete.php +++ b/src/Module/Api/Friendica/Photoalbum/Delete.php @@ -34,7 +34,7 @@ use Friendica\Network\HTTPException\InternalServerErrorException; */ class Delete extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -67,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.']; - DI::apiResponse()->exit('photoalbum_delete', ['$result' => $answer], $parameters['extension'] ?? null); + DI::apiResponse()->exit('photoalbum_delete', ['$result' => $answer], $this->parameters['extension'] ?? null); } else { throw new InternalServerErrorException("unknown error - deleting from database failed"); } diff --git a/src/Module/Api/Friendica/Photoalbum/Update.php b/src/Module/Api/Friendica/Photoalbum/Update.php index 369d33e82..9fc89dbf6 100644 --- a/src/Module/Api/Friendica/Photoalbum/Update.php +++ b/src/Module/Api/Friendica/Photoalbum/Update.php @@ -32,7 +32,7 @@ use Friendica\Network\HTTPException\InternalServerErrorException; */ class Update extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -59,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'] . '`.']; - DI::apiResponse()->exit('photoalbum_update', ['$result' => $answer], $parameters['extension'] ?? null); + DI::apiResponse()->exit('photoalbum_update', ['$result' => $answer], $this->parameters['extension'] ?? null); } else { throw new InternalServerErrorException("unknown error - updating in database failed"); } diff --git a/src/Module/Api/Friendica/Profile/Show.php b/src/Module/Api/Friendica/Profile/Show.php index e388405ef..8f60c0f84 100644 --- a/src/Module/Api/Friendica/Profile/Show.php +++ b/src/Module/Api/Friendica/Profile/Show.php @@ -24,7 +24,6 @@ namespace Friendica\Module\Api\Friendica\Profile; use Friendica\Profile\ProfileField\Collection\ProfileFields; use Friendica\Content\Text\BBCode; use Friendica\DI; -use Friendica\Model\Contact; use Friendica\Model\Profile; use Friendica\Module\BaseApi; use Friendica\Network\HTTPException; @@ -34,7 +33,7 @@ use Friendica\Network\HTTPException; */ class Show extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); @@ -49,23 +48,20 @@ class Show extends BaseApi $profile = self::formatProfile($profile, $profileFields); $profiles = []; - if (!empty($parameters['extension']) && ($parameters['extension'] == 'xml')) { + if (!empty($this->parameters['extension']) && ($this->parameters['extension'] == 'xml')) { $profiles['0:profile'] = $profile; } else { $profiles[] = $profile; } - // return settings, authenticated user and profiles data - $self = Contact::selectFirst(['nurl'], ['uid' => $uid, 'self' => true]); - $result = [ 'multi_profiles' => false, 'global_dir' => $directory, - 'friendica_owner' => self::getUser($self['nurl']), + 'friendica_owner' => DI::twitterUser()->createFromUserId($uid), 'profiles' => $profiles ]; - DI::apiResponse()->exit('friendica_profiles', ['$result' => $result], $parameters['extension'] ?? null); + DI::apiResponse()->exit('friendica_profiles', ['$result' => $result], $this->parameters['extension'] ?? null); } /** diff --git a/src/Module/Api/GNUSocial/GNUSocial/Config.php b/src/Module/Api/GNUSocial/GNUSocial/Config.php index 3ec6cdbce..6e661d2d7 100644 --- a/src/Module/Api/GNUSocial/GNUSocial/Config.php +++ b/src/Module/Api/GNUSocial/GNUSocial/Config.php @@ -31,7 +31,7 @@ use Friendica\Module\Register; */ class Config extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = [ 'site' => [ @@ -61,6 +61,6 @@ class Config extends BaseApi ], ]; - self::exit('config', ['config' => $config], $parameters['extension'] ?? null); + DI::apiResponse()->exit('config', ['config' => $config], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/GNUSocial/GNUSocial/Version.php b/src/Module/Api/GNUSocial/GNUSocial/Version.php index 52393702f..c9c7b98fd 100644 --- a/src/Module/Api/GNUSocial/GNUSocial/Version.php +++ b/src/Module/Api/GNUSocial/GNUSocial/Version.php @@ -29,8 +29,8 @@ use Friendica\DI; */ class Version extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { - DI::apiResponse()->exit('version', ['version' => '0.9.7'], $parameters['extension'] ?? null); + DI::apiResponse()->exit('version', ['version' => '0.9.7'], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/GNUSocial/Help/Test.php b/src/Module/Api/GNUSocial/Help/Test.php index 3df694c85..78f18c3e6 100644 --- a/src/Module/Api/GNUSocial/Help/Test.php +++ b/src/Module/Api/GNUSocial/Help/Test.php @@ -29,14 +29,14 @@ use Friendica\DI; */ class Test extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (!empty($parameters['extension']) && ($parameters['extension'] == 'xml')) { + if (!empty($this->parameters['extension']) && ($this->parameters['extension'] == 'xml')) { $ok = 'true'; } else { $ok = 'ok'; } - DI::apiResponse()->exit('ok', ['ok' => $ok], $parameters['extension'] ?? null); + DI::apiResponse()->exit('ok', ['ok' => $ok], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/Mastodon/Accounts.php b/src/Module/Api/Mastodon/Accounts.php index 781547854..552889661 100644 --- a/src/Module/Api/Mastodon/Accounts.php +++ b/src/Module/Api/Mastodon/Accounts.php @@ -33,27 +33,26 @@ use Friendica\Module\BaseApi; class Accounts extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id']) && empty($parameters['name'])) { + if (empty($this->parameters['id']) && empty($this->parameters['name'])) { DI::mstdnError()->UnprocessableEntity(); } - if (!empty($parameters['id'])) { - $id = $parameters['id']; + if (!empty($this->parameters['id'])) { + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } } else { - $contact = Contact::selectFirst(['id'], ['nick' => $parameters['name'], 'uid' => 0]); + $contact = Contact::selectFirst(['id'], ['nick' => $this->parameters['name'], 'uid' => 0]); if (!empty($contact['id'])) { $id = $contact['id']; - } elseif (!($id = Contact::getIdForURL($parameters['name'], 0, false))) { + } elseif (!($id = Contact::getIdForURL($this->parameters['name'], 0, false))) { DI::mstdnError()->RecordNotFound(); } } diff --git a/src/Module/Api/Mastodon/Accounts/Block.php b/src/Module/Api/Mastodon/Accounts/Block.php index 463383df7..b2ae98bd5 100644 --- a/src/Module/Api/Mastodon/Accounts/Block.php +++ b/src/Module/Api/Mastodon/Accounts/Block.php @@ -32,12 +32,12 @@ use Friendica\Module\BaseApi; */ class Block extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } @@ -46,7 +46,7 @@ class Block extends BaseApi DI::mstdnError()->Forbidden(); } - $cdata = Contact::getPublicAndUserContactID($parameters['id'], $uid); + $cdata = Contact::getPublicAndUserContactID($this->parameters['id'], $uid); if (empty($cdata['user'])) { DI::mstdnError()->RecordNotFound(); } @@ -62,6 +62,6 @@ class Block extends BaseApi Contact::terminateFriendship($owner, $contact); Contact::revokeFollow($contact); - System::jsonExit(DI::mstdnRelationship()->createFromContactId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnRelationship()->createFromContactId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Accounts/FeaturedTags.php b/src/Module/Api/Mastodon/Accounts/FeaturedTags.php index c4a4a561c..fe92696a0 100644 --- a/src/Module/Api/Mastodon/Accounts/FeaturedTags.php +++ b/src/Module/Api/Mastodon/Accounts/FeaturedTags.php @@ -30,10 +30,9 @@ use Friendica\Module\BaseApi; class FeaturedTags extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); diff --git a/src/Module/Api/Mastodon/Accounts/Follow.php b/src/Module/Api/Mastodon/Accounts/Follow.php index ab7038e97..86b932421 100644 --- a/src/Module/Api/Mastodon/Accounts/Follow.php +++ b/src/Module/Api/Mastodon/Accounts/Follow.php @@ -31,16 +31,16 @@ use Friendica\Module\BaseApi; */ class Follow extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $cid = Contact::follow($parameters['id'], $uid); + $cid = Contact::follow($this->parameters['id'], $uid); System::jsonExit(DI::mstdnRelationship()->createFromContactId($cid, $uid)->toArray()); } diff --git a/src/Module/Api/Mastodon/Accounts/Followers.php b/src/Module/Api/Mastodon/Accounts/Followers.php index e1f864acb..981d2c715 100644 --- a/src/Module/Api/Mastodon/Accounts/Followers.php +++ b/src/Module/Api/Mastodon/Accounts/Followers.php @@ -32,19 +32,18 @@ use Friendica\Module\BaseApi; class Followers extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } @@ -73,7 +72,7 @@ class Followers extends BaseApi $params['order'] = ['cid']; } - $followers = DBA::select('contact-relation', ['relation-cid'], $condition, $parameters); + $followers = DBA::select('contact-relation', ['relation-cid'], $condition, $this->parameters); while ($follower = DBA::fetch($followers)) { self::setBoundaries($follower['relation-cid']); $accounts[] = DI::mstdnAccount()->createFromContactId($follower['relation-cid'], $uid); diff --git a/src/Module/Api/Mastodon/Accounts/Following.php b/src/Module/Api/Mastodon/Accounts/Following.php index e2b963e0c..41352ddaf 100644 --- a/src/Module/Api/Mastodon/Accounts/Following.php +++ b/src/Module/Api/Mastodon/Accounts/Following.php @@ -32,19 +32,18 @@ use Friendica\Module\BaseApi; class Following extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } @@ -73,7 +72,7 @@ class Following extends BaseApi $params['order'] = ['cid']; } - $followers = DBA::select('contact-relation', ['cid'], $condition, $parameters); + $followers = DBA::select('contact-relation', ['cid'], $condition, $this->parameters); while ($follower = DBA::fetch($followers)) { self::setBoundaries($follower['cid']); $accounts[] = DI::mstdnAccount()->createFromContactId($follower['cid'], $uid); diff --git a/src/Module/Api/Mastodon/Accounts/IdentityProofs.php b/src/Module/Api/Mastodon/Accounts/IdentityProofs.php index 6abb416d1..88379440a 100644 --- a/src/Module/Api/Mastodon/Accounts/IdentityProofs.php +++ b/src/Module/Api/Mastodon/Accounts/IdentityProofs.php @@ -30,10 +30,9 @@ use Friendica\Module\BaseApi; class IdentityProofs extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); diff --git a/src/Module/Api/Mastodon/Accounts/Lists.php b/src/Module/Api/Mastodon/Accounts/Lists.php index 908674940..f34b961b6 100644 --- a/src/Module/Api/Mastodon/Accounts/Lists.php +++ b/src/Module/Api/Mastodon/Accounts/Lists.php @@ -33,19 +33,18 @@ use Friendica\Module\BaseApi; class Lists extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } diff --git a/src/Module/Api/Mastodon/Accounts/Mute.php b/src/Module/Api/Mastodon/Accounts/Mute.php index 1d878269d..1c711db75 100644 --- a/src/Module/Api/Mastodon/Accounts/Mute.php +++ b/src/Module/Api/Mastodon/Accounts/Mute.php @@ -31,17 +31,17 @@ use Friendica\Module\BaseApi; */ class Mute extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - Contact\User::setIgnored($parameters['id'], $uid, true); + Contact\User::setIgnored($this->parameters['id'], $uid, true); - System::jsonExit(DI::mstdnRelationship()->createFromContactId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnRelationship()->createFromContactId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Accounts/Note.php b/src/Module/Api/Mastodon/Accounts/Note.php index e63192202..fe4611754 100644 --- a/src/Module/Api/Mastodon/Accounts/Note.php +++ b/src/Module/Api/Mastodon/Accounts/Note.php @@ -32,12 +32,12 @@ use Friendica\Module\BaseApi; */ class Note extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } @@ -45,13 +45,13 @@ class Note extends BaseApi 'comment' => '', ]); - $cdata = Contact::getPublicAndUserContactID($parameters['id'], $uid); + $cdata = Contact::getPublicAndUserContactID($this->parameters['id'], $uid); if (empty($cdata['user'])) { DI::mstdnError()->RecordNotFound(); } Contact::update(['info' => $request['comment']], ['id' => $cdata['user']]); - System::jsonExit(DI::mstdnRelationship()->createFromContactId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnRelationship()->createFromContactId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Accounts/Relationships.php b/src/Module/Api/Mastodon/Accounts/Relationships.php index 5631952d2..451b7b49e 100644 --- a/src/Module/Api/Mastodon/Accounts/Relationships.php +++ b/src/Module/Api/Mastodon/Accounts/Relationships.php @@ -32,10 +32,9 @@ use Friendica\Module\BaseApi; class Relationships extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Accounts/Search.php b/src/Module/Api/Mastodon/Accounts/Search.php index c31189a42..fb3aafaec 100644 --- a/src/Module/Api/Mastodon/Accounts/Search.php +++ b/src/Module/Api/Mastodon/Accounts/Search.php @@ -35,10 +35,9 @@ use Friendica\Object\Search\ContactResult; class Search extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Accounts/Statuses.php b/src/Module/Api/Mastodon/Accounts/Statuses.php index 0e7a7fb33..5bf7b4934 100644 --- a/src/Module/Api/Mastodon/Accounts/Statuses.php +++ b/src/Module/Api/Mastodon/Accounts/Statuses.php @@ -37,18 +37,17 @@ use Friendica\Protocol\Activity; class Statuses extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } diff --git a/src/Module/Api/Mastodon/Accounts/Unblock.php b/src/Module/Api/Mastodon/Accounts/Unblock.php index b1c93ea36..ae2414b8a 100644 --- a/src/Module/Api/Mastodon/Accounts/Unblock.php +++ b/src/Module/Api/Mastodon/Accounts/Unblock.php @@ -31,17 +31,17 @@ use Friendica\Module\BaseApi; */ class Unblock extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - Contact\User::setBlocked($parameters['id'], $uid, false); + Contact\User::setBlocked($this->parameters['id'], $uid, false); - System::jsonExit(DI::mstdnRelationship()->createFromContactId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnRelationship()->createFromContactId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Accounts/Unfollow.php b/src/Module/Api/Mastodon/Accounts/Unfollow.php index 447b1cd65..a15c946bb 100644 --- a/src/Module/Api/Mastodon/Accounts/Unfollow.php +++ b/src/Module/Api/Mastodon/Accounts/Unfollow.php @@ -31,17 +31,17 @@ use Friendica\Module\BaseApi; */ class Unfollow extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - Contact::unfollow($parameters['id'], $uid); + Contact::unfollow($this->parameters['id'], $uid); - System::jsonExit(DI::mstdnRelationship()->createFromContactId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnRelationship()->createFromContactId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Accounts/Unmute.php b/src/Module/Api/Mastodon/Accounts/Unmute.php index bc2e50be9..d1410f782 100644 --- a/src/Module/Api/Mastodon/Accounts/Unmute.php +++ b/src/Module/Api/Mastodon/Accounts/Unmute.php @@ -31,17 +31,17 @@ use Friendica\Module\BaseApi; */ class Unmute extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - Contact\User::setIgnored($parameters['id'], $uid, false); + Contact\User::setIgnored($this->parameters['id'], $uid, false); - System::jsonExit(DI::mstdnRelationship()->createFromContactId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnRelationship()->createFromContactId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php b/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php index 449e26fb9..2c55bff43 100644 --- a/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php +++ b/src/Module/Api/Mastodon/Accounts/UpdateCredentials.php @@ -32,7 +32,7 @@ use Friendica\Util\HTTPInputData; */ class UpdateCredentials extends BaseApi { - public static function patch(array $parameters = []) + public function patch() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Accounts/VerifyCredentials.php b/src/Module/Api/Mastodon/Accounts/VerifyCredentials.php index 1c1945438..0cce46037 100644 --- a/src/Module/Api/Mastodon/Accounts/VerifyCredentials.php +++ b/src/Module/Api/Mastodon/Accounts/VerifyCredentials.php @@ -33,10 +33,9 @@ use Friendica\Module\BaseApi; class VerifyCredentials extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Announcements.php b/src/Module/Api/Mastodon/Announcements.php index 5a414fda1..b8d231df6 100644 --- a/src/Module/Api/Mastodon/Announcements.php +++ b/src/Module/Api/Mastodon/Announcements.php @@ -30,10 +30,9 @@ use Friendica\Module\BaseApi; class Announcements extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); diff --git a/src/Module/Api/Mastodon/Apps.php b/src/Module/Api/Mastodon/Apps.php index 040607137..a00bd4085 100644 --- a/src/Module/Api/Mastodon/Apps.php +++ b/src/Module/Api/Mastodon/Apps.php @@ -33,10 +33,9 @@ use Friendica\Util\Network; class Apps extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function post(array $parameters = []) + public function post() { $request = self::getRequest([ 'client_name' => '', diff --git a/src/Module/Api/Mastodon/Apps/VerifyCredentials.php b/src/Module/Api/Mastodon/Apps/VerifyCredentials.php index e4105f142..e9720da0f 100644 --- a/src/Module/Api/Mastodon/Apps/VerifyCredentials.php +++ b/src/Module/Api/Mastodon/Apps/VerifyCredentials.php @@ -30,7 +30,7 @@ use Friendica\Module\BaseApi; */ class VerifyCredentials extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $application = self::getCurrentApplication(); diff --git a/src/Module/Api/Mastodon/Blocks.php b/src/Module/Api/Mastodon/Blocks.php index 305914c1a..b6a26d973 100644 --- a/src/Module/Api/Mastodon/Blocks.php +++ b/src/Module/Api/Mastodon/Blocks.php @@ -32,19 +32,18 @@ use Friendica\Module\BaseApi; class Blocks extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } @@ -73,7 +72,7 @@ class Blocks extends BaseApi $params['order'] = ['cid']; } - $followers = DBA::select('user-contact', ['cid'], $condition, $parameters); + $followers = DBA::select('user-contact', ['cid'], $condition, $this->parameters); while ($follower = DBA::fetch($followers)) { self::setBoundaries($follower['cid']); $accounts[] = DI::mstdnAccount()->createFromContactId($follower['cid'], $uid); diff --git a/src/Module/Api/Mastodon/Bookmarks.php b/src/Module/Api/Mastodon/Bookmarks.php index a7141e3dc..7b51e4316 100644 --- a/src/Module/Api/Mastodon/Bookmarks.php +++ b/src/Module/Api/Mastodon/Bookmarks.php @@ -34,10 +34,9 @@ use Friendica\Network\HTTPException; class Bookmarks extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Conversations.php b/src/Module/Api/Mastodon/Conversations.php index 22774b57c..a3f6a26a2 100644 --- a/src/Module/Api/Mastodon/Conversations.php +++ b/src/Module/Api/Mastodon/Conversations.php @@ -31,26 +31,25 @@ use Friendica\Module\BaseApi; */ class Conversations extends BaseApi { - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (!empty($parameters['id'])) { + if (!empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - DBA::delete('conv', ['id' => $parameters['id'], 'uid' => $uid]); - DBA::delete('mail', ['convid' => $parameters['id'], 'uid' => $uid]); + DBA::delete('conv', ['id' => $this->parameters['id'], 'uid' => $uid]); + DBA::delete('mail', ['convid' => $this->parameters['id'], 'uid' => $uid]); System::jsonExit([]); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Conversations/Read.php b/src/Module/Api/Mastodon/Conversations/Read.php index c469eea34..1eadc671c 100644 --- a/src/Module/Api/Mastodon/Conversations/Read.php +++ b/src/Module/Api/Mastodon/Conversations/Read.php @@ -31,17 +31,17 @@ use Friendica\Module\BaseApi; */ class Read extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (!empty($parameters['id'])) { + if (!empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - DBA::update('mail', ['seen' => true], ['convid' => $parameters['id'], 'uid' => $uid]); + DBA::update('mail', ['seen' => true], ['convid' => $this->parameters['id'], 'uid' => $uid]); - System::jsonExit(DI::mstdnConversation()->CreateFromConvId($parameters['id'])->toArray()); + System::jsonExit(DI::mstdnConversation()->CreateFromConvId($this->parameters['id'])->toArray()); } } diff --git a/src/Module/Api/Mastodon/CustomEmojis.php b/src/Module/Api/Mastodon/CustomEmojis.php index a9723414d..1fedf5348 100644 --- a/src/Module/Api/Mastodon/CustomEmojis.php +++ b/src/Module/Api/Mastodon/CustomEmojis.php @@ -33,12 +33,11 @@ use Friendica\Network\HTTPException; class CustomEmojis extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException * @throws \ImagickException * @see https://docs.joinmastodon.org/methods/accounts/follow_requests#pending-follows */ - public static function rawContent(array $parameters = []) + public function rawContent() { $emojis = DI::mstdnEmoji()->createCollectionFromSmilies(Smilies::getList()); diff --git a/src/Module/Api/Mastodon/Directory.php b/src/Module/Api/Mastodon/Directory.php index 115b02a86..e48a70959 100644 --- a/src/Module/Api/Mastodon/Directory.php +++ b/src/Module/Api/Mastodon/Directory.php @@ -35,12 +35,11 @@ use Friendica\Network\HTTPException; class Directory extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException * @throws \ImagickException * @see https://docs.joinmastodon.org/methods/instance/directory/ */ - public static function rawContent(array $parameters = []) + public function rawContent() { $request = self::getRequest([ 'offset' => 0, // How many accounts to skip before returning results. Default 0. diff --git a/src/Module/Api/Mastodon/Endorsements.php b/src/Module/Api/Mastodon/Endorsements.php index 9c5e853bc..b9a5bc2cd 100644 --- a/src/Module/Api/Mastodon/Endorsements.php +++ b/src/Module/Api/Mastodon/Endorsements.php @@ -30,10 +30,9 @@ use Friendica\Module\BaseApi; class Endorsements extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { System::jsonExit([]); } diff --git a/src/Module/Api/Mastodon/Favourited.php b/src/Module/Api/Mastodon/Favourited.php index 31e760d3b..48aa452f2 100644 --- a/src/Module/Api/Mastodon/Favourited.php +++ b/src/Module/Api/Mastodon/Favourited.php @@ -35,10 +35,9 @@ use Friendica\Protocol\Activity; class Favourited extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Filters.php b/src/Module/Api/Mastodon/Filters.php index f14b74a0b..5bf50db1a 100644 --- a/src/Module/Api/Mastodon/Filters.php +++ b/src/Module/Api/Mastodon/Filters.php @@ -31,7 +31,7 @@ use Friendica\Module\BaseApi; */ class Filters extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); @@ -39,10 +39,9 @@ class Filters extends BaseApi } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); diff --git a/src/Module/Api/Mastodon/FollowRequests.php b/src/Module/Api/Mastodon/FollowRequests.php index bc7cc31bb..af4ac5771 100644 --- a/src/Module/Api/Mastodon/FollowRequests.php +++ b/src/Module/Api/Mastodon/FollowRequests.php @@ -33,7 +33,6 @@ use Friendica\Network\HTTPException; class FollowRequests extends BaseApi { /** - * @param array $parameters * @throws HTTPException\BadRequestException * @throws HTTPException\InternalServerErrorException * @throws HTTPException\NotFoundException @@ -43,16 +42,16 @@ class FollowRequests extends BaseApi * @see https://docs.joinmastodon.org/methods/accounts/follow_requests#accept-follow * @see https://docs.joinmastodon.org/methods/accounts/follow_requests#reject-follow */ - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_FOLLOW); $uid = self::getCurrentUserID(); - $introduction = DI::intro()->selectOneById($parameters['id'], $uid); + $introduction = DI::intro()->selectOneById($this->parameters['id'], $uid); $contactId = $introduction->cid; - switch ($parameters['action']) { + switch ($this->parameters['action']) { case 'authorize': Contact\Introduction::confirm($introduction); $relationship = DI::mstdnRelationship()->createFromContactId($contactId, $uid); @@ -79,12 +78,11 @@ class FollowRequests extends BaseApi } /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException * @throws \ImagickException * @see https://docs.joinmastodon.org/methods/accounts/follow_requests/ */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Instance.php b/src/Module/Api/Mastodon/Instance.php index 2e73a440d..b7dc7d700 100644 --- a/src/Module/Api/Mastodon/Instance.php +++ b/src/Module/Api/Mastodon/Instance.php @@ -31,10 +31,9 @@ use Friendica\Object\Api\Mastodon\Instance as InstanceEntity; class Instance extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { System::jsonExit(InstanceEntity::get()); } diff --git a/src/Module/Api/Mastodon/Instance/Peers.php b/src/Module/Api/Mastodon/Instance/Peers.php index be18a5aa1..b1fdd062b 100644 --- a/src/Module/Api/Mastodon/Instance/Peers.php +++ b/src/Module/Api/Mastodon/Instance/Peers.php @@ -34,10 +34,9 @@ use Friendica\Util\Network; class Peers extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $return = []; diff --git a/src/Module/Api/Mastodon/Instance/Rules.php b/src/Module/Api/Mastodon/Instance/Rules.php index 9b7d2dc77..3063bf9ea 100644 --- a/src/Module/Api/Mastodon/Instance/Rules.php +++ b/src/Module/Api/Mastodon/Instance/Rules.php @@ -34,10 +34,9 @@ use Friendica\Network\HTTPException; class Rules extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $rules = []; $id = 0; diff --git a/src/Module/Api/Mastodon/Lists.php b/src/Module/Api/Mastodon/Lists.php index 8be4207ea..e7a66f04d 100644 --- a/src/Module/Api/Mastodon/Lists.php +++ b/src/Module/Api/Mastodon/Lists.php @@ -31,27 +31,27 @@ use Friendica\Model\Group; */ class Lists extends BaseApi { - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - if (!Group::exists($parameters['id'], $uid)) { + if (!Group::exists($this->parameters['id'], $uid)) { DI::mstdnError()->RecordNotFound(); } - if (!Group::remove($parameters['id'])) { + if (!Group::remove($this->parameters['id'])) { DI::mstdnError()->InternalError(); } System::jsonExit([]); } - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -74,30 +74,29 @@ class Lists extends BaseApi System::jsonExit(DI::mstdnList()->createFromGroupId($id)); } - public static function put(array $parameters = []) + public function put() { $request = self::getRequest([ 'title' => '', // The title of the list to be updated. 'replies_policy' => '', // One of: "followed", "list", or "none". ]); - if (empty($request['title']) || empty($parameters['id'])) { + if (empty($request['title']) || empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - Group::update($parameters['id'], $request['title']); + Group::update($this->parameters['id'], $request['title']); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { $lists = []; $groups = Group::getByUserId($uid); @@ -106,7 +105,7 @@ class Lists extends BaseApi $lists[] = DI::mstdnList()->createFromGroupId($group['id']); } } else { - $id = $parameters['id']; + $id = $this->parameters['id']; if (!Group::exists($id, $uid)) { DI::mstdnError()->RecordNotFound(); diff --git a/src/Module/Api/Mastodon/Lists/Accounts.php b/src/Module/Api/Mastodon/Lists/Accounts.php index b83f4903a..c70e20349 100644 --- a/src/Module/Api/Mastodon/Lists/Accounts.php +++ b/src/Module/Api/Mastodon/Lists/Accounts.php @@ -35,30 +35,29 @@ use Friendica\Module\BaseApi; */ class Accounts extends BaseApi { - public static function delete(array $parameters = []) + public function delete() { DI::apiResponse()->unsupported(Router::DELETE); } - public static function post(array $parameters = []) + public function post() { DI::apiResponse()->unsupported(Router::POST); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('group', ['id' => $id, 'uid' => $uid])) { DI::mstdnError()->RecordNotFound(); } diff --git a/src/Module/Api/Mastodon/Markers.php b/src/Module/Api/Mastodon/Markers.php index 394d508d7..6a01a30cf 100644 --- a/src/Module/Api/Mastodon/Markers.php +++ b/src/Module/Api/Mastodon/Markers.php @@ -31,7 +31,7 @@ use Friendica\Module\BaseApi; */ class Markers extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); @@ -39,10 +39,9 @@ class Markers extends BaseApi } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); diff --git a/src/Module/Api/Mastodon/Media.php b/src/Module/Api/Mastodon/Media.php index b93a06288..dc31bdec6 100644 --- a/src/Module/Api/Mastodon/Media.php +++ b/src/Module/Api/Mastodon/Media.php @@ -32,7 +32,7 @@ use Friendica\Module\BaseApi; */ class Media extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -53,7 +53,7 @@ class Media extends BaseApi System::jsonExit(DI::mstdnAttachment()->createFromPhoto($media['id'])); } - public static function put(array $parameters = []) + public function put() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -65,34 +65,33 @@ class Media extends BaseApi 'focus' => '', // Two floating points (x,y), comma-delimited ranging from -1.0 to 1.0 ]); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $photo = Photo::selectFirst(['resource-id'], ['id' => $parameters['id'], 'uid' => $uid]); + $photo = Photo::selectFirst(['resource-id'], ['id' => $this->parameters['id'], 'uid' => $uid]); if (empty($photo['resource-id'])) { DI::mstdnError()->RecordNotFound(); } Photo::update(['desc' => $request['description']], ['resource-id' => $photo['resource-id']]); - System::jsonExit(DI::mstdnAttachment()->createFromPhoto($parameters['id'])); + System::jsonExit(DI::mstdnAttachment()->createFromPhoto($this->parameters['id'])); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!Photo::exists(['id' => $id, 'uid' => $uid])) { DI::mstdnError()->RecordNotFound(); } diff --git a/src/Module/Api/Mastodon/Mutes.php b/src/Module/Api/Mastodon/Mutes.php index 7939da114..3c24071f0 100644 --- a/src/Module/Api/Mastodon/Mutes.php +++ b/src/Module/Api/Mastodon/Mutes.php @@ -32,19 +32,18 @@ use Friendica\Module\BaseApi; class Mutes extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!DBA::exists('contact', ['id' => $id, 'uid' => 0])) { DI::mstdnError()->RecordNotFound(); } @@ -73,7 +72,7 @@ class Mutes extends BaseApi $params['order'] = ['cid']; } - $followers = DBA::select('user-contact', ['cid'], $condition, $parameters); + $followers = DBA::select('user-contact', ['cid'], $condition, $this->parameters); while ($follower = DBA::fetch($followers)) { self::setBoundaries($follower['cid']); $accounts[] = DI::mstdnAccount()->createFromContactId($follower['cid'], $uid); diff --git a/src/Module/Api/Mastodon/Notifications.php b/src/Module/Api/Mastodon/Notifications.php index a6a024d9b..274a85786 100644 --- a/src/Module/Api/Mastodon/Notifications.php +++ b/src/Module/Api/Mastodon/Notifications.php @@ -38,16 +38,15 @@ use Friendica\Protocol\Activity; class Notifications extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (!empty($parameters['id'])) { - $id = $parameters['id']; + if (!empty($this->parameters['id'])) { + $id = $this->parameters['id']; try { $notification = DI::notification()->selectOneForUser($uid, ['id' => $id]); System::jsonExit(DI::mstdnNotification()->createFromNotification($notification)); diff --git a/src/Module/Api/Mastodon/Notifications/Clear.php b/src/Module/Api/Mastodon/Notifications/Clear.php index 9dca0bf65..424979157 100644 --- a/src/Module/Api/Mastodon/Notifications/Clear.php +++ b/src/Module/Api/Mastodon/Notifications/Clear.php @@ -30,7 +30,7 @@ use Friendica\Module\BaseApi; */ class Clear extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Notifications/Dismiss.php b/src/Module/Api/Mastodon/Notifications/Dismiss.php index b615c5e89..b978e46ee 100644 --- a/src/Module/Api/Mastodon/Notifications/Dismiss.php +++ b/src/Module/Api/Mastodon/Notifications/Dismiss.php @@ -32,16 +32,16 @@ use Friendica\Network\HTTPException\ForbiddenException; */ class Dismiss extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $Notification = DI::notification()->selectOneForUser($uid, $parameters['id']); + $Notification = DI::notification()->selectOneForUser($uid, $this->parameters['id']); $Notification->setSeen(); DI::notification()->save($Notification); diff --git a/src/Module/Api/Mastodon/Preferences.php b/src/Module/Api/Mastodon/Preferences.php index d54bd85fa..6d846c35b 100644 --- a/src/Module/Api/Mastodon/Preferences.php +++ b/src/Module/Api/Mastodon/Preferences.php @@ -32,10 +32,9 @@ use Friendica\Module\BaseApi; class Preferences extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Proofs.php b/src/Module/Api/Mastodon/Proofs.php index 1d09a9211..c9b92246a 100644 --- a/src/Module/Api/Mastodon/Proofs.php +++ b/src/Module/Api/Mastodon/Proofs.php @@ -30,10 +30,9 @@ use Friendica\Module\BaseApi; class Proofs extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { System::jsonError(404, ['error' => 'Record not found']); } diff --git a/src/Module/Api/Mastodon/PushSubscription.php b/src/Module/Api/Mastodon/PushSubscription.php index 3bc77aeb6..e45c943f5 100644 --- a/src/Module/Api/Mastodon/PushSubscription.php +++ b/src/Module/Api/Mastodon/PushSubscription.php @@ -33,7 +33,7 @@ use Friendica\Object\Api\Mastodon\Notification; */ class PushSubscription extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_PUSH); $uid = self::getCurrentUserID(); @@ -66,7 +66,7 @@ class PushSubscription extends BaseApi return DI::mstdnSubscription()->createForApplicationIdAndUserId($application['id'], $uid)->toArray(); } - public static function put(array $parameters = []) + public function put() { self::checkAllowedScope(self::SCOPE_PUSH); $uid = self::getCurrentUserID(); @@ -99,7 +99,7 @@ class PushSubscription extends BaseApi return DI::mstdnSubscription()->createForApplicationIdAndUserId($application['id'], $uid)->toArray(); } - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_PUSH); $uid = self::getCurrentUserID(); @@ -112,7 +112,7 @@ class PushSubscription extends BaseApi System::jsonExit([]); } - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_PUSH); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/ScheduledStatuses.php b/src/Module/Api/Mastodon/ScheduledStatuses.php index 82be0d6e7..bfb2cff45 100644 --- a/src/Module/Api/Mastodon/ScheduledStatuses.php +++ b/src/Module/Api/Mastodon/ScheduledStatuses.php @@ -34,7 +34,7 @@ use Friendica\Module\BaseApi; */ class ScheduledStatuses extends BaseApi { - public static function put(array $parameters = []) + public function put() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -42,35 +42,34 @@ class ScheduledStatuses extends BaseApi DI::apiResponse()->unsupported(Router::PUT); } - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - if (!DBA::exists('delayed-post', ['id' => $parameters['id'], 'uid' => $uid])) { + if (!DBA::exists('delayed-post', ['id' => $this->parameters['id'], 'uid' => $uid])) { DI::mstdnError()->RecordNotFound(); } - Post\Delayed::deleteById($parameters['id']); + Post\Delayed::deleteById($this->parameters['id']); System::jsonExit([]); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (isset($parameters['id'])) { - System::jsonExit(DI::mstdnScheduledStatus()->createFromDelayedPostId($parameters['id'], $uid)->toArray()); + if (isset($this->parameters['id'])) { + System::jsonExit(DI::mstdnScheduledStatus()->createFromDelayedPostId($this->parameters['id'], $uid)->toArray()); } $request = self::getRequest([ diff --git a/src/Module/Api/Mastodon/Search.php b/src/Module/Api/Mastodon/Search.php index 63190151d..6753b0909 100644 --- a/src/Module/Api/Mastodon/Search.php +++ b/src/Module/Api/Mastodon/Search.php @@ -38,10 +38,9 @@ use Friendica\Object\Search\ContactResult; class Search extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); @@ -74,7 +73,7 @@ class Search extends BaseApi $result['statuses'] = self::searchStatuses($uid, $request['q'], $request['account_id'], $request['max_id'], $request['min_id'], $limit, $request['offset']); } if ((empty($request['type']) || ($request['type'] == 'hashtags')) && (strpos($request['q'], '@') == false)) { - $result['hashtags'] = self::searchHashtags($request['q'], $request['exclude_unreviewed'], $limit, $request['offset'], $parameters['version']); + $result['hashtags'] = self::searchHashtags($request['q'], $request['exclude_unreviewed'], $limit, $request['offset'], $this->parameters['version']); } System::jsonExit($result); diff --git a/src/Module/Api/Mastodon/Statuses.php b/src/Module/Api/Mastodon/Statuses.php index ed5abf199..50c35f347 100644 --- a/src/Module/Api/Mastodon/Statuses.php +++ b/src/Module/Api/Mastodon/Statuses.php @@ -41,7 +41,7 @@ use Friendica\Util\Images; */ class Statuses extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); @@ -207,16 +207,16 @@ class Statuses extends BaseApi DI::mstdnError()->InternalError(); } - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $parameters['id'], 'uid' => $uid]); + $item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $this->parameters['id'], 'uid' => $uid]); if (empty($item['id'])) { DI::mstdnError()->RecordNotFound(); } @@ -229,17 +229,16 @@ class Statuses extends BaseApi } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)); } } diff --git a/src/Module/Api/Mastodon/Statuses/Bookmark.php b/src/Module/Api/Mastodon/Statuses/Bookmark.php index 79be11a4a..de0ef641d 100644 --- a/src/Module/Api/Mastodon/Statuses/Bookmark.php +++ b/src/Module/Api/Mastodon/Statuses/Bookmark.php @@ -33,16 +33,16 @@ use Friendica\Module\BaseApi; */ class Bookmark extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -53,6 +53,6 @@ class Bookmark extends BaseApi Item::update(['starred' => true], ['id' => $item['id']]); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Card.php b/src/Module/Api/Mastodon/Statuses/Card.php index 2fe482554..d3c1801a2 100644 --- a/src/Module/Api/Mastodon/Statuses/Card.php +++ b/src/Module/Api/Mastodon/Statuses/Card.php @@ -33,18 +33,17 @@ use Friendica\Network\HTTPException; class Card extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!Post::exists(['uri-id' => $id, 'uid' => [0, $uid]])) { throw new HTTPException\NotFoundException('Item with URI ID ' . $id . ' not found' . ($uid ? ' for user ' . $uid : '.')); diff --git a/src/Module/Api/Mastodon/Statuses/Context.php b/src/Module/Api/Mastodon/Statuses/Context.php index 62397afdb..03782ef1c 100644 --- a/src/Module/Api/Mastodon/Statuses/Context.php +++ b/src/Module/Api/Mastodon/Statuses/Context.php @@ -33,14 +33,13 @@ use Friendica\Module\BaseApi; class Context extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } @@ -48,7 +47,7 @@ class Context extends BaseApi 'limit' => 40, // Maximum number of results to return. Defaults to 40. ]); - $id = $parameters['id']; + $id = $this->parameters['id']; $parents = []; $children = []; diff --git a/src/Module/Api/Mastodon/Statuses/Favourite.php b/src/Module/Api/Mastodon/Statuses/Favourite.php index a30ad0fe7..8ec818a8f 100644 --- a/src/Module/Api/Mastodon/Statuses/Favourite.php +++ b/src/Module/Api/Mastodon/Statuses/Favourite.php @@ -33,22 +33,22 @@ use Friendica\Module\BaseApi; */ class Favourite extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } Item::performActivity($item['id'], 'like', $uid); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/FavouritedBy.php b/src/Module/Api/Mastodon/Statuses/FavouritedBy.php index 67dc4b67f..37d9e7521 100644 --- a/src/Module/Api/Mastodon/Statuses/FavouritedBy.php +++ b/src/Module/Api/Mastodon/Statuses/FavouritedBy.php @@ -33,18 +33,17 @@ use Friendica\Protocol\Activity; class FavouritedBy extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!Post::exists(['uri-id' => $id, 'uid' => [0, $uid]])) { DI::mstdnError()->RecordNotFound(); } diff --git a/src/Module/Api/Mastodon/Statuses/Mute.php b/src/Module/Api/Mastodon/Statuses/Mute.php index 812daff4d..4a0e943f3 100644 --- a/src/Module/Api/Mastodon/Statuses/Mute.php +++ b/src/Module/Api/Mastodon/Statuses/Mute.php @@ -32,16 +32,16 @@ use Friendica\Module\BaseApi; */ class Mute extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -50,8 +50,8 @@ class Mute extends BaseApi DI::mstdnError()->UnprocessableEntity(DI::l10n()->t('Only starting posts can be muted')); } - Post\ThreadUser::setIgnored($parameters['id'], $uid, true); + Post\ThreadUser::setIgnored($this->parameters['id'], $uid, true); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Pin.php b/src/Module/Api/Mastodon/Statuses/Pin.php index 1d5498167..7648d12a0 100644 --- a/src/Module/Api/Mastodon/Statuses/Pin.php +++ b/src/Module/Api/Mastodon/Statuses/Pin.php @@ -32,16 +32,16 @@ use Friendica\Module\BaseApi; */ class Pin extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -50,8 +50,8 @@ class Pin extends BaseApi DI::mstdnError()->UnprocessableEntity(DI::l10n()->t('Only starting posts can be pinned')); } - Post\ThreadUser::setPinned($parameters['id'], $uid, true); + Post\ThreadUser::setPinned($this->parameters['id'], $uid, true); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Reblog.php b/src/Module/Api/Mastodon/Statuses/Reblog.php index 1af7efb82..d10149616 100644 --- a/src/Module/Api/Mastodon/Statuses/Reblog.php +++ b/src/Module/Api/Mastodon/Statuses/Reblog.php @@ -35,16 +35,16 @@ use Friendica\Module\BaseApi; */ class Reblog extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'network'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'network'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -55,6 +55,6 @@ class Reblog extends BaseApi Item::performActivity($item['id'], 'announce', $uid); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/RebloggedBy.php b/src/Module/Api/Mastodon/Statuses/RebloggedBy.php index 11c15b41e..52f1e2f67 100644 --- a/src/Module/Api/Mastodon/Statuses/RebloggedBy.php +++ b/src/Module/Api/Mastodon/Statuses/RebloggedBy.php @@ -33,18 +33,17 @@ use Friendica\Protocol\Activity; class RebloggedBy extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $id = $parameters['id']; + $id = $this->parameters['id']; if (!Post::exists(['uri-id' => $id, 'uid' => [0, $uid]])) { DI::mstdnError()->RecordNotFound(); } diff --git a/src/Module/Api/Mastodon/Statuses/Unbookmark.php b/src/Module/Api/Mastodon/Statuses/Unbookmark.php index f65b07a34..9279fec60 100644 --- a/src/Module/Api/Mastodon/Statuses/Unbookmark.php +++ b/src/Module/Api/Mastodon/Statuses/Unbookmark.php @@ -33,16 +33,16 @@ use Friendica\Module\BaseApi; */ class Unbookmark extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -53,6 +53,6 @@ class Unbookmark extends BaseApi Item::update(['starred' => false], ['id' => $item['id']]); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Unfavourite.php b/src/Module/Api/Mastodon/Statuses/Unfavourite.php index b3fee3682..7898647ac 100644 --- a/src/Module/Api/Mastodon/Statuses/Unfavourite.php +++ b/src/Module/Api/Mastodon/Statuses/Unfavourite.php @@ -33,22 +33,22 @@ use Friendica\Module\BaseApi; */ class Unfavourite extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } Item::performActivity($item['id'], 'unlike', $uid); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Unmute.php b/src/Module/Api/Mastodon/Statuses/Unmute.php index ee9b85cc4..80b9c2c54 100644 --- a/src/Module/Api/Mastodon/Statuses/Unmute.php +++ b/src/Module/Api/Mastodon/Statuses/Unmute.php @@ -32,16 +32,16 @@ use Friendica\Module\BaseApi; */ class Unmute extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -50,8 +50,8 @@ class Unmute extends BaseApi DI::mstdnError()->UnprocessableEntity(DI::l10n()->t('Only starting posts can be unmuted')); } - Post\ThreadUser::setIgnored($parameters['id'], $uid, false); + Post\ThreadUser::setIgnored($this->parameters['id'], $uid, false); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Unpin.php b/src/Module/Api/Mastodon/Statuses/Unpin.php index 1f4195cca..21f44b7cb 100644 --- a/src/Module/Api/Mastodon/Statuses/Unpin.php +++ b/src/Module/Api/Mastodon/Statuses/Unpin.php @@ -32,16 +32,16 @@ use Friendica\Module\BaseApi; */ class Unpin extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'gravity'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -50,8 +50,8 @@ class Unpin extends BaseApi DI::mstdnError()->UnprocessableEntity(DI::l10n()->t('Only starting posts can be pinned')); } - Post\ThreadUser::setPinned($parameters['id'], $uid, false); + Post\ThreadUser::setPinned($this->parameters['id'], $uid, false); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Statuses/Unreblog.php b/src/Module/Api/Mastodon/Statuses/Unreblog.php index 9450e0f41..972a6aa1a 100644 --- a/src/Module/Api/Mastodon/Statuses/Unreblog.php +++ b/src/Module/Api/Mastodon/Statuses/Unreblog.php @@ -35,16 +35,16 @@ use Friendica\Module\BaseApi; */ class Unreblog extends BaseApi { - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } - $item = Post::selectFirstForUser($uid, ['id', 'network'], ['uri-id' => $parameters['id'], 'uid' => [$uid, 0]]); + $item = Post::selectFirstForUser($uid, ['id', 'network'], ['uri-id' => $this->parameters['id'], 'uid' => [$uid, 0]]); if (!DBA::isResult($item)) { DI::mstdnError()->RecordNotFound(); } @@ -55,6 +55,6 @@ class Unreblog extends BaseApi Item::performActivity($item['id'], 'unannounce', $uid); - System::jsonExit(DI::mstdnStatus()->createFromUriId($parameters['id'], $uid)->toArray()); + System::jsonExit(DI::mstdnStatus()->createFromUriId($this->parameters['id'], $uid)->toArray()); } } diff --git a/src/Module/Api/Mastodon/Suggestions.php b/src/Module/Api/Mastodon/Suggestions.php index e0bb75b2d..b80c239f6 100644 --- a/src/Module/Api/Mastodon/Suggestions.php +++ b/src/Module/Api/Mastodon/Suggestions.php @@ -32,10 +32,9 @@ use Friendica\Module\BaseApi; class Suggestions extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Timelines/Direct.php b/src/Module/Api/Mastodon/Timelines/Direct.php index 3c3b9c052..d50c97f47 100644 --- a/src/Module/Api/Mastodon/Timelines/Direct.php +++ b/src/Module/Api/Mastodon/Timelines/Direct.php @@ -33,10 +33,9 @@ use Friendica\Network\HTTPException; class Direct extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Timelines/Home.php b/src/Module/Api/Mastodon/Timelines/Home.php index 2b556d7ce..de21bb2a1 100644 --- a/src/Module/Api/Mastodon/Timelines/Home.php +++ b/src/Module/Api/Mastodon/Timelines/Home.php @@ -34,10 +34,9 @@ use Friendica\Network\HTTPException; class Home extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Timelines/ListTimeline.php b/src/Module/Api/Mastodon/Timelines/ListTimeline.php index 8d4a432c5..c9316fdf5 100644 --- a/src/Module/Api/Mastodon/Timelines/ListTimeline.php +++ b/src/Module/Api/Mastodon/Timelines/ListTimeline.php @@ -34,15 +34,14 @@ use Friendica\Network\HTTPException; class ListTimeline extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { DI::mstdnError()->UnprocessableEntity(); } @@ -61,7 +60,7 @@ class ListTimeline extends BaseApi $params = ['order' => ['uri-id' => true], 'limit' => $request['limit']]; $condition = ["`uid` = ? AND `gravity` IN (?, ?) AND `contact-id` IN (SELECT `contact-id` FROM `group_member` WHERE `gid` = ?)", - $uid, GRAVITY_PARENT, GRAVITY_COMMENT, $parameters['id']]; + $uid, GRAVITY_PARENT, GRAVITY_COMMENT, $this->parameters['id']]; if (!empty($request['max_id'])) { $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $request['max_id']]); diff --git a/src/Module/Api/Mastodon/Timelines/PublicTimeline.php b/src/Module/Api/Mastodon/Timelines/PublicTimeline.php index ca0141691..162236d1e 100644 --- a/src/Module/Api/Mastodon/Timelines/PublicTimeline.php +++ b/src/Module/Api/Mastodon/Timelines/PublicTimeline.php @@ -37,10 +37,9 @@ use Friendica\Network\HTTPException; class PublicTimeline extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $uid = self::getCurrentUserID(); diff --git a/src/Module/Api/Mastodon/Timelines/Tag.php b/src/Module/Api/Mastodon/Timelines/Tag.php index 0437be277..3571dd733 100644 --- a/src/Module/Api/Mastodon/Timelines/Tag.php +++ b/src/Module/Api/Mastodon/Timelines/Tag.php @@ -35,15 +35,14 @@ use Friendica\Network\HTTPException; class Tag extends BaseApi { /** - * @param array $parameters * @throws HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); - if (empty($parameters['hashtag'])) { + if (empty($this->parameters['hashtag'])) { DI::mstdnError()->UnprocessableEntity(); } @@ -70,7 +69,7 @@ class Tag extends BaseApi $condition = ["`name` = ? AND (`uid` = ? OR (`uid` = ? AND NOT `global`)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))", - $parameters['hashtag'], 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0]; + $this->parameters['hashtag'], 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0]; if ($request['local']) { $condition = DBA::mergeConditions($condition, ["`uri-id` IN (SELECT `uri-id` FROM `post-user` WHERE `origin`)"]); diff --git a/src/Module/Api/Mastodon/Trends.php b/src/Module/Api/Mastodon/Trends.php index 505cdbabd..3536e737c 100644 --- a/src/Module/Api/Mastodon/Trends.php +++ b/src/Module/Api/Mastodon/Trends.php @@ -32,10 +32,9 @@ use Friendica\Module\BaseApi; class Trends extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $request = self::getRequest([ 'limit' => 20, // Maximum number of results to return. Defaults to 10. diff --git a/src/Module/Api/Mastodon/Unimplemented.php b/src/Module/Api/Mastodon/Unimplemented.php index 6a0a100c3..f5f76afd5 100644 --- a/src/Module/Api/Mastodon/Unimplemented.php +++ b/src/Module/Api/Mastodon/Unimplemented.php @@ -31,46 +31,41 @@ use Friendica\Module\BaseApi; class Unimplemented extends BaseApi { /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function delete(array $parameters = []) + public function delete() { DI::apiResponse()->unsupported(Router::DELETE); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function patch(array $parameters = []) + public function patch() { DI::apiResponse()->unsupported(Router::PATCH); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function post(array $parameters = []) + public function post() { DI::apiResponse()->unsupported(Router::POST); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function put(array $parameters = []) + public function put() { DI::apiResponse()->unsupported(Router::PUT); } /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { DI::apiResponse()->unsupported(Router::GET); } diff --git a/src/Module/Api/Twitter/Account/RateLimitStatus.php b/src/Module/Api/Twitter/Account/RateLimitStatus.php index fe422c79f..9a275cecb 100644 --- a/src/Module/Api/Twitter/Account/RateLimitStatus.php +++ b/src/Module/Api/Twitter/Account/RateLimitStatus.php @@ -30,9 +30,9 @@ use Friendica\Util\DateTimeFormat; */ class RateLimitStatus extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (!empty($parameters['extension']) && ($parameters['extension'] == 'xml')) { + if (!empty($this->parameters['extension']) && ($this->parameters['extension'] == 'xml')) { $hash = [ 'remaining-hits' => '150', '@attributes' => ["type" => "integer"], @@ -48,10 +48,10 @@ class RateLimitStatus extends BaseApi 'reset_time_in_seconds' => strtotime('now + 1 hour'), 'remaining_hits' => '150', 'hourly_limit' => '150', - 'reset_time' => api_date(DateTimeFormat::utc('now + 1 hour', DateTimeFormat::ATOM)), + 'reset_time' => DateTimeFormat::utc('now + 1 hour', DateTimeFormat::API), ]; } - DI::apiResponse()->exit('hash', ['hash' => $hash], $parameters['extension'] ?? null); + DI::apiResponse()->exit('hash', ['hash' => $hash], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Api/Twitter/ContactEndpoint.php b/src/Module/Api/Twitter/ContactEndpoint.php index 7e5f11cc6..183ea1c4e 100644 --- a/src/Module/Api/Twitter/ContactEndpoint.php +++ b/src/Module/Api/Twitter/ContactEndpoint.php @@ -21,6 +21,7 @@ namespace Friendica\Module\Api\Twitter; +use Friendica\Core\L10n; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Profile; @@ -35,9 +36,9 @@ abstract class ContactEndpoint extends BaseApi const DEFAULT_COUNT = 20; const MAX_COUNT = 200; - public static function init(array $parameters = []) + public function __construct(L10n $l10n, array $parameters = []) { - parent::init($parameters); + parent::__construct($l10n, $parameters); self::checkAllowedScope(self::SCOPE_READ); } diff --git a/src/Module/Api/Twitter/FollowersIds.php b/src/Module/Api/Twitter/Followers/Ids.php similarity index 90% rename from src/Module/Api/Twitter/FollowersIds.php rename to src/Module/Api/Twitter/Followers/Ids.php index 01be503de..cab4c3864 100644 --- a/src/Module/Api/Twitter/FollowersIds.php +++ b/src/Module/Api/Twitter/Followers/Ids.php @@ -19,17 +19,18 @@ * */ -namespace Friendica\Module\Api\Twitter; +namespace Friendica\Module\Api\Twitter\Followers; use Friendica\Core\System; use Friendica\Model\Contact; +use Friendica\Module\Api\Twitter\ContactEndpoint; /** * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids */ class FollowersIds extends ContactEndpoint { - public static function rawContent(array $parameters = []) + public function rawContent() { // Expected value for user_id parameter: public/user contact id $contact_id = filter_input(INPUT_GET, 'user_id' , FILTER_VALIDATE_INT); @@ -47,6 +48,8 @@ class FollowersIds extends ContactEndpoint 'default' => 1, ]]); + // @todo Use Model\Contact\Relation::listFollowers($cid, $condition, $count); + System::jsonExit(self::ids( [Contact::FOLLOWER, Contact::FRIEND], self::getUid($contact_id, $screen_name), diff --git a/src/Module/Api/Twitter/FollowersList.php b/src/Module/Api/Twitter/Followers/Lists.php similarity index 91% rename from src/Module/Api/Twitter/FollowersList.php rename to src/Module/Api/Twitter/Followers/Lists.php index 8e39f2201..41d44d628 100644 --- a/src/Module/Api/Twitter/FollowersList.php +++ b/src/Module/Api/Twitter/Followers/Lists.php @@ -19,17 +19,18 @@ * */ -namespace Friendica\Module\Api\Twitter; +namespace Friendica\Module\Api\Twitter\Followers; use Friendica\Core\System; use Friendica\Model\Contact; +use Friendica\Module\Api\Twitter\ContactEndpoint; /** * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-list */ class FollowersList extends ContactEndpoint { - public static function rawContent(array $parameters = []) + public function rawContent() { // Expected value for user_id parameter: public/user contact id $contact_id = filter_input(INPUT_GET, 'user_id' , FILTER_VALIDATE_INT); @@ -49,6 +50,7 @@ class FollowersList extends ContactEndpoint 'default' => 1, ]]); + // @todo Use Model\Contact\Relation::listFollowers($cid, $condition, $count); System::jsonExit(self::list( [Contact::FOLLOWER, Contact::FRIEND], diff --git a/src/Module/Api/Twitter/FriendsIds.php b/src/Module/Api/Twitter/Friends/Ids.php similarity index 89% rename from src/Module/Api/Twitter/FriendsIds.php rename to src/Module/Api/Twitter/Friends/Ids.php index 3500a4043..9c58ac652 100644 --- a/src/Module/Api/Twitter/FriendsIds.php +++ b/src/Module/Api/Twitter/Friends/Ids.php @@ -19,17 +19,18 @@ * */ -namespace Friendica\Module\Api\Twitter; +namespace Friendica\Module\Api\Twitter\Friends; use Friendica\Core\System; use Friendica\Model\Contact; +use Friendica\Module\Api\Twitter\ContactEndpoint; /** * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids */ -class FriendsIds extends ContactEndpoint +class Ids extends ContactEndpoint { - public static function rawContent(array $parameters = []) + public function rawContent() { // Expected value for user_id parameter: public/user contact id $contact_id = filter_input(INPUT_GET, 'user_id' , FILTER_VALIDATE_INT); @@ -47,6 +48,8 @@ class FriendsIds extends ContactEndpoint 'default' => 1, ]]); + // @todo Use Model\Contact\Relation::listFollows($cid, $condition, $count); + System::jsonExit(self::ids( [Contact::SHARING, Contact::FRIEND], self::getUid($contact_id, $screen_name), diff --git a/src/Module/Api/Twitter/FriendsList.php b/src/Module/Api/Twitter/Friends/Lists.php similarity index 89% rename from src/Module/Api/Twitter/FriendsList.php rename to src/Module/Api/Twitter/Friends/Lists.php index 114e391cc..144350214 100644 --- a/src/Module/Api/Twitter/FriendsList.php +++ b/src/Module/Api/Twitter/Friends/Lists.php @@ -19,17 +19,18 @@ * */ -namespace Friendica\Module\Api\Twitter; +namespace Friendica\Module\Api\Twitter\Friends; use Friendica\Core\System; use Friendica\Model\Contact; +use Friendica\Module\Api\Twitter\ContactEndpoint; /** * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list */ -class FriendsList extends ContactEndpoint +class Lists extends ContactEndpoint { - public static function rawContent(array $parameters = []) + public function rawContent() { // Expected value for user_id parameter: public/user contact id $contact_id = filter_input(INPUT_GET, 'user_id' , FILTER_VALIDATE_INT); @@ -49,6 +50,8 @@ class FriendsList extends ContactEndpoint 'default' => 1, ]]); + // @todo Use Model\Contact\Relation::listFollows($cid, $condition, $count); + System::jsonExit(self::list( [Contact::SHARING, Contact::FRIEND], self::getUid($contact_id, $screen_name), diff --git a/src/Module/Api/Twitter/SavedSearches.php b/src/Module/Api/Twitter/SavedSearches.php index b2e2c5f0d..ac7531671 100644 --- a/src/Module/Api/Twitter/SavedSearches.php +++ b/src/Module/Api/Twitter/SavedSearches.php @@ -31,7 +31,7 @@ use Friendica\Module\BaseApi; */ class SavedSearches extends BaseApi { - public static function rawContent(array $parameters = []) + public function rawContent() { self::checkAllowedScope(self::SCOPE_READ); $uid = self::getCurrentUserID(); @@ -45,6 +45,6 @@ class SavedSearches extends BaseApi DBA::close($terms); - DI::apiResponse()->exit('terms', ['terms' => $result], $parameters['extension'] ?? null); + DI::apiResponse()->exit('terms', ['terms' => $result], $this->parameters['extension'] ?? null); } } diff --git a/src/Module/Apps.php b/src/Module/Apps.php index 46dfe41c9..f414f7f8c 100644 --- a/src/Module/Apps.php +++ b/src/Module/Apps.php @@ -21,35 +21,39 @@ namespace Friendica\Module; +use Friendica\App\BaseURL; use Friendica\BaseModule; use Friendica\Content\Nav; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\DI; /** * Shows the App menu */ class Apps extends BaseModule { - public static function init(array $parameters = []) + public function __construct(L10n $l10n, IManageConfigValues $config, BaseURL $baseUrl, array $parameters = []) { - $privateaddons = DI::config()->get('config', 'private_addons'); + parent::__construct($l10n, $parameters); + + $privateaddons = $config->get('config', 'private_addons'); if ($privateaddons === "1" && !local_user()) { - DI::baseUrl()->redirect(); + $baseUrl->redirect(); } } - public static function content(array $parameters = []) + public function content(): string { $apps = Nav::getAppMenu(); if (count($apps) == 0) { - notice(DI::l10n()->t('No installed applications.')); + notice($this->t('No installed applications.')); } $tpl = Renderer::getMarkupTemplate('apps.tpl'); return Renderer::replaceMacros($tpl, [ - '$title' => DI::l10n()->t('Applications'), + '$title' => $this->t('Applications'), '$apps' => $apps, ]); } diff --git a/src/Module/Attach.php b/src/Module/Attach.php index a4bb9b422..c35e6b9ba 100644 --- a/src/Module/Attach.php +++ b/src/Module/Attach.php @@ -34,14 +34,14 @@ class Attach extends BaseModule /** * Return to user an attached file given the id */ - public static function rawContent(array $parameters = []) + public function rawContent() { $a = DI::app(); - if (empty($parameters['item'])) { + if (empty($this->parameters['item'])) { throw new \Friendica\Network\HTTPException\BadRequestException(); } - $item_id = intval($parameters['item']); + $item_id = intval($this->parameters['item']); // Check for existence $item = MAttach::exists(['id' => $item_id]); diff --git a/src/Module/BaseAdmin.php b/src/Module/BaseAdmin.php index 69c2879de..83e3ca0b1 100644 --- a/src/Module/BaseAdmin.php +++ b/src/Module/BaseAdmin.php @@ -68,7 +68,7 @@ abstract class BaseAdmin extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { self::checkAdminAccess(true); diff --git a/src/Module/BaseApi.php b/src/Module/BaseApi.php index a0a94c336..2e8e1d15b 100644 --- a/src/Module/BaseApi.php +++ b/src/Module/BaseApi.php @@ -25,16 +25,13 @@ use Friendica\BaseModule; use Friendica\Core\Logger; use Friendica\Core\System; use Friendica\DI; +use Friendica\Model\Contact; use Friendica\Model\Post; use Friendica\Network\HTTPException; use Friendica\Security\BasicAuth; use Friendica\Security\OAuth; -use Friendica\Util\Arrays; use Friendica\Util\DateTimeFormat; use Friendica\Util\HTTPInputData; -use Friendica\Util\XML; - -require_once __DIR__ . '/../../include/api.php'; class BaseApi extends BaseModule { @@ -53,7 +50,7 @@ class BaseApi extends BaseModule */ protected static $request = []; - public static function delete(array $parameters = []) + public function delete() { self::checkAllowedScope(self::SCOPE_WRITE); @@ -62,7 +59,7 @@ class BaseApi extends BaseModule } } - public static function patch(array $parameters = []) + public function patch() { self::checkAllowedScope(self::SCOPE_WRITE); @@ -71,7 +68,7 @@ class BaseApi extends BaseModule } } - public static function post(array $parameters = []) + public function post() { self::checkAllowedScope(self::SCOPE_WRITE); @@ -80,7 +77,7 @@ class BaseApi extends BaseModule } } - public static function put(array $parameters = []) + public function put() { self::checkAllowedScope(self::SCOPE_WRITE); @@ -139,7 +136,6 @@ class BaseApi extends BaseModule * Set boundaries for the "link" header * @param array $boundaries * @param int $id - * @return array */ protected static function setBoundaries(int $id) { @@ -296,18 +292,14 @@ class BaseApi extends BaseModule } } - /** - * Get user info array. - * - * @param int|string $contact_id Contact ID or URL - * @return array|bool - * @throws HTTPException\BadRequestException - * @throws HTTPException\InternalServerErrorException - * @throws HTTPException\UnauthorizedException - * @throws \ImagickException - */ - protected static function getUser($contact_id = null) + public static function getContactIDForSearchterm($searchterm) { - return api_get_user($contact_id); + if (intval($searchterm) == 0) { + $cid = Contact::getIdForURL($searchterm, 0, false); + } else { + $cid = intval($searchterm); + } + + return $cid; } } diff --git a/src/Module/BaseNotifications.php b/src/Module/BaseNotifications.php index e7f9bdabe..0e39eb651 100644 --- a/src/Module/BaseNotifications.php +++ b/src/Module/BaseNotifications.php @@ -22,11 +22,12 @@ namespace Friendica\Module; use Exception; +use Friendica\App\Arguments; use Friendica\BaseModule; use Friendica\Content\Pager; +use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\System; -use Friendica\DI; use Friendica\Navigation\Notifications\ValueObject\FormattedNotification; use Friendica\Network\HTTPException\ForbiddenException; @@ -70,9 +71,12 @@ abstract class BaseNotifications extends BaseModule const DEFAULT_PAGE_LIMIT = 80; /** @var boolean True, if ALL entries should get shown */ - protected static $showAll; + protected $showAll; /** @var int The determined start item of the current page */ - protected static $firstItemNum; + protected $firstItemNum; + + /** @var Arguments */ + protected $args; /** * Collects all notifications from the backend @@ -80,33 +84,37 @@ abstract class BaseNotifications extends BaseModule * @return array The determined notification array * ['header', 'notifications'] */ - abstract public static function getNotifications(); + abstract public function getNotifications(); - public static function init(array $parameters = []) + public function __construct(Arguments $args, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + if (!local_user()) { - throw new ForbiddenException(DI::l10n()->t('Permission denied.')); + throw new ForbiddenException($this->t('Permission denied.')); } $page = ($_REQUEST['page'] ?? 0) ?: 1; - self::$firstItemNum = ($page * self::ITEMS_PER_PAGE) - self::ITEMS_PER_PAGE; - self::$showAll = ($_REQUEST['show'] ?? '') === 'all'; + $this->firstItemNum = ($page * self::ITEMS_PER_PAGE) - self::ITEMS_PER_PAGE; + $this->showAll = ($_REQUEST['show'] ?? '') === 'all'; + + $this->args = $args; } - public static function rawContent(array $parameters = []) + public function rawContent() { // If the last argument of the query is NOT json, return - if (DI::args()->get(DI::args()->getArgc() - 1) !== 'json') { + if ($this->args->get($this->args->getArgc() - 1) !== 'json') { return; } // Set the pager - $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), self::ITEMS_PER_PAGE); + $pager = new Pager($this->l10n, $this->args->getQueryString(), self::ITEMS_PER_PAGE); // Add additional informations (needed for json output) $notifications = [ - 'notifications' => static::getNotifications(), + 'notifications' => $this->getNotifications(), 'items_page' => $pager->getItemsPerPage(), 'page' => $pager->getPage(), ]; @@ -126,17 +134,17 @@ abstract class BaseNotifications extends BaseModule * * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - protected static function printContent(string $header, array $notifications, string $noContent, array $showLink) + protected function printContent(string $header, array $notifications, string $noContent, array $showLink) { // Get the nav tabs for the notification pages - $tabs = self::getTabs(); + $tabs = $this->getTabs(); // Set the pager - $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), self::ITEMS_PER_PAGE); + $pager = new Pager($this->l10n, $this->args->getQueryString(), self::ITEMS_PER_PAGE); $notif_tpl = Renderer::getMarkupTemplate('notifications/notifications.tpl'); return Renderer::replaceMacros($notif_tpl, [ - '$header' => $header ?? DI::l10n()->t('Notifications'), + '$header' => $header ?? $this->t('Notifications'), '$tabs' => $tabs, '$notifications' => $notifications, '$noContent' => $noContent, @@ -151,15 +159,15 @@ abstract class BaseNotifications extends BaseModule * @return array with with notifications TabBar data * @throws Exception */ - private static function getTabs() + private function getTabs() { - $selected = DI::args()->get(1, ''); + $selected = $this->args->get(1, ''); $tabs = []; foreach (self::URL_TYPES as $type => $url) { $tabs[] = [ - 'label' => DI::l10n()->t(self::PRINT_TYPES[$type]), + 'label' => $this->t(self::PRINT_TYPES[$type]), 'url' => 'notifications/' . $url, 'sel' => (($selected == $url) ? 'active' : ''), 'id' => $type . '-tab', diff --git a/src/Module/BaseSettings.php b/src/Module/BaseSettings.php index c2516e134..7afaa35d0 100644 --- a/src/Module/BaseSettings.php +++ b/src/Module/BaseSettings.php @@ -28,7 +28,7 @@ use Friendica\DI; class BaseSettings extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $a = DI::app(); @@ -125,5 +125,7 @@ class BaseSettings extends BaseModule '$class' => 'settings-widget', '$items' => $tabs, ]); + + return ''; } } diff --git a/src/Module/Bookmarklet.php b/src/Module/Bookmarklet.php index 3551cfd17..5061254aa 100644 --- a/src/Module/Bookmarklet.php +++ b/src/Module/Bookmarklet.php @@ -34,7 +34,7 @@ use Friendica\Util\Strings; */ class Bookmarklet extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $_GET['mode'] = 'minimal'; diff --git a/src/Module/Contact.php b/src/Module/Contact.php index 4f13b2843..243ec4be3 100644 --- a/src/Module/Contact.php +++ b/src/Module/Contact.php @@ -96,7 +96,7 @@ class Contact extends BaseModule DI::baseUrl()->redirect($redirectUrl); } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -226,7 +226,7 @@ class Contact extends BaseModule Model\Contact\User::setIgnored($contact_id, local_user(), $ignored); } - public static function content(array $parameters = [], $update = 0) + public function content($update = 0): string { if (!local_user()) { return Login::form($_SERVER['REQUEST_URI']); diff --git a/src/Module/Contact/Advanced.php b/src/Module/Contact/Advanced.php index 29de7bd6f..8d0a4e0f3 100644 --- a/src/Module/Contact/Advanced.php +++ b/src/Module/Contact/Advanced.php @@ -21,37 +21,53 @@ namespace Friendica\Module\Contact; +use Friendica\App\Page; use Friendica\BaseModule; use Friendica\Content\Widget; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session; -use Friendica\DI; +use Friendica\Database\Database; use Friendica\Model; use Friendica\Module\Contact; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Network\HTTPException\ForbiddenException; use Friendica\Util\Strings; +use Psr\Log\LoggerInterface; /** * GUI for advanced contact details manipulation */ class Advanced extends BaseModule { - public static function init(array $parameters = []) + /** @var Database */ + protected $dba; + /** @var LoggerInterface */ + protected $logger; + /** @var Page */ + protected $page; + + public function __construct(Database $dba, LoggerInterface $logger, Page $page, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->dba = $dba; + $this->logger = $logger; + $this->page = $page; + if (!Session::isAuthenticated()) { - throw new ForbiddenException(DI::l10n()->t('Permission denied.')); + throw new ForbiddenException($this->t('Permission denied.')); } } - public static function post(array $parameters = []) + public function post() { - $cid = $parameters['id']; + $cid = $this->parameters['id']; $contact = Model\Contact::selectFirst([], ['id' => $cid, 'uid' => local_user()]); if (empty($contact)) { - throw new BadRequestException(DI::l10n()->t('Contact not found.')); + throw new BadRequestException($this->t('Contact not found.')); } $name = ($_POST['name'] ?? '') ?: $contact['name']; @@ -66,7 +82,7 @@ class Advanced extends BaseModule $photo = $_POST['photo'] ?? ''; $nurl = Strings::normaliseLink($url); - $r = DI::dba()->update( + $r = $this->dba->update( 'contact', [ 'name' => $name, @@ -84,31 +100,29 @@ class Advanced extends BaseModule ); if ($photo) { - DI::logger()->notice('Updating photo.', ['photo' => $photo]); + $this->logger->notice('Updating photo.', ['photo' => $photo]); Model\Contact::updateAvatar($contact['id'], $photo, true); } if (!$r) { - notice(DI::l10n()->t('Contact update failed.')); + notice($this->t('Contact update failed.')); } - - return; } - public static function content(array $parameters = []) + public function content(): string { - $cid = $parameters['id']; + $cid = $this->parameters['id']; $contact = Model\Contact::selectFirst([], ['id' => $cid, 'uid' => local_user()]); if (empty($contact)) { - throw new BadRequestException(DI::l10n()->t('Contact not found.')); + throw new BadRequestException($this->t('Contact not found.')); } - DI::page()['aside'] = Widget\VCard::getHTML($contact); + $this->page['aside'] = Widget\VCard::getHTML($contact); - $warning = DI::l10n()->t('WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working.'); - $info = DI::l10n()->t('Please use your browser \'Back\' button now if you are uncertain what to do on this page.'); + $warning = $this->t('WARNING: This is highly advanced and if you enter incorrect information your communications with this contact may stop working.'); + $info = $this->t('Please use your browser \'Back\' button now if you are uncertain what to do on this page.'); $returnaddr = "contact/$cid"; @@ -128,20 +142,20 @@ class Advanced extends BaseModule '$warning' => $warning, '$info' => $info, '$returnaddr' => $returnaddr, - '$return' => DI::l10n()->t('Return to contact editor'), + '$return' => $this->t('Return to contact editor'), '$contact_id' => $contact['id'], - '$lbl_submit' => DI::l10n()->t('Submit'), + '$lbl_submit' => $this->t('Submit'), - '$name' => ['name', DI::l10n()->t('Name'), $contact['name'], '', '', $readonly], - '$nick' => ['nick', DI::l10n()->t('Account Nickname'), $contact['nick'], '', '', $readonly], - '$attag' => ['attag', DI::l10n()->t('@Tagname - overrides Name/Nickname'), $contact['attag']], - '$url' => ['url', DI::l10n()->t('Account URL'), $contact['url'], '', '', $readonly], - '$alias' => ['alias', DI::l10n()->t('Account URL Alias'), $contact['alias'], '', '', $readonly], - '$request' => ['request', DI::l10n()->t('Friend Request URL'), $contact['request'], '', '', $readonly], - 'confirm' => ['confirm', DI::l10n()->t('Friend Confirm URL'), $contact['confirm'], '', '', $readonly], - 'notify' => ['notify', DI::l10n()->t('Notification Endpoint URL'), $contact['notify'], '', '', $readonly], - 'poll' => ['poll', DI::l10n()->t('Poll/Feed URL'), $contact['poll'], '', '', $readonly], - 'photo' => ['photo', DI::l10n()->t('New photo from this URL'), '', '', '', $readonly], + '$name' => ['name', $this->t('Name'), $contact['name'], '', '', $readonly], + '$nick' => ['nick', $this->t('Account Nickname'), $contact['nick'], '', '', $readonly], + '$attag' => ['attag', $this->t('@Tagname - overrides Name/Nickname'), $contact['attag']], + '$url' => ['url', $this->t('Account URL'), $contact['url'], '', '', $readonly], + '$alias' => ['alias', $this->t('Account URL Alias'), $contact['alias'], '', '', $readonly], + '$request' => ['request', $this->t('Friend Request URL'), $contact['request'], '', '', $readonly], + 'confirm' => ['confirm', $this->t('Friend Confirm URL'), $contact['confirm'], '', '', $readonly], + 'notify' => ['notify', $this->t('Notification Endpoint URL'), $contact['notify'], '', '', $readonly], + 'poll' => ['poll', $this->t('Poll/Feed URL'), $contact['poll'], '', '', $readonly], + 'photo' => ['photo', $this->t('New photo from this URL'), '', '', '', $readonly], ]); } } diff --git a/src/Module/Contact/Contacts.php b/src/Module/Contact/Contacts.php index b75dea43d..bfe689c1e 100644 --- a/src/Module/Contact/Contacts.php +++ b/src/Module/Contact/Contacts.php @@ -14,7 +14,7 @@ use Friendica\Network\HTTPException; class Contacts extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $app = DI::app(); @@ -22,8 +22,8 @@ class Contacts extends BaseModule throw new HTTPException\ForbiddenException(); } - $cid = $parameters['id']; - $type = $parameters['type'] ?? 'all'; + $cid = $this->parameters['id']; + $type = $this->parameters['type'] ?? 'all'; $accounttype = $_GET['accounttype'] ?? ''; $accounttypeid = User::getAccountTypeByString($accounttype); diff --git a/src/Module/Contact/Hovercard.php b/src/Module/Contact/Hovercard.php index 57d4ac6ab..34560313d 100644 --- a/src/Module/Contact/Hovercard.php +++ b/src/Module/Contact/Hovercard.php @@ -35,7 +35,7 @@ use Friendica\Util\Strings; */ class Hovercard extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $contact_url = $_REQUEST['url'] ?? ''; diff --git a/src/Module/Contact/Media.php b/src/Module/Contact/Media.php index 956c33ac8..a3a498b6d 100644 --- a/src/Module/Contact/Media.php +++ b/src/Module/Contact/Media.php @@ -34,9 +34,9 @@ use Friendica\Network\HTTPException\BadRequestException; */ class Media extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { - $cid = $parameters['id']; + $cid = $this->parameters['id']; $contact = Model\Contact::selectFirst([], ['id' => $cid]); if (empty($contact)) { diff --git a/src/Module/Contact/Poke.php b/src/Module/Contact/Poke.php index d9dd7e27a..23ec95a43 100644 --- a/src/Module/Contact/Poke.php +++ b/src/Module/Contact/Poke.php @@ -18,9 +18,9 @@ use Friendica\Util\XML; class Poke extends BaseModule { - public static function post(array $parameters = []) + public function post() { - if (!local_user() || empty($parameters['id'])) { + if (!local_user() || empty($this->parameters['id'])) { return self::postReturn(false); } @@ -39,14 +39,14 @@ class Poke extends BaseModule $activity = Activity::POKE . '#' . urlencode($verbs[$verb][0]); - $contact_id = intval($parameters['id']); + $contact_id = intval($this->parameters['id']); if (!$contact_id) { return self::postReturn(false); } Logger::info('verb ' . $verb . ' contact ' . $contact_id); - $contact = DBA::selectFirst('contact', ['id', 'name', 'url', 'photo'], ['id' => $parameters['id'], 'uid' => local_user()]); + $contact = DBA::selectFirst('contact', ['id', 'name', 'url', 'photo'], ['id' => $this->parameters['id'], 'uid' => local_user()]); if (!DBA::isResult($contact)) { return self::postReturn(false); } @@ -123,17 +123,17 @@ class Poke extends BaseModule return $success; } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this module.')); } - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { throw new HTTPException\BadRequestException(); } - $contact = DBA::selectFirst('contact', ['id', 'url', 'name'], ['id' => $parameters['id'], 'uid' => local_user()]); + $contact = DBA::selectFirst('contact', ['id', 'url', 'name'], ['id' => $this->parameters['id'], 'uid' => local_user()]); if (!DBA::isResult($contact)) { throw new HTTPException\NotFoundException(); } diff --git a/src/Module/Contact/Revoke.php b/src/Module/Contact/Revoke.php index e9b5a4424..88177cc3b 100644 --- a/src/Module/Contact/Revoke.php +++ b/src/Module/Contact/Revoke.php @@ -21,12 +21,14 @@ namespace Friendica\Module\Contact; +use Friendica\App\Arguments; +use Friendica\App\BaseURL; use Friendica\BaseModule; use Friendica\Content\Nav; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\Database\DBA; -use Friendica\DI; +use Friendica\Database\Database; use Friendica\Model; use Friendica\Module\Contact; use Friendica\Module\Security\Login; @@ -35,55 +37,68 @@ use Friendica\Network\HTTPException; class Revoke extends BaseModule { /** @var array */ - private static $contact; - - public static function init(array $parameters = []) + protected $contact; + + /** @var Database */ + protected $dba; + /** @var BaseURL */ + protected $baseUrl; + /** @var Arguments */ + protected $args; + + public function __construct(Database $dba, BaseURL $baseUrl, Arguments $args, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->dba = $dba; + $this->baseUrl = $baseUrl; + $this->args = $args; + if (!local_user()) { return; } - $data = Model\Contact::getPublicAndUserContactID($parameters['id'], local_user()); - if (!DBA::isResult($data)) { - throw new HTTPException\NotFoundException(DI::l10n()->t('Unknown contact.')); + $data = Model\Contact::getPublicAndUserContactID($this->parameters['id'], local_user()); + if (!$this->dba->isResult($data)) { + throw new HTTPException\NotFoundException($this->t('Unknown contact.')); } if (empty($data['user'])) { throw new HTTPException\ForbiddenException(); } - self::$contact = Model\Contact::getById($data['user']); + $this->contact = Model\Contact::getById($data['user']); - if (self::$contact['deleted']) { - throw new HTTPException\NotFoundException(DI::l10n()->t('Contact is deleted.')); + if ($this->contact['deleted']) { + throw new HTTPException\NotFoundException($this->t('Contact is deleted.')); } - if (!empty(self::$contact['network']) && self::$contact['network'] == Protocol::PHANTOM) { - throw new HTTPException\NotFoundException(DI::l10n()->t('Contact is being deleted.')); + if (!empty($this->contact['network']) && $this->contact['network'] == Protocol::PHANTOM) { + throw new HTTPException\NotFoundException($this->t('Contact is being deleted.')); } } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { throw new HTTPException\UnauthorizedException(); } - self::checkFormSecurityTokenRedirectOnError('contact/' . $parameters['id'], 'contact_revoke'); + self::checkFormSecurityTokenRedirectOnError('contact/' . $this->parameters['id'], 'contact_revoke'); - $result = Model\Contact::revokeFollow(self::$contact); + $result = Model\Contact::revokeFollow($this->contact); if ($result === true) { - notice(DI::l10n()->t('Follow was successfully revoked.')); + notice($this->t('Follow was successfully revoked.')); } elseif ($result === null) { - notice(DI::l10n()->t('Follow was successfully revoked, however the remote contact won\'t be aware of this revokation.')); + notice($this->t('Follow was successfully revoked, however the remote contact won\'t be aware of this revokation.')); } else { - notice(DI::l10n()->t('Unable to revoke follow, please try again later or contact the administrator.')); + notice($this->t('Unable to revoke follow, please try again later or contact the administrator.')); } - DI::baseUrl()->redirect('contact/' . $parameters['id']); + $this->baseUrl->redirect('contact/' . $this->parameters['id']); } - public static function content(array $parameters = []): string + public function content(): string { if (!local_user()) { return Login::form($_SERVER['REQUEST_URI']); @@ -93,14 +108,14 @@ class Revoke extends BaseModule return Renderer::replaceMacros(Renderer::getMarkupTemplate('contact_drop_confirm.tpl'), [ '$l10n' => [ - 'header' => DI::l10n()->t('Revoke Follow'), - 'message' => DI::l10n()->t('Do you really want to revoke this contact\'s follow? This cannot be undone and they will have to manually follow you back again.'), - 'confirm' => DI::l10n()->t('Yes'), - 'cancel' => DI::l10n()->t('Cancel'), + 'header' => $this->t('Revoke Follow'), + 'message' => $this->t('Do you really want to revoke this contact\'s follow? This cannot be undone and they will have to manually follow you back again.'), + 'confirm' => $this->t('Yes'), + 'cancel' => $this->t('Cancel'), ], - '$contact' => Contact::getContactTemplateVars(self::$contact), + '$contact' => Contact::getContactTemplateVars($this->contact), '$method' => 'post', - '$confirm_url' => DI::args()->getCommand(), + '$confirm_url' => $this->args->getCommand(), '$confirm_name' => 'form_security_token', '$confirm_value' => BaseModule::getFormSecurityToken('contact_revoke'), ]); diff --git a/src/Module/Conversation/Community.php b/src/Module/Conversation/Community.php index 3a30f3799..d954ef8f3 100644 --- a/src/Module/Conversation/Community.php +++ b/src/Module/Conversation/Community.php @@ -49,9 +49,9 @@ class Community extends BaseModule protected static $max_id; protected static $item_id; - public static function content(array $parameters = []) + public function content(): string { - self::parseRequest($parameters); + $this->parseRequest(); if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { $tpl = Renderer::getMarkupTemplate('infinite_scroll_head.tpl'); @@ -94,8 +94,8 @@ class Community extends BaseModule if (local_user() && DI::config()->get('system', 'community_no_sharer')) { $path = self::$content; - if (!empty($parameters['accounttype'])) { - $path .= '/' . $parameters['accounttype']; + if (!empty($this->parameters['accounttype'])) { + $path .= '/' . $this->parameters['accounttype']; } $query_parameters = []; @@ -166,11 +166,10 @@ class Community extends BaseModule /** * Computes module parameters from the request and local configuration * - * @param array $parameters * @throws HTTPException\BadRequestException * @throws HTTPException\ForbiddenException */ - protected static function parseRequest(array $parameters) + protected function parseRequest() { if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Public access denied.')); @@ -182,10 +181,10 @@ class Community extends BaseModule throw new HTTPException\ForbiddenException(DI::l10n()->t('Access denied.')); } - self::$accountTypeString = $_GET['accounttype'] ?? $parameters['accounttype'] ?? ''; + self::$accountTypeString = $_GET['accounttype'] ?? $this->parameters['accounttype'] ?? ''; self::$accountType = User::getAccountTypeByString(self::$accountTypeString); - self::$content = $parameters['content'] ?? ''; + self::$content = $this->parameters['content'] ?? ''; if (!self::$content) { if (!empty(DI::config()->get('system', 'singleuser'))) { // On single user systems only the global page does make sense diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php index f2dc1fae1..0f2d9cd6f 100644 --- a/src/Module/Conversation/Network.php +++ b/src/Module/Conversation/Network.php @@ -57,13 +57,13 @@ class Network extends BaseModule /** @var string */ protected static $order; - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form(); } - self::parseRequest($parameters, $_GET); + $this->parseRequest($_GET); $module = 'network'; @@ -272,11 +272,11 @@ class Network extends BaseModule return Renderer::replaceMacros($tpl, ['$tabs' => $arr['tabs']]); } - protected static function parseRequest(array $parameters, array $get) + protected function parseRequest(array $get) { - self::$groupId = $parameters['group_id'] ?? 0; + self::$groupId = $this->parameters['group_id'] ?? 0; - self::$forumContactId = $parameters['contact_id'] ?? 0; + self::$forumContactId = $this->parameters['contact_id'] ?? 0; self::$selectedTab = Session::get('network-tab', DI::pConfig()->get(local_user(), 'network.view', 'selected_tab', '')); @@ -317,13 +317,13 @@ class Network extends BaseModule Session::set('network-tab', self::$selectedTab); DI::pConfig()->set(local_user(), 'network.view', 'selected_tab', self::$selectedTab); - self::$accountTypeString = $get['accounttype'] ?? $parameters['accounttype'] ?? ''; + self::$accountTypeString = $get['accounttype'] ?? $this->parameters['accounttype'] ?? ''; self::$accountType = User::getAccountTypeByString(self::$accountTypeString); self::$network = $get['nets'] ?? ''; - self::$dateFrom = $parameters['from'] ?? ''; - self::$dateTo = $parameters['to'] ?? ''; + self::$dateFrom = $this->parameters['from'] ?? ''; + self::$dateTo = $this->parameters['to'] ?? ''; if (DI::mode()->isMobile()) { self::$itemsPerPage = DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network', diff --git a/src/Module/Credits.php b/src/Module/Credits.php index 1a586a808..fdd4f6974 100644 --- a/src/Module/Credits.php +++ b/src/Module/Credits.php @@ -32,7 +32,7 @@ use Friendica\DI; */ class Credits extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { /* fill the page with credits */ $credits_string = file_get_contents('CREDITS.txt'); diff --git a/src/Module/DFRN/Notify.php b/src/Module/DFRN/Notify.php index 6aeb23417..eda5da936 100644 --- a/src/Module/DFRN/Notify.php +++ b/src/Module/DFRN/Notify.php @@ -38,7 +38,7 @@ use Friendica\Network\HTTPException; */ class Notify extends BaseModule { - public static function post(array $parameters = []) + public function post() { $postdata = Network::postdata(); @@ -47,8 +47,8 @@ class Notify extends BaseModule } $data = json_decode($postdata); - if (is_object($data) && !empty($parameters['nickname'])) { - $user = User::getByNickname($parameters['nickname']); + if (is_object($data) && !empty($this->parameters['nickname'])) { + $user = User::getByNickname($this->parameters['nickname']); if (empty($user)) { throw new \Friendica\Network\HTTPException\InternalServerErrorException(); } diff --git a/src/Module/DFRN/Poll.php b/src/Module/DFRN/Poll.php index d9c7884ec..0cf43f2a7 100644 --- a/src/Module/DFRN/Poll.php +++ b/src/Module/DFRN/Poll.php @@ -29,11 +29,11 @@ use Friendica\Protocol\OStatus; */ class Poll extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { header("Content-type: application/atom+xml"); $last_update = $_GET['last_update'] ?? ''; - echo OStatus::feed($parameters['nickname'], $last_update, 10); + echo OStatus::feed($this->parameters['nickname'], $last_update, 10); exit(); } } diff --git a/src/Module/Debug/ActivityPubConversion.php b/src/Module/Debug/ActivityPubConversion.php index 854f557d0..7f5fa6274 100644 --- a/src/Module/Debug/ActivityPubConversion.php +++ b/src/Module/Debug/ActivityPubConversion.php @@ -34,7 +34,7 @@ use Friendica\Util\XML; class ActivityPubConversion extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { function visible_whitespace($s) { diff --git a/src/Module/Debug/Babel.php b/src/Module/Debug/Babel.php index ff8bc8741..c50bd08d7 100644 --- a/src/Module/Debug/Babel.php +++ b/src/Module/Debug/Babel.php @@ -35,7 +35,7 @@ use Friendica\Util\XML; */ class Babel extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { function visible_whitespace($s) { diff --git a/src/Module/Debug/Feed.php b/src/Module/Debug/Feed.php index 5ef681668..9368dd026 100644 --- a/src/Module/Debug/Feed.php +++ b/src/Module/Debug/Feed.php @@ -21,10 +21,12 @@ namespace Friendica\Module\Debug; +use Friendica\App\BaseURL; use Friendica\BaseModule; +use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Model; +use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Protocol; /** @@ -32,15 +34,22 @@ use Friendica\Protocol; */ class Feed extends BaseModule { - public static function init(array $parameters = []) + /** @var ICanSendHttpRequests */ + protected $httpClient; + + public function __construct(BaseURL $baseUrl, ICanSendHttpRequests $httpClient, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->httpClient = $httpClient; + if (!local_user()) { - notice(DI::l10n()->t('You must be logged in to use this module')); - DI::baseUrl()->redirect(); + notice($this->t('You must be logged in to use this module')); + $baseUrl->redirect(); } } - public static function content(array $parameters = []) + public function content(): string { $result = []; if (!empty($_REQUEST['url'])) { @@ -48,7 +57,7 @@ class Feed extends BaseModule $contact = Model\Contact::getByURLForUser($url, local_user(), null); - $xml = DI::httpClient()->fetch($contact['poll']); + $xml = $this->httpClient->fetch($contact['poll']); $import_result = Protocol\Feed::import($xml); @@ -60,7 +69,7 @@ class Feed extends BaseModule $tpl = Renderer::getMarkupTemplate('feedtest.tpl'); return Renderer::replaceMacros($tpl, [ - '$url' => ['url', DI::l10n()->t('Source URL'), $_REQUEST['url'] ?? '', ''], + '$url' => ['url', $this->t('Source URL'), $_REQUEST['url'] ?? '', ''], '$result' => $result ]); } diff --git a/src/Module/Debug/ItemBody.php b/src/Module/Debug/ItemBody.php index 2299b3cb2..375993114 100644 --- a/src/Module/Debug/ItemBody.php +++ b/src/Module/Debug/ItemBody.php @@ -31,17 +31,17 @@ use Friendica\Network\HTTPException; */ class ItemBody extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('Access denied.')); } - if (empty($parameters['item'])) { + if (empty($this->parameters['item'])) { throw new HTTPException\NotFoundException(DI::l10n()->t('Item not found.')); } - $itemId = intval($parameters['item']); + $itemId = intval($this->parameters['item']); $item = Post::selectFirst(['body'], ['uid' => [0, local_user()], 'uri-id' => $itemId]); diff --git a/src/Module/Debug/Localtime.php b/src/Module/Debug/Localtime.php index ff1466408..6fb91380a 100644 --- a/src/Module/Debug/Localtime.php +++ b/src/Module/Debug/Localtime.php @@ -31,7 +31,7 @@ class Localtime extends BaseModule { static $mod_localtime = ''; - public static function post(array $parameters = []) + public function post() { $time = ($_REQUEST['time'] ?? '') ?: 'now'; @@ -42,7 +42,7 @@ class Localtime extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { $time = ($_REQUEST['time'] ?? '') ?: 'now'; diff --git a/src/Module/Debug/Probe.php b/src/Module/Debug/Probe.php index 304096b2e..fcb7dda21 100644 --- a/src/Module/Debug/Probe.php +++ b/src/Module/Debug/Probe.php @@ -32,7 +32,7 @@ use Friendica\Network\Probe as NetworkProbe; */ class Probe extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Only logged in users are permitted to perform a probing.')); diff --git a/src/Module/Debug/WebFinger.php b/src/Module/Debug/WebFinger.php index e8a619f0b..4527d2fb2 100644 --- a/src/Module/Debug/WebFinger.php +++ b/src/Module/Debug/WebFinger.php @@ -31,7 +31,7 @@ use Friendica\Network\Probe; */ class WebFinger extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new \Friendica\Network\HTTPException\ForbiddenException(DI::l10n()->t('Only logged in users are permitted to perform a probing.')); diff --git a/src/Module/Delegation.php b/src/Module/Delegation.php index 12f8c5074..2b36fc2a3 100644 --- a/src/Module/Delegation.php +++ b/src/Module/Delegation.php @@ -37,7 +37,7 @@ use Friendica\Util\Proxy; */ class Delegation extends BaseModule { - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -112,7 +112,7 @@ class Delegation extends BaseModule // NOTREACHED } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new ForbiddenException(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Diaspora/Fetch.php b/src/Module/Diaspora/Fetch.php index 55eeea9b5..e3d6f4616 100644 --- a/src/Module/Diaspora/Fetch.php +++ b/src/Module/Diaspora/Fetch.php @@ -38,13 +38,13 @@ use Friendica\Util\Strings; */ class Fetch extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (empty($parameters['guid'])) { + if (empty($this->parameters['guid'])) { throw new HTTPException\NotFoundException(); } - $guid = $parameters['guid']; + $guid = $this->parameters['guid']; // Fetch the item $condition = ['origin' => true, 'private' => [Item::PUBLIC, Item::UNLISTED], 'guid' => $guid, diff --git a/src/Module/Diaspora/Receive.php b/src/Module/Diaspora/Receive.php index dc6fb716b..ed4f8a5d2 100644 --- a/src/Module/Diaspora/Receive.php +++ b/src/Module/Diaspora/Receive.php @@ -22,7 +22,8 @@ namespace Friendica\Module\Diaspora; use Friendica\BaseModule; -use Friendica\DI; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; use Friendica\Model\User; use Friendica\Network\HTTPException; use Friendica\Protocol\Diaspora; @@ -36,25 +37,30 @@ use Psr\Log\LoggerInterface; class Receive extends BaseModule { /** @var LoggerInterface */ - private static $logger; + protected $logger; + /** @var IManageConfigValues */ + protected $config; - public static function init(array $parameters = []) + public function __construct(LoggerInterface $logger, IManageConfigValues $config, L10n $l10n, array $parameters = []) { - self::$logger = DI::logger(); + parent::__construct($l10n, $parameters); + + $this->logger = $logger; + $this->config = $config; } - public static function post(array $parameters = []) + public function post() { - $enabled = DI::config()->get('system', 'diaspora_enabled', false); + $enabled = $this->config->get('system', 'diaspora_enabled', false); if (!$enabled) { - self::$logger->info('Diaspora disabled.'); - throw new HTTPException\ForbiddenException(DI::l10n()->t('Access denied.')); + $this->logger->info('Diaspora disabled.'); + throw new HTTPException\ForbiddenException($this->t('Access denied.')); } - if ($parameters['type'] === 'public') { - self::receivePublic(); - } else if ($parameters['type'] === 'users') { - self::receiveUser($parameters['guid']); + if ($this->parameters['type'] === 'public') { + $this->receivePublic(); + } else if ($this->parameters['type'] === 'users') { + $this->receiveUser(); } } @@ -64,13 +70,13 @@ class Receive extends BaseModule * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receivePublic() + private function receivePublic() { - self::$logger->info('Diaspora: Receiving post.'); + $this->logger->info('Diaspora: Receiving post.'); - $msg = self::decodePost(); + $msg = $this->decodePost(); - self::$logger->info('Diaspora: Dispatching.'); + $this->logger->info('Diaspora: Dispatching.'); Diaspora::dispatchPublic($msg); } @@ -78,20 +84,18 @@ class Receive extends BaseModule /** * Receive a Diaspora posting for a user * - * @param string $guid The GUID of the importer - * * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function receiveUser(string $guid) + private function receiveUser() { - self::$logger->info('Diaspora: Receiving post.'); + $this->logger->info('Diaspora: Receiving post.'); - $importer = User::getByGuid($guid); + $importer = User::getByGuid($this->parameters['guid']); - $msg = self::decodePost(false, $importer['prvkey'] ?? ''); + $msg = $this->decodePost(false, $importer['prvkey'] ?? ''); - self::$logger->info('Diaspora: Dispatching.'); + $this->logger->info('Diaspora: Dispatching.'); if (Diaspora::dispatch($importer, $msg)) { throw new HTTPException\OKException(); @@ -112,7 +116,7 @@ class Receive extends BaseModule * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - private static function decodePost(bool $public = true, string $privKey = '') + private function decodePost(bool $public = true, string $privKey = '') { if (empty($_POST['xml'])) { @@ -122,24 +126,24 @@ class Receive extends BaseModule throw new HTTPException\InternalServerErrorException('Missing postdata.'); } - self::$logger->info('Diaspora: Message is in the new format.'); + $this->logger->info('Diaspora: Message is in the new format.'); $msg = Diaspora::decodeRaw($postdata, $privKey); } else { $xml = urldecode($_POST['xml']); - self::$logger->info('Diaspora: Decode message in the old format.'); + $this->logger->info('Diaspora: Decode message in the old format.'); $msg = Diaspora::decode($xml, $privKey); if ($public && !$msg) { - self::$logger->info('Diaspora: Decode message in the new format.'); + $this->logger->info('Diaspora: Decode message in the new format.'); $msg = Diaspora::decodeRaw($xml, $privKey); } } - self::$logger->info('Diaspora: Post decoded.'); - self::$logger->debug('Diaspora: Decoded message.', ['msg' => $msg]); + $this->logger->info('Diaspora: Post decoded.'); + $this->logger->debug('Diaspora: Decoded message.', ['msg' => $msg]); if (!is_array($msg)) { throw new HTTPException\InternalServerErrorException('Message is not an array.'); diff --git a/src/Module/Directory.php b/src/Module/Directory.php index 0172612d5..a81780a28 100644 --- a/src/Module/Directory.php +++ b/src/Module/Directory.php @@ -38,7 +38,7 @@ use Friendica\Network\HTTPException; */ class Directory extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $app = DI::app(); $config = DI::config(); diff --git a/src/Module/Events/Json.php b/src/Module/Events/Json.php index 50e468a9c..566cf648a 100644 --- a/src/Module/Events/Json.php +++ b/src/Module/Events/Json.php @@ -13,7 +13,7 @@ use Friendica\Util\Temporal; class Json extends \Friendica\BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { if (!local_user()) { throw new HTTPException\UnauthorizedException(); diff --git a/src/Module/Feed.php b/src/Module/Feed.php index 788f9da7c..6470ab5c3 100644 --- a/src/Module/Feed.php +++ b/src/Module/Feed.php @@ -41,7 +41,7 @@ use Friendica\Protocol\Feed as ProtocolFeed; */ class Feed extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $a = DI::app(); @@ -68,7 +68,7 @@ class Feed extends BaseModule } header("Content-type: application/atom+xml; charset=utf-8"); - echo ProtocolFeed::atom($parameters['nickname'], $last_update, 10, $type, $nocache, true); + echo ProtocolFeed::atom($this->parameters['nickname'], $last_update, 10, $type, $nocache, true); exit(); } } diff --git a/src/Module/Filer/RemoveTag.php b/src/Module/Filer/RemoveTag.php index 8c65f4381..e6749de02 100644 --- a/src/Module/Filer/RemoveTag.php +++ b/src/Module/Filer/RemoveTag.php @@ -33,7 +33,7 @@ use Friendica\Util\XML; */ class RemoveTag extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\ForbiddenException(); @@ -41,7 +41,7 @@ class RemoveTag extends BaseModule $logger = DI::logger(); - $item_id = $parameters['id'] ?? 0; + $item_id = $this->parameters['id'] ?? 0; $term = XML::unescape(trim($_GET['term'] ?? '')); $cat = XML::unescape(trim($_GET['cat'] ?? '')); @@ -62,7 +62,7 @@ class RemoveTag extends BaseModule if ($item_id && strlen($term)) { $item = Post::selectFirst(['uri-id'], ['id' => $item_id]); if (!DBA::isResult($item)) { - return; + return ''; } if (!Post\Category::deleteFileByURIId($item['uri-id'], local_user(), $type, $term)) { notice(DI::l10n()->t('Item was not removed')); @@ -74,5 +74,7 @@ class RemoveTag extends BaseModule if ($type == Post\Category::FILE) { DI::baseUrl()->redirect('filed?file=' . rawurlencode($term)); } + + return ''; } } diff --git a/src/Module/Filer/SaveTag.php b/src/Module/Filer/SaveTag.php index 50f6c2e9b..fd572a7be 100644 --- a/src/Module/Filer/SaveTag.php +++ b/src/Module/Filer/SaveTag.php @@ -21,36 +21,43 @@ namespace Friendica\Module\Filer; +use Friendica\App\BaseURL; use Friendica\BaseModule; +use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Database\DBA; -use Friendica\DI; use Friendica\Model; use Friendica\Network\HTTPException; use Friendica\Util\XML; +use Psr\Log\LoggerInterface; /** * Shows a dialog for adding tags to a file */ class SaveTag extends BaseModule { - public static function init(array $parameters = []) + /** @var LoggerInterface */ + protected $logger; + + public function __construct(LoggerInterface $logger, BaseURL $baseUrl, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->logger = $logger; + if (!local_user()) { - notice(DI::l10n()->t('You must be logged in to use this module')); - DI::baseUrl()->redirect(); + notice($this->t('You must be logged in to use this module')); + $baseUrl->redirect(); } } - public static function rawContent(array $parameters = []) + public function rawContent() { - $logger = DI::logger(); - $term = XML::unescape(trim($_GET['term'] ?? '')); - $item_id = $parameters['id'] ?? 0; + $item_id = $this->parameters['id'] ?? 0; - $logger->info('filer', ['tag' => $term, 'item' => $item_id]); + $this->logger->info('filer', ['tag' => $term, 'item' => $item_id]); if ($item_id && strlen($term)) { $item = Model\Post::selectFirst(['uri-id'], ['id' => $item_id]); @@ -65,8 +72,8 @@ class SaveTag extends BaseModule $tpl = Renderer::getMarkupTemplate("filer_dialog.tpl"); echo Renderer::replaceMacros($tpl, [ - '$field' => ['term', DI::l10n()->t("Save to Folder:"), '', '', $filetags, DI::l10n()->t('- select -')], - '$submit' => DI::l10n()->t('Save'), + '$field' => ['term', $this->t("Save to Folder:"), '', '', $filetags, $this->t('- select -')], + '$submit' => $this->t('Save'), ]); exit; diff --git a/src/Module/FollowConfirm.php b/src/Module/FollowConfirm.php index 75153512b..41f811698 100644 --- a/src/Module/FollowConfirm.php +++ b/src/Module/FollowConfirm.php @@ -10,7 +10,7 @@ use Friendica\Model\Contact; */ class FollowConfirm extends BaseModule { - public static function post(array $parameters = []) + public function post() { $uid = local_user(); if (!$uid) { diff --git a/src/Module/FriendSuggest.php b/src/Module/FriendSuggest.php index 78e75bc31..940e6ff9c 100644 --- a/src/Module/FriendSuggest.php +++ b/src/Module/FriendSuggest.php @@ -21,15 +21,16 @@ namespace Friendica\Module; +use Friendica\App\BaseURL; use Friendica\BaseModule; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Worker; -use Friendica\DI; +use Friendica\Database\Database; use Friendica\Model\Contact as ContactModel; use Friendica\Network\HTTPException\ForbiddenException; use Friendica\Network\HTTPException\NotFoundException; -use Friendica\Util\DateTimeFormat; use Friendica\Util\Strings; use Friendica\Worker\Delivery; @@ -38,20 +39,36 @@ use Friendica\Worker\Delivery; */ class FriendSuggest extends BaseModule { - public static function init(array $parameters = []) + /** @var BaseURL */ + protected $baseUrl; + /** @var Database */ + protected $dba; + /** @var \Friendica\Contact\FriendSuggest\Repository\FriendSuggest */ + protected $friendSuggestRepo; + /** @var \Friendica\Contact\FriendSuggest\Factory\FriendSuggest */ + protected $friendSuggestFac; + + public function __construct(BaseURL $baseUrl, Database $dba, \Friendica\Contact\FriendSuggest\Repository\FriendSuggest $friendSuggestRepo, \Friendica\Contact\FriendSuggest\Factory\FriendSuggest $friendSuggestFac, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + if (!local_user()) { - throw new ForbiddenException(DI::l10n()->t('Permission denied.')); + throw new ForbiddenException($this->t('Permission denied.')); } + + $this->baseUrl = $baseUrl; + $this->dba = $dba; + $this->friendSuggestRepo = $friendSuggestRepo; + $this->friendSuggestFac = $friendSuggestFac; } - public static function post(array $parameters = []) + public function post() { - $cid = intval($parameters['contact']); + $cid = intval($this->parameters['contact']); // We do query the "uid" as well to ensure that it is our contact - if (!DI::dba()->exists('contact', ['id' => $cid, 'uid' => local_user()])) { - throw new NotFoundException(DI::l10n()->t('Contact not found.')); + if (!$this->dba->exists('contact', ['id' => $cid, 'uid' => local_user()])) { + throw new NotFoundException($this->t('Contact not found.')); } $suggest_contact_id = intval($_POST['suggest']); @@ -60,15 +77,15 @@ class FriendSuggest extends BaseModule } // We do query the "uid" as well to ensure that it is our contact - $contact = DI::dba()->selectFirst('contact', ['name', 'url', 'request', 'avatar'], ['id' => $suggest_contact_id, 'uid' => local_user()]); + $contact = $this->dba->selectFirst('contact', ['name', 'url', 'request', 'avatar'], ['id' => $suggest_contact_id, 'uid' => local_user()]); if (empty($contact)) { - notice(DI::l10n()->t('Suggested contact not found.')); + notice($this->t('Suggested contact not found.')); return; } $note = Strings::escapeHtml(trim($_POST['note'] ?? '')); - $suggest = DI::fsuggest()->save(DI::fsuggestFactory()->createNew( + $suggest = $this->friendSuggestRepo->save($this->friendSuggestFac->createNew( local_user(), $cid, $contact['name'], @@ -80,17 +97,17 @@ class FriendSuggest extends BaseModule Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::SUGGESTION, $suggest->id); - info(DI::l10n()->t('Friend suggestion sent.')); + info($this->t('Friend suggestion sent.')); } - public static function content(array $parameters = []) + public function content(): string { - $cid = intval($parameters['contact']); + $cid = intval($this->parameters['contact']); - $contact = DI::dba()->selectFirst('contact', [], ['id' => $cid, 'uid' => local_user()]); + $contact = $this->dba->selectFirst('contact', [], ['id' => $cid, 'uid' => local_user()]); if (empty($contact)) { - notice(DI::l10n()->t('Contact not found.')); - DI::baseUrl()->redirect(); + notice($this->t('Contact not found.')); + $this->baseUrl->redirect(); } $suggestableContacts = ContactModel::selectToArray(['id', 'name'], [ @@ -117,15 +134,15 @@ class FriendSuggest extends BaseModule $tpl = Renderer::getMarkupTemplate('fsuggest.tpl'); return Renderer::replaceMacros($tpl, [ '$contact_id' => $cid, - '$fsuggest_title' => DI::l10n()->t('Suggest Friends'), + '$fsuggest_title' => $this->t('Suggest Friends'), '$fsuggest_select' => [ 'suggest', - DI::l10n()->t('Suggest a friend for %s', $contact['name']), + $this->t('Suggest a friend for %s', $contact['name']), '', '', $formattedContacts, ], - '$submit' => DI::l10n()->t('Submit'), + '$submit' => $this->t('Submit'), ]); } } diff --git a/src/Module/Friendica.php b/src/Module/Friendica.php index 95a319a41..b4de151e9 100644 --- a/src/Module/Friendica.php +++ b/src/Module/Friendica.php @@ -38,7 +38,7 @@ use Friendica\Protocol\ActivityPub; */ class Friendica extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $config = DI::config(); @@ -110,7 +110,7 @@ class Friendica extends BaseModule ]); } - public static function rawContent(array $parameters = []) + public function rawContent() { if (ActivityPub::isRequest()) { try { diff --git a/src/Module/Group.php b/src/Module/Group.php index ee6c7b8c2..1750d3e04 100644 --- a/src/Module/Group.php +++ b/src/Module/Group.php @@ -32,7 +32,7 @@ require_once 'boot.php'; class Group extends BaseModule { - public static function post(array $parameters = []) + public function post() { $a = DI::app(); @@ -138,7 +138,7 @@ class Group extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { $change = false; diff --git a/src/Module/HCard.php b/src/Module/HCard.php index 079f240ae..110371ee9 100644 --- a/src/Module/HCard.php +++ b/src/Module/HCard.php @@ -34,14 +34,14 @@ use Friendica\Network\HTTPException; */ class HCard extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { - if ((local_user()) && ($parameters['action'] ?? '') === 'view') { + if ((local_user()) && ($this->parameters['action'] ?? '') === 'view') { // A logged in user views a profile of a user $nickname = DI::app()->getLoggedInUserNickname(); - } elseif (empty($parameters['action'])) { + } elseif (empty($this->parameters['action'])) { // Show the profile hCard - $nickname = $parameters['profile']; + $nickname = $this->parameters['profile']; } else { throw new HTTPException\NotFoundException(DI::l10n()->t('No profile')); } diff --git a/src/Module/HTTPException/MethodNotAllowed.php b/src/Module/HTTPException/MethodNotAllowed.php index f100bba49..07aab537a 100644 --- a/src/Module/HTTPException/MethodNotAllowed.php +++ b/src/Module/HTTPException/MethodNotAllowed.php @@ -27,7 +27,7 @@ use Friendica\Network\HTTPException; class MethodNotAllowed extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { throw new HTTPException\MethodNotAllowedException(DI::l10n()->t('Method Not Allowed.')); } diff --git a/src/Module/HTTPException/PageNotFound.php b/src/Module/HTTPException/PageNotFound.php index 746773ef1..6af5e91ae 100644 --- a/src/Module/HTTPException/PageNotFound.php +++ b/src/Module/HTTPException/PageNotFound.php @@ -27,7 +27,7 @@ use Friendica\Network\HTTPException; class PageNotFound extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { throw new HTTPException\NotFoundException(DI::l10n()->t('Page not found.')); } diff --git a/src/Module/Hashtag.php b/src/Module/Hashtag.php index cdf0de6c1..8910d9cce 100644 --- a/src/Module/Hashtag.php +++ b/src/Module/Hashtag.php @@ -31,7 +31,7 @@ use Friendica\Util\Strings; */ class Hashtag extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $result = []; @@ -47,5 +47,7 @@ class Hashtag extends BaseModule DBA::close($taglist); System::jsonExit($result); + + return ''; } } diff --git a/src/Module/Help.php b/src/Module/Help.php index 219adc797..d0b61c221 100644 --- a/src/Module/Help.php +++ b/src/Module/Help.php @@ -32,16 +32,15 @@ use Friendica\Network\HTTPException; */ class Help extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { Nav::setSelected('help'); $text = ''; $filename = ''; - $a = DI::app(); $config = DI::config(); - $lang = $config->get('system', 'language'); + $lang = DI::session()->get('language', $config->get('system', 'language')); // @TODO: Replace with parameter from router if (DI::args()->getArgc() > 1) { diff --git a/src/Module/Home.php b/src/Module/Home.php index 9d16e11aa..f4e6b9733 100644 --- a/src/Module/Home.php +++ b/src/Module/Home.php @@ -32,7 +32,7 @@ use Friendica\Module\Security\Login; */ class Home extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $app = DI::app(); $config = DI::config(); diff --git a/src/Module/Install.php b/src/Module/Install.php index 8b6f97f98..4385ba851 100644 --- a/src/Module/Install.php +++ b/src/Module/Install.php @@ -25,6 +25,7 @@ use Friendica\App; use Friendica\BaseModule; use Friendica\Core; use Friendica\Core\Config\ValueObject\Cache; +use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\Theme; use Friendica\DI; @@ -58,110 +59,119 @@ class Install extends BaseModule /** * @var int The current step of the wizard */ - private static $currentWizardStep; + private $currentWizardStep; /** * @var Core\Installer The installer */ - private static $installer; + private $installer; - public static function init(array $parameters = []) + /** @var App */ + protected $app; + /** @var App\Mode */ + protected $mode; + /** @var App\BaseURL */ + protected $baseUrl; + + public function __construct(App $app, App\Mode $mode, App\BaseURL $baseUrl, App\Arguments $args, Core\Installer $installer, L10n $l10n, array $parameters = []) { - $a = DI::app(); + parent::__construct($l10n, $parameters); - if (!DI::mode()->isInstall()) { + $this->app = $app; + $this->mode = $mode; + $this->baseUrl = $baseUrl; + $this->installer = $installer; + + if (!$this->mode->isInstall()) { throw new HTTPException\ForbiddenException(); } // route: install/testrwrite // $baseurl/install/testrwrite to test if rewrite in .htaccess is working - if (DI::args()->get(1, '') == 'testrewrite') { + if ($args->get(1, '') == 'testrewrite') { // Status Code 204 means that it worked without content throw new HTTPException\NoContentException(); } - self::$installer = new Core\Installer(); - // get basic installation information and save them to the config cache - $configCache = $a->getConfigCache(); - $basePath = new BasePath($a->getBasePath()); - self::$installer->setUpCache($configCache, $basePath->getPath()); + $configCache = $this->app->getConfigCache(); + $basePath = new BasePath($this->app->getBasePath()); + $this->installer->setUpCache($configCache, $basePath->getPath()); // We overwrite current theme css, because during install we may not have a working mod_rewrite // so we may not have a css at all. Here we set a static css file for the install procedure pages - Renderer::$theme['stylesheet'] = DI::baseUrl()->get() . '/view/install/style.css'; + Renderer::$theme['stylesheet'] = $this->baseUrl->get() . '/view/install/style.css'; - self::$currentWizardStep = ($_POST['pass'] ?? '') ?: self::SYSTEM_CHECK; + $this->currentWizardStep = ($_POST['pass'] ?? '') ?: self::SYSTEM_CHECK; } - public static function post(array $parameters = []) + public function post() { - $a = DI::app(); - $configCache = $a->getConfigCache(); + $configCache = $this->app->getConfigCache(); - switch (self::$currentWizardStep) { + switch ($this->currentWizardStep) { case self::SYSTEM_CHECK: case self::BASE_CONFIG: - self::checkSetting($configCache, $_POST, 'config', 'php_path'); + $this->checkSetting($configCache, $_POST, 'config', 'php_path'); break; case self::DATABASE_CONFIG: - self::checkSetting($configCache, $_POST, 'config', 'php_path'); + $this->checkSetting($configCache, $_POST, 'config', 'php_path'); - self::checkSetting($configCache, $_POST, 'config', 'hostname'); - self::checkSetting($configCache, $_POST, 'system', 'ssl_policy'); - self::checkSetting($configCache, $_POST, 'system', 'basepath'); - self::checkSetting($configCache, $_POST, 'system', 'urlpath'); + $this->checkSetting($configCache, $_POST, 'config', 'hostname'); + $this->checkSetting($configCache, $_POST, 'system', 'ssl_policy'); + $this->checkSetting($configCache, $_POST, 'system', 'basepath'); + $this->checkSetting($configCache, $_POST, 'system', 'urlpath'); break; case self::SITE_SETTINGS: - self::checkSetting($configCache, $_POST, 'config', 'php_path'); + $this->checkSetting($configCache, $_POST, 'config', 'php_path'); - self::checkSetting($configCache, $_POST, 'config', 'hostname'); - self::checkSetting($configCache, $_POST, 'system', 'ssl_policy'); - self::checkSetting($configCache, $_POST, 'system', 'basepath'); - self::checkSetting($configCache, $_POST, 'system', 'urlpath'); + $this->checkSetting($configCache, $_POST, 'config', 'hostname'); + $this->checkSetting($configCache, $_POST, 'system', 'ssl_policy'); + $this->checkSetting($configCache, $_POST, 'system', 'basepath'); + $this->checkSetting($configCache, $_POST, 'system', 'urlpath'); - self::checkSetting($configCache, $_POST, 'database', 'hostname', Core\Installer::DEFAULT_HOST); - self::checkSetting($configCache, $_POST, 'database', 'username', ''); - self::checkSetting($configCache, $_POST, 'database', 'password', ''); - self::checkSetting($configCache, $_POST, 'database', 'database', ''); + $this->checkSetting($configCache, $_POST, 'database', 'hostname', Core\Installer::DEFAULT_HOST); + $this->checkSetting($configCache, $_POST, 'database', 'username', ''); + $this->checkSetting($configCache, $_POST, 'database', 'password', ''); + $this->checkSetting($configCache, $_POST, 'database', 'database', ''); // If we cannot connect to the database, return to the previous step - if (!self::$installer->checkDB(DI::dba())) { - self::$currentWizardStep = self::DATABASE_CONFIG; + if (!$this->installer->checkDB(DI::dba())) { + $this->currentWizardStep = self::DATABASE_CONFIG; } break; case self::FINISHED: - self::checkSetting($configCache, $_POST, 'config', 'php_path'); + $this->checkSetting($configCache, $_POST, 'config', 'php_path'); - self::checkSetting($configCache, $_POST, 'config', 'hostname'); - self::checkSetting($configCache, $_POST, 'system', 'ssl_policy'); - self::checkSetting($configCache, $_POST, 'system', 'basepath'); - self::checkSetting($configCache, $_POST, 'system', 'urlpath'); + $this->checkSetting($configCache, $_POST, 'config', 'hostname'); + $this->checkSetting($configCache, $_POST, 'system', 'ssl_policy'); + $this->checkSetting($configCache, $_POST, 'system', 'basepath'); + $this->checkSetting($configCache, $_POST, 'system', 'urlpath'); - self::checkSetting($configCache, $_POST, 'database', 'hostname', Core\Installer::DEFAULT_HOST); - self::checkSetting($configCache, $_POST, 'database', 'username', ''); - self::checkSetting($configCache, $_POST, 'database', 'password', ''); - self::checkSetting($configCache, $_POST, 'database', 'database', ''); + $this->checkSetting($configCache, $_POST, 'database', 'hostname', Core\Installer::DEFAULT_HOST); + $this->checkSetting($configCache, $_POST, 'database', 'username', ''); + $this->checkSetting($configCache, $_POST, 'database', 'password', ''); + $this->checkSetting($configCache, $_POST, 'database', 'database', ''); - self::checkSetting($configCache, $_POST, 'system', 'default_timezone', Core\Installer::DEFAULT_TZ); - self::checkSetting($configCache, $_POST, 'system', 'language', Core\Installer::DEFAULT_LANG); - self::checkSetting($configCache, $_POST, 'config', 'admin_email', ''); + $this->checkSetting($configCache, $_POST, 'system', 'default_timezone', Core\Installer::DEFAULT_TZ); + $this->checkSetting($configCache, $_POST, 'system', 'language', Core\Installer::DEFAULT_LANG); + $this->checkSetting($configCache, $_POST, 'config', 'admin_email', ''); // If we cannot connect to the database, return to the Database config wizard - if (!self::$installer->checkDB(DI::dba())) { - self::$currentWizardStep = self::DATABASE_CONFIG; + if (!$this->installer->checkDB(DI::dba())) { + $this->currentWizardStep = self::DATABASE_CONFIG; return; } - if (!self::$installer->createConfig($configCache)) { + if (!$this->installer->createConfig($configCache)) { return; } - self::$installer->installDatabase($configCache->get('system', 'basepath')); + $this->installer->installDatabase($configCache->get('system', 'basepath')); // install allowed themes to register theme hooks // this is same as "Reload active theme" in /admin/themes @@ -177,71 +187,70 @@ class Install extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { - $a = DI::app(); - $configCache = $a->getConfigCache(); + $configCache = $this->app->getConfigCache(); $output = ''; - $install_title = DI::l10n()->t('Friendica Communications Server - Setup'); + $install_title = $this->t('Friendica Communications Server - Setup'); - switch (self::$currentWizardStep) { + switch ($this->currentWizardStep) { case self::SYSTEM_CHECK: $php_path = $configCache->get('config', 'php_path'); - $status = self::$installer->checkEnvironment(DI::baseUrl()->get(), $php_path); + $status = $this->installer->checkEnvironment($this->baseUrl->get(), $php_path); $tpl = Renderer::getMarkupTemplate('install_checks.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, - '$pass' => DI::l10n()->t('System check'), - '$required' => DI::l10n()->t('Required'), - '$requirement_not_satisfied' => DI::l10n()->t('Requirement not satisfied'), - '$optional_requirement_not_satisfied' => DI::l10n()->t('Optional requirement not satisfied'), - '$ok' => DI::l10n()->t('OK'), - '$checks' => self::$installer->getChecks(), + '$pass' => $this->t('System check'), + '$required' => $this->t('Required'), + '$requirement_not_satisfied' => $this->t('Requirement not satisfied'), + '$optional_requirement_not_satisfied' => $this->t('Optional requirement not satisfied'), + '$ok' => $this->t('OK'), + '$checks' => $this->installer->getChecks(), '$passed' => $status, - '$see_install' => DI::l10n()->t('Please see the file "doc/INSTALL.md".'), - '$next' => DI::l10n()->t('Next'), - '$reload' => DI::l10n()->t('Check again'), + '$see_install' => $this->t('Please see the file "doc/INSTALL.md".'), + '$next' => $this->t('Next'), + '$reload' => $this->t('Check again'), '$php_path' => $php_path, ]); break; case self::BASE_CONFIG: $ssl_choices = [ - App\BaseURL::SSL_POLICY_NONE => DI::l10n()->t("No SSL policy, links will track page SSL state"), - App\BaseURL::SSL_POLICY_FULL => DI::l10n()->t("Force all links to use SSL"), - App\BaseURL::SSL_POLICY_SELFSIGN => DI::l10n()->t("Self-signed certificate, use SSL for local links only \x28discouraged\x29") + App\BaseURL::SSL_POLICY_NONE => $this->t("No SSL policy, links will track page SSL state"), + App\BaseURL::SSL_POLICY_FULL => $this->t("Force all links to use SSL"), + App\BaseURL::SSL_POLICY_SELFSIGN => $this->t("Self-signed certificate, use SSL for local links only \x28discouraged\x29") ]; $tpl = Renderer::getMarkupTemplate('install_base.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, - '$pass' => DI::l10n()->t('Base settings'), + '$pass' => $this->t('Base settings'), '$ssl_policy' => ['system-ssl_policy', - DI::l10n()->t("SSL link policy"), + $this->t("SSL link policy"), $configCache->get('system', 'ssl_policy'), - DI::l10n()->t("Determines whether generated links should be forced to use SSL"), + $this->t("Determines whether generated links should be forced to use SSL"), $ssl_choices], '$hostname' => ['config-hostname', - DI::l10n()->t('Host name'), + $this->t('Host name'), $configCache->get('config', 'hostname'), - DI::l10n()->t('Overwrite this field in case the determinated hostname isn\'t right, otherweise leave it as is.'), - DI::l10n()->t('Required')], + $this->t('Overwrite this field in case the determinated hostname isn\'t right, otherweise leave it as is.'), + $this->t('Required')], '$basepath' => ['system-basepath', - DI::l10n()->t("Base path to installation"), + $this->t("Base path to installation"), $configCache->get('system', 'basepath'), - DI::l10n()->t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."), - DI::l10n()->t('Required')], + $this->t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."), + $this->t('Required')], '$urlpath' => ['system-urlpath', - DI::l10n()->t('Sub path of the URL'), + $this->t('Sub path of the URL'), $configCache->get('system', 'urlpath'), - DI::l10n()->t('Overwrite this field in case the sub path determination isn\'t right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path.'), + $this->t('Overwrite this field in case the sub path determination isn\'t right, otherwise leave it as is. Leaving this field blank means the installation is at the base URL without sub path.'), ''], '$php_path' => $configCache->get('config', 'php_path'), - '$submit' => DI::l10n()->t('Submit'), + '$submit' => $this->t('Submit'), ]); break; @@ -249,54 +258,54 @@ class Install extends BaseModule $tpl = Renderer::getMarkupTemplate('install_db.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, - '$pass' => DI::l10n()->t('Database connection'), - '$info_01' => DI::l10n()->t('In order to install Friendica we need to know how to connect to your database.'), - '$info_02' => DI::l10n()->t('Please contact your hosting provider or site administrator if you have questions about these settings.'), - '$info_03' => DI::l10n()->t('The database you specify below should already exist. If it does not, please create it before continuing.'), - '$required' => DI::l10n()->t('Required'), - '$requirement_not_satisfied' => DI::l10n()->t('Requirement not satisfied'), - '$checks' => self::$installer->getChecks(), + '$pass' => $this->t('Database connection'), + '$info_01' => $this->t('In order to install Friendica we need to know how to connect to your database.'), + '$info_02' => $this->t('Please contact your hosting provider or site administrator if you have questions about these settings.'), + '$info_03' => $this->t('The database you specify below should already exist. If it does not, please create it before continuing.'), + '$required' => $this->t('Required'), + '$requirement_not_satisfied' => $this->t('Requirement not satisfied'), + '$checks' => $this->installer->getChecks(), '$hostname' => $configCache->get('config', 'hostname'), '$ssl_policy' => $configCache->get('system', 'ssl_policy'), '$basepath' => $configCache->get('system', 'basepath'), '$urlpath' => $configCache->get('system', 'urlpath'), '$dbhost' => ['database-hostname', - DI::l10n()->t('Database Server Name'), + $this->t('Database Server Name'), $configCache->get('database', 'hostname'), '', - DI::l10n()->t('Required')], + $this->t('Required')], '$dbuser' => ['database-username', - DI::l10n()->t('Database Login Name'), + $this->t('Database Login Name'), $configCache->get('database', 'username'), '', - DI::l10n()->t('Required'), + $this->t('Required'), 'autofocus'], '$dbpass' => ['database-password', - DI::l10n()->t('Database Login Password'), + $this->t('Database Login Password'), $configCache->get('database', 'password'), - DI::l10n()->t("For security reasons the password must not be empty"), - DI::l10n()->t('Required')], + $this->t("For security reasons the password must not be empty"), + $this->t('Required')], '$dbdata' => ['database-database', - DI::l10n()->t('Database Name'), + $this->t('Database Name'), $configCache->get('database', 'database'), '', - DI::l10n()->t('Required')], - '$lbl_10' => DI::l10n()->t('Please select a default timezone for your website'), + $this->t('Required')], + '$lbl_10' => $this->t('Please select a default timezone for your website'), '$php_path' => $configCache->get('config', 'php_path'), - '$submit' => DI::l10n()->t('Submit') + '$submit' => $this->t('Submit') ]); break; case self::SITE_SETTINGS: /* Installed langs */ - $lang_choices = DI::l10n()->getAvailableLanguages(); + $lang_choices = $this->l10n->getAvailableLanguages(); $tpl = Renderer::getMarkupTemplate('install_settings.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, - '$required' => DI::l10n()->t('Required'), - '$checks' => self::$installer->getChecks(), - '$pass' => DI::l10n()->t('Site settings'), + '$required' => $this->t('Required'), + '$checks' => $this->installer->getChecks(), + '$pass' => $this->t('Site settings'), '$hostname' => $configCache->get('config', 'hostname'), '$ssl_policy' => $configCache->get('system', 'ssl_policy'), '$basepath' => $configCache->get('system', 'basepath'), @@ -306,41 +315,41 @@ class Install extends BaseModule '$dbpass' => $configCache->get('database', 'password'), '$dbdata' => $configCache->get('database', 'database'), '$adminmail' => ['config-admin_email', - DI::l10n()->t('Site administrator email address'), + $this->t('Site administrator email address'), $configCache->get('config', 'admin_email'), - DI::l10n()->t('Your account email address must match this in order to use the web admin panel.'), - DI::l10n()->t('Required'), 'autofocus', 'email'], + $this->t('Your account email address must match this in order to use the web admin panel.'), + $this->t('Required'), 'autofocus', 'email'], '$timezone' => Temporal::getTimezoneField('system-default_timezone', - DI::l10n()->t('Please select a default timezone for your website'), + $this->t('Please select a default timezone for your website'), $configCache->get('system', 'default_timezone'), ''), '$language' => ['system-language', - DI::l10n()->t('System Language:'), + $this->t('System Language:'), $configCache->get('system', 'language'), - DI::l10n()->t('Set the default language for your Friendica installation interface and to send emails.'), + $this->t('Set the default language for your Friendica installation interface and to send emails.'), $lang_choices], '$php_path' => $configCache->get('config', 'php_path'), - '$submit' => DI::l10n()->t('Submit') + '$submit' => $this->t('Submit') ]); break; case self::FINISHED: $db_return_text = ""; - if (count(self::$installer->getChecks()) == 0) { + if (count($this->installer->getChecks()) == 0) { $txt = '

'; - $txt .= DI::l10n()->t('Your Friendica site database has been installed.') . EOL; + $txt .= $this->t('Your Friendica site database has been installed.') . EOL; $db_return_text .= $txt; } $tpl = Renderer::getMarkupTemplate('install_finished.tpl'); $output .= Renderer::replaceMacros($tpl, [ '$title' => $install_title, - '$required' => DI::l10n()->t('Required'), - '$requirement_not_satisfied' => DI::l10n()->t('Requirement not satisfied'), - '$checks' => self::$installer->getChecks(), - '$pass' => DI::l10n()->t('Installation finished'), - '$text' => $db_return_text . self::whatNext(), + '$required' => $this->t('Required'), + '$requirement_not_satisfied' => $this->t('Requirement not satisfied'), + '$checks' => $this->installer->getChecks(), + '$pass' => $this->t('Installation finished'), + '$text' => $db_return_text . $this->whatNext(), ]); break; @@ -355,15 +364,15 @@ class Install extends BaseModule * @return string The text for the next steps * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - private static function whatNext() + private function whatNext() { - $baseurl = DI::baseUrl()->get(); + $baseurl = $this->baseUrl->get(); return - DI::l10n()->t('

What next

') - . "

" . DI::l10n()->t('IMPORTANT: You will need to [manually] setup a scheduled task for the worker.') - . DI::l10n()->t('Please see the file "doc/INSTALL.md".') + $this->t('

What next

') + . "

" . $this->t('IMPORTANT: You will need to [manually] setup a scheduled task for the worker.') + . $this->t('Please see the file "doc/INSTALL.md".') . "

" - . DI::l10n()->t('Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.', $baseurl) + . $this->t('Go to your new Friendica node registration page and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.', $baseurl) . "

"; } @@ -376,12 +385,21 @@ class Install extends BaseModule * @param string $key The key of the setting * @param null|string $default The default value */ - private static function checkSetting(Cache $configCache, array $post, $cat, $key, $default = null) + private function checkSetting(Cache $configCache, array $post, string $cat, string $key, ?string $default = null) { - $configCache->set($cat, $key, - trim(($post[sprintf('%s-%s', $cat, $key)] ?? '') ?: - ($default ?? $configCache->get($cat, $key)) - ) - ); + $value = null; + + if (isset($post[sprintf('%s-%s', $cat, $key)])) { + $value = trim($post[sprintf('%s-%s', $cat, $key)]); + } + + if (isset($value)) { + $configCache->set($cat, $key, $value, Cache::SOURCE_ENV); + return; + } + + if (isset($default)) { + $configCache->set($cat, $key, $default, Cache::SOURCE_ENV); + } } } diff --git a/src/Module/Invite.php b/src/Module/Invite.php index 65438c151..10346a516 100644 --- a/src/Module/Invite.php +++ b/src/Module/Invite.php @@ -35,7 +35,7 @@ use Friendica\Util\Strings; */ class Invite extends BaseModule { - public static function post(array $parameters = []) + public function post() { if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); @@ -124,7 +124,7 @@ class Invite extends BaseModule info(DI::l10n()->tt('%d message sent.', '%d messages sent.', $total)); } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Item/Activity.php b/src/Module/Item/Activity.php index 1d44bf995..3936aa2bc 100644 --- a/src/Module/Item/Activity.php +++ b/src/Module/Item/Activity.php @@ -38,18 +38,18 @@ use Friendica\Network\HTTPException; */ class Activity extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { if (!Session::isAuthenticated()) { throw new HTTPException\ForbiddenException(); } - if (empty($parameters['id']) || empty($parameters['verb'])) { + if (empty($this->parameters['id']) || empty($this->parameters['verb'])) { throw new HTTPException\BadRequestException(); } - $verb = $parameters['verb']; - $itemId = $parameters['id']; + $verb = $this->parameters['verb']; + $itemId = $this->parameters['id']; if (in_array($verb, ['announce', 'unannounce'])) { $item = Post::selectFirst(['network'], ['id' => $itemId]); diff --git a/src/Module/Item/Compose.php b/src/Module/Item/Compose.php index f81b0c896..6521ddc91 100644 --- a/src/Module/Item/Compose.php +++ b/src/Module/Item/Compose.php @@ -40,7 +40,7 @@ use Friendica\Util\Temporal; class Compose extends BaseModule { - public static function post(array $parameters = []) + public function post() { if (!empty($_REQUEST['body'])) { $_REQUEST['return'] = 'network'; @@ -51,7 +51,7 @@ class Compose extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form('compose', false); @@ -64,7 +64,7 @@ class Compose extends BaseModule } /// @TODO Retrieve parameter from router - $posttype = $parameters['type'] ?? Item::PT_ARTICLE; + $posttype = $this->parameters['type'] ?? Item::PT_ARTICLE; if (!in_array($posttype, [Item::PT_ARTICLE, Item::PT_PERSONAL_NOTE])) { switch ($posttype) { case 'note': diff --git a/src/Module/Item/Follow.php b/src/Module/Item/Follow.php index d67af70e4..f89353170 100644 --- a/src/Module/Item/Follow.php +++ b/src/Module/Item/Follow.php @@ -34,7 +34,7 @@ use Friendica\Network\HTTPException; */ class Follow extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $l10n = DI::l10n(); @@ -42,11 +42,11 @@ class Follow extends BaseModule throw new HttpException\ForbiddenException($l10n->t('Access denied.')); } - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { throw new HTTPException\BadRequestException(); } - $itemId = intval($parameters['id']); + $itemId = intval($this->parameters['id']); if (!Item::performActivity($itemId, 'follow', local_user())) { throw new HTTPException\BadRequestException($l10n->t('Unable to follow this item.')); diff --git a/src/Module/Item/Ignore.php b/src/Module/Item/Ignore.php index d38c19bb9..33481fd2e 100644 --- a/src/Module/Item/Ignore.php +++ b/src/Module/Item/Ignore.php @@ -33,7 +33,7 @@ use Friendica\Network\HTTPException; */ class Ignore extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $l10n = DI::l10n(); @@ -41,11 +41,11 @@ class Ignore extends BaseModule throw new HttpException\ForbiddenException($l10n->t('Access denied.')); } - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { throw new HTTPException\BadRequestException(); } - $itemId = intval($parameters['id']); + $itemId = intval($this->parameters['id']); $dba = DI::dba(); diff --git a/src/Module/Item/Pin.php b/src/Module/Item/Pin.php index b8022cf57..12ff94655 100644 --- a/src/Module/Item/Pin.php +++ b/src/Module/Item/Pin.php @@ -34,7 +34,7 @@ use Friendica\Network\HTTPException; */ class Pin extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $l10n = DI::l10n(); @@ -42,11 +42,11 @@ class Pin extends BaseModule throw new HttpException\ForbiddenException($l10n->t('Access denied.')); } - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { throw new HTTPException\BadRequestException(); } - $itemId = intval($parameters['id']); + $itemId = intval($this->parameters['id']); $item = Post::selectFirst(['uri-id', 'uid'], ['id' => $itemId]); if (!DBA::isResult($item)) { diff --git a/src/Module/Item/Star.php b/src/Module/Item/Star.php index c39b6a11a..b3e4ed2a1 100644 --- a/src/Module/Item/Star.php +++ b/src/Module/Item/Star.php @@ -35,7 +35,7 @@ use Friendica\Network\HTTPException; */ class Star extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $l10n = DI::l10n(); @@ -43,11 +43,11 @@ class Star extends BaseModule throw new HttpException\ForbiddenException($l10n->t('Access denied.')); } - if (empty($parameters['id'])) { + if (empty($this->parameters['id'])) { throw new HTTPException\BadRequestException(); } - $itemId = intval($parameters['id']); + $itemId = intval($this->parameters['id']); $item = Post::selectFirstForUser(local_user(), ['uid', 'uri-id', 'starred'], ['uid' => [0, local_user()], 'id' => $itemId]); diff --git a/src/Module/Magic.php b/src/Module/Magic.php index c51c05844..c47a7a4d5 100644 --- a/src/Module/Magic.php +++ b/src/Module/Magic.php @@ -21,16 +21,18 @@ namespace Friendica\Module; +use Friendica\App; use Friendica\BaseModule; -use Friendica\Core\Logger; +use Friendica\Core\L10n; use Friendica\Core\System; -use Friendica\Database\DBA; -use Friendica\DI; +use Friendica\Database\Database; use Friendica\Model\Contact; use Friendica\Model\User; +use Friendica\Network\HTTPClient\Capability\ICanSendHttpRequests; use Friendica\Network\HTTPClient\Client\HttpClientOptions; use Friendica\Util\HTTPSignature; use Friendica\Util\Strings; +use Psr\Log\LoggerInterface; /** * Magic Auth (remote authentication) module. @@ -39,17 +41,35 @@ use Friendica\Util\Strings; */ class Magic extends BaseModule { - public static function init(array $parameters = []) - { - $a = DI::app(); - $ret = ['success' => false, 'url' => '', 'message' => '']; - Logger::info('magic mdule: invoked'); + /** @var App */ + protected $app; + /** @var LoggerInterface */ + protected $logger; + /** @var Database */ + protected $dba; + /** @var ICanSendHttpRequests */ + protected $httpClient; + protected $baseUrl; - Logger::debug('args', ['request' => $_REQUEST]); + public function __construct(App $app, App\BaseURL $baseUrl, LoggerInterface $logger, Database $dba, ICanSendHttpRequests $httpClient, L10n $l10n, array $parameters = []) + { + parent::__construct($l10n, $parameters); + + $this->app = $app; + $this->logger = $logger; + $this->dba = $dba; + $this->httpClient = $httpClient; + $this->baseUrl = $baseUrl; + } + + public function rawContent() + { + $this->logger->info('magic module: invoked'); + + $this->logger->debug('args', ['request' => $_REQUEST]); $addr = $_REQUEST['addr'] ?? ''; $dest = $_REQUEST['dest'] ?? ''; - $test = (!empty($_REQUEST['test']) ? intval($_REQUEST['test']) : 0); $owa = (!empty($_REQUEST['owa']) ? intval($_REQUEST['owa']) : 0); $cid = 0; @@ -60,21 +80,15 @@ class Magic extends BaseModule } if (!$cid) { - Logger::info('No contact record found', $_REQUEST); + $this->logger->info('No contact record found', $_REQUEST); // @TODO Finding a more elegant possibility to redirect to either internal or external URL - $a->redirect($dest); + $this->app->redirect($dest); } - $contact = DBA::selectFirst('contact', ['id', 'nurl', 'url'], ['id' => $cid]); + $contact = $this->dba->selectFirst('contact', ['id', 'nurl', 'url'], ['id' => $cid]); // Redirect if the contact is already authenticated on this site. - if ($a->getContactId() && strpos($contact['nurl'], Strings::normaliseLink(DI::baseUrl()->get())) !== false) { - if ($test) { - $ret['success'] = true; - $ret['message'] .= 'Local site - you are already authenticated.' . EOL; - return $ret; - } - - Logger::info('Contact is already authenticated'); + if ($this->app->getContactId() && strpos($contact['nurl'], Strings::normaliseLink($this->baseUrl->get())) !== false) { + $this->logger->info('Contact is already authenticated'); System::externalRedirect($dest); } @@ -98,11 +112,11 @@ class Magic extends BaseModule $header = HTTPSignature::createSig( $header, $user['prvkey'], - 'acct:' . $user['nickname'] . '@' . DI::baseUrl()->getHostname() . (DI::baseUrl()->getUrlPath() ? '/' . DI::baseUrl()->getUrlPath() : '') + 'acct:' . $user['nickname'] . '@' . $this->baseUrl->getHostname() . ($this->baseUrl->getUrlPath() ? '/' . $this->baseUrl->getUrlPath() : '') ); // Try to get an authentication token from the other instance. - $curlResult = DI::httpClient()->get($basepath . '/owa', [HttpClientOptions::HEADERS => $header]); + $curlResult = $this->httpClient->get($basepath . '/owa', [HttpClientOptions::HEADERS => $header]); if ($curlResult->isSuccess()) { $j = json_decode($curlResult->getBody(), true); @@ -118,19 +132,14 @@ class Magic extends BaseModule } $args = (strpbrk($dest, '?&') ? '&' : '?') . 'owt=' . $token; - Logger::info('Redirecting', ['path' => $dest . $args]); + $this->logger->info('Redirecting', ['path' => $dest . $args]); System::externalRedirect($dest . $args); } } System::externalRedirect($dest); } - if ($test) { - $ret['message'] = 'Not authenticated or invalid arguments' . EOL; - return $ret; - } - // @TODO Finding a more elegant possibility to redirect to either internal or external URL - $a->redirect($dest); + $this->app->redirect($dest); } } diff --git a/src/Module/Maintenance.php b/src/Module/Maintenance.php index be70e7a5c..2025a5fa4 100644 --- a/src/Module/Maintenance.php +++ b/src/Module/Maintenance.php @@ -34,7 +34,7 @@ use Friendica\Util\Strings; */ class Maintenance extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $reason = DI::config()->get('system', 'maintenance_reason'); diff --git a/src/Module/Manifest.php b/src/Module/Manifest.php index 0f9112d11..ff462fd3e 100644 --- a/src/Module/Manifest.php +++ b/src/Module/Manifest.php @@ -27,7 +27,7 @@ use Friendica\DI; class Manifest extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = DI::config(); diff --git a/src/Module/NoScrape.php b/src/Module/NoScrape.php index 253003896..06bce3e24 100644 --- a/src/Module/NoScrape.php +++ b/src/Module/NoScrape.php @@ -35,14 +35,14 @@ use Friendica\Model\User; */ class NoScrape extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $a = DI::app(); - if (isset($parameters['nick'])) { + if (isset($this->parameters['nick'])) { // Get infos about a specific nick (public) - $which = $parameters['nick']; - } elseif (local_user() && isset($parameters['profile']) && DI::args()->get(2) == 'view') { + $which = $this->parameters['nick']; + } elseif (local_user() && isset($this->parameters['profile']) && DI::args()->get(2) == 'view') { // view infos about a known profile (needs a login) $which = $a->getLoggedInUserNickname(); } else { diff --git a/src/Module/NodeInfo110.php b/src/Module/NodeInfo110.php index 5248c662b..d8f8a5049 100644 --- a/src/Module/NodeInfo110.php +++ b/src/Module/NodeInfo110.php @@ -33,7 +33,7 @@ use Friendica\Model\Nodeinfo; */ class NodeInfo110 extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = DI::config(); diff --git a/src/Module/NodeInfo120.php b/src/Module/NodeInfo120.php index 0eb6e793f..aac8c6d4f 100644 --- a/src/Module/NodeInfo120.php +++ b/src/Module/NodeInfo120.php @@ -33,7 +33,7 @@ use Friendica\Model\Nodeinfo; */ class NodeInfo120 extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = DI::config(); diff --git a/src/Module/NodeInfo210.php b/src/Module/NodeInfo210.php index 5ea9c0e68..cb55411f2 100644 --- a/src/Module/NodeInfo210.php +++ b/src/Module/NodeInfo210.php @@ -33,7 +33,7 @@ use Friendica\Model\Nodeinfo; */ class NodeInfo210 extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = DI::config(); diff --git a/src/Module/Notifications/Introductions.php b/src/Module/Notifications/Introductions.php index 9bc9f40b0..b9bbd0be9 100644 --- a/src/Module/Notifications/Introductions.php +++ b/src/Module/Notifications/Introductions.php @@ -21,14 +21,17 @@ namespace Friendica\Module\Notifications; +use Friendica\App\Arguments; +use Friendica\App\Mode; use Friendica\Content\ContactSelector; use Friendica\Content\Nav; use Friendica\Content\Text\BBCode; +use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Model\User; use Friendica\Module\BaseNotifications; +use Friendica\Navigation\Notifications\Factory\Introduction as IntroductionFactory; use Friendica\Navigation\Notifications\ValueObject\Introduction; /** @@ -36,35 +39,48 @@ use Friendica\Navigation\Notifications\ValueObject\Introduction; */ class Introductions extends BaseNotifications { + /** @var IntroductionFactory */ + protected $notificationIntro; + /** @var Mode */ + protected $mode; + + public function __construct(Mode $mode, IntroductionFactory $notificationIntro, Arguments $args, L10n $l10n, array $parameters = []) + { + parent::__construct($args, $l10n, $parameters); + + $this->notificationIntro = $notificationIntro; + $this->mode = $mode; + } + /** * @inheritDoc */ - public static function getNotifications() + public function getNotifications() { - $id = (int)DI::args()->get(2, 0); - $all = DI::args()->get(2) == 'all'; + $id = (int)$this->args->get(2, 0); + $all = $this->args->get(2) == 'all'; $notifications = [ 'ident' => 'introductions', - 'notifications' => DI::notificationIntro()->getList($all, self::$firstItemNum, self::ITEMS_PER_PAGE, $id), + 'notifications' => $this->notificationIntro->getList($all, $this->firstItemNum, self::ITEMS_PER_PAGE, $id), ]; return [ - 'header' => DI::l10n()->t('Notifications'), + 'header' => $this->t('Notifications'), 'notifications' => $notifications, ]; } - public static function content(array $parameters = []) + public function content(): string { Nav::setSelected('introductions'); - $all = DI::args()->get(2) == 'all'; + $all = $this->args->get(2) == 'all'; $notificationContent = []; $notificationNoContent = ''; - $notificationResult = self::getNotifications(); + $notificationResult = $this->getNotifications(); $notifications = $notificationResult['notifications'] ?? []; $notificationHeader = $notificationResult['header'] ?? ''; @@ -74,7 +90,7 @@ class Introductions extends BaseNotifications // The link to switch between ignored and normal connection requests $notificationShowLink = [ 'href' => (!$all ? 'notifications/intros/all' : 'notifications/intros'), - 'text' => (!$all ? DI::l10n()->t('Show Ignored Requests') : DI::l10n()->t('Hide Ignored Requests')), + 'text' => (!$all ? $this->t('Show Ignored Requests') : $this->t('Hide Ignored Requests')), ]; $owner = User::getOwnerDataById(local_user()); @@ -90,10 +106,10 @@ class Introductions extends BaseNotifications case 'friend_suggestion': $notificationContent[] = Renderer::replaceMacros($notificationSuggestions, [ '$type' => $Introduction->getLabel(), - '$str_notification_type' => DI::l10n()->t('Notification type:'), + '$str_notification_type' => $this->t('Notification type:'), '$str_type' => $Introduction->getType(), '$intro_id' => $Introduction->getIntroId(), - '$lbl_madeby' => DI::l10n()->t('Suggested by:'), + '$lbl_madeby' => $this->t('Suggested by:'), '$madeby' => $Introduction->getMadeBy(), '$madeby_url' => $Introduction->getMadeByUrl(), '$madeby_zrl' => $Introduction->getMadeByZrl(), @@ -104,22 +120,22 @@ class Introductions extends BaseNotifications '$dfrn_url' => $owner['url'], '$url' => $Introduction->getUrl(), '$zrl' => $Introduction->getZrl(), - '$lbl_url' => DI::l10n()->t('Profile URL'), + '$lbl_url' => $this->t('Profile URL'), '$addr' => $Introduction->getAddr(), '$action' => 'follow', - '$approve' => DI::l10n()->t('Approve'), + '$approve' => $this->t('Approve'), '$note' => $Introduction->getNote(), - '$ignore' => DI::l10n()->t('Ignore'), - '$discard' => DI::l10n()->t('Discard'), - '$is_mobile' => DI::mode()->isMobile(), + '$ignore' => $this->t('Ignore'), + '$discard' => $this->t('Discard'), + '$is_mobile' => $this->mode->isMobile(), ]); break; // Normal connection requests default: if ($Introduction->getNetwork() === Protocol::DFRN) { - $lbl_knowyou = DI::l10n()->t('Claims to be known to you: '); - $knowyou = ($Introduction->getKnowYou() ? DI::l10n()->t('Yes') : DI::l10n()->t('No')); + $lbl_knowyou = $this->t('Claims to be known to you: '); + $knowyou = ($Introduction->getKnowYou() ? $this->t('Yes') : $this->t('No')); } else { $lbl_knowyou = ''; $knowyou = ''; @@ -127,12 +143,12 @@ class Introductions extends BaseNotifications $convertedName = BBCode::convert($Introduction->getName()); - $helptext = DI::l10n()->t('Shall your connection be bidirectional or not?'); - $helptext2 = DI::l10n()->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $convertedName, $convertedName); - $helptext3 = DI::l10n()->t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $convertedName); + $helptext = $this->t('Shall your connection be bidirectional or not?'); + $helptext2 = $this->t('Accepting %s as a friend allows %s to subscribe to your posts, and you will also receive updates from them in your news feed.', $convertedName, $convertedName); + $helptext3 = $this->t('Accepting %s as a subscriber allows them to subscribe to your posts, but you will not receive updates from them in your news feed.', $convertedName); - $friend = ['duplex', DI::l10n()->t('Friend'), '1', $helptext2, true]; - $follower = ['duplex', DI::l10n()->t('Subscriber'), '0', $helptext3, false]; + $friend = ['duplex', $this->t('Friend'), '1', $helptext2, true]; + $follower = ['duplex', $this->t('Subscriber'), '0', $helptext3, false]; $action = 'follow_confirm'; @@ -145,7 +161,7 @@ class Introductions extends BaseNotifications $header .= ' (' . ContactSelector::networkToName($Introduction->getNetwork(), $Introduction->getUrl()) . ')'; if ($Introduction->getNetwork() != Protocol::DIASPORA) { - $discard = DI::l10n()->t('Discard'); + $discard = $this->t('Discard'); } else { $discard = ''; } @@ -153,7 +169,7 @@ class Introductions extends BaseNotifications $notificationContent[] = Renderer::replaceMacros($notificationTemplate, [ '$type' => $Introduction->getLabel(), '$header' => $header, - '$str_notification_type' => DI::l10n()->t('Notification type:'), + '$str_notification_type' => $this->t('Notification type:'), '$str_type' => $Introduction->getType(), '$dfrn_id' => $Introduction->getDfrnId(), '$uid' => $Introduction->getUid(), @@ -162,39 +178,39 @@ class Introductions extends BaseNotifications '$photo' => $Introduction->getPhoto(), '$fullname' => $Introduction->getName(), '$location' => $Introduction->getLocation(), - '$lbl_location' => DI::l10n()->t('Location:'), + '$lbl_location' => $this->t('Location:'), '$about' => $Introduction->getAbout(), - '$lbl_about' => DI::l10n()->t('About:'), + '$lbl_about' => $this->t('About:'), '$keywords' => $Introduction->getKeywords(), - '$lbl_keywords' => DI::l10n()->t('Tags:'), - '$hidden' => ['hidden', DI::l10n()->t('Hide this contact from others'), $Introduction->isHidden(), ''], + '$lbl_keywords' => $this->t('Tags:'), + '$hidden' => ['hidden', $this->t('Hide this contact from others'), $Introduction->isHidden(), ''], '$lbl_connection_type' => $helptext, '$friend' => $friend, '$follower' => $follower, '$url' => $Introduction->getUrl(), '$zrl' => $Introduction->getZrl(), - '$lbl_url' => DI::l10n()->t('Profile URL'), + '$lbl_url' => $this->t('Profile URL'), '$addr' => $Introduction->getAddr(), '$lbl_knowyou' => $lbl_knowyou, - '$lbl_network' => DI::l10n()->t('Network:'), + '$lbl_network' => $this->t('Network:'), '$network' => ContactSelector::networkToName($Introduction->getNetwork(), $Introduction->getUrl()), '$knowyou' => $knowyou, - '$approve' => DI::l10n()->t('Approve'), + '$approve' => $this->t('Approve'), '$note' => $Introduction->getNote(), - '$ignore' => DI::l10n()->t('Ignore'), + '$ignore' => $this->t('Ignore'), '$discard' => $discard, '$action' => $action, - '$is_mobile' => DI::mode()->isMobile(), + '$is_mobile' => $this->mode->isMobile(), ]); break; } } if (count($notifications['notifications']) == 0) { - notice(DI::l10n()->t('No introductions.')); - $notificationNoContent = DI::l10n()->t('No more %s notifications.', $notifications['ident']); + notice($this->t('No introductions.')); + $notificationNoContent = $this->t('No more %s notifications.', $notifications['ident']); } - return self::printContent($notificationHeader, $notificationContent, $notificationNoContent, $notificationShowLink); + return $this->printContent($notificationHeader, $notificationContent, $notificationNoContent, $notificationShowLink); } } diff --git a/src/Module/Notifications/Notification.php b/src/Module/Notifications/Notification.php index 64ab459f1..486054f98 100644 --- a/src/Module/Notifications/Notification.php +++ b/src/Module/Notifications/Notification.php @@ -42,13 +42,13 @@ class Notification extends BaseModule * @throws \ImagickException * @throws \Exception */ - public static function post(array $parameters = []) + public function post() { if (!local_user()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.')); } - $request_id = $parameters['id'] ?? false; + $request_id = $this->parameters['id'] ?? false; if ($request_id) { $intro = DI::intro()->selectOneById($request_id, local_user()); @@ -73,7 +73,7 @@ class Notification extends BaseModule * * @throws HTTPException\UnauthorizedException */ - public static function rawContent(array $parameters = []) + public function rawContent() { if (!local_user()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('Permission denied.')); @@ -101,14 +101,14 @@ class Notification extends BaseModule * @throws HTTPException\InternalServerErrorException * @throws \Exception */ - public static function content(array $parameters = []): string + public function content(): string { if (!local_user()) { notice(DI::l10n()->t('You must be logged in to show this page.')); return Login::form(); } - $request_id = $parameters['id'] ?? false; + $request_id = $this->parameters['id'] ?? false; if ($request_id) { $Notify = DI::notify()->selectOneById($request_id); diff --git a/src/Module/Notifications/Notifications.php b/src/Module/Notifications/Notifications.php index a0e40719c..269acb79d 100644 --- a/src/Module/Notifications/Notifications.php +++ b/src/Module/Notifications/Notifications.php @@ -21,13 +21,13 @@ namespace Friendica\Module\Notifications; +use Friendica\App\Arguments; +use Friendica\App\BaseURL; use Friendica\Content\Nav; +use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Module\BaseNotifications; -use Friendica\Navigation\Notifications\Collection\FormattedNotifications; use Friendica\Navigation\Notifications\ValueObject\FormattedNotification; -use Friendica\Network\HTTPException\InternalServerErrorException; /** * Prints all notification types except introduction: @@ -38,42 +38,56 @@ use Friendica\Network\HTTPException\InternalServerErrorException; */ class Notifications extends BaseNotifications { + /** @var \Friendica\Navigation\Notifications\Factory\FormattedNotification */ + protected $formattedNotificationFactory; + + /** @var BaseURL */ + protected $baseUrl; + + public function __construct(BaseURL $baseUrl, \Friendica\Navigation\Notifications\Factory\FormattedNotification $formattedNotificationFactory, Arguments $args, L10n $l10n, array $parameters = []) + { + parent::__construct($args, $l10n, $parameters); + + $this->formattedNotificationFactory = $formattedNotificationFactory; + $this->baseUrl = $baseUrl; + } + /** * {@inheritDoc} */ - public static function getNotifications() + public function getNotifications() { $notificationHeader = ''; $notifications = []; - $factory = DI::formattedNotificationFactory(); + $factory = $this->formattedNotificationFactory; - if ((DI::args()->get(1) == 'network')) { - $notificationHeader = DI::l10n()->t('Network Notifications'); + if (($this->args->get(1) == 'network')) { + $notificationHeader = $this->t('Network Notifications'); $notifications = [ 'ident' => FormattedNotification::NETWORK, - 'notifications' => $factory->getNetworkList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE), + 'notifications' => $factory->getNetworkList($this->showAll, $this->firstItemNum, self::ITEMS_PER_PAGE), ]; - } elseif ((DI::args()->get(1) == 'system')) { - $notificationHeader = DI::l10n()->t('System Notifications'); + } elseif (($this->args->get(1) == 'system')) { + $notificationHeader = $this->t('System Notifications'); $notifications = [ 'ident' => FormattedNotification::SYSTEM, - 'notifications' => $factory->getSystemList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE), + 'notifications' => $factory->getSystemList($this->showAll, $this->firstItemNum, self::ITEMS_PER_PAGE), ]; - } elseif ((DI::args()->get(1) == 'personal')) { - $notificationHeader = DI::l10n()->t('Personal Notifications'); + } elseif (($this->args->get(1) == 'personal')) { + $notificationHeader = $this->t('Personal Notifications'); $notifications = [ 'ident' => FormattedNotification::PERSONAL, - 'notifications' => $factory->getPersonalList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE), + 'notifications' => $factory->getPersonalList($this->showAll, $this->firstItemNum, self::ITEMS_PER_PAGE), ]; - } elseif ((DI::args()->get(1) == 'home')) { - $notificationHeader = DI::l10n()->t('Home Notifications'); + } elseif (($this->args->get(1) == 'home')) { + $notificationHeader = $this->t('Home Notifications'); $notifications = [ 'ident' => FormattedNotification::HOME, - 'notifications' => $factory->getHomeList(self::$showAll, self::$firstItemNum, self::ITEMS_PER_PAGE), + 'notifications' => $factory->getHomeList($this->showAll, $this->firstItemNum, self::ITEMS_PER_PAGE), ]; } else { - DI::baseUrl()->redirect('notifications'); + $this->baseUrl->redirect('notifications'); } return [ @@ -82,14 +96,14 @@ class Notifications extends BaseNotifications ]; } - public static function content(array $parameters = []) + public function content(): string { Nav::setSelected('notifications'); $notificationContent = []; $notificationNoContent = ''; - $notificationResult = self::getNotifications(); + $notificationResult = $this->getNotifications(); $notifications = $notificationResult['notifications'] ?? []; $notificationHeader = $notificationResult['header'] ?? ''; @@ -118,14 +132,14 @@ class Notifications extends BaseNotifications ]); } } else { - $notificationNoContent = DI::l10n()->t('No more %s notifications.', $notificationResult['ident']); + $notificationNoContent = $this->t('No more %s notifications.', $notificationResult['ident']); } $notificationShowLink = [ - 'href' => (self::$showAll ? 'notifications/' . $notifications['ident'] : 'notifications/' . $notifications['ident'] . '?show=all'), - 'text' => (self::$showAll ? DI::l10n()->t('Show unread') : DI::l10n()->t('Show all')), + 'href' => ($this->showAll ? 'notifications/' . $notifications['ident'] : 'notifications/' . $notifications['ident'] . '?show=all'), + 'text' => ($this->showAll ? $this->t('Show unread') : $this->t('Show all')), ]; - return self::printContent($notificationHeader, $notificationContent, $notificationNoContent, $notificationShowLink); + return $this->printContent($notificationHeader, $notificationContent, $notificationNoContent, $notificationShowLink); } } diff --git a/src/Module/OAuth/Acknowledge.php b/src/Module/OAuth/Acknowledge.php index 6f7ac945b..f0915df41 100644 --- a/src/Module/OAuth/Acknowledge.php +++ b/src/Module/OAuth/Acknowledge.php @@ -30,13 +30,13 @@ use Friendica\Module\BaseApi; */ class Acknowledge extends BaseApi { - public static function post(array $parameters = []) + public function post() { DI::session()->set('oauth_acknowledge', true); DI::app()->redirect(DI::session()->get('return_path')); } - public static function content(array $parameters = []) + public function content(): string { DI::session()->set('return_path', $_REQUEST['return_path'] ?? ''); diff --git a/src/Module/OAuth/Authorize.php b/src/Module/OAuth/Authorize.php index cf5187d94..d39cbe353 100644 --- a/src/Module/OAuth/Authorize.php +++ b/src/Module/OAuth/Authorize.php @@ -35,10 +35,9 @@ class Authorize extends BaseApi private static $oauth_code = ''; /** - * @param array $parameters * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function rawContent(array $parameters = []) + public function rawContent() { $request = self::getRequest([ 'force_login' => '', // Forces the user to re-login, which is necessary for authorizing with multiple accounts from the same instance. @@ -98,7 +97,7 @@ class Authorize extends BaseApi self::$oauth_code = $token['code']; } - public static function content(array $parameters = []) + public function content(): string { if (empty(self::$oauth_code)) { return ''; diff --git a/src/Module/OAuth/Revoke.php b/src/Module/OAuth/Revoke.php index 519e79db0..bf906ab45 100644 --- a/src/Module/OAuth/Revoke.php +++ b/src/Module/OAuth/Revoke.php @@ -32,7 +32,7 @@ use Friendica\Module\BaseApi; */ class Revoke extends BaseApi { - public static function post(array $parameters = []) + public function post() { $request = self::getRequest([ 'client_id' => '', // Client ID, obtained during app registration diff --git a/src/Module/OAuth/Token.php b/src/Module/OAuth/Token.php index f104e9672..6aef63f30 100644 --- a/src/Module/OAuth/Token.php +++ b/src/Module/OAuth/Token.php @@ -34,7 +34,7 @@ use Friendica\Security\OAuth; */ class Token extends BaseApi { - public static function post(array $parameters = []) + public function post() { $request = self::getRequest([ 'client_id' => '', // Client ID, obtained during app registration diff --git a/src/Module/Oembed.php b/src/Module/Oembed.php index 0d6fb8ee5..1b38c0e97 100644 --- a/src/Module/Oembed.php +++ b/src/Module/Oembed.php @@ -37,7 +37,7 @@ use Friendica\Util\Strings; */ class Oembed extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { // Unused form: /oembed/b2h?url=... if (DI::args()->getArgv()[1] == 'b2h') { diff --git a/src/Module/OpenSearch.php b/src/Module/OpenSearch.php index df3770687..e5212c251 100644 --- a/src/Module/OpenSearch.php +++ b/src/Module/OpenSearch.php @@ -36,7 +36,7 @@ class OpenSearch extends BaseModule /** * @throws \Exception */ - public static function rawContent(array $parameters = []) + public function rawContent() { header('Content-type: application/opensearchdescription+xml'); diff --git a/src/Module/Owa.php b/src/Module/Owa.php index 5b87e6a4f..6062f2c99 100644 --- a/src/Module/Owa.php +++ b/src/Module/Owa.php @@ -44,9 +44,8 @@ use Friendica\Util\Strings; */ class Owa extends BaseModule { - public static function init(array $parameters = []) + public function rawContent() { - $ret = [ 'success' => false ]; foreach (['REDIRECT_REMOTE_USER', 'HTTP_AUTHORIZATION'] as $head) { diff --git a/src/Module/ParseUrl.php b/src/Module/ParseUrl.php index 0b1548ed5..092d6ec74 100644 --- a/src/Module/ParseUrl.php +++ b/src/Module/ParseUrl.php @@ -31,7 +31,7 @@ use Friendica\Util; class ParseUrl extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { if (!Session::isAuthenticated()) { throw new \Friendica\Network\HTTPException\ForbiddenException(); diff --git a/src/Module/PermissionTooltip.php b/src/Module/PermissionTooltip.php index 7599c2f06..1f6b58e4a 100644 --- a/src/Module/PermissionTooltip.php +++ b/src/Module/PermissionTooltip.php @@ -15,10 +15,10 @@ use Friendica\Network\HTTPException; */ class PermissionTooltip extends \Friendica\BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - $type = $parameters['type']; - $referenceId = $parameters['id']; + $type = $this->parameters['type']; + $referenceId = $this->parameters['id']; $expectedTypes = ['item', 'photo', 'event']; if (!in_array($type, $expectedTypes)) { diff --git a/src/Module/Photo.php b/src/Module/Photo.php index 399313e3f..824edeb6a 100644 --- a/src/Module/Photo.php +++ b/src/Module/Photo.php @@ -51,7 +51,7 @@ class Photo extends BaseModule * Fetch a photo or an avatar, in optional size, check for permissions and * return the image */ - public static function rawContent(array $parameters = []) + public function rawContent() { $totalstamp = microtime(true); @@ -77,14 +77,14 @@ class Photo extends BaseModule $scale = null; $stamp = microtime(true); // User avatar - if (!empty($parameters['type'])) { - if (!empty($parameters['customsize'])) { - $customsize = intval($parameters['customsize']); - $square_resize = !in_array($parameters['type'], ['media', 'preview']); + if (!empty($this->parameters['type'])) { + if (!empty($this->parameters['customsize'])) { + $customsize = intval($this->parameters['customsize']); + $square_resize = !in_array($this->parameters['type'], ['media', 'preview']); } - if (!empty($parameters['guid'])) { - $guid = $parameters['guid']; + if (!empty($this->parameters['guid'])) { + $guid = $this->parameters['guid']; $account = DBA::selectFirst('account-user-view', ['id'], ['guid' => $guid], ['order' => ['uid' => true]]); if (empty($account)) { throw new HTTPException\NotFoundException(); @@ -94,12 +94,12 @@ class Photo extends BaseModule } // Contact Id Fallback, to remove after version 2021.12 - if (isset($parameters['contact_id'])) { - $id = intval($parameters['contact_id']); + if (isset($this->parameters['contact_id'])) { + $id = intval($this->parameters['contact_id']); } - if (!empty($parameters['nickname_ext'])) { - $nickname = pathinfo($parameters['nickname_ext'], PATHINFO_FILENAME); + if (!empty($this->parameters['nickname_ext'])) { + $nickname = pathinfo($this->parameters['nickname_ext'], PATHINFO_FILENAME); $user = User::getByNickname($nickname, ['uid']); if (empty($user)) { throw new HTTPException\NotFoundException(); @@ -109,23 +109,23 @@ class Photo extends BaseModule } // User Id Fallback, to remove after version 2021.12 - if (!empty($parameters['uid_ext'])) { - $id = intval(pathinfo($parameters['uid_ext'], PATHINFO_FILENAME)); + if (!empty($this->parameters['uid_ext'])) { + $id = intval(pathinfo($this->parameters['uid_ext'], PATHINFO_FILENAME)); } // Please refactor this for the love of everything that's good - if (isset($parameters['id'])) { - $id = $parameters['id']; + if (isset($this->parameters['id'])) { + $id = $this->parameters['id']; } if (empty($id)) { - Logger::notice('No picture id was detected', ['parameters' => $parameters, 'query' => DI::args()->getQueryString()]); + Logger::notice('No picture id was detected', ['parameters' => $this->parameters, 'query' => DI::args()->getQueryString()]); throw new HTTPException\NotFoundException(DI::l10n()->t('The Photo is not available.')); } - $photo = self::getPhotoByid($id, $parameters['type'], $customsize ?: Proxy::PIXEL_SMALL); + $photo = self::getPhotoByid($id, $this->parameters['type'], $customsize ?: Proxy::PIXEL_SMALL); } else { - $photoid = pathinfo($parameters['name'], PATHINFO_FILENAME); + $photoid = pathinfo($this->parameters['name'], PATHINFO_FILENAME); $scale = 0; if (substr($photoid, -2, 1) == "-") { $scale = intval(substr($photoid, -1, 1)); diff --git a/src/Module/Profile/Common.php b/src/Module/Profile/Common.php index 7138ac73f..4a335ddf7 100644 --- a/src/Module/Profile/Common.php +++ b/src/Module/Profile/Common.php @@ -35,7 +35,7 @@ use Friendica\Network\HTTPException; class Common extends BaseProfile { - public static function content(array $parameters = []) + public function content(): string { if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); @@ -45,7 +45,7 @@ class Common extends BaseProfile Nav::setSelected('home'); - $nickname = $parameters['nickname']; + $nickname = $this->parameters['nickname']; $profile = Profile::load($a, $nickname); if (empty($profile)) { diff --git a/src/Module/Profile/Contacts.php b/src/Module/Profile/Contacts.php index 94f301557..e20fd3f2d 100644 --- a/src/Module/Profile/Contacts.php +++ b/src/Module/Profile/Contacts.php @@ -34,7 +34,7 @@ use Friendica\Network\HTTPException; class Contacts extends Module\BaseProfile { - public static function content(array $parameters = []) + public function content(): string { if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); @@ -42,8 +42,8 @@ class Contacts extends Module\BaseProfile $a = DI::app(); - $nickname = $parameters['nickname']; - $type = $parameters['type'] ?? 'all'; + $nickname = $this->parameters['nickname']; + $type = $this->parameters['type'] ?? 'all'; $profile = Model\Profile::load($a, $nickname); if (empty($profile)) { diff --git a/src/Module/Profile/Index.php b/src/Module/Profile/Index.php index 5334ac932..653eb2a19 100644 --- a/src/Module/Profile/Index.php +++ b/src/Module/Profile/Index.php @@ -22,6 +22,7 @@ namespace Friendica\Module\Profile; use Friendica\BaseModule; +use Friendica\Core\L10n; /** * Profile index router @@ -34,13 +35,13 @@ use Friendica\BaseModule; */ class Index extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - Profile::rawContent($parameters); + (new Profile($this->l10n, $this->parameters))->rawContent(); } - public static function content(array $parameters = []) + public function content(): string { - return Status::content($parameters); + return (new Status($this->l10n, $this->parameters))->content(); } } diff --git a/src/Module/Profile/Media.php b/src/Module/Profile/Media.php index e10597199..74af5f95e 100644 --- a/src/Module/Profile/Media.php +++ b/src/Module/Profile/Media.php @@ -29,11 +29,11 @@ use Friendica\Network\HTTPException; class Media extends BaseProfile { - public static function content(array $parameters = []) + public function content(): string { $a = DI::app(); - $profile = ProfileModel::load($a, $parameters['nickname']); + $profile = ProfileModel::load($a, $this->parameters['nickname']); if (empty($profile)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); } diff --git a/src/Module/Profile/Profile.php b/src/Module/Profile/Profile.php index 25b6eccc9..a497fc4dd 100644 --- a/src/Module/Profile/Profile.php +++ b/src/Module/Profile/Profile.php @@ -46,10 +46,10 @@ use Friendica\Util\Temporal; class Profile extends BaseProfile { - public static function rawContent(array $parameters = []) + public function rawContent() { if (ActivityPub::isRequest()) { - $user = DBA::selectFirst('user', ['uid'], ['nickname' => $parameters['nickname']]); + $user = DBA::selectFirst('user', ['uid'], ['nickname' => $this->parameters['nickname']]); if (DBA::isResult($user)) { try { $data = ActivityPub\Transmitter::getProfile($user['uid']); @@ -61,9 +61,9 @@ class Profile extends BaseProfile } } - if (DBA::exists('userd', ['username' => $parameters['nickname']])) { + if (DBA::exists('userd', ['username' => $this->parameters['nickname']])) { // Known deleted user - $data = ActivityPub\Transmitter::getDeletedUser($parameters['nickname']); + $data = ActivityPub\Transmitter::getDeletedUser($this->parameters['nickname']); System::jsonError(410, $data); } else { @@ -73,11 +73,11 @@ class Profile extends BaseProfile } } - public static function content(array $parameters = []) + public function content(): string { $a = DI::app(); - $profile = ProfileModel::load($a, $parameters['nickname']); + $profile = ProfileModel::load($a, $this->parameters['nickname']); if (!$profile) { throw new HTTPException\NotFoundException(DI::l10n()->t('Profile not found.')); } @@ -98,7 +98,7 @@ class Profile extends BaseProfile DI::page()['htmlhead'] .= '' . "\n"; } - DI::page()['htmlhead'] .= self::buildHtmlHead($profile, $parameters['nickname'], $remote_contact_id); + DI::page()['htmlhead'] .= self::buildHtmlHead($profile, $this->parameters['nickname'], $remote_contact_id); Nav::setSelected('home'); @@ -134,7 +134,7 @@ class Profile extends BaseProfile $view_as_contact_alert = DI::l10n()->t( 'You\'re currently viewing your profile as %s Cancel', htmlentities($view_as_contacts[$key]['name'], ENT_COMPAT, 'UTF-8'), - 'profile/' . $parameters['nickname'] . '/profile' + 'profile/' . $this->parameters['nickname'] . '/profile' ); } } diff --git a/src/Module/Profile/Schedule.php b/src/Module/Profile/Schedule.php index e72b1c7a6..1e9cd5fa5 100644 --- a/src/Module/Profile/Schedule.php +++ b/src/Module/Profile/Schedule.php @@ -33,7 +33,7 @@ use Friendica\Util\DateTimeFormat; class Schedule extends BaseProfile { - public static function post(array $parameters = []) + public function post() { if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); @@ -50,7 +50,7 @@ class Schedule extends BaseProfile Post\Delayed::deleteById($_REQUEST['delete']); } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); @@ -80,7 +80,7 @@ class Schedule extends BaseProfile '$form_security_token' => BaseModule::getFormSecurityToken("profile_schedule"), '$baseurl' => DI::baseUrl()->get(true), '$title' => DI::l10n()->t('Scheduled Posts'), - '$nickname' => $parameters['nickname'] ?? '', + '$nickname' => $this->parameters['nickname'] ?? '', '$scheduled_at' => DI::l10n()->t('Scheduled'), '$content' => DI::l10n()->t('Content'), '$delete' => DI::l10n()->t('Remove post'), diff --git a/src/Module/Profile/Status.php b/src/Module/Profile/Status.php index e93fc5699..ad9a4acde 100644 --- a/src/Module/Profile/Status.php +++ b/src/Module/Profile/Status.php @@ -46,13 +46,13 @@ use Friendica\Util\XML; class Status extends BaseProfile { - public static function content(array $parameters = []) + public function content(): string { $args = DI::args(); $a = DI::app(); - $profile = ProfileModel::load($a, $parameters['nickname']); + $profile = ProfileModel::load($a, $this->parameters['nickname']); if (empty($profile)) { throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); @@ -62,10 +62,10 @@ class Status extends BaseProfile DI::page()['htmlhead'] .= '' . "\n"; } - DI::page()['htmlhead'] .= '' . "\n"; - DI::page()['htmlhead'] .= '' . "\n"; - DI::page()['htmlhead'] .= '' . "\n"; - DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; + DI::page()['htmlhead'] .= '' . "\n"; $category = $datequery = $datequery2 = ''; diff --git a/src/Module/Proxy.php b/src/Module/Proxy.php index 86b8a95cb..abe9a8c2e 100644 --- a/src/Module/Proxy.php +++ b/src/Module/Proxy.php @@ -44,9 +44,9 @@ class Proxy extends BaseModule /** * Fetch remote image content */ - public static function rawContent(array $parameters = []) + public function rawContent() { - $request = self::getRequestInfo($parameters); + $request = $this->getRequestInfo(); if (!DI::config()->get('system', 'proxify_content')) { Logger::notice('Proxy access is forbidden', ['request' => $request, 'agent' => $_SERVER['HTTP_USER_AGENT'] ?? '', 'accept' => $_SERVER['HTTP_ACCEPT'] ?? '']); @@ -119,13 +119,13 @@ class Proxy extends BaseModule * ] * @throws \Exception */ - private static function getRequestInfo(array $parameters) + private function getRequestInfo() { $size = ProxyUtils::PIXEL_LARGE; $sizetype = ''; - if (!empty($parameters['url']) && empty($_REQUEST['url'])) { - $url = $parameters['url']; + if (!empty($this->parameters['url']) && empty($_REQUEST['url'])) { + $url = $this->parameters['url']; // thumb, small, medium and large. if (substr($url, -6) == ':micro') { diff --git a/src/Module/PublicRSAKey.php b/src/Module/PublicRSAKey.php index a13130d1c..d159255ee 100644 --- a/src/Module/PublicRSAKey.php +++ b/src/Module/PublicRSAKey.php @@ -33,13 +33,13 @@ use Friendica\Util\Strings; */ class PublicRSAKey extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - if (empty($parameters['nick'])) { + if (empty($this->parameters['nick'])) { throw new BadRequestException(); } - $nick = $parameters['nick']; + $nick = $this->parameters['nick']; $user = User::getByNickname($nick, ['spubkey']); if (empty($user) || empty($user['spubkey'])) { diff --git a/src/Module/RandomProfile.php b/src/Module/RandomProfile.php index df1a987d2..38cd68429 100644 --- a/src/Module/RandomProfile.php +++ b/src/Module/RandomProfile.php @@ -30,7 +30,7 @@ use Friendica\Model\Contact; */ class RandomProfile extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $a = DI::app(); @@ -42,5 +42,7 @@ class RandomProfile extends BaseModule } DI::baseUrl()->redirect('profile'); + + return ''; } } diff --git a/src/Module/ReallySimpleDiscovery.php b/src/Module/ReallySimpleDiscovery.php index 8d6a6ff3c..fe071fc55 100644 --- a/src/Module/ReallySimpleDiscovery.php +++ b/src/Module/ReallySimpleDiscovery.php @@ -31,7 +31,7 @@ use Friendica\Util\XML; */ class ReallySimpleDiscovery extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { header('Content-Type: text/xml'); diff --git a/src/Module/Register.php b/src/Module/Register.php index 909e61a99..609e86a91 100644 --- a/src/Module/Register.php +++ b/src/Module/Register.php @@ -33,7 +33,6 @@ use Friendica\DI; use Friendica\Model; use Friendica\Model\User; use Friendica\Util\Proxy; -use Friendica\Util\Strings; /** * @author Hypolite Petovan @@ -44,6 +43,16 @@ class Register extends BaseModule const APPROVE = 1; const OPEN = 2; + /** @var Tos */ + protected $tos; + + public function __construct(Tos $tos, L10n $l10n, array $parameters = []) + { + parent::__construct($l10n, $parameters); + + $this->tos = $tos; + } + /** * Module GET method to display any content * @@ -53,7 +62,7 @@ class Register extends BaseModule * * @return string */ - public static function content(array $parameters = []) + public function content(): string { // logged in users can register others (people/pages/groups) // even with closed registrations, unless specifically prohibited by site policy. @@ -129,8 +138,6 @@ class Register extends BaseModule $tpl = $arr['template']; - $tos = new Tos(); - $o = Renderer::replaceMacros($tpl, [ '$invitations' => DI::config()->get('system', 'invitation_only'), '$permonly' => intval(DI::config()->get('config', 'register_policy')) === self::APPROVE, @@ -164,7 +171,7 @@ class Register extends BaseModule '$showtoslink' => DI::config()->get('system', 'tosdisplay'), '$tostext' => DI::l10n()->t('Terms of Service'), '$showprivstatement' => DI::config()->get('system', 'tosprivstatement'), - '$privstatement'=> $tos->privacy_complete, + '$privstatement'=> $this->tos->privacy_complete, '$form_security_token' => BaseModule::getFormSecurityToken('register'), '$explicit_content' => DI::config()->get('system', 'explicit_content', false), '$explicit_content_note' => DI::l10n()->t('Note: This node explicitly contains adult content'), @@ -182,7 +189,7 @@ class Register extends BaseModule * Extend this method if the module is supposed to process POST requests. * Doesn't display any content */ - public static function post(array $parameters = []) + public function post() { BaseModule::checkFormSecurityTokenRedirectOnError('/register', 'register'); diff --git a/src/Module/RemoteFollow.php b/src/Module/RemoteFollow.php index f1e653f1c..bc42998e3 100644 --- a/src/Module/RemoteFollow.php +++ b/src/Module/RemoteFollow.php @@ -21,9 +21,11 @@ namespace Friendica\Module; +use Friendica\App\BaseURL; +use Friendica\App\Page; use Friendica\BaseModule; use Friendica\Content\Widget; -use Friendica\DI; +use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Protocol; use Friendica\Core\Renderer; @@ -40,83 +42,93 @@ use Friendica\Network\Probe; */ class RemoteFollow extends BaseModule { - static $owner; + /** @var array */ + protected $owner; + /** @var Page */ + protected $page; + /** @var BaseURL */ + protected $baseUrl; - public static function init(array $parameters = []) + public function __construct(L10n $l10n, Page $page, BaseURL $baseUrl, array $parameters = []) { - self::$owner = User::getOwnerDataByNick($parameters['profile']); - if (!self::$owner) { - throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.')); + parent::__construct($l10n, $parameters); + + $this->owner = User::getOwnerDataByNick($this->parameters['profile']); + if (!$this->owner) { + throw new HTTPException\NotFoundException($this->t('User not found.')); } - DI::page()['aside'] = Widget\VCard::getHTML(self::$owner); + $this->baseUrl = $baseUrl; + $this->page = $page; } - public static function post(array $parameters = []) + public function post() { if (!empty($_POST['cancel']) || empty($_POST['dfrn_url'])) { - DI::baseUrl()->redirect(); + $this->baseUrl->redirect(); } - if (empty(self::$owner)) { - notice(DI::l10n()->t('Profile unavailable.')); + if (empty($this->owner)) { + notice($this->t('Profile unavailable.')); return; } $url = Probe::cleanURI($_POST['dfrn_url']); if (!strlen($url)) { - notice(DI::l10n()->t("Invalid locator")); + notice($this->t("Invalid locator")); return; } // Detect the network, make sure the provided URL is valid $data = Contact::getByURL($url); if (!$data) { - notice(DI::l10n()->t("The provided profile link doesn't seem to be valid")); + notice($this->t("The provided profile link doesn't seem to be valid")); return; } if (empty($data['subscribe'])) { - notice(DI::l10n()->t("Remote subscription can't be done for your network. Please subscribe directly on your system.")); + notice($this->t("Remote subscription can't be done for your network. Please subscribe directly on your system.")); return; } - Logger::notice('Remote request', ['url' => $url, 'follow' => self::$owner['url'], 'remote' => $data['subscribe']]); + Logger::notice('Remote request', ['url' => $url, 'follow' => $this->owner['url'], 'remote' => $data['subscribe']]); // Substitute our user's feed URL into $data['subscribe'] // Send the subscriber home to subscribe // Diaspora needs the uri in the format user@domain.tld if ($data['network'] == Protocol::DIASPORA) { - $uri = urlencode(self::$owner['addr']); + $uri = urlencode($this->owner['addr']); } else { - $uri = urlencode(self::$owner['url']); + $uri = urlencode($this->owner['url']); } $follow_link = str_replace('{uri}', $uri, $data['subscribe']); System::externalRedirect($follow_link); } - public static function content(array $parameters = []) + public function content(): string { - if (empty(self::$owner)) { + if (empty($this->owner)) { return ''; } - - $target_addr = self::$owner['addr']; - $target_url = self::$owner['url']; + + $this->page['aside'] = Widget\VCard::getHTML($this->owner); + + $target_addr = $this->owner['addr']; + $target_url = $this->owner['url']; $tpl = Renderer::getMarkupTemplate('auto_request.tpl'); $o = Renderer::replaceMacros($tpl, [ - '$header' => DI::l10n()->t('Friend/Connection Request'), - '$page_desc' => DI::l10n()->t('Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.', $target_addr, $target_url), - '$invite_desc' => DI::l10n()->t('If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.', Search::getGlobalDirectory() . '/servers'), - '$your_address' => DI::l10n()->t('Your Webfinger address or profile URL:'), - '$pls_answer' => DI::l10n()->t('Please answer the following:'), - '$submit' => DI::l10n()->t('Submit Request'), - '$cancel' => DI::l10n()->t('Cancel'), + '$header' => $this->t('Friend/Connection Request'), + '$page_desc' => $this->t('Enter your Webfinger address (user@domain.tld) or profile URL here. If this isn\'t supported by your system, you have to subscribe to %s or %s directly on your system.', $target_addr, $target_url), + '$invite_desc' => $this->t('If you are not yet a member of the free social web, follow this link to find a public Friendica node and join us today.', Search::getGlobalDirectory() . '/servers'), + '$your_address' => $this->t('Your Webfinger address or profile URL:'), + '$pls_answer' => $this->t('Please answer the following:'), + '$submit' => $this->t('Submit Request'), + '$cancel' => $this->t('Cancel'), - '$request' => 'remote_follow/' . $parameters['profile'], - '$name' => self::$owner['name'], + '$request' => 'remote_follow/' . $this->parameters['profile'], + '$name' => $this->owner['name'], '$myaddr' => Profile::getMyURL(), ]); return $o; diff --git a/src/Module/RobotsTxt.php b/src/Module/RobotsTxt.php index 63abcf36e..ec7ee086e 100644 --- a/src/Module/RobotsTxt.php +++ b/src/Module/RobotsTxt.php @@ -28,7 +28,7 @@ use Friendica\BaseModule; */ class RobotsTxt extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $allDisalloweds = [ '/settings/', diff --git a/src/Module/Search/Acl.php b/src/Module/Search/Acl.php index 636e09539..0866b5f9a 100644 --- a/src/Module/Search/Acl.php +++ b/src/Module/Search/Acl.php @@ -48,7 +48,7 @@ class Acl extends BaseModule const TYPE_PRIVATE_MESSAGE = 'm'; const TYPE_ANY_CONTACT = 'a'; - public static function rawContent(array $parameters = []) + public function rawContent() { if (!local_user()) { throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this module.')); diff --git a/src/Module/Search/Directory.php b/src/Module/Search/Directory.php index 692122155..bbd90f137 100644 --- a/src/Module/Search/Directory.php +++ b/src/Module/Search/Directory.php @@ -31,7 +31,7 @@ use Friendica\Module\Security\Login; */ class Directory extends BaseSearch { - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { notice(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Search/Filed.php b/src/Module/Search/Filed.php index 7bfc14f6f..519b0ece0 100644 --- a/src/Module/Search/Filed.php +++ b/src/Module/Search/Filed.php @@ -17,7 +17,7 @@ use Friendica\Module\Security\Login; class Filed extends BaseSearch { - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form(); diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php index 769d5f90d..2118aeaae 100644 --- a/src/Module/Search/Index.php +++ b/src/Module/Search/Index.php @@ -41,7 +41,7 @@ use Friendica\Network\HTTPException; class Index extends BaseSearch { - public static function content(array $parameters = []) + public function content(): string { $search = (!empty($_GET['q']) ? trim(rawurldecode($_GET['q'])) : ''); diff --git a/src/Module/Search/Saved.php b/src/Module/Search/Saved.php index d5cc15cee..c94183367 100644 --- a/src/Module/Search/Saved.php +++ b/src/Module/Search/Saved.php @@ -21,16 +21,34 @@ namespace Friendica\Module\Search; +use Friendica\App\Arguments; +use Friendica\App\BaseURL; use Friendica\BaseModule; +use Friendica\Core\L10n; use Friendica\Core\Search; -use Friendica\Database\DBA; -use Friendica\DI; +use Friendica\Database\Database; class Saved extends BaseModule { - public static function init(array $parameters = []) + /** @var Arguments */ + protected $args; + /** @var Database */ + protected $dba; + /** @var BaseURL */ + protected $baseUrl; + + public function __construct(BaseURL $baseUrl, Database $dba, Arguments $args, L10n $l10n, array $parameters = []) { - $action = DI::args()->get(2, 'none'); + parent::__construct($l10n, $parameters); + + $this->baseUrl = $baseUrl; + $this->dba = $dba; + $this->args = $args; + } + + public function rawContent() + { + $action = $this->args->get(2, 'none'); $search = trim(rawurldecode($_GET['term'] ?? '')); $return_url = $_GET['return_url'] ?? Search::getSearchPath($search); @@ -39,23 +57,23 @@ class Saved extends BaseModule switch ($action) { case 'add': $fields = ['uid' => local_user(), 'term' => $search]; - if (!DBA::exists('search', $fields)) { - if (!DBA::insert('search', $fields)) { - notice(DI::l10n()->t('Search term was not saved.')); + if (!$this->dba->exists('search', $fields)) { + if (!$this->dba->insert('search', $fields)) { + notice($this->t('Search term was not saved.')); } } else { - notice(DI::l10n()->t('Search term already saved.')); + notice($this->t('Search term already saved.')); } break; case 'remove': - if (!DBA::delete('search', ['uid' => local_user(), 'term' => $search])) { - notice(DI::l10n()->t('Search term was not removed.')); + if (!$this->dba->delete('search', ['uid' => local_user(), 'term' => $search])) { + notice($this->t('Search term was not removed.')); } break; } } - DI::baseUrl()->redirect($return_url); + $this->baseUrl->redirect($return_url); } } diff --git a/src/Module/Security/Login.php b/src/Module/Security/Login.php index 0e4923480..5c47e9749 100644 --- a/src/Module/Security/Login.php +++ b/src/Module/Security/Login.php @@ -33,7 +33,7 @@ use Friendica\Module\Register; */ class Login extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $return_path = $_REQUEST['return_path'] ?? '' ; @@ -46,7 +46,7 @@ class Login extends BaseModule return self::form(Session::get('return_path'), intval(DI::config()->get('config', 'register_policy')) !== \Friendica\Module\Register::CLOSED); } - public static function post(array $parameters = []) + public function post() { $return_path = Session::get('return_path'); Session::clear(); diff --git a/src/Module/Security/Logout.php b/src/Module/Security/Logout.php index 1724ae297..61b32c28b 100644 --- a/src/Module/Security/Logout.php +++ b/src/Module/Security/Logout.php @@ -21,11 +21,15 @@ namespace Friendica\Module\Security; +use Friendica\App\BaseURL; use Friendica\BaseModule; +use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\Hook; +use Friendica\Core\L10n; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\System; -use Friendica\DI; use Friendica\Model\Profile; +use Friendica\Model\User\Cookie; use Friendica\Security\TwoFactor; /** @@ -33,33 +37,55 @@ use Friendica\Security\TwoFactor; */ class Logout extends BaseModule { + /** @var ICanCache */ + protected $cache; + /** @var Cookie */ + protected $cookie; + /** @var IHandleSessions */ + protected $session; + /** @var BaseURL */ + protected $baseUrl; + /** @var TwoFactor\Repository\TrustedBrowser */ + protected $trustedBrowserRepo; + + public function __construct(TwoFactor\Repository\TrustedBrowser $trustedBrowserRepo, ICanCache $cache, Cookie $cookie, IHandleSessions $session, BaseURL $baseUrl, L10n $l10n, array $parameters = []) + { + parent::__construct($l10n, $parameters); + + $this->cache = $cache; + $this->cookie = $cookie; + $this->session = $session; + $this->baseUrl = $baseUrl; + $this->trustedBrowserRepo = $trustedBrowserRepo; + } + + /** * Process logout requests */ - public static function init(array $parameters = []) + public function rawContent() { $visitor_home = null; if (remote_user()) { $visitor_home = Profile::getMyURL(); - DI::cache()->delete('zrlInit:' . $visitor_home); + $this->cache->delete('zrlInit:' . $visitor_home); } Hook::callAll("logging_out"); // Remove this trusted browser as it won't be able to be used ever again after the cookie is cleared - if (DI::cookie()->get('trusted')) { - $trustedBrowserRepository = new TwoFactor\Repository\TrustedBrowser(DI::dba(), DI::logger()); - $trustedBrowserRepository->removeForUser(local_user(), DI::cookie()->get('trusted')); + if ($this->cookie->get('trusted')) { + $this->trustedBrowserRepo->removeForUser(local_user(), $this->cookie->get('trusted')); } - DI::cookie()->clear(); - DI::session()->clear(); + $this->cookie->clear(); + $this->session->clear(); if ($visitor_home) { System::externalRedirect($visitor_home); } else { - info(DI::l10n()->t('Logged out.')); - DI::baseUrl()->redirect(); + info($this->t('Logged out.')); + $this->baseUrl->redirect(); } } } diff --git a/src/Module/Security/OpenID.php b/src/Module/Security/OpenID.php index 8e8613c4e..360c9c672 100644 --- a/src/Module/Security/OpenID.php +++ b/src/Module/Security/OpenID.php @@ -31,7 +31,7 @@ use LightOpenID; */ class OpenID extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { if (DI::config()->get('system', 'no_openid')) { DI::baseUrl()->redirect(); @@ -97,5 +97,7 @@ class OpenID extends BaseModule DI::baseUrl()->redirect('login'); } } + + return ''; } } diff --git a/src/Module/Security/TwoFactor/Recovery.php b/src/Module/Security/TwoFactor/Recovery.php index d93146cb6..60de6e404 100644 --- a/src/Module/Security/TwoFactor/Recovery.php +++ b/src/Module/Security/TwoFactor/Recovery.php @@ -21,11 +21,13 @@ namespace Friendica\Module\Security\TwoFactor; +use Friendica\App; use Friendica\BaseModule; +use Friendica\Core\L10n; use Friendica\Core\Renderer; -use Friendica\Core\Session; -use Friendica\DI; +use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Model\User; +use Friendica\Security\Authentication; use Friendica\Security\TwoFactor\Model\RecoveryCode; /** @@ -35,14 +37,26 @@ use Friendica\Security\TwoFactor\Model\RecoveryCode; */ class Recovery extends BaseModule { - public static function init(array $parameters = []) + /** @var IHandleSessions */ + protected $session; + /** @var App */ + protected $app; + /** @var App\BaseURL */ + protected $baseUrl; + /** @var Authentication */ + protected $auth; + + public function __construct(App $app, App\BaseURL $baseUrl, Authentication $auth, IHandleSessions $session, L10n $l10n, array $parameters = []) { - if (!local_user()) { - return; - } + parent::__construct($l10n, $parameters); + + $this->app = $app; + $this->baseUrl = $baseUrl; + $this->auth = $auth; + $this->session = $session; } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -51,41 +65,39 @@ class Recovery extends BaseModule if (($_POST['action'] ?? '') == 'recover') { self::checkFormSecurityTokenRedirectOnError('2fa', 'twofactor_recovery'); - $a = DI::app(); - $recovery_code = $_POST['recovery_code'] ?? ''; if (RecoveryCode::existsForUser(local_user(), $recovery_code)) { RecoveryCode::markUsedForUser(local_user(), $recovery_code); - Session::set('2fa', true); - info(DI::l10n()->t('Remaining recovery codes: %d', RecoveryCode::countValidForUser(local_user()))); + $this->session->set('2fa', true); + info($this->t('Remaining recovery codes: %d', RecoveryCode::countValidForUser(local_user()))); - DI::auth()->setForUser($a, User::getById($a->getLoggedInUserId()), true, true); + $this->auth->setForUser($this->app, User::getById($this->app->getLoggedInUserId()), true, true); } else { - notice(DI::l10n()->t('Invalid code, please retry.')); + notice($this->t('Invalid code, please retry.')); } } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { - DI::baseUrl()->redirect(); + $this->baseUrl->redirect(); } // Already authenticated with 2FA token - if (Session::get('2fa')) { - DI::baseUrl()->redirect(); + if ($this->session->get('2fa')) { + $this->baseUrl->redirect(); } return Renderer::replaceMacros(Renderer::getMarkupTemplate('twofactor/recovery.tpl'), [ '$form_security_token' => self::getFormSecurityToken('twofactor_recovery'), - '$title' => DI::l10n()->t('Two-factor recovery'), - '$message' => DI::l10n()->t('

You can enter one of your one-time recovery codes in case you lost access to your mobile device.

'), - '$recovery_message' => DI::l10n()->t('Don’t have your phone? Enter a two-factor recovery code', '2fa/recovery'), - '$recovery_code' => ['recovery_code', DI::l10n()->t('Please enter a recovery code'), '', '', '', 'placeholder="000000-000000"'], - '$recovery_label' => DI::l10n()->t('Submit recovery code and complete login'), + '$title' => $this->t('Two-factor recovery'), + '$message' => $this->t('

You can enter one of your one-time recovery codes in case you lost access to your mobile device.

'), + '$recovery_message' => $this->t('Don’t have your phone? Enter a two-factor recovery code', '2fa/recovery'), + '$recovery_code' => ['recovery_code', $this->t('Please enter a recovery code'), '', '', '', 'placeholder="000000-000000"'], + '$recovery_label' => $this->t('Submit recovery code and complete login'), ]); } } diff --git a/src/Module/Security/TwoFactor/Verify.php b/src/Module/Security/TwoFactor/Verify.php index 22c757b82..3669943ba 100644 --- a/src/Module/Security/TwoFactor/Verify.php +++ b/src/Module/Security/TwoFactor/Verify.php @@ -38,7 +38,7 @@ class Verify extends BaseModule { private static $errors = []; - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -78,7 +78,7 @@ class Verify extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { DI::baseUrl()->redirect(); diff --git a/src/Module/Settings/Delegation.php b/src/Module/Settings/Delegation.php index 067304ee8..a2e458839 100644 --- a/src/Module/Settings/Delegation.php +++ b/src/Module/Settings/Delegation.php @@ -36,7 +36,7 @@ use Friendica\Util\Strings; */ class Delegation extends BaseSettings { - public static function post(array $parameters = []) + public function post() { if (!DI::app()->isLoggedIn()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); @@ -62,9 +62,9 @@ class Delegation extends BaseSettings DBA::update('user', ['parent-uid' => $parent_uid], ['uid' => local_user()]); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Settings/Display.php b/src/Module/Settings/Display.php index 5429a11e2..aab8f864b 100644 --- a/src/Module/Settings/Display.php +++ b/src/Module/Settings/Display.php @@ -36,7 +36,7 @@ use Friendica\Network\HTTPException; */ class Display extends BaseSettings { - public static function post(array $parameters = []) + public function post() { if (!DI::app()->isLoggedIn()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); @@ -112,9 +112,9 @@ class Display extends BaseSettings DI::baseUrl()->redirect('settings/display'); } - public static function content(array $parameters = []) + public function content(): string { - parent::content($parameters); + parent::content(); if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index 28e8430ea..161c440b6 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -41,7 +41,7 @@ use Friendica\Util\Temporal; class Index extends BaseSettings { - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -135,7 +135,7 @@ class Index extends BaseSettings DI::baseUrl()->redirect('settings/profile'); } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { notice(DI::l10n()->t('You must be logged in to use this module')); diff --git a/src/Module/Settings/Profile/Photo/Crop.php b/src/Module/Settings/Profile/Photo/Crop.php index 104b6f653..3b5f109d7 100644 --- a/src/Module/Settings/Profile/Photo/Crop.php +++ b/src/Module/Settings/Profile/Photo/Crop.php @@ -33,13 +33,13 @@ use Friendica\Network\HTTPException; class Crop extends BaseSettings { - public static function post(array $parameters = []) + public function post() { if (!Session::isAuthenticated()) { return; } - $photo_prefix = $parameters['guid']; + $photo_prefix = $this->parameters['guid']; $resource_id = $photo_prefix; $scale = 0; if (substr($photo_prefix, -2, 1) == '-') { @@ -160,7 +160,7 @@ class Crop extends BaseSettings DI::baseUrl()->redirect($path); } - public static function content(array $parameters = []) + public function content(): string { if (!Session::isAuthenticated()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); @@ -168,7 +168,7 @@ class Crop extends BaseSettings parent::content(); - $resource_id = $parameters['guid']; + $resource_id = $this->parameters['guid']; $photos = Photo::selectToArray([], ['resource-id' => $resource_id, 'uid' => local_user()], ['order' => ['scale' => false]]); if (!DBA::isResult($photos)) { diff --git a/src/Module/Settings/Profile/Photo/Index.php b/src/Module/Settings/Profile/Photo/Index.php index cda71a7c6..2e65a01c6 100644 --- a/src/Module/Settings/Profile/Photo/Index.php +++ b/src/Module/Settings/Profile/Photo/Index.php @@ -34,7 +34,7 @@ use Friendica\Util\Strings; class Index extends BaseSettings { - public static function post(array $parameters = []) + public function post() { if (!Session::isAuthenticated()) { return; @@ -106,7 +106,7 @@ class Index extends BaseSettings DI::baseUrl()->redirect('settings/profile/photo/crop/' . $resource_id); } - public static function content(array $parameters = []) + public function content(): string { if (!Session::isAuthenticated()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Settings/TwoFactor/AppSpecific.php b/src/Module/Settings/TwoFactor/AppSpecific.php index 29d6b19c5..21db4f8ab 100644 --- a/src/Module/Settings/TwoFactor/AppSpecific.php +++ b/src/Module/Settings/TwoFactor/AppSpecific.php @@ -21,8 +21,10 @@ namespace Friendica\Module\Settings\TwoFactor; +use Friendica\App\BaseURL; +use Friendica\Core\L10n; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Security\TwoFactor\Model\AppSpecificPassword; use Friendica\Module\BaseSettings; use Friendica\Module\Security\Login; @@ -34,27 +36,37 @@ use Friendica\Module\Security\Login; */ class AppSpecific extends BaseSettings { - private static $appSpecificPassword = null; + private $appSpecificPassword = null; - public static function init(array $parameters = []) + /** @var IManagePersonalConfigValues */ + protected $pConfig; + /** @var BaseURL */ + protected $baseUrl; + + public function __construct(IManagePersonalConfigValues $pConfig, BaseURL $baseUrl, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->pConfig = $pConfig; + $this->baseUrl = $baseUrl; + if (!local_user()) { return; } - $verified = DI::pConfig()->get(local_user(), '2fa', 'verified'); + $verified = $this->pConfig->get(local_user(), '2fa', 'verified'); if (!$verified) { - DI::baseUrl()->redirect('settings/2fa'); + $this->baseUrl->redirect('settings/2fa'); } if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { - notice(DI::l10n()->t('Please enter your password to access this page.')); - DI::baseUrl()->redirect('settings/2fa'); + notice($this->t('Please enter your password to access this page.')); + $this->baseUrl->redirect('settings/2fa'); } } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -67,21 +79,21 @@ class AppSpecific extends BaseSettings case 'generate': $description = $_POST['description'] ?? ''; if (empty($description)) { - notice(DI::l10n()->t('App-specific password generation failed: The description is empty.')); - DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); + notice($this->t('App-specific password generation failed: The description is empty.')); + $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); } elseif (AppSpecificPassword::checkDuplicateForUser(local_user(), $description)) { - notice(DI::l10n()->t('App-specific password generation failed: This description already exists.')); - DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); + notice($this->t('App-specific password generation failed: This description already exists.')); + $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); } else { - self::$appSpecificPassword = AppSpecificPassword::generateForUser(local_user(), $_POST['description'] ?? ''); - info(DI::l10n()->t('New app-specific password generated.')); + $this->appSpecificPassword = AppSpecificPassword::generateForUser(local_user(), $_POST['description'] ?? ''); + info($this->t('New app-specific password generated.')); } break; case 'revoke_all' : AppSpecificPassword::deleteAllForUser(local_user()); - info(DI::l10n()->t('App-specific passwords successfully revoked.')); - DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); + info($this->t('App-specific passwords successfully revoked.')); + $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); break; } } @@ -90,20 +102,20 @@ class AppSpecific extends BaseSettings self::checkFormSecurityTokenRedirectOnError('settings/2fa/app_specific', 'settings_2fa_app_specific'); if (AppSpecificPassword::deleteForUser(local_user(), $_POST['revoke_id'])) { - info(DI::l10n()->t('App-specific password successfully revoked.')); + info($this->t('App-specific password successfully revoked.')); } - DI::baseUrl()->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); + $this->baseUrl->redirect('settings/2fa/app_specific?t=' . self::getFormSecurityToken('settings_2fa_password')); } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form('settings/2fa/app_specific'); } - parent::content($parameters); + parent::content(); $appSpecificPasswords = AppSpecificPassword::getListForUser(local_user()); @@ -111,22 +123,22 @@ class AppSpecific extends BaseSettings '$form_security_token' => self::getFormSecurityToken('settings_2fa_app_specific'), '$password_security_token' => self::getFormSecurityToken('settings_2fa_password'), - '$title' => DI::l10n()->t('Two-factor app-specific passwords'), - '$help_label' => DI::l10n()->t('Help'), - '$message' => DI::l10n()->t('

App-specific passwords are randomly generated passwords used instead your regular password to authenticate your account on third-party applications that don\'t support two-factor authentication.

'), - '$generated_message' => DI::l10n()->t('Make sure to copy your new app-specific password now. You won’t be able to see it again!'), - '$generated_app_specific_password' => self::$appSpecificPassword, + '$title' => $this->t('Two-factor app-specific passwords'), + '$help_label' => $this->t('Help'), + '$message' => $this->t('

App-specific passwords are randomly generated passwords used instead your regular password to authenticate your account on third-party applications that don\'t support two-factor authentication.

'), + '$generated_message' => $this->t('Make sure to copy your new app-specific password now. You won’t be able to see it again!'), + '$generated_app_specific_password' => $this->appSpecificPassword, - '$description_label' => DI::l10n()->t('Description'), - '$last_used_label' => DI::l10n()->t('Last Used'), - '$revoke_label' => DI::l10n()->t('Revoke'), - '$revoke_all_label' => DI::l10n()->t('Revoke All'), + '$description_label' => $this->t('Description'), + '$last_used_label' => $this->t('Last Used'), + '$revoke_label' => $this->t('Revoke'), + '$revoke_all_label' => $this->t('Revoke All'), '$app_specific_passwords' => $appSpecificPasswords, - '$generate_message' => DI::l10n()->t('When you generate a new app-specific password, you must use it right away, it will be shown to you once after you generate it.'), - '$generate_title' => DI::l10n()->t('Generate new app-specific password'), - '$description_placeholder_label' => DI::l10n()->t('Friendiqa on my Fairphone 2...'), - '$generate_label' => DI::l10n()->t('Generate'), + '$generate_message' => $this->t('When you generate a new app-specific password, you must use it right away, it will be shown to you once after you generate it.'), + '$generate_title' => $this->t('Generate new app-specific password'), + '$description_placeholder_label' => $this->t('Friendiqa on my Fairphone 2...'), + '$generate_label' => $this->t('Generate'), ]); } } diff --git a/src/Module/Settings/TwoFactor/Index.php b/src/Module/Settings/TwoFactor/Index.php index 3bb3a2aa1..0dcef14ad 100644 --- a/src/Module/Settings/TwoFactor/Index.php +++ b/src/Module/Settings/TwoFactor/Index.php @@ -33,7 +33,7 @@ use PragmaRX\Google2FA\Google2FA; class Index extends BaseSettings { - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -94,13 +94,13 @@ class Index extends BaseSettings } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form('settings/2fa'); } - parent::content($parameters); + parent::content(); $has_secret = (bool) DI::pConfig()->get(local_user(), '2fa', 'secret'); $verified = DI::pConfig()->get(local_user(), '2fa', 'verified'); diff --git a/src/Module/Settings/TwoFactor/Recovery.php b/src/Module/Settings/TwoFactor/Recovery.php index eac3da919..961c2cd90 100644 --- a/src/Module/Settings/TwoFactor/Recovery.php +++ b/src/Module/Settings/TwoFactor/Recovery.php @@ -21,8 +21,10 @@ namespace Friendica\Module\Settings\TwoFactor; +use Friendica\App\BaseURL; +use Friendica\Core\L10n; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Security\TwoFactor\Model\RecoveryCode; use Friendica\Module\BaseSettings; use Friendica\Module\Security\Login; @@ -34,25 +36,35 @@ use Friendica\Module\Security\Login; */ class Recovery extends BaseSettings { - public static function init(array $parameters = []) + /** @var IManagePersonalConfigValues */ + protected $pConfig; + /** @var BaseURL */ + protected $baseUrl; + + public function __construct(IManagePersonalConfigValues $pConfig, BaseURL $baseUrl, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->pConfig = $pConfig; + $this->baseUrl = $baseUrl; + if (!local_user()) { return; } - $secret = DI::pConfig()->get(local_user(), '2fa', 'secret'); + $secret = $this->pConfig->get(local_user(), '2fa', 'secret'); if (!$secret) { - DI::baseUrl()->redirect('settings/2fa'); + $this->baseUrl->redirect('settings/2fa'); } if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { - notice(DI::l10n()->t('Please enter your password to access this page.')); - DI::baseUrl()->redirect('settings/2fa'); + notice($this->t('Please enter your password to access this page.')); + $this->baseUrl->redirect('settings/2fa'); } } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -63,19 +75,19 @@ class Recovery extends BaseSettings if ($_POST['action'] == 'regenerate') { RecoveryCode::regenerateForUser(local_user()); - info(DI::l10n()->t('New recovery codes successfully generated.')); - DI::baseUrl()->redirect('settings/2fa/recovery?t=' . self::getFormSecurityToken('settings_2fa_password')); + info($this->t('New recovery codes successfully generated.')); + $this->baseUrl->redirect('settings/2fa/recovery?t=' . self::getFormSecurityToken('settings_2fa_password')); } } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form('settings/2fa/recovery'); } - parent::content($parameters); + parent::content(); if (!RecoveryCode::countValidForUser(local_user())) { RecoveryCode::generateForUser(local_user()); @@ -83,20 +95,20 @@ class Recovery extends BaseSettings $recoveryCodes = RecoveryCode::getListForUser(local_user()); - $verified = DI::pConfig()->get(local_user(), '2fa', 'verified'); + $verified = $this->pConfig->get(local_user(), '2fa', 'verified'); return Renderer::replaceMacros(Renderer::getMarkupTemplate('settings/twofactor/recovery.tpl'), [ '$form_security_token' => self::getFormSecurityToken('settings_2fa_recovery'), '$password_security_token' => self::getFormSecurityToken('settings_2fa_password'), - '$title' => DI::l10n()->t('Two-factor recovery codes'), - '$help_label' => DI::l10n()->t('Help'), - '$message' => DI::l10n()->t('

Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.

Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.

'), + '$title' => $this->t('Two-factor recovery codes'), + '$help_label' => $this->t('Help'), + '$message' => $this->t('

Recovery codes can be used to access your account in the event you lose access to your device and cannot receive two-factor authentication codes.

Put these in a safe spot! If you lose your device and don’t have the recovery codes you will lose access to your account.

'), '$recovery_codes' => $recoveryCodes, - '$regenerate_message' => DI::l10n()->t('When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore.'), - '$regenerate_label' => DI::l10n()->t('Generate new recovery codes'), + '$regenerate_message' => $this->t('When you generate new recovery codes, you must copy the new codes. Your old codes won’t work anymore.'), + '$regenerate_label' => $this->t('Generate new recovery codes'), '$verified' => $verified, - '$verify_label' => DI::l10n()->t('Next: Verification'), + '$verify_label' => $this->t('Next: Verification'), ]); } } diff --git a/src/Module/Settings/TwoFactor/Trusted.php b/src/Module/Settings/TwoFactor/Trusted.php index 753250941..e38d64ac0 100644 --- a/src/Module/Settings/TwoFactor/Trusted.php +++ b/src/Module/Settings/TwoFactor/Trusted.php @@ -2,8 +2,10 @@ namespace Friendica\Module\Settings\TwoFactor; +use Friendica\App\BaseURL; +use Friendica\Core\L10n; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Renderer; -use Friendica\DI; use Friendica\Module\BaseSettings; use Friendica\Security\TwoFactor; use Friendica\Util\Temporal; @@ -14,40 +16,51 @@ use UAParser\Parser; */ class Trusted extends BaseSettings { - public static function init(array $parameters = []) + /** @var IManagePersonalConfigValues */ + protected $pConfig; + /** @var BaseURL */ + protected $baseUrl; + /** @var TwoFactor\Repository\TrustedBrowser */ + protected $trustedBrowserRepo; + + public function __construct(IManagePersonalConfigValues $pConfig, BaseURL $baseUrl, TwoFactor\Repository\TrustedBrowser $trustedBrowserRepo, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->pConfig = $pConfig; + $this->baseUrl = $baseUrl; + $this->trustedBrowserRepo = $trustedBrowserRepo; + if (!local_user()) { return; } - $verified = DI::pConfig()->get(local_user(), '2fa', 'verified'); + $verified = $this->pConfig->get(local_user(), '2fa', 'verified'); if (!$verified) { - DI::baseUrl()->redirect('settings/2fa'); + $this->baseUrl->redirect('settings/2fa'); } if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { - notice(DI::l10n()->t('Please enter your password to access this page.')); - DI::baseUrl()->redirect('settings/2fa'); + notice($this->t('Please enter your password to access this page.')); + $this->baseUrl->redirect('settings/2fa'); } } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; } - $trustedBrowserRepository = new TwoFactor\Repository\TrustedBrowser(DI::dba(), DI::logger()); - if (!empty($_POST['action'])) { self::checkFormSecurityTokenRedirectOnError('settings/2fa/trusted', 'settings_2fa_trusted'); switch ($_POST['action']) { case 'remove_all' : - $trustedBrowserRepository->removeAllForUser(local_user()); - info(DI::l10n()->t('Trusted browsers successfully removed.')); - DI::baseUrl()->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password')); + $this->trustedBrowserRepo->removeAllForUser(local_user()); + info($this->t('Trusted browsers successfully removed.')); + $this->baseUrl->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password')); break; } } @@ -55,21 +68,20 @@ class Trusted extends BaseSettings if (!empty($_POST['remove_id'])) { self::checkFormSecurityTokenRedirectOnError('settings/2fa/trusted', 'settings_2fa_trusted'); - if ($trustedBrowserRepository->removeForUser(local_user(), $_POST['remove_id'])) { - info(DI::l10n()->t('Trusted browser successfully removed.')); + if ($this->trustedBrowserRepo->removeForUser(local_user(), $_POST['remove_id'])) { + info($this->t('Trusted browser successfully removed.')); } - DI::baseUrl()->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password')); + $this->baseUrl->redirect('settings/2fa/trusted?t=' . self::getFormSecurityToken('settings_2fa_password')); } } - public static function content(array $parameters = []): string + public function content(): string { - parent::content($parameters); + parent::content(); - $trustedBrowserRepository = new TwoFactor\Repository\TrustedBrowser(DI::dba(), DI::logger()); - $trustedBrowsers = $trustedBrowserRepository->selectAllByUid(local_user()); + $trustedBrowsers = $this->trustedBrowserRepo->selectAllByUid(local_user()); $parser = Parser::create(); @@ -94,15 +106,15 @@ class Trusted extends BaseSettings '$form_security_token' => self::getFormSecurityToken('settings_2fa_trusted'), '$password_security_token' => self::getFormSecurityToken('settings_2fa_password'), - '$title' => DI::l10n()->t('Two-factor Trusted Browsers'), - '$message' => DI::l10n()->t('Trusted browsers are individual browsers you chose to skip two-factor authentication to access Friendica. Please use this feature sparingly, as it can negate the benefit of two-factor authentication.'), - '$device_label' => DI::l10n()->t('Device'), - '$os_label' => DI::l10n()->t('OS'), - '$browser_label' => DI::l10n()->t('Browser'), - '$created_label' => DI::l10n()->t('Trusted'), - '$last_used_label' => DI::l10n()->t('Last Use'), - '$remove_label' => DI::l10n()->t('Remove'), - '$remove_all_label' => DI::l10n()->t('Remove All'), + '$title' => $this->t('Two-factor Trusted Browsers'), + '$message' => $this->t('Trusted browsers are individual browsers you chose to skip two-factor authentication to access Friendica. Please use this feature sparingly, as it can negate the benefit of two-factor authentication.'), + '$device_label' => $this->t('Device'), + '$os_label' => $this->t('OS'), + '$browser_label' => $this->t('Browser'), + '$created_label' => $this->t('Trusted'), + '$last_used_label' => $this->t('Last Use'), + '$remove_label' => $this->t('Remove'), + '$remove_all_label' => $this->t('Remove All'), '$trusted_browsers' => $trustedBrowserDisplay, ]); diff --git a/src/Module/Settings/TwoFactor/Verify.php b/src/Module/Settings/TwoFactor/Verify.php index a4106c260..93fdde920 100644 --- a/src/Module/Settings/TwoFactor/Verify.php +++ b/src/Module/Settings/TwoFactor/Verify.php @@ -25,9 +25,11 @@ use BaconQrCode\Renderer\Image\SvgImageBackEnd; use BaconQrCode\Renderer\ImageRenderer; use BaconQrCode\Renderer\RendererStyle\RendererStyle; use BaconQrCode\Writer; +use Friendica\App\BaseURL; +use Friendica\Core\L10n; +use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Renderer; use Friendica\Core\Session; -use Friendica\DI; use Friendica\Module\BaseSettings; use Friendica\Module\Security\Login; use PragmaRX\Google2FA\Google2FA; @@ -39,26 +41,36 @@ use PragmaRX\Google2FA\Google2FA; */ class Verify extends BaseSettings { - public static function init(array $parameters = []) + /** @var IManagePersonalConfigValues */ + protected $pConfig; + /** @var BaseURL */ + protected $baseUrl; + + public function __construct(IManagePersonalConfigValues $pConfig, BaseURL $baseUrl, L10n $l10n, array $parameters = []) { + parent::__construct($l10n, $parameters); + + $this->pConfig = $pConfig; + $this->baseUrl = $baseUrl; + if (!local_user()) { return; } - $secret = DI::pConfig()->get(local_user(), '2fa', 'secret'); - $verified = DI::pConfig()->get(local_user(), '2fa', 'verified'); + $secret = $this->pConfig->get(local_user(), '2fa', 'secret'); + $verified = $this->pConfig->get(local_user(), '2fa', 'verified'); if ($secret && $verified) { - DI::baseUrl()->redirect('settings/2fa'); + $this->baseUrl->redirect('settings/2fa'); } if (!self::checkFormSecurityToken('settings_2fa_password', 't')) { - notice(DI::l10n()->t('Please enter your password to access this page.')); - DI::baseUrl()->redirect('settings/2fa'); + notice($this->t('Please enter your password to access this page.')); + $this->baseUrl->redirect('settings/2fa'); } } - public static function post(array $parameters = []) + public function post() { if (!local_user()) { return; @@ -69,32 +81,32 @@ class Verify extends BaseSettings $google2fa = new Google2FA(); - $valid = $google2fa->verifyKey(DI::pConfig()->get(local_user(), '2fa', 'secret'), $_POST['verify_code'] ?? ''); + $valid = $google2fa->verifyKey($this->pConfig->get(local_user(), '2fa', 'secret'), $_POST['verify_code'] ?? ''); if ($valid) { - DI::pConfig()->set(local_user(), '2fa', 'verified', true); + $this->pConfig->set(local_user(), '2fa', 'verified', true); Session::set('2fa', true); - info(DI::l10n()->t('Two-factor authentication successfully activated.')); + info($this->t('Two-factor authentication successfully activated.')); - DI::baseUrl()->redirect('settings/2fa'); + $this->baseUrl->redirect('settings/2fa'); } else { - notice(DI::l10n()->t('Invalid code, please retry.')); + notice($this->t('Invalid code, please retry.')); } } } - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { return Login::form('settings/2fa/verify'); } - parent::content($parameters); + parent::content(); $company = 'Friendica'; $holder = Session::get('my_address'); - $secret = DI::pConfig()->get(local_user(), '2fa', 'secret'); + $secret = $this->pConfig->get(local_user(), '2fa', 'secret'); $otpauthUrl = (new Google2FA())->getQRCodeUrl($company, $holder, $secret); @@ -108,7 +120,7 @@ class Verify extends BaseSettings $shortOtpauthUrl = explode('?', $otpauthUrl)[0]; - $manual_message = DI::l10n()->t('

Or you can submit the authentication settings manually:

+ $manual_message = $this->t('

Or you can submit the authentication settings manually:

Issuer
%s
@@ -128,18 +140,18 @@ class Verify extends BaseSettings '$form_security_token' => self::getFormSecurityToken('settings_2fa_verify'), '$password_security_token' => self::getFormSecurityToken('settings_2fa_password'), - '$title' => DI::l10n()->t('Two-factor code verification'), - '$help_label' => DI::l10n()->t('Help'), - '$message' => DI::l10n()->t('

Please scan this QR Code with your authenticator app and submit the provided code.

'), + '$title' => $this->t('Two-factor code verification'), + '$help_label' => $this->t('Help'), + '$message' => $this->t('

Please scan this QR Code with your authenticator app and submit the provided code.

'), '$qrcode_image' => $qrcode_image, - '$qrcode_url_message' => DI::l10n()->t('

Or you can open the following URL in your mobile device:

%s

', $otpauthUrl, $shortOtpauthUrl), + '$qrcode_url_message' => $this->t('

Or you can open the following URL in your mobile device:

%s

', $otpauthUrl, $shortOtpauthUrl), '$manual_message' => $manual_message, '$company' => $company, '$holder' => $holder, '$secret' => $secret, - '$verify_code' => ['verify_code', DI::l10n()->t('Please enter a code from your authentication app'), '', '', DI::l10n()->t('Required'), 'autofocus autocomplete="off" placeholder="000000"'], - '$verify_label' => DI::l10n()->t('Verify code and enable two-factor authentication'), + '$verify_code' => ['verify_code', $this->t('Please enter a code from your authentication app'), '', '', $this->t('Required'), 'autofocus autocomplete="off" placeholder="000000"'], + '$verify_label' => $this->t('Verify code and enable two-factor authentication'), ]); } } diff --git a/src/Module/Settings/UserExport.php b/src/Module/Settings/UserExport.php index aad76c4fb..b5d79c4af 100644 --- a/src/Module/Settings/UserExport.php +++ b/src/Module/Settings/UserExport.php @@ -47,18 +47,17 @@ class UserExport extends BaseSettings * If there is an action required through the URL / path, react * accordingly and export the requested data. * - * @param array $parameters Router-supplied parameters * @return string * @throws HTTPException\ForbiddenException * @throws HTTPException\InternalServerErrorException */ - public static function content(array $parameters = []) + public function content(): string { if (!local_user()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); } - parent::content($parameters); + parent::content(); /** * options shown on "Export personal data" page @@ -84,10 +83,9 @@ class UserExport extends BaseSettings * to the browser which then offers a save / open dialog * to the user. * - * @param array $parameters Router-supplied parameters * @throws HTTPException\ForbiddenException */ - public static function rawContent(array $parameters = []) + public function rawContent() { if (!DI::app()->isLoggedIn()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); diff --git a/src/Module/Smilies.php b/src/Module/Smilies.php index 8ee641b5a..ded798005 100644 --- a/src/Module/Smilies.php +++ b/src/Module/Smilies.php @@ -33,7 +33,7 @@ use Friendica\DI; */ class Smilies extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { if (!empty(DI::args()->getArgv()[1]) && (DI::args()->getArgv()[1] === "json")) { $smilies = Content\Smilies::getList(); @@ -45,7 +45,7 @@ class Smilies extends BaseModule } } - public static function content(array $parameters = []) + public function content(): string { $smilies = Content\Smilies::getList(); $count = count($smilies['texts'] ?? []); diff --git a/src/Module/Special/HTTPException.php b/src/Module/Special/HTTPException.php index 3b771c3ac..44f48ff2e 100644 --- a/src/Module/Special/HTTPException.php +++ b/src/Module/Special/HTTPException.php @@ -65,7 +65,7 @@ class HTTPException * @param \Friendica\Network\HTTPException $e * @throws \Exception */ - public static function rawContent(\Friendica\Network\HTTPException $e) + public function rawContent(\Friendica\Network\HTTPException $e) { $content = ''; @@ -84,7 +84,7 @@ class HTTPException * @return string * @throws \Exception */ - public static function content(\Friendica\Network\HTTPException $e) + public function content(\Friendica\Network\HTTPException $e): string { header($_SERVER["SERVER_PROTOCOL"] . ' ' . $e->getCode() . ' ' . $e->getDescription()); diff --git a/src/Module/Statistics.php b/src/Module/Statistics.php index e9d9eca02..f4a1334d2 100644 --- a/src/Module/Statistics.php +++ b/src/Module/Statistics.php @@ -23,26 +23,35 @@ namespace Friendica\Module; use Friendica\BaseModule; use Friendica\Core\Addon; -use Friendica\DI; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; use Friendica\Network\HTTPException\NotFoundException; +use Psr\Log\LoggerInterface; class Statistics extends BaseModule { - public static function init(array $parameters = []) + /** @var IManageConfigValues */ + protected $config; + /** @var LoggerInterface */ + protected $logger; + + public function __construct(IManageConfigValues $config, LoggerInterface $logger, L10n $l10n, array $parameters = []) { - if (!DI::config()->get("system", "nodeinfo")) { + parent::__construct($l10n, $parameters); + + $this->logger = $logger; + $this->config = $config; + + if (!$this->config->get("system", "nodeinfo")) { throw new NotFoundException(); } } - public static function rawContent(array $parameters = []) + public function rawContent() { - $config = DI::config(); - $logger = DI::logger(); - $registration_open = - intval($config->get('config', 'register_policy')) !== Register::CLOSED - && !$config->get('config', 'invitation_only'); + intval($this->config->get('config', 'register_policy')) !== Register::CLOSED + && !$this->config->get('config', 'invitation_only'); /// @todo mark the "service" addons and load them dynamically here $services = [ @@ -59,20 +68,20 @@ class Statistics extends BaseModule ]; $statistics = array_merge([ - 'name' => $config->get('config', 'sitename'), + 'name' => $this->config->get('config', 'sitename'), 'network' => FRIENDICA_PLATFORM, 'version' => FRIENDICA_VERSION . '-' . DB_UPDATE_VERSION, 'registrations_open' => $registration_open, - 'total_users' => $config->get('nodeinfo', 'total_users'), - 'active_users_halfyear' => $config->get('nodeinfo', 'active_users_halfyear'), - 'active_users_monthly' => $config->get('nodeinfo', 'active_users_monthly'), - 'local_posts' => $config->get('nodeinfo', 'local_posts'), + 'total_users' => $this->config->get('nodeinfo', 'total_users'), + 'active_users_halfyear' => $this->config->get('nodeinfo', 'active_users_halfyear'), + 'active_users_monthly' => $this->config->get('nodeinfo', 'active_users_monthly'), + 'local_posts' => $this->config->get('nodeinfo', 'local_posts'), 'services' => $services, ], $services); header("Content-Type: application/json"); echo json_encode($statistics, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); - $logger->debug("statistics.", ['statistics' => $statistics]); + $this->logger->debug("statistics.", ['statistics' => $statistics]); exit(); } } diff --git a/src/Module/Theme.php b/src/Module/Theme.php index 1282fc783..6c164b5ba 100644 --- a/src/Module/Theme.php +++ b/src/Module/Theme.php @@ -30,11 +30,11 @@ use Friendica\Util\Strings; */ class Theme extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { header('Content-Type: text/css'); - $theme = Strings::sanitizeFilePathItem($parameters['theme']); + $theme = Strings::sanitizeFilePathItem($this->parameters['theme']); if (file_exists("view/theme/$theme/theme.php")) { require_once "view/theme/$theme/theme.php"; diff --git a/src/Module/ThemeDetails.php b/src/Module/ThemeDetails.php index 48c417412..5b931e117 100644 --- a/src/Module/ThemeDetails.php +++ b/src/Module/ThemeDetails.php @@ -29,7 +29,7 @@ use Friendica\Core\Theme; */ class ThemeDetails extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { if (!empty($_REQUEST['theme'])) { $theme = $_REQUEST['theme']; diff --git a/src/Module/ToggleMobile.php b/src/Module/ToggleMobile.php index 11e8259d5..a0fb2f88f 100644 --- a/src/Module/ToggleMobile.php +++ b/src/Module/ToggleMobile.php @@ -29,7 +29,7 @@ use Friendica\DI; */ class ToggleMobile extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $a = DI::app(); @@ -46,5 +46,7 @@ class ToggleMobile extends BaseModule } $a->redirect($address); + + return ''; } } diff --git a/src/Module/Tos.php b/src/Module/Tos.php index 34834d41c..1b7162753 100644 --- a/src/Module/Tos.php +++ b/src/Module/Tos.php @@ -21,10 +21,12 @@ namespace Friendica\Module; +use Friendica\App\BaseURL; use Friendica\BaseModule; +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Content\Text\BBCode; -use Friendica\DI; class Tos extends BaseModule { @@ -34,6 +36,11 @@ class Tos extends BaseModule public $privacy_delete; public $privacy_complete; + /** @var IManageConfigValues */ + protected $config; + /** @var BaseURL */ + protected $baseUrl; + /** * constructor for the module, initializing the text variables * @@ -41,28 +48,20 @@ class Tos extends BaseModule * be properties of the class, however cannot be set directly as the property * cannot depend on a function result when declaring the variable. **/ - public function __construct() + public function __construct(IManageConfigValues $config, BaseURL $baseUrl, L10n $l10n, array $parameters = []) { - $this->privacy_operate = DI::l10n()->t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'); - $this->privacy_distribute = DI::l10n()->t('This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts.'); - $this->privacy_delete = DI::l10n()->t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners.', DI::baseUrl()); + parent::__construct($l10n, $parameters); + + $this->config = $config; + $this->baseUrl = $baseUrl; + + $this->privacy_operate = $this->t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'); + $this->privacy_distribute = $this->t('This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts.'); + $this->privacy_delete = $this->t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners.', $this->baseUrl); // In some cases we don't need every single one of the above separate, but all in one block. // So here is an array to look over - $this->privacy_complete = [DI::l10n()->t('Privacy Statement'), $this->privacy_operate, $this->privacy_distribute, $this->privacy_delete]; - } - - /** - * initialize the TOS module. - * - * If this is a single user instance, we expect the user to know their - * dealings with their own node so a TOS is not necessary. - * - **/ - public static function init(array $parameters = []) - { - if (strlen(DI::config()->get('system','singleuser'))) { - DI::baseUrl()->redirect('profile/' . DI::config()->get('system','singleuser')); - } + $this->privacy_complete = [$this->t('Privacy Statement'), $this->privacy_operate, + $this->privacy_distribute, $this->privacy_delete]; } /** @@ -77,20 +76,25 @@ class Tos extends BaseModule * @return string * @throws \Friendica\Network\HTTPException\InternalServerErrorException */ - public static function content(array $parameters = []) { + public function content(): string + { + if (strlen($this->config->get('system', 'singleuser'))) { + $this->baseUrl->redirect('profile/' . $this->config->get('system', 'singleuser')); + } + $tpl = Renderer::getMarkupTemplate('tos.tpl'); - if (DI::config()->get('system', 'tosdisplay')) { + if ($this->config->get('system', 'tosdisplay')) { return Renderer::replaceMacros($tpl, [ - '$title' => DI::l10n()->t('Terms of Service'), - '$tostext' => BBCode::convert(DI::config()->get('system', 'tostext')), - '$displayprivstatement' => DI::config()->get('system', 'tosprivstatement'), - '$privstatementtitle' => DI::l10n()->t('Privacy Statement'), - '$privacy_operate' => DI::l10n()->t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), - '$privacy_distribute' => DI::l10n()->t('This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts.'), - '$privacy_delete' => DI::l10n()->t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners.', DI::baseUrl()) + '$title' => $this->t('Terms of Service'), + '$tostext' => BBCode::convert($this->config->get('system', 'tostext')), + '$displayprivstatement' => $this->config->get('system', 'tosprivstatement'), + '$privstatementtitle' => $this->t('Privacy Statement'), + '$privacy_operate' => $this->t('At the time of registration, and for providing communications between the user account and their contacts, the user has to provide a display name (pen name), an username (nickname) and a working email address. The names will be accessible on the profile page of the account by any visitor of the page, even if other profile details are not displayed. The email address will only be used to send the user notifications about interactions, but wont be visibly displayed. The listing of an account in the node\'s user directory or the global user directory is optional and can be controlled in the user settings, it is not necessary for communication.'), + '$privacy_distribute' => $this->t('This data is required for communication and is passed on to the nodes of the communication partners and is stored there. Users can enter additional private data that may be transmitted to the communication partners accounts.'), + '$privacy_delete' => $this->t('At any point in time a logged in user can export their account data from the account settings. If the user wants to delete their account they can do so at %1$s/removeme. The deletion of the account will be permanent. Deletion of the data will also be requested from the nodes of the communication partners.', $this->baseUrl) ]); } else { - return; + return ''; } } } diff --git a/src/Module/Update/Community.php b/src/Module/Update/Community.php index 78d6f0bd3..07ed5a610 100644 --- a/src/Module/Update/Community.php +++ b/src/Module/Update/Community.php @@ -33,9 +33,9 @@ use Friendica\Module\Conversation\Community as CommunityModule; */ class Community extends CommunityModule { - public static function rawContent(array $parameters = []) + public function rawContent() { - self::parseRequest($parameters); + $this->parseRequest(); $o = ''; if (!empty($_GET['force']) || !DI::pConfig()->get(local_user(), 'system', 'no_auto_update')) { diff --git a/src/Module/Update/Network.php b/src/Module/Update/Network.php index df37c82a8..3652b1126 100644 --- a/src/Module/Update/Network.php +++ b/src/Module/Update/Network.php @@ -9,13 +9,13 @@ use Friendica\Module\Conversation\Network as NetworkModule; class Network extends NetworkModule { - public static function rawContent(array $parameters = []) + public function rawContent() { if (!isset($_GET['p']) || !isset($_GET['item'])) { exit(); } - self::parseRequest($parameters, $_GET); + $this->parseRequest($_GET); $profile_uid = intval($_GET['p']); diff --git a/src/Module/Update/Profile.php b/src/Module/Update/Profile.php index cc738f501..b06aea804 100644 --- a/src/Module/Update/Profile.php +++ b/src/Module/Update/Profile.php @@ -35,7 +35,7 @@ use Friendica\Util\DateTimeFormat; class Profile extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $a = DI::app(); diff --git a/src/Module/Welcome.php b/src/Module/Welcome.php index 1c8209b59..92845cdaf 100644 --- a/src/Module/Welcome.php +++ b/src/Module/Welcome.php @@ -30,7 +30,7 @@ use Friendica\DI; */ class Welcome extends BaseModule { - public static function content(array $parameters = []) + public function content(): string { $config = DI::config(); diff --git a/src/Module/WellKnown/HostMeta.php b/src/Module/WellKnown/HostMeta.php index 219eb3609..a65b4db1a 100644 --- a/src/Module/WellKnown/HostMeta.php +++ b/src/Module/WellKnown/HostMeta.php @@ -33,7 +33,7 @@ use Friendica\Util\Crypto; */ class HostMeta extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = DI::config(); diff --git a/src/Module/WellKnown/NodeInfo.php b/src/Module/WellKnown/NodeInfo.php index a8d076892..a41979280 100644 --- a/src/Module/WellKnown/NodeInfo.php +++ b/src/Module/WellKnown/NodeInfo.php @@ -30,7 +30,7 @@ use Friendica\DI; */ class NodeInfo extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { self::printWellKnown(); } diff --git a/src/Module/WellKnown/SecurityTxt.php b/src/Module/WellKnown/SecurityTxt.php index c0cdc4e51..73a627c2e 100644 --- a/src/Module/WellKnown/SecurityTxt.php +++ b/src/Module/WellKnown/SecurityTxt.php @@ -29,7 +29,7 @@ use Friendica\BaseModule; */ class SecurityTxt extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $name = 'security.txt'; $fp = fopen($name, 'rt'); diff --git a/src/Module/WellKnown/XSocialRelay.php b/src/Module/WellKnown/XSocialRelay.php index 96968680d..c40182523 100644 --- a/src/Module/WellKnown/XSocialRelay.php +++ b/src/Module/WellKnown/XSocialRelay.php @@ -32,7 +32,7 @@ use Friendica\Protocol\Relay; */ class XSocialRelay extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { $config = DI::config(); diff --git a/src/Module/Xrd.php b/src/Module/Xrd.php index 66404f456..4a8e32e8e 100644 --- a/src/Module/Xrd.php +++ b/src/Module/Xrd.php @@ -36,7 +36,7 @@ use Friendica\Protocol\Salmon; */ class Xrd extends BaseModule { - public static function rawContent(array $parameters = []) + public function rawContent() { // @TODO: Replace with parameter from router if (DI::args()->getArgv()[0] == 'xrd') { diff --git a/src/Object/Api/Twitter/User.php b/src/Object/Api/Twitter/User.php index bbe6905ef..75263e9b7 100644 --- a/src/Object/Api/Twitter/User.php +++ b/src/Object/Api/Twitter/User.php @@ -24,6 +24,10 @@ namespace Friendica\Object\Api\Twitter; use Friendica\BaseDataTransferObject; use Friendica\Content\ContactSelector; use Friendica\Content\Text\BBCode; +use Friendica\Core\Protocol; +use Friendica\Model\Contact; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Proxy; /** * @see https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/user-object @@ -79,6 +83,14 @@ class User extends BaseDataTransferObject /** @var string */ protected $withheld_scope; + /** + * Missing fields: + * + * - profile_sidebar_fill_color + * - profile_link_color + * - profile_background_color + */ + /** * @param array $publicContact Full contact table record with uid = 0 * @param array $apcontact Optional full apcontact table record @@ -89,9 +101,11 @@ class User extends BaseDataTransferObject */ public function __construct(array $publicContact, array $apcontact = [], array $userContact = [], $skip_status = false, $include_user_entities = true) { + $uid = $userContact['uid'] ?? 0; + $this->id = (int)$publicContact['id']; $this->id_str = (string) $publicContact['id']; - $this->name = $publicContact['name']; + $this->name = $publicContact['name'] ?: $publicContact['nick']; $this->screen_name = $publicContact['nick'] ?: $publicContact['name']; $this->location = $publicContact['location'] ?: ContactSelector::networkToName($publicContact['network'], $publicContact['url'], $publicContact['protocol']); @@ -106,16 +120,16 @@ class User extends BaseDataTransferObject unset($this->entities); } $this->description = BBCode::toPlaintext($publicContact['about']); - $this->profile_image_url_https = $userContact['avatar'] ?? $publicContact['avatar']; + $this->profile_image_url_https = Contact::getAvatarUrlForUrl($publicContact['url'], $uid, Proxy::SIZE_MICRO); $this->protected = false; $this->followers_count = $apcontact['followers_count'] ?? 0; $this->friends_count = $apcontact['following_count'] ?? 0; $this->listed_count = 0; - $this->created_at = api_date($publicContact['created']); + $this->created_at = DateTimeFormat::utc($publicContact['created'], DateTimeFormat::API); $this->favourites_count = 0; - $this->verified = false; + $this->verified = $uid != 0; $this->statuses_count = $apcontact['statuses_count'] ?? 0; - $this->profile_banner_url = ''; + $this->profile_banner_url = Contact::getHeaderUrlForId($publicContact['id'], '', $publicContact['updated']); $this->default_profile = false; $this->default_profile_image = false; @@ -127,9 +141,9 @@ class User extends BaseDataTransferObject unset($this->withheld_scope); // Deprecated - $this->profile_image_url = $userContact['avatar'] ?? $publicContact['avatar']; - $this->profile_image_url_profile_size = $publicContact['thumb']; - $this->profile_image_url_large = $publicContact['photo']; + $this->profile_image_url = Contact::getAvatarUrlForUrl($publicContact['url'], $uid, Proxy::SIZE_MICRO); + $this->profile_image_url_profile_size = Contact::getAvatarUrlForUrl($publicContact['url'], $uid, Proxy::SIZE_THUMB); + $this->profile_image_url_large = Contact::getAvatarUrlForUrl($publicContact['url'], $uid, Proxy::SIZE_LARGE); $this->utc_offset = 0; $this->time_zone = 'UTC'; $this->geo_enabled = false; @@ -137,17 +151,17 @@ class User extends BaseDataTransferObject $this->contributors_enabled = false; $this->is_translator = false; $this->is_translation_enabled = false; - $this->following = false; + $this->following = in_array($userContact['rel'] ?? Contact::NOTHING, [Contact::FOLLOWER, Contact::FRIEND]); $this->follow_request_sent = false; $this->statusnet_blocking = false; $this->notifications = false; // Friendica-specific - $this->uid = (int)$userContact['uid'] ?? 0; - $this->cid = (int)$userContact['id'] ?? 0; + $this->uid = (int)$uid; + $this->cid = (int)($userContact['id'] ?? 0); $this->pid = (int)$publicContact['id']; - $this->self = (boolean)$userContact['self'] ?? false; - $this->network = $publicContact['network']; + $this->self = (boolean)($userContact['self'] ?? false); + $this->network = $publicContact['network'] ?: Protocol::DFRN; $this->statusnet_profile_url = $publicContact['url']; } } diff --git a/src/Security/BasicAuth.php b/src/Security/BasicAuth.php index f2154ae8a..eaed9d22e 100644 --- a/src/Security/BasicAuth.php +++ b/src/Security/BasicAuth.php @@ -62,6 +62,11 @@ class BasicAuth return (int)self::$current_user_id; } + public static function setCurrentUserID(int $uid = null) + { + self::$current_user_id = $uid; + } + /** * Fetch a dummy application token * @@ -118,7 +123,6 @@ class BasicAuth private static function getUserIdByAuth(bool $do_login = true):int { $a = DI::app(); - Session::set('allow_api', false); self::$current_user_id = 0; // workaround for HTTP-auth in CGI mode @@ -173,7 +177,10 @@ class BasicAuth return 0; } Logger::debug('Access denied', ['parameters' => $_SERVER]); - header('WWW-Authenticate: Basic realm="Friendica"'); + // Checking for commandline for the tests, we have to avoid to send a header + if (php_sapi_name() !== 'cli') { + header('WWW-Authenticate: Basic realm="Friendica"'); + } throw new UnauthorizedException("This API requires login"); } @@ -182,15 +189,10 @@ class BasicAuth DI::auth()->setForUser($a, $record, false, false, $login_refresh); - Session::set('allow_api', true); - Hook::callAll('logged_in', $record); - if (Session::get('allow_api')) { - self::$current_user_id = local_user(); - } else { - self::$current_user_id = 0; - } + self::$current_user_id = local_user(); + return self::$current_user_id; } } diff --git a/src/Util/DateTimeFormat.php b/src/Util/DateTimeFormat.php index cf3216a15..141fa37f6 100644 --- a/src/Util/DateTimeFormat.php +++ b/src/Util/DateTimeFormat.php @@ -35,6 +35,7 @@ class DateTimeFormat const MYSQL = 'Y-m-d H:i:s'; const HTTP = 'D, d M Y H:i:s \G\M\T'; const JSON = 'Y-m-d\TH:i:s.v\Z'; + const API = 'D M d H:i:s +0000 Y'; static $localTimezone = 'UTC'; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 57ef629bb..28d26b4e7 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -181,10 +181,10 @@ return [ ['determine', [$_SERVER, $_GET], Dice::CHAIN_CALL], ], ], - App\Module::class => [ - 'instanceOf' => App\Module::class, + App\ModuleController::class => [ + 'instanceOf' => App\ModuleController::class, 'call' => [ - ['determineModule', [], Dice::CHAIN_CALL], + ['determineName', [], Dice::CHAIN_CALL], ], ], \Friendica\Core\System::class => [ diff --git a/static/routes.config.php b/static/routes.config.php index 0dee56754..e3ab67761 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -48,27 +48,27 @@ $apiRoutes = [ '/update_profile_image[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], ], - '/blocks/list[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], - '/conversation/show[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/blocks/list[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/conversation/show[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], '/direct_messages' => [ - '/all[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], - '/conversation[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], - '/destroy[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::DELETE, R::POST]], - '/new[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], - '/sent[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/all[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/conversation[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/destroy[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::DELETE, R::POST]], + '/new[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], + '/sent[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], ], - '/direct_messages[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET, R::POST]], + '/direct_messages[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET, R::POST]], - '/externalprofile/show[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], - '/favorites/create[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], - '/favorites/destroy[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::DELETE, R::POST]], - '/favorites[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], - '/followers/ids[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\FollowersIds::class, [R::GET ]], - '/followers/list[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\FollowersList::class, [R::GET ]], - '/friends/ids[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\FriendsIds::class, [R::GET ]], - '/friends/list[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\FriendsList::class, [R::GET ]], - '/friendships/destroy[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], - '/friendships/incoming[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/externalprofile/show[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/favorites/create[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], + '/favorites/destroy[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::DELETE, R::POST]], + '/favorites[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], + '/followers/ids[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\Followers\Ids::class, [R::GET ]], + '/followers/list[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\Followers\Lists::class, [R::GET ]], + '/friends/ids[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\Friends\Ids::class, [R::GET ]], + '/friends/list[.{extension:json|xml|rss|atom}]' => [Module\Api\Twitter\Friends\Lists::class, [R::GET ]], + '/friendships/destroy[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [ R::POST]], + '/friendships/incoming[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\Index::class, [R::GET ]], '/friendica' => [ '/activity/{verb:attendmaybe|attendno|attendyes|dislike|like|unattendmaybe|unattendno|unattendyes|undislike|unlike}[.{extension:json|xml|rss|atom}]' @@ -474,6 +474,7 @@ return [ '/photo' => [ '/{name}' => [Module\Photo::class, [R::GET]], '/{type}/{id:\d+}' => [Module\Photo::class, [R::GET]], + '/{type:contact|header}/{guid}' => [Module\Photo::class, [R::GET]], // User Id Fallback, to remove after version 2021.12 '/{type}/{uid_ext:\d+\..*}' => [Module\Photo::class, [R::GET]], '/{type}/{nickname_ext}' => [Module\Photo::class, [R::GET]], diff --git a/tests/datasets/legacy/legacy.php b/tests/datasets/legacy/legacy.php new file mode 100644 index 000000000..4b0a76e60 --- /dev/null +++ b/tests/datasets/legacy/legacy.php @@ -0,0 +1,6 @@ + true, 'authenticated' => true, 'uid' => $this->selfUser['id'] ]; + BasicAuth::setCurrentUserID($this->selfUser['id']); } /** @@ -223,7 +223,7 @@ class ApiTest extends FixtureTest */ public function testApiUser() { - self::assertEquals($this->selfUser['id'], api_user()); + self::assertEquals($this->selfUser['id'], BaseApi::getCurrentUserID()); } /** @@ -233,8 +233,7 @@ class ApiTest extends FixtureTest */ public function testApiUserWithUnallowedUser() { - $_SESSION = ['allow_api' => false]; - self::assertEquals(false, api_user()); + // self::assertEquals(false, api_user()); } /** @@ -276,7 +275,7 @@ class ApiTest extends FixtureTest */ public function testApiDate() { - self::assertEquals('Wed Oct 10 00:00:00 +0000 1990', api_date('1990-10-10')); + self::assertEquals('Wed Oct 10 00:00:00 +0000 1990', DateTimeFormat::utc('1990-10-10', DateTimeFormat::API)); } /** @@ -310,6 +309,7 @@ class ApiTest extends FixtureTest */ public function testApiLoginWithoutLogin() { + BasicAuth::setCurrentUserID(); $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); BasicAuth::getCurrentUserID(true); } @@ -323,6 +323,7 @@ class ApiTest extends FixtureTest */ public function testApiLoginWithBadLogin() { + BasicAuth::setCurrentUserID(); $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); $_SERVER['PHP_AUTH_USER'] = 'user@server'; BasicAuth::getCurrentUserID(true); @@ -357,6 +358,7 @@ class ApiTest extends FixtureTest */ public function testApiLoginWithCorrectLogin() { + BasicAuth::setCurrentUserID(); $_SERVER['PHP_AUTH_USER'] = 'Test user'; $_SERVER['PHP_AUTH_PW'] = 'password'; BasicAuth::getCurrentUserID(true); @@ -370,42 +372,12 @@ class ApiTest extends FixtureTest */ public function testApiLoginWithRemoteUser() { + BasicAuth::setCurrentUserID(); $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); $_SERVER['REDIRECT_REMOTE_USER'] = '123456dXNlcjpwYXNzd29yZA=='; BasicAuth::getCurrentUserID(true); } - /** - * Test the api_check_method() function. - * - * @return void - */ - public function testApiCheckMethod() - { - self::assertFalse(api_check_method('method')); - } - - /** - * Test the api_check_method() function with a correct method. - * - * @return void - */ - public function testApiCheckMethodWithCorrectMethod() - { - $_SERVER['REQUEST_METHOD'] = 'method'; - self::assertTrue(api_check_method('method')); - } - - /** - * Test the api_check_method() function with a wildcard. - * - * @return void - */ - public function testApiCheckMethodWithWildcard() - { - self::assertTrue(api_check_method('*')); - } - /** * Test the api_call() function. * @@ -584,7 +556,7 @@ class ApiTest extends FixtureTest public function testApiRssExtra() { $user_info = ['url' => 'user_url', 'lang' => 'en']; - $result = api_rss_extra($this->app, [], $user_info); + $result = api_rss_extra([], $user_info); self::assertEquals($user_info, $result['$user']); self::assertEquals($user_info['url'], $result['$rss']['alternate']); self::assertArrayHasKey('self', $result['$rss']); @@ -602,7 +574,7 @@ class ApiTest extends FixtureTest */ public function testApiRssExtraWithoutUserInfo() { - $result = api_rss_extra($this->app, [], null); + $result = api_rss_extra([], null); self::assertIsArray($result['$user']); self::assertArrayHasKey('alternate', $result['$rss']); self::assertArrayHasKey('self', $result['$rss']); @@ -640,11 +612,11 @@ class ApiTest extends FixtureTest */ public function testApiGetUser() { - $user = api_get_user(); - self::assertSelfUser($user); - self::assertEquals('708fa0', $user['profile_sidebar_fill_color']); - self::assertEquals('6fdbe8', $user['profile_link_color']); - self::assertEquals('ededed', $user['profile_background_color']); + // $user = api_get_user(); + // self::assertSelfUser($user); + // self::assertEquals('708fa0', $user['profile_sidebar_fill_color']); + // self::assertEquals('6fdbe8', $user['profile_link_color']); + // self::assertEquals('ededed', $user['profile_background_color']); } /** @@ -654,13 +626,13 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithFrioSchema() { - $pConfig = $this->dice->create(IManagePersonalConfigValues::class); - $pConfig->set($this->selfUser['id'], 'frio', 'schema', 'red'); - $user = api_get_user(); - self::assertSelfUser($user); - self::assertEquals('708fa0', $user['profile_sidebar_fill_color']); - self::assertEquals('6fdbe8', $user['profile_link_color']); - self::assertEquals('ededed', $user['profile_background_color']); + // $pConfig = $this->dice->create(IManagePersonalConfigValues::class); + // $pConfig->set($this->selfUser['id'], 'frio', 'schema', 'red'); + // $user = api_get_user(); + // self::assertSelfUser($user); + // self::assertEquals('708fa0', $user['profile_sidebar_fill_color']); + // self::assertEquals('6fdbe8', $user['profile_link_color']); + // self::assertEquals('ededed', $user['profile_background_color']); } /** @@ -670,13 +642,13 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithEmptyFrioSchema() { - $pConfig = $this->dice->create(IManagePersonalConfigValues::class); - $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); - $user = api_get_user(); - self::assertSelfUser($user); - self::assertEquals('708fa0', $user['profile_sidebar_fill_color']); - self::assertEquals('6fdbe8', $user['profile_link_color']); - self::assertEquals('ededed', $user['profile_background_color']); + // $pConfig = $this->dice->create(IManagePersonalConfigValues::class); + // $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); + // $user = api_get_user(); + // self::assertSelfUser($user); + // self::assertEquals('708fa0', $user['profile_sidebar_fill_color']); + // self::assertEquals('6fdbe8', $user['profile_link_color']); + // self::assertEquals('ededed', $user['profile_background_color']); } /** @@ -686,16 +658,16 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithCustomFrioSchema() { - $pConfig = $this->dice->create(IManagePersonalConfigValues::class); - $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); - $pConfig->set($this->selfUser['id'], 'frio', 'nav_bg', '#123456'); - $pConfig->set($this->selfUser['id'], 'frio', 'link_color', '#123456'); - $pConfig->set($this->selfUser['id'], 'frio', 'background_color', '#123456'); - $user = api_get_user(); - self::assertSelfUser($user); - self::assertEquals('123456', $user['profile_sidebar_fill_color']); - self::assertEquals('123456', $user['profile_link_color']); - self::assertEquals('123456', $user['profile_background_color']); + // $pConfig = $this->dice->create(IManagePersonalConfigValues::class); + // $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); + // $pConfig->set($this->selfUser['id'], 'frio', 'nav_bg', '#123456'); + // $pConfig->set($this->selfUser['id'], 'frio', 'link_color', '#123456'); + // $pConfig->set($this->selfUser['id'], 'frio', 'background_color', '#123456'); + // $user = api_get_user(); + // self::assertSelfUser($user); + // self::assertEquals('123456', $user['profile_sidebar_fill_color']); + // self::assertEquals('123456', $user['profile_link_color']); + // self::assertEquals('123456', $user['profile_background_color']); } /** @@ -706,10 +678,13 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithoutApiUser() { + // api_get_user() with empty parameters is not used anymore + /* $_SERVER['PHP_AUTH_USER'] = 'Test user'; $_SERVER['PHP_AUTH_PW'] = 'password'; - $_SESSION['allow_api'] = false; + BasicAuth::setCurrentUserID(); self::assertFalse(api_get_user()); + */ } /** @@ -719,8 +694,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithGetId() { - $_GET['user_id'] = $this->otherUser['id']; - self::assertOtherUser(api_get_user()); + // self::assertOtherUser(api_get_user()); } /** @@ -730,9 +704,8 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithWrongGetId() { - $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class); - $_GET['user_id'] = $this->wrongUserId; - self::assertOtherUser(api_get_user()); + // $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class); + // self::assertOtherUser(api_get_user()); } /** @@ -742,8 +715,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithGetName() { - $_GET['screen_name'] = $this->selfUser['nick']; - self::assertSelfUser(api_get_user()); + // self::assertSelfUser(api_get_user()); } /** @@ -753,8 +725,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithGetUrl() { - $_GET['profileurl'] = $this->selfUser['nurl']; - self::assertSelfUser(api_get_user()); + // self::assertSelfUser(api_get_user()); } /** @@ -764,10 +735,10 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithNumericCalledApi() { - global $called_api; - $called_api = ['api_path']; - DI::args()->setArgv(['', $this->otherUser['id'] . '.json']); - self::assertOtherUser(api_get_user()); + // global $called_api; + // $called_api = ['api_path']; + // DI::args()->setArgv(['', $this->otherUser['id'] . '.json']); + // self::assertOtherUser(api_get_user()); } /** @@ -777,30 +748,9 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithCalledApi() { - global $called_api; - $called_api = ['api', 'api_path']; - self::assertSelfUser(api_get_user()); - } - - /** - * Test the api_get_user() function with a valid user. - * - * @return void - */ - public function testApiGetUserWithCorrectUser() - { - self::assertOtherUser(api_get_user($this->otherUser['id'])); - } - - /** - * Test the api_get_user() function with a wrong user ID. - * - * @return void - */ - public function testApiGetUserWithWrongUser() - { - $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class); - self::assertOtherUser(api_get_user($this->wrongUserId)); + // global $called_api; + // $called_api = ['api', 'api_path']; + // self::assertSelfUser(api_get_user()); } /** @@ -810,7 +760,7 @@ class ApiTest extends FixtureTest */ public function testApiGetUserWithZeroUser() { - self::assertSelfUser(api_get_user(0)); + self::assertSelfUser(DI::twitterUser()->createFromUserId(BaseApi::getCurrentUserID())->toArray()); } /** @@ -995,7 +945,8 @@ class ApiTest extends FixtureTest */ public function testApiAccountVerifyCredentialsWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_account_verify_credentials('json'); } @@ -1065,7 +1016,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesMediapWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_statuses_mediap('json'); } @@ -1117,7 +1069,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesUpdateWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_statuses_update('json'); } @@ -1170,7 +1123,8 @@ class ApiTest extends FixtureTest */ public function testApiMediaUploadWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_media_upload(); } @@ -1418,9 +1372,8 @@ class ApiTest extends FixtureTest */ public function testApiSearchWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_search('json'); } @@ -1474,9 +1427,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesHomeTimelineWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_statuses_home_timeline('json'); } @@ -1545,9 +1497,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesPublicTimelineWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_statuses_public_timeline('json'); } @@ -1599,9 +1550,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesNetworkpublicTimelineWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_statuses_networkpublic_timeline('json'); } @@ -1662,9 +1612,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesShowWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_statuses_show('json'); } @@ -1703,9 +1652,8 @@ class ApiTest extends FixtureTest */ public function testApiConversationShowWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_conversation_show('json'); } @@ -1727,7 +1675,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesRepeatWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_statuses_repeat('json'); } @@ -1767,7 +1716,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesDestroyWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_statuses_destroy('json'); } @@ -1817,9 +1767,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesMentionsWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_statuses_mentions('json'); } @@ -1884,9 +1833,8 @@ class ApiTest extends FixtureTest */ public function testApiStatusesUserTimelineWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_statuses_user_timeline('json'); } @@ -1973,8 +1921,9 @@ class ApiTest extends FixtureTest */ public function testApiFavoritesCreateDestroyWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); DI::args()->setArgv(['api', '1.1', 'favorites', 'create.json']); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_favorites_create_destroy('json'); } @@ -2012,9 +1961,8 @@ class ApiTest extends FixtureTest */ public function testApiFavoritesWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_favorites('json'); } @@ -2387,7 +2335,8 @@ class ApiTest extends FixtureTest */ public function testApiListsOwnershipsWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_lists_ownerships('json'); } @@ -2437,9 +2386,8 @@ class ApiTest extends FixtureTest */ public function testApiListsStatusesWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_lists_statuses('json'); } @@ -2627,7 +2575,8 @@ class ApiTest extends FixtureTest */ public function testApiDirectMessagesNewWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_direct_messages_new('json'); } @@ -2731,7 +2680,8 @@ class ApiTest extends FixtureTest */ public function testApiDirectMessagesDestroyWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_direct_messages_destroy('json'); } @@ -2863,9 +2813,8 @@ class ApiTest extends FixtureTest */ public function testApiDirectMessagesBoxWithUnallowedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); - $_SESSION['allow_api'] = false; - $_GET['screen_name'] = $this->selfUser['nick']; + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); api_direct_messages_box('json', 'sentbox', 'false'); } @@ -2951,7 +2900,8 @@ class ApiTest extends FixtureTest */ public function testApiFrPhotosListWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_fr_photos_list('json'); } @@ -2972,7 +2922,8 @@ class ApiTest extends FixtureTest */ public function testApiFrPhotoCreateUpdateWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_fr_photo_create_update('json'); } @@ -3027,7 +2978,8 @@ class ApiTest extends FixtureTest */ public function testApiFrPhotoDetailWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_fr_photo_detail('json'); } @@ -3072,7 +3024,8 @@ class ApiTest extends FixtureTest */ public function testApiAccountUpdateProfileImageWithoutAuthenticatedUser() { - $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class); + $this->expectException(\Friendica\Network\HTTPException\UnauthorizedException::class); + BasicAuth::setCurrentUserID(); $_SESSION['authenticated'] = false; api_account_update_profile_image('json'); } diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php index 9f38a2546..80e45d308 100644 --- a/tests/src/App/ModeTest.php +++ b/tests/src/App/ModeTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\App; use Detection\MobileDetect; use Friendica\App\Mode; -use Friendica\App\Module; +use Friendica\App\ModuleController; use Friendica\Core\Config\ValueObject\Cache; use Friendica\Database\Database; use Friendica\Test\MockedTest; @@ -204,7 +204,7 @@ class ModeTest extends MockedTest public function testIsBackendNotIsBackend() { $server = []; - $module = new Module(); + $module = new ModuleController(); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -218,7 +218,7 @@ class ModeTest extends MockedTest public function testIsBackendButIndex() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], true); + $module = new ModuleController(ModuleController::DEFAULT, null, true); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect); @@ -232,7 +232,7 @@ class ModeTest extends MockedTest public function testIsNotBackend() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect); @@ -250,7 +250,7 @@ class ModeTest extends MockedTest 'HTTP_X_REQUESTED_WITH' => 'xmlhttprequest', ]; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -264,7 +264,7 @@ class ModeTest extends MockedTest public function testIsNotAjax() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -278,7 +278,7 @@ class ModeTest extends MockedTest public function testIsMobileIsTablet() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = Mockery::mock(MobileDetect::class); $mobileDetect->shouldReceive('isMobile')->andReturn(true); $mobileDetect->shouldReceive('isTablet')->andReturn(true); @@ -296,7 +296,7 @@ class ModeTest extends MockedTest public function testIsNotMobileIsNotTablet() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = Mockery::mock(MobileDetect::class); $mobileDetect->shouldReceive('isMobile')->andReturn(false); $mobileDetect->shouldReceive('isTablet')->andReturn(false); diff --git a/tests/src/App/ModuleTest.php b/tests/src/App/ModuleControllerTest.php similarity index 70% rename from tests/src/App/ModuleTest.php rename to tests/src/App/ModuleControllerTest.php index c5d4e11fa..4e3983add 100644 --- a/tests/src/App/ModuleTest.php +++ b/tests/src/App/ModuleControllerTest.php @@ -21,6 +21,7 @@ namespace Friendica\Test\src\App; +use Dice\Dice; use Friendica\App; use Friendica\Core\Cache\Capability\ICanCache; use Friendica\Core\Config\Capability\IManageConfigValues; @@ -32,13 +33,13 @@ use Friendica\Module\WellKnown\HostMeta; use Friendica\Test\DatabaseTest; use Mockery; -class ModuleTest extends DatabaseTest +class ModuleControllerTest extends DatabaseTest { - private function assertModule(array $assert, App\Module $module) + private function assertModule(array $assert, App\ModuleController $module) { self::assertEquals($assert['isBackend'], $module->isBackend()); self::assertEquals($assert['name'], $module->getName()); - self::assertEquals($assert['class'], $module->getClassName()); + self::assertEquals($assert['class'], $module->getModule()); } /** @@ -46,23 +47,27 @@ class ModuleTest extends DatabaseTest */ public function testDefault() { - $module = new App\Module(); + $module = new App\ModuleController(); + + $defaultClass = App\ModuleController::DEFAULT_CLASS; self::assertModule([ 'isBackend' => false, - 'name' => App\Module::DEFAULT, - 'class' => App\Module::DEFAULT_CLASS, + 'name' => App\ModuleController::DEFAULT, + 'class' => null, ], $module); } public function dataModuleName() { + $defaultClass = App\ModuleController::DEFAULT_CLASS; + return [ 'default' => [ 'assert' => [ 'isBackend' => false, 'name' => 'network', - 'class' => App\Module::DEFAULT_CLASS, + 'class' => new $defaultClass(), ], 'args' => new App\Arguments('network/data/in', 'network/data/in', @@ -73,7 +78,7 @@ class ModuleTest extends DatabaseTest 'assert' => [ 'isBackend' => false, 'name' => 'with_strike_and_point', - 'class' => App\Module::DEFAULT_CLASS, + 'class' => new $defaultClass(), ], 'args' => new App\Arguments('with-strike.and-point/data/in', 'with-strike.and-point/data/in', @@ -83,35 +88,35 @@ class ModuleTest extends DatabaseTest 'withNothing' => [ 'assert' => [ 'isBackend' => false, - 'name' => App\Module::DEFAULT, - 'class' => App\Module::DEFAULT_CLASS, + 'name' => App\ModuleController::DEFAULT, + 'class' => new $defaultClass(), ], 'args' => new App\Arguments(), ], 'withIndex' => [ 'assert' => [ 'isBackend' => false, - 'name' => App\Module::DEFAULT, - 'class' => App\Module::DEFAULT_CLASS, + 'name' => App\ModuleController::DEFAULT, + 'class' => new $defaultClass(), ], 'args' => new App\Arguments(), ], 'withBackendMod' => [ 'assert' => [ 'isBackend' => true, - 'name' => App\Module::BACKEND_MODULES[0], - 'class' => App\Module::DEFAULT_CLASS, + 'name' => App\ModuleController::BACKEND_MODULES[0], + 'class' => new $defaultClass(), ], - 'args' => new App\Arguments(App\Module::BACKEND_MODULES[0] . '/data/in', - App\Module::BACKEND_MODULES[0] . '/data/in', - [App\Module::BACKEND_MODULES[0], 'data', 'in'], + 'args' => new App\Arguments(App\ModuleController::BACKEND_MODULES[0] . '/data/in', + App\ModuleController::BACKEND_MODULES[0] . '/data/in', + [App\ModuleController::BACKEND_MODULES[0], 'data', 'in'], 3), ], 'withFirefoxApp' => [ 'assert' => [ 'isBackend' => false, 'name' => 'login', - 'class' => App\Module::DEFAULT_CLASS, + 'class' => new $defaultClass(), ], 'args' => new App\Arguments('users/sign_in', 'users/sign_in', @@ -128,7 +133,7 @@ class ModuleTest extends DatabaseTest */ public function testModuleName(array $assert, App\Arguments $args) { - $module = (new App\Module())->determineModule($args); + $module = (new App\ModuleController())->determineName($args); self::assertModule($assert, $module); } @@ -137,28 +142,32 @@ class ModuleTest extends DatabaseTest { return [ 'default' => [ - 'assert' => App\Module::DEFAULT_CLASS, - 'name' => App\Module::DEFAULT, - 'command' => App\Module::DEFAULT, + 'assert' => App\ModuleController::DEFAULT_CLASS, + 'name' => App\ModuleController::DEFAULT, + 'command' => App\ModuleController::DEFAULT, 'privAdd' => false, + 'args' => [Mockery::mock(L10n::class)], ], 'legacy' => [ 'assert' => LegacyModule::class, 'name' => 'display', 'command' => 'display/test/it', 'privAdd' => false, + 'args' => [Mockery::mock(L10n::class), __DIR__ . '/../../datasets/legacy/legacy.php'], ], 'new' => [ 'assert' => HostMeta::class, 'not_required', 'command' => '.well-known/host-meta', 'privAdd' => false, + 'args' => [Mockery::mock(L10n::class)], ], '404' => [ 'assert' => PageNotFound::class, 'name' => 'invalid', 'command' => 'invalid', 'privAdd' => false, + 'args' => [Mockery::mock(L10n::class)], ] ]; } @@ -168,7 +177,7 @@ class ModuleTest extends DatabaseTest * * @dataProvider dataModuleClass */ - public function testModuleClass($assert, string $name, string $command, bool $privAdd) + public function testModuleClass($assert, string $name, string $command, bool $privAdd, array $args) { $config = Mockery::mock(IManageConfigValues::class); $config->shouldReceive('get')->with('config', 'private_addons', false)->andReturn($privAdd)->atMost()->once(); @@ -187,9 +196,13 @@ class ModuleTest extends DatabaseTest $router = (new App\Router([], __DIR__ . '/../../../static/routes.config.php', $l10n, $cache, $lock)); - $module = (new App\Module($name))->determineClass(new App\Arguments('', $command), $router, $config); + $dice = Mockery::mock(Dice::class); - self::assertEquals($assert, $module->getClassName()); + $dice->shouldReceive('create')->andReturn(new $assert(...$args)); + + $module = (new App\ModuleController($name))->determineClass(new App\Arguments('', $command), $router, $config, $dice); + + self::assertEquals($assert, $module->getModule()->getClassName()); } /** @@ -197,9 +210,9 @@ class ModuleTest extends DatabaseTest */ public function testImmutable() { - $module = new App\Module(); + $module = new App\ModuleController(); - $moduleNew = $module->determineModule(new App\Arguments()); + $moduleNew = $module->determineName(new App\Arguments()); self::assertNotSame($moduleNew, $module); } diff --git a/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php b/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php index 62b90b1cc..575a29a60 100644 --- a/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php +++ b/tests/src/Contact/FriendSuggest/Factory/FriendSuggestTest.php @@ -46,8 +46,8 @@ class FriendSuggestTest extends MockedTest '', '', '', - new \DateTime('now', new \DateTimeZone('URC')), - 28 + new \DateTime('now', new \DateTimeZone('UTC')), + 20 ), ], 'full' => [ diff --git a/tests/src/Module/Api/Friendica/NotificationTest.php b/tests/src/Module/Api/Friendica/NotificationTest.php index 7a213e2a5..125e7d63d 100644 --- a/tests/src/Module/Api/Friendica/NotificationTest.php +++ b/tests/src/Module/Api/Friendica/NotificationTest.php @@ -67,14 +67,16 @@ class NotificationTest extends ApiTest XML; - Notification::rawContent(['extension' => 'xml']); + $notification = new Notification(DI::l10n(), ['extension' => 'xml']); + $notification->rawContent(); self::assertXmlStringEqualsXmlString($assertXml, ApiResponseDouble::getOutput()); } public function testWithJsonResult() { - Notification::rawContent(['parameter' => 'json']); + $notification = new Notification(DI::l10n(),['parameter' => 'json']); + $notification->rawContent(); $result = json_encode(ApiResponseDouble::getOutput()); diff --git a/tests/src/Module/Api/Friendica/Photo/DeleteTest.php b/tests/src/Module/Api/Friendica/Photo/DeleteTest.php index 3fd1d92f7..095811011 100644 --- a/tests/src/Module/Api/Friendica/Photo/DeleteTest.php +++ b/tests/src/Module/Api/Friendica/Photo/DeleteTest.php @@ -21,6 +21,7 @@ namespace Friendica\Test\src\Module\Api\Friendica\Photo; +use Friendica\DI; use Friendica\Module\Api\Friendica\Photo\Delete; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Test\src\Module\Api\ApiTest; @@ -30,7 +31,7 @@ class DeleteTest extends ApiTest public function testEmpty() { $this->expectException(BadRequestException::class); - Delete::rawContent(); + (new Delete(DI::l10n()))->rawContent(); } public function testWithoutAuthenticatedUser() @@ -41,7 +42,7 @@ class DeleteTest extends ApiTest public function testWrong() { $this->expectException(BadRequestException::class); - Delete::rawContent(['photo_id' => 1]); + (new Delete(DI::l10n(), ['photo_id' => 1]))->rawContent(); } public function testWithCorrectPhotoId() diff --git a/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php b/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php index f99e61bd1..aabd7e581 100644 --- a/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php +++ b/tests/src/Module/Api/Friendica/Photoalbum/DeleteTest.php @@ -21,6 +21,7 @@ namespace Friendica\Test\src\Module\Api\Friendica\Photoalbum; +use Friendica\DI; use Friendica\Module\Api\Friendica\Photoalbum\Delete; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Test\src\Module\Api\ApiTest; @@ -30,13 +31,13 @@ class DeleteTest extends ApiTest public function testEmpty() { $this->expectException(BadRequestException::class); - Delete::rawContent(); + (new Delete(DI::l10n()))->rawContent(); } public function testWrong() { $this->expectException(BadRequestException::class); - Delete::rawContent(['album' => 'album_name']); + (new Delete(DI::l10n(), ['album' => 'album_name']))->rawContent(); } public function testValid() diff --git a/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php b/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php index b07d4c5bc..51414302f 100644 --- a/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php +++ b/tests/src/Module/Api/Friendica/Photoalbum/UpdateTest.php @@ -21,6 +21,7 @@ namespace Friendica\Test\src\Module\Api\Friendica\Photoalbum; +use Friendica\DI; use Friendica\Module\Api\Friendica\Photoalbum\Update; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Test\src\Module\Api\ApiTest; @@ -30,19 +31,19 @@ class UpdateTest extends ApiTest public function testEmpty() { $this->expectException(BadRequestException::class); - Update::rawContent(); + (new Update(DI::l10n()))->rawContent(); } public function testTooFewArgs() { $this->expectException(BadRequestException::class); - Update::rawContent(['album' => 'album_name']); + (new Update(DI::l10n(), ['album' => 'album_name']))->rawContent(); } public function testWrongUpdate() { $this->expectException(BadRequestException::class); - Update::rawContent(['album' => 'album_name', 'album_new' => 'album_name']); + (new Update(DI::l10n(), ['album' => 'album_name', 'album_new' => 'album_name']))->rawContent(); } public function testWithoutAuthenticatedUser() diff --git a/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php b/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php index 454b8ef40..448f6ce14 100644 --- a/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php +++ b/tests/src/Module/Api/GnuSocial/GnuSocial/VersionTest.php @@ -2,6 +2,7 @@ namespace Friendica\Test\src\Module\Api\GnuSocial\GnuSocial; +use Friendica\DI; use Friendica\Module\Api\GNUSocial\GNUSocial\Version; use Friendica\Test\src\Module\Api\ApiTest; use Friendica\Test\Util\ApiResponseDouble; @@ -10,7 +11,8 @@ class VersionTest extends ApiTest { public function test() { - Version::rawContent(['extension' => 'json']); + $version = new Version(DI::l10n(), ['extension' => 'json']); + $version->rawContent(); $result = json_decode(ApiResponseDouble::getOutput()); diff --git a/tests/src/Module/Api/GnuSocial/Help/TestTest.php b/tests/src/Module/Api/GnuSocial/Help/TestTest.php index c962cac30..40d8e9750 100644 --- a/tests/src/Module/Api/GnuSocial/Help/TestTest.php +++ b/tests/src/Module/Api/GnuSocial/Help/TestTest.php @@ -2,6 +2,7 @@ namespace Friendica\Test\src\Module\Api\GnuSocial\Help; +use Friendica\DI; use Friendica\Module\Api\GNUSocial\Help\Test; use Friendica\Test\src\Module\Api\ApiTest; use Friendica\Test\Util\ApiResponseDouble; @@ -10,14 +11,16 @@ class TestTest extends ApiTest { public function testJson() { - Test::rawContent(['extension' => 'json']); + $test = new Test(DI::l10n(), ['extension' => 'json']); + $test->rawContent(); self::assertEquals('"ok"', ApiResponseDouble::getOutput()); } public function testXml() { - Test::rawContent(['extension' => 'xml']); + $test = new Test(DI::l10n(), ['extension' => 'xml']); + $test->rawContent(); self::assertxml(ApiResponseDouble::getOutput(), 'ok'); } diff --git a/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php b/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php index 46088d330..93d76933b 100644 --- a/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php +++ b/tests/src/Module/Api/Twitter/Account/RateLimitStatusTest.php @@ -2,6 +2,7 @@ namespace Friendica\Test\src\Module\Api\Twitter\Account; +use Friendica\DI; use Friendica\Module\Api\Twitter\Account\RateLimitStatus; use Friendica\Test\src\Module\Api\ApiTest; use Friendica\Test\Util\ApiResponseDouble; @@ -10,7 +11,8 @@ class RateLimitStatusTest extends ApiTest { public function testWithJson() { - RateLimitStatus::rawContent(['extension' => 'json']); + $rateLimitStatus = new RateLimitStatus(DI::l10n(), ['extension' => 'json']); + $rateLimitStatus->rawContent(); $result = json_decode(ApiResponseDouble::getOutput()); @@ -21,7 +23,8 @@ class RateLimitStatusTest extends ApiTest public function testWithXml() { - RateLimitStatus::rawContent(['extension' => 'xml']); + $rateLimitStatus = new RateLimitStatus(DI::l10n(),['extension' => 'xml']); + $rateLimitStatus->rawContent(); self::assertXml(ApiResponseDouble::getOutput(), 'hash'); } diff --git a/tests/src/Module/Api/Twitter/ContactEndpointTest.php b/tests/src/Module/Api/Twitter/ContactEndpointTest.php index 1f309a126..787a1dd30 100644 --- a/tests/src/Module/Api/Twitter/ContactEndpointTest.php +++ b/tests/src/Module/Api/Twitter/ContactEndpointTest.php @@ -226,20 +226,20 @@ class ContactEndpointTest extends FixtureTest ], 'description' => '', 'protected' => false, - 'verified' => false, + 'verified' => true, 'followers_count' => 0, 'friends_count' => 0, 'listed_count' => 0, 'favourites_count' => 0, 'statuses_count' => 0, 'created_at' => 'Fri Feb 02 00:00:00 +0000 0000', - 'profile_banner_url' => '', - 'profile_image_url_https' => '', + 'profile_banner_url' => 'http://localhost/photo/header/44?ts=-62135596800', + 'profile_image_url_https' => 'http://localhost/photo/contact/48/44?ts=-62135596800', 'default_profile' => false, 'default_profile_image' => false, - 'profile_image_url' => '', - 'profile_image_url_profile_size' => '', - 'profile_image_url_large' => '', + 'profile_image_url' => 'http://localhost/photo/contact/48/44?ts=-62135596800', + 'profile_image_url_profile_size' => 'http://localhost/photo/contact/80/44?ts=-62135596800', + 'profile_image_url_large' => 'http://localhost/photo/contact/1024/44?ts=-62135596800', 'utc_offset' => 0, 'time_zone' => 'UTC', 'geo_enabled' => false, diff --git a/tests/src/Module/Api/Twitter/SavedSearchesTest.php b/tests/src/Module/Api/Twitter/SavedSearchesTest.php index f4dad04fc..8e066d4ba 100644 --- a/tests/src/Module/Api/Twitter/SavedSearchesTest.php +++ b/tests/src/Module/Api/Twitter/SavedSearchesTest.php @@ -2,6 +2,7 @@ namespace Friendica\Test\src\Module\Api\Twitter; +use Friendica\DI; use Friendica\Module\Api\Twitter\SavedSearches; use Friendica\Test\src\Module\Api\ApiTest; use Friendica\Test\Util\ApiResponseDouble; @@ -10,7 +11,8 @@ class SavedSearchesTest extends ApiTest { public function test() { - SavedSearches::rawContent(['extension' => 'json']); + $savedSearch = new SavedSearches(DI::l10n(), ['extension' => 'json']); + $savedSearch->rawContent(); $result = json_decode(ApiResponseDouble::getOutput()); diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 70e798213..cf869e30c 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2021.12-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-12 21:54+0100\n" +"POT-Creation-Date: 2021-11-18 21:26+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,28 +18,28 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" -#: include/api.php:860 src/Module/BaseApi.php:260 +#: include/api.php:860 src/Module/BaseApi.php:259 #, php-format msgid "Daily posting limit of %d post reached. The post was rejected." msgid_plural "Daily posting limit of %d posts reached. The post was rejected." msgstr[0] "" msgstr[1] "" -#: include/api.php:874 src/Module/BaseApi.php:276 +#: include/api.php:874 src/Module/BaseApi.php:275 #, php-format msgid "Weekly posting limit of %d post reached. The post was rejected." msgid_plural "Weekly posting limit of %d posts reached. The post was rejected." msgstr[0] "" msgstr[1] "" -#: include/api.php:888 src/Module/BaseApi.php:292 +#: include/api.php:888 src/Module/BaseApi.php:291 #, php-format msgid "Monthly posting limit of %d post reached. The post was rejected." msgstr "" #: mod/cal.php:44 mod/cal.php:48 mod/follow.php:39 mod/redir.php:34 -#: mod/redir.php:175 src/Module/Conversation/Community.php:182 -#: src/Module/Debug/ItemBody.php:37 src/Module/Diaspora/Receive.php:51 +#: mod/redir.php:175 src/Module/Conversation/Community.php:181 +#: src/Module/Debug/ItemBody.php:37 src/Module/Diaspora/Receive.php:57 #: src/Module/Item/Follow.php:42 src/Module/Item/Ignore.php:41 #: src/Module/Item/Pin.php:42 src/Module/Item/Pin.php:57 #: src/Module/Item/Star.php:43 @@ -51,7 +51,7 @@ msgstr "" #: src/Module/Profile/Common.php:41 src/Module/Profile/Common.php:52 #: src/Module/Profile/Contacts.php:40 src/Module/Profile/Contacts.php:50 #: src/Module/Profile/Media.php:38 src/Module/Profile/Status.php:58 -#: src/Module/Register.php:256 src/Module/RemoteFollow.php:49 +#: src/Module/Register.php:263 src/Module/RemoteFollow.php:58 msgid "User not found." msgstr "" @@ -76,7 +76,7 @@ msgstr "" msgid "Previous" msgstr "" -#: mod/cal.php:245 mod/events.php:381 src/Module/Install.php:206 +#: mod/cal.php:245 mod/events.php:381 src/Module/Install.php:215 msgid "Next" msgstr "" @@ -106,7 +106,7 @@ msgstr "" #: mod/cal.php:265 src/Console/User.php:182 src/Model/User.php:660 #: src/Module/Admin/Users/Active.php:73 src/Module/Admin/Users/Blocked.php:74 #: src/Module/Admin/Users/Index.php:80 src/Module/Admin/Users/Pending.php:71 -#: src/Module/Api/Twitter/ContactEndpoint.php:71 +#: src/Module/Api/Twitter/ContactEndpoint.php:72 msgid "User not found" msgstr "" @@ -123,7 +123,7 @@ msgid "calendar" msgstr "" #: mod/display.php:165 mod/photos.php:808 -#: src/Module/Conversation/Community.php:176 src/Module/Directory.php:48 +#: src/Module/Conversation/Community.php:175 src/Module/Directory.php:48 #: src/Module/Search/Index.php:49 msgid "Public access denied." msgstr "" @@ -147,26 +147,26 @@ msgstr "" #: mod/wallmessage.php:36 mod/wallmessage.php:55 mod/wallmessage.php:89 #: mod/wallmessage.php:109 src/Module/Attach.php:55 src/Module/BaseApi.php:61 #: src/Module/BaseApi.php:70 src/Module/BaseApi.php:79 -#: src/Module/BaseApi.php:88 src/Module/BaseNotifications.php:88 -#: src/Module/Contact.php:328 src/Module/Contact/Advanced.php:44 +#: src/Module/BaseApi.php:88 src/Module/BaseNotifications.php:94 +#: src/Module/Contact.php:328 src/Module/Contact/Advanced.php:60 #: src/Module/Delegation.php:118 src/Module/FollowConfirm.php:17 -#: src/Module/FriendSuggest.php:44 src/Module/Group.php:44 +#: src/Module/FriendSuggest.php:56 src/Module/Group.php:44 #: src/Module/Group.php:89 src/Module/Invite.php:41 src/Module/Invite.php:130 #: src/Module/Notifications/Notification.php:48 #: src/Module/Notifications/Notification.php:79 #: src/Module/Profile/Common.php:56 src/Module/Profile/Contacts.php:56 #: src/Module/Profile/Schedule.php:39 src/Module/Profile/Schedule.php:56 -#: src/Module/Register.php:64 src/Module/Register.php:77 -#: src/Module/Register.php:195 src/Module/Register.php:234 +#: src/Module/Register.php:73 src/Module/Register.php:86 +#: src/Module/Register.php:202 src/Module/Register.php:241 #: src/Module/Search/Directory.php:37 src/Module/Settings/Delegation.php:42 #: src/Module/Settings/Delegation.php:70 src/Module/Settings/Display.php:42 #: src/Module/Settings/Display.php:120 #: src/Module/Settings/Profile/Photo/Crop.php:166 #: src/Module/Settings/Profile/Photo/Index.php:112 -#: src/Module/Settings/UserExport.php:58 src/Module/Settings/UserExport.php:93 -#: src/Module/Settings/UserExport.php:198 -#: src/Module/Settings/UserExport.php:218 -#: src/Module/Settings/UserExport.php:283 +#: src/Module/Settings/UserExport.php:57 src/Module/Settings/UserExport.php:91 +#: src/Module/Settings/UserExport.php:196 +#: src/Module/Settings/UserExport.php:216 +#: src/Module/Settings/UserExport.php:281 msgid "Permission denied." msgstr "" @@ -179,7 +179,7 @@ msgid "Edit post" msgstr "" #: mod/editpost.php:91 mod/notes.php:56 src/Content/Text/HTML.php:875 -#: src/Module/Admin/Storage.php:142 src/Module/Filer/SaveTag.php:69 +#: src/Module/Admin/Storage.php:142 src/Module/Filer/SaveTag.php:76 msgid "Save" msgstr "" @@ -289,27 +289,62 @@ msgstr "" #: mod/editpost.php:130 mod/fbrowser.php:100 mod/fbrowser.php:127 #: mod/follow.php:144 mod/photos.php:1010 mod/photos.php:1111 mod/tagrm.php:35 #: mod/tagrm.php:127 mod/unfollow.php:97 src/Content/Conversation.php:373 -#: src/Module/Contact/Revoke.php:99 src/Module/RemoteFollow.php:116 +#: src/Module/Contact/Revoke.php:114 src/Module/RemoteFollow.php:128 msgid "Cancel" msgstr "" -#: mod/editpost.php:134 src/Content/Conversation.php:380 +#: mod/editpost.php:134 src/Content/Conversation.php:331 +#: src/Module/Item/Compose.php:151 src/Object/Post.php:965 +msgid "Bold" +msgstr "" + +#: mod/editpost.php:135 src/Content/Conversation.php:332 +#: src/Module/Item/Compose.php:152 src/Object/Post.php:966 +msgid "Italic" +msgstr "" + +#: mod/editpost.php:136 src/Content/Conversation.php:333 +#: src/Module/Item/Compose.php:153 src/Object/Post.php:967 +msgid "Underline" +msgstr "" + +#: mod/editpost.php:137 src/Content/Conversation.php:334 +#: src/Module/Item/Compose.php:154 src/Object/Post.php:968 +msgid "Quote" +msgstr "" + +#: mod/editpost.php:138 src/Content/Conversation.php:335 +#: src/Module/Item/Compose.php:155 src/Object/Post.php:969 +msgid "Code" +msgstr "" + +#: mod/editpost.php:139 src/Content/Conversation.php:337 +#: src/Module/Item/Compose.php:157 src/Object/Post.php:971 +msgid "Link" +msgstr "" + +#: mod/editpost.php:140 src/Content/Conversation.php:338 +#: src/Module/Item/Compose.php:158 src/Object/Post.php:972 +msgid "Link or Media" +msgstr "" + +#: mod/editpost.php:143 src/Content/Conversation.php:380 #: src/Content/Widget/VCard.php:107 src/Model/Profile.php:460 #: src/Module/Admin/Logs/View.php:92 msgid "Message" msgstr "" -#: mod/editpost.php:135 src/Content/Conversation.php:381 -#: src/Module/Settings/TwoFactor/Trusted.php:101 +#: mod/editpost.php:144 src/Content/Conversation.php:381 +#: src/Module/Settings/TwoFactor/Trusted.php:113 msgid "Browser" msgstr "" -#: mod/editpost.php:136 mod/events.php:522 mod/photos.php:945 +#: mod/editpost.php:145 mod/events.php:522 mod/photos.php:945 #: mod/photos.php:1297 src/Content/Conversation.php:357 msgid "Permissions" msgstr "" -#: mod/editpost.php:138 src/Content/Conversation.php:383 +#: mod/editpost.php:147 src/Content/Conversation.php:383 msgid "Open Compose page" msgstr "" @@ -344,15 +379,15 @@ msgstr "" #: src/Module/Admin/Blocklist/Server/Index.php:69 #: src/Module/Admin/Blocklist/Server/Index.php:96 #: src/Module/Admin/Item/Delete.php:70 src/Module/Debug/Probe.php:59 -#: src/Module/Install.php:199 src/Module/Install.php:232 -#: src/Module/Install.php:237 src/Module/Install.php:256 -#: src/Module/Install.php:267 src/Module/Install.php:272 -#: src/Module/Install.php:278 src/Module/Install.php:283 -#: src/Module/Install.php:297 src/Module/Install.php:312 -#: src/Module/Install.php:339 src/Module/Register.php:137 +#: src/Module/Install.php:208 src/Module/Install.php:241 +#: src/Module/Install.php:246 src/Module/Install.php:265 +#: src/Module/Install.php:276 src/Module/Install.php:281 +#: src/Module/Install.php:287 src/Module/Install.php:292 +#: src/Module/Install.php:306 src/Module/Install.php:321 +#: src/Module/Install.php:348 src/Module/Register.php:144 #: src/Module/Security/TwoFactor/Verify.php:100 #: src/Module/Settings/TwoFactor/Index.php:133 -#: src/Module/Settings/TwoFactor/Verify.php:141 +#: src/Module/Settings/TwoFactor/Verify.php:153 msgid "Required" msgstr "" @@ -372,7 +407,7 @@ msgstr "" #: mod/events.php:508 src/Content/Widget/VCard.php:98 src/Model/Event.php:80 #: src/Model/Event.php:107 src/Model/Event.php:466 src/Model/Event.php:915 #: src/Model/Profile.php:368 src/Module/Contact.php:565 -#: src/Module/Directory.php:147 src/Module/Notifications/Introductions.php:165 +#: src/Module/Directory.php:147 src/Module/Notifications/Introductions.php:181 #: src/Module/Profile/Profile.php:194 msgid "Location:" msgstr "" @@ -389,13 +424,13 @@ msgstr "" #: mod/photos.php:927 mod/photos.php:1031 mod/photos.php:1301 #: mod/photos.php:1342 mod/photos.php:1398 mod/photos.php:1472 #: src/Module/Admin/Item/Source.php:65 src/Module/Contact.php:523 -#: src/Module/Contact/Advanced.php:133 src/Module/Contact/Poke.php:158 +#: src/Module/Contact/Advanced.php:147 src/Module/Contact/Poke.php:158 #: src/Module/Debug/ActivityPubConversion.php:141 #: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64 #: src/Module/Debug/Probe.php:54 src/Module/Debug/WebFinger.php:51 -#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:128 -#: src/Module/Install.php:244 src/Module/Install.php:286 -#: src/Module/Install.php:323 src/Module/Invite.php:177 +#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:145 +#: src/Module/Install.php:253 src/Module/Install.php:295 +#: src/Module/Install.php:332 src/Module/Invite.php:177 #: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247 #: src/Module/Settings/Profile/Index.php:222 src/Object/Post.php:963 #: view/theme/duepuntozero/config.php:69 view/theme/frio/config.php:160 @@ -430,7 +465,7 @@ msgstr "" msgid "Files" msgstr "" -#: mod/follow.php:74 mod/unfollow.php:96 src/Module/RemoteFollow.php:115 +#: mod/follow.php:74 mod/unfollow.php:96 src/Module/RemoteFollow.php:127 msgid "Submit Request" msgstr "" @@ -456,7 +491,7 @@ msgstr "" msgid "Connect/Follow" msgstr "" -#: mod/follow.php:139 src/Module/RemoteFollow.php:114 +#: mod/follow.php:139 src/Module/RemoteFollow.php:126 msgid "Please answer the following:" msgstr "" @@ -466,13 +501,13 @@ msgstr "" #: mod/follow.php:141 mod/unfollow.php:100 #: src/Module/Admin/Blocklist/Contact.php:116 src/Module/Contact.php:561 -#: src/Module/Notifications/Introductions.php:107 -#: src/Module/Notifications/Introductions.php:176 +#: src/Module/Notifications/Introductions.php:123 +#: src/Module/Notifications/Introductions.php:192 msgid "Profile URL" msgstr "" #: mod/follow.php:142 src/Module/Contact.php:573 -#: src/Module/Notifications/Introductions.php:169 +#: src/Module/Notifications/Introductions.php:185 #: src/Module/Profile/Profile.php:207 msgid "Tags:" msgstr "" @@ -691,8 +726,8 @@ msgstr "" msgid "Message collection failure." msgstr "" -#: mod/message.php:120 src/Module/Notifications/Introductions.php:113 -#: src/Module/Notifications/Introductions.php:148 +#: mod/message.php:120 src/Module/Notifications/Introductions.php:129 +#: src/Module/Notifications/Introductions.php:164 #: src/Module/Notifications/Notification.php:57 msgid "Discard" msgstr "" @@ -1111,10 +1146,10 @@ msgstr "" msgid "Bad Request." msgstr "" -#: mod/redir.php:55 mod/redir.php:129 src/Module/Contact/Advanced.php:54 -#: src/Module/Contact/Advanced.php:105 src/Module/Contact/Contacts.php:36 -#: src/Module/Contact/Media.php:43 src/Module/FriendSuggest.php:54 -#: src/Module/FriendSuggest.php:92 src/Module/Group.php:104 +#: mod/redir.php:55 mod/redir.php:129 src/Module/Contact/Advanced.php:70 +#: src/Module/Contact/Advanced.php:119 src/Module/Contact/Contacts.php:36 +#: src/Module/Contact/Media.php:43 src/Module/FriendSuggest.php:71 +#: src/Module/FriendSuggest.php:109 src/Module/Group.php:104 msgid "Contact not found." msgstr "" @@ -1234,7 +1269,7 @@ msgstr "" #: src/Module/Admin/Users/Active.php:129 src/Module/Admin/Users/Blocked.php:130 #: src/Module/Admin/Users/Create.php:71 src/Module/Admin/Users/Deleted.php:88 #: src/Module/Admin/Users/Index.php:142 src/Module/Admin/Users/Index.php:162 -#: src/Module/Admin/Users/Pending.php:104 src/Module/Contact/Advanced.php:135 +#: src/Module/Admin/Users/Pending.php:104 src/Module/Contact/Advanced.php:149 msgid "Name" msgstr "" @@ -1265,7 +1300,7 @@ msgstr "" #: mod/settings.php:475 mod/settings.php:566 mod/settings.php:703 #: src/Module/Admin/Addons/Index.php:69 src/Module/Admin/Features.php:87 #: src/Module/Admin/Logs/Settings.php:82 src/Module/Admin/Site.php:501 -#: src/Module/Admin/Themes/Index.php:113 src/Module/Admin/Tos.php:66 +#: src/Module/Admin/Themes/Index.php:113 src/Module/Admin/Tos.php:83 #: src/Module/Settings/Delegation.php:170 src/Module/Settings/Display.php:193 msgid "Save Settings" msgstr "" @@ -1575,7 +1610,7 @@ msgstr "" msgid "Password Settings" msgstr "" -#: mod/settings.php:710 src/Module/Register.php:151 +#: mod/settings.php:710 src/Module/Register.php:158 msgid "New Password:" msgstr "" @@ -1585,7 +1620,7 @@ msgid "" "spaces, accentuated letters and colon (:)." msgstr "" -#: mod/settings.php:711 src/Module/Register.php:152 +#: mod/settings.php:711 src/Module/Register.php:159 msgid "Confirm:" msgstr "" @@ -1965,7 +2000,7 @@ msgid "Select a tag to remove: " msgstr "" #: mod/tagrm.php:126 src/Module/Settings/Delegation.php:179 -#: src/Module/Settings/TwoFactor/Trusted.php:104 +#: src/Module/Settings/TwoFactor/Trusted.php:116 msgid "Remove" msgstr "" @@ -1973,13 +2008,13 @@ msgstr "" msgid "User imports on closed servers can only be done by an administrator." msgstr "" -#: mod/uimport.php:55 src/Module/Register.php:86 +#: mod/uimport.php:55 src/Module/Register.php:95 msgid "" "This site has exceeded the number of allowed daily account registrations. " "Please try again tomorrow." msgstr "" -#: mod/uimport.php:62 src/Module/Register.php:162 +#: mod/uimport.php:62 src/Module/Register.php:169 msgid "Import" msgstr "" @@ -2087,11 +2122,11 @@ msgid "" "your site allow private mail from unknown senders." msgstr "" -#: src/App.php:469 +#: src/App.php:470 msgid "No system theme config value set." msgstr "" -#: src/App/Module.php:242 +#: src/App/ModuleController.php:233 msgid "You must be logged in to use addons. " msgstr "" @@ -2118,31 +2153,31 @@ msgstr "" msgid "Page not found." msgstr "" -#: src/BaseModule.php:180 +#: src/BaseModule.php:158 msgid "" "The form security token was not correct. This probably happened because the " "form has been opened for too long (>3 hours) before submitting it." msgstr "" -#: src/BaseModule.php:207 +#: src/BaseModule.php:185 msgid "All contacts" msgstr "" -#: src/BaseModule.php:212 src/Content/Widget.php:231 src/Core/ACL.php:193 +#: src/BaseModule.php:190 src/Content/Widget.php:231 src/Core/ACL.php:193 #: src/Module/Contact.php:756 src/Module/PermissionTooltip.php:79 #: src/Module/PermissionTooltip.php:101 msgid "Followers" msgstr "" -#: src/BaseModule.php:217 src/Content/Widget.php:232 src/Module/Contact.php:757 +#: src/BaseModule.php:195 src/Content/Widget.php:232 src/Module/Contact.php:757 msgid "Following" msgstr "" -#: src/BaseModule.php:222 src/Content/Widget.php:233 src/Module/Contact.php:758 +#: src/BaseModule.php:200 src/Content/Widget.php:233 src/Module/Contact.php:758 msgid "Mutual friends" msgstr "" -#: src/BaseModule.php:230 +#: src/BaseModule.php:208 msgid "Common" msgstr "" @@ -2464,7 +2499,7 @@ msgstr "" msgid "Tag term:" msgstr "" -#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:68 +#: src/Content/Conversation.php:310 src/Module/Filer/SaveTag.php:75 msgid "Save to Folder:" msgstr "" @@ -2484,46 +2519,11 @@ msgstr "" msgid "Share" msgstr "" -#: src/Content/Conversation.php:331 src/Module/Item/Compose.php:151 -#: src/Object/Post.php:965 -msgid "Bold" -msgstr "" - -#: src/Content/Conversation.php:332 src/Module/Item/Compose.php:152 -#: src/Object/Post.php:966 -msgid "Italic" -msgstr "" - -#: src/Content/Conversation.php:333 src/Module/Item/Compose.php:153 -#: src/Object/Post.php:967 -msgid "Underline" -msgstr "" - -#: src/Content/Conversation.php:334 src/Module/Item/Compose.php:154 -#: src/Object/Post.php:968 -msgid "Quote" -msgstr "" - -#: src/Content/Conversation.php:335 src/Module/Item/Compose.php:155 -#: src/Object/Post.php:969 -msgid "Code" -msgstr "" - #: src/Content/Conversation.php:336 src/Module/Item/Compose.php:156 #: src/Object/Post.php:970 msgid "Image" msgstr "" -#: src/Content/Conversation.php:337 src/Module/Item/Compose.php:157 -#: src/Object/Post.php:971 -msgid "Link" -msgstr "" - -#: src/Content/Conversation.php:338 src/Module/Item/Compose.php:158 -#: src/Object/Post.php:972 -msgid "Link or Media" -msgstr "" - #: src/Content/Conversation.php:339 msgid "Video" msgstr "" @@ -2773,8 +2773,8 @@ msgstr "" #: src/Content/Item.php:450 src/Module/Contact.php:545 #: src/Module/Contact.php:788 src/Module/Contact.php:1072 -#: src/Module/Notifications/Introductions.php:112 -#: src/Module/Notifications/Introductions.php:184 +#: src/Module/Notifications/Introductions.php:128 +#: src/Module/Notifications/Introductions.php:200 #: src/Module/Notifications/Notification.php:61 msgid "Ignore" msgstr "" @@ -2872,7 +2872,7 @@ msgstr "" msgid "Home" msgstr "" -#: src/Content/Nav.php:216 src/Module/Register.php:157 +#: src/Content/Nav.php:216 src/Module/Register.php:164 #: src/Module/Security/Login.php:105 msgid "Register" msgstr "" @@ -2881,11 +2881,11 @@ msgstr "" msgid "Create an account" msgstr "" -#: src/Content/Nav.php:222 src/Module/Help.php:68 -#: src/Module/Settings/TwoFactor/AppSpecific.php:115 +#: src/Content/Nav.php:222 src/Module/Help.php:67 +#: src/Module/Settings/TwoFactor/AppSpecific.php:127 #: src/Module/Settings/TwoFactor/Index.php:111 -#: src/Module/Settings/TwoFactor/Recovery.php:93 -#: src/Module/Settings/TwoFactor/Verify.php:132 view/theme/vier/theme.php:217 +#: src/Module/Settings/TwoFactor/Recovery.php:105 +#: src/Module/Settings/TwoFactor/Verify.php:144 view/theme/vier/theme.php:217 msgid "Help" msgstr "" @@ -2955,9 +2955,9 @@ msgstr "" msgid "Information about this friendica instance" msgstr "" -#: src/Content/Nav.php:266 src/Module/Admin/Tos.php:59 -#: src/Module/BaseAdmin.php:96 src/Module/Register.php:165 -#: src/Module/Tos.php:84 +#: src/Content/Nav.php:266 src/Module/Admin/Tos.php:76 +#: src/Module/BaseAdmin.php:96 src/Module/Register.php:172 +#: src/Module/Tos.php:88 msgid "Terms of Service" msgstr "" @@ -2981,8 +2981,8 @@ msgstr "" msgid "Friend Requests" msgstr "" -#: src/Content/Nav.php:278 src/Module/BaseNotifications.php:139 -#: src/Module/Notifications/Introductions.php:53 +#: src/Content/Nav.php:278 src/Module/BaseNotifications.php:147 +#: src/Module/Notifications/Introductions.php:69 msgid "Notifications" msgstr "" @@ -3300,7 +3300,7 @@ msgid "Matrix:" msgstr "" #: src/Content/Widget/VCard.php:101 src/Model/Profile.php:466 -#: src/Module/Notifications/Introductions.php:179 +#: src/Module/Notifications/Introductions.php:195 msgid "Network:" msgstr "" @@ -3367,8 +3367,8 @@ msgid "" "or mysql." msgstr "" -#: src/Core/Installer.php:203 src/Module/Install.php:205 -#: src/Module/Install.php:364 +#: src/Core/Installer.php:203 src/Module/Install.php:214 +#: src/Module/Install.php:373 msgid "Please see the file \"doc/INSTALL.md\"." msgstr "" @@ -4053,7 +4053,7 @@ msgstr "" msgid "Internal Server Error" msgstr "" -#: src/LegacyModule.php:49 +#: src/LegacyModule.php:60 #, php-format msgid "Legacy module file not found: %s" msgstr "" @@ -4063,8 +4063,8 @@ msgid "UnFollow" msgstr "" #: src/Model/Contact.php:1061 src/Module/Admin/Users/Pending.php:107 -#: src/Module/Notifications/Introductions.php:110 -#: src/Module/Notifications/Introductions.php:182 +#: src/Module/Notifications/Introductions.php:126 +#: src/Module/Notifications/Introductions.php:198 msgid "Approve" msgstr "" @@ -4301,7 +4301,7 @@ msgid "Homepage:" msgstr "" #: src/Model/Profile.php:372 src/Module/Contact.php:571 -#: src/Module/Notifications/Introductions.php:167 +#: src/Module/Notifications/Introductions.php:183 msgid "About:" msgstr "" @@ -4713,7 +4713,7 @@ msgstr "" #: src/Module/Admin/Queue.php:72 src/Module/Admin/Site.php:498 #: src/Module/Admin/Storage.php:138 src/Module/Admin/Summary.php:232 #: src/Module/Admin/Themes/Details.php:90 src/Module/Admin/Themes/Index.php:111 -#: src/Module/Admin/Tos.php:58 src/Module/Admin/Users/Active.php:136 +#: src/Module/Admin/Tos.php:75 src/Module/Admin/Users/Active.php:136 #: src/Module/Admin/Users/Blocked.php:137 src/Module/Admin/Users/Create.php:61 #: src/Module/Admin/Users/Deleted.php:85 src/Module/Admin/Users/Index.php:149 #: src/Module/Admin/Users/Pending.php:101 @@ -5303,7 +5303,7 @@ msgid "Search in logs" msgstr "" #: src/Module/Admin/Logs/View.php:88 -#: src/Module/Notifications/Notifications.php:126 +#: src/Module/Notifications/Notifications.php:140 msgid "Show all" msgstr "" @@ -5448,15 +5448,15 @@ msgstr "" msgid "Open" msgstr "" -#: src/Module/Admin/Site.php:475 src/Module/Install.php:214 +#: src/Module/Admin/Site.php:475 src/Module/Install.php:223 msgid "No SSL policy, links will track page SSL state" msgstr "" -#: src/Module/Admin/Site.php:476 src/Module/Install.php:215 +#: src/Module/Admin/Site.php:476 src/Module/Install.php:224 msgid "Force all links to use SSL" msgstr "" -#: src/Module/Admin/Site.php:477 src/Module/Install.php:216 +#: src/Module/Admin/Site.php:477 src/Module/Install.php:225 msgid "Self-signed certificate, use SSL for local links only (discouraged)" msgstr "" @@ -5496,7 +5496,7 @@ msgstr "" msgid "Republish users to directory" msgstr "" -#: src/Module/Admin/Site.php:503 src/Module/Register.php:141 +#: src/Module/Admin/Site.php:503 src/Module/Register.php:148 msgid "Registration" msgstr "" @@ -5629,11 +5629,11 @@ msgstr "" msgid "Theme for mobile devices" msgstr "" -#: src/Module/Admin/Site.php:531 src/Module/Install.php:224 +#: src/Module/Admin/Site.php:531 src/Module/Install.php:233 msgid "SSL link policy" msgstr "" -#: src/Module/Admin/Site.php:531 src/Module/Install.php:226 +#: src/Module/Admin/Site.php:531 src/Module/Install.php:235 msgid "Determines whether generated links should be forced to use SSL" msgstr "" @@ -6551,7 +6551,7 @@ msgstr "" msgid "Themes" msgstr "" -#: src/Module/Admin/Themes/Embed.php:65 +#: src/Module/Admin/Themes/Embed.php:79 msgid "Unknown theme." msgstr "" @@ -6576,21 +6576,21 @@ msgstr "" msgid "[Unsupported]" msgstr "" -#: src/Module/Admin/Tos.php:60 +#: src/Module/Admin/Tos.php:77 msgid "Display Terms of Service" msgstr "" -#: src/Module/Admin/Tos.php:60 +#: src/Module/Admin/Tos.php:77 msgid "" "Enable the Terms of Service page. If this is enabled a link to the terms " "will be added to the registration form and the general information page." msgstr "" -#: src/Module/Admin/Tos.php:61 +#: src/Module/Admin/Tos.php:78 msgid "Display Privacy Statement" msgstr "" -#: src/Module/Admin/Tos.php:61 +#: src/Module/Admin/Tos.php:78 #, php-format msgid "" "Show some informations regarding the needed information to operate the node " @@ -6598,15 +6598,15 @@ msgid "" "\">EU-GDPR." msgstr "" -#: src/Module/Admin/Tos.php:62 +#: src/Module/Admin/Tos.php:79 msgid "Privacy Statement Preview" msgstr "" -#: src/Module/Admin/Tos.php:64 +#: src/Module/Admin/Tos.php:81 msgid "The Terms of Service" msgstr "" -#: src/Module/Admin/Tos.php:64 +#: src/Module/Admin/Tos.php:81 msgid "" "Enter the Terms of Service for your node here. You can use BBCode. Headers " "of sections should be [h2] and below." @@ -6798,17 +6798,17 @@ msgstr "" msgid "Deny" msgstr "" -#: src/Module/Api/ApiResponse.php:234 +#: src/Module/Api/ApiResponse.php:230 #, php-format msgid "API endpoint %s %s is not implemented" msgstr "" -#: src/Module/Api/ApiResponse.php:235 +#: src/Module/Api/ApiResponse.php:231 msgid "" "The API endpoint is currently not implemented but might be in the future." msgstr "" -#: src/Module/Api/Mastodon/Apps.php:58 +#: src/Module/Api/Mastodon/Apps.php:57 msgid "Missing parameters" msgstr "" @@ -6843,20 +6843,20 @@ msgstr "" msgid "Posts from %s can't be unshared" msgstr "" -#: src/Module/Api/Twitter/ContactEndpoint.php:63 src/Module/Contact.php:343 +#: src/Module/Api/Twitter/ContactEndpoint.php:64 src/Module/Contact.php:343 #: src/Module/Contact.php:358 msgid "Contact not found" msgstr "" -#: src/Module/Api/Twitter/ContactEndpoint.php:133 +#: src/Module/Api/Twitter/ContactEndpoint.php:134 msgid "Profile not found" msgstr "" -#: src/Module/Apps.php:47 +#: src/Module/Apps.php:51 msgid "No installed applications." msgstr "" -#: src/Module/Apps.php:52 +#: src/Module/Apps.php:56 msgid "Applications" msgstr "" @@ -6950,8 +6950,8 @@ msgstr "" msgid "User registrations waiting for confirmation" msgstr "" -#: src/Module/BaseApi.php:259 src/Module/BaseApi.php:275 -#: src/Module/BaseApi.php:291 +#: src/Module/BaseApi.php:258 src/Module/BaseApi.php:274 +#: src/Module/BaseApi.php:290 msgid "Too Many Requests" msgstr "" @@ -7006,7 +7006,7 @@ msgstr "" msgid "Connected apps" msgstr "" -#: src/Module/BaseSettings.php:108 src/Module/Settings/UserExport.php:76 +#: src/Module/BaseSettings.php:108 src/Module/Settings/UserExport.php:75 msgid "Export personal data" msgstr "" @@ -7216,7 +7216,7 @@ msgstr "" msgid "Awaiting connection acknowledge" msgstr "" -#: src/Module/Contact.php:553 src/Module/Notifications/Introductions.php:170 +#: src/Module/Contact.php:553 src/Module/Notifications/Introductions.php:186 msgid "Hide this contact from others" msgstr "" @@ -7367,7 +7367,7 @@ msgstr "" msgid "Toggle Ignored status" msgstr "" -#: src/Module/Contact.php:1081 src/Module/Contact/Revoke.php:96 +#: src/Module/Contact.php:1081 src/Module/Contact/Revoke.php:111 msgid "Revoke Follow" msgstr "" @@ -7375,59 +7375,59 @@ msgstr "" msgid "Revoke the follow from this contact" msgstr "" -#: src/Module/Contact/Advanced.php:93 +#: src/Module/Contact/Advanced.php:109 msgid "Contact update failed." msgstr "" -#: src/Module/Contact/Advanced.php:110 +#: src/Module/Contact/Advanced.php:124 msgid "" "WARNING: This is highly advanced and if you enter incorrect " "information your communications with this contact may stop working." msgstr "" -#: src/Module/Contact/Advanced.php:111 +#: src/Module/Contact/Advanced.php:125 msgid "" "Please use your browser 'Back' button now if you are " "uncertain what to do on this page." msgstr "" -#: src/Module/Contact/Advanced.php:131 +#: src/Module/Contact/Advanced.php:145 msgid "Return to contact editor" msgstr "" -#: src/Module/Contact/Advanced.php:136 +#: src/Module/Contact/Advanced.php:150 msgid "Account Nickname" msgstr "" -#: src/Module/Contact/Advanced.php:137 +#: src/Module/Contact/Advanced.php:151 msgid "@Tagname - overrides Name/Nickname" msgstr "" -#: src/Module/Contact/Advanced.php:138 +#: src/Module/Contact/Advanced.php:152 msgid "Account URL" msgstr "" -#: src/Module/Contact/Advanced.php:139 +#: src/Module/Contact/Advanced.php:153 msgid "Account URL Alias" msgstr "" -#: src/Module/Contact/Advanced.php:140 +#: src/Module/Contact/Advanced.php:154 msgid "Friend Request URL" msgstr "" -#: src/Module/Contact/Advanced.php:141 +#: src/Module/Contact/Advanced.php:155 msgid "Friend Confirm URL" msgstr "" -#: src/Module/Contact/Advanced.php:142 +#: src/Module/Contact/Advanced.php:156 msgid "Notification Endpoint URL" msgstr "" -#: src/Module/Contact/Advanced.php:143 +#: src/Module/Contact/Advanced.php:157 msgid "Poll/Feed URL" msgstr "" -#: src/Module/Contact/Advanced.php:144 +#: src/Module/Contact/Advanced.php:158 msgid "New photo from this URL" msgstr "" @@ -7514,42 +7514,42 @@ msgstr "" msgid "Make this post private" msgstr "" -#: src/Module/Contact/Revoke.php:48 +#: src/Module/Contact/Revoke.php:63 msgid "Unknown contact." msgstr "" -#: src/Module/Contact/Revoke.php:58 src/Module/Group.php:108 +#: src/Module/Contact/Revoke.php:73 src/Module/Group.php:108 msgid "Contact is deleted." msgstr "" -#: src/Module/Contact/Revoke.php:62 +#: src/Module/Contact/Revoke.php:77 msgid "Contact is being deleted." msgstr "" -#: src/Module/Contact/Revoke.php:76 +#: src/Module/Contact/Revoke.php:91 msgid "Follow was successfully revoked." msgstr "" -#: src/Module/Contact/Revoke.php:78 +#: src/Module/Contact/Revoke.php:93 msgid "" "Follow was successfully revoked, however the remote contact won't be aware " "of this revokation." msgstr "" -#: src/Module/Contact/Revoke.php:80 +#: src/Module/Contact/Revoke.php:95 msgid "" "Unable to revoke follow, please try again later or contact the administrator." msgstr "" -#: src/Module/Contact/Revoke.php:97 +#: src/Module/Contact/Revoke.php:112 msgid "" "Do you really want to revoke this contact's follow? This cannot be undone " "and they will have to manually follow you back again." msgstr "" -#: src/Module/Contact/Revoke.php:98 -#: src/Module/Notifications/Introductions.php:122 -#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:117 +#: src/Module/Contact/Revoke.php:113 +#: src/Module/Notifications/Introductions.php:138 +#: src/Module/OAuth/Acknowledge.php:47 src/Module/Register.php:126 msgid "Yes" msgstr "" @@ -7592,11 +7592,11 @@ msgid "" "not reflect the opinions of this node’s users." msgstr "" -#: src/Module/Conversation/Community.php:200 +#: src/Module/Conversation/Community.php:199 msgid "Community option not available." msgstr "" -#: src/Module/Conversation/Community.php:216 +#: src/Module/Conversation/Community.php:215 msgid "Not available." msgstr "" @@ -7849,12 +7849,12 @@ msgstr "" msgid "Twitter Source / Tweet URL (requires API key)" msgstr "" -#: src/Module/Debug/Feed.php:38 src/Module/Filer/SaveTag.php:40 +#: src/Module/Debug/Feed.php:47 src/Module/Filer/SaveTag.php:49 #: src/Module/Settings/Profile/Index.php:141 msgid "You must be logged in to use this module" msgstr "" -#: src/Module/Debug/Feed.php:63 +#: src/Module/Debug/Feed.php:72 msgid "Source URL" msgstr "" @@ -7953,23 +7953,23 @@ msgstr "" msgid "Item was not deleted" msgstr "" -#: src/Module/Filer/SaveTag.php:68 +#: src/Module/Filer/SaveTag.php:75 msgid "- select -" msgstr "" -#: src/Module/FriendSuggest.php:65 +#: src/Module/FriendSuggest.php:82 msgid "Suggested contact not found." msgstr "" -#: src/Module/FriendSuggest.php:83 +#: src/Module/FriendSuggest.php:100 msgid "Friend suggestion sent." msgstr "" -#: src/Module/FriendSuggest.php:120 +#: src/Module/FriendSuggest.php:137 msgid "Suggest Friends" msgstr "" -#: src/Module/FriendSuggest.php:123 +#: src/Module/FriendSuggest.php:140 #, php-format msgid "Suggest a friend for %s" msgstr "" @@ -8109,7 +8109,7 @@ msgstr "" msgid "Method Not Allowed." msgstr "" -#: src/Module/Help.php:61 +#: src/Module/Help.php:60 msgid "Help:" msgstr "" @@ -8118,155 +8118,155 @@ msgstr "" msgid "Welcome to %s" msgstr "" -#: src/Module/Install.php:187 +#: src/Module/Install.php:196 msgid "Friendica Communications Server - Setup" msgstr "" -#: src/Module/Install.php:198 +#: src/Module/Install.php:207 msgid "System check" msgstr "" -#: src/Module/Install.php:200 src/Module/Install.php:257 -#: src/Module/Install.php:340 +#: src/Module/Install.php:209 src/Module/Install.php:266 +#: src/Module/Install.php:349 msgid "Requirement not satisfied" msgstr "" -#: src/Module/Install.php:201 +#: src/Module/Install.php:210 msgid "Optional requirement not satisfied" msgstr "" -#: src/Module/Install.php:202 +#: src/Module/Install.php:211 msgid "OK" msgstr "" -#: src/Module/Install.php:207 +#: src/Module/Install.php:216 msgid "Check again" msgstr "" -#: src/Module/Install.php:222 +#: src/Module/Install.php:231 msgid "Base settings" msgstr "" -#: src/Module/Install.php:229 +#: src/Module/Install.php:238 msgid "Host name" msgstr "" -#: src/Module/Install.php:231 +#: src/Module/Install.php:240 msgid "" "Overwrite this field in case the determinated hostname isn't right, " "otherweise leave it as is." msgstr "" -#: src/Module/Install.php:234 +#: src/Module/Install.php:243 msgid "Base path to installation" msgstr "" -#: src/Module/Install.php:236 +#: src/Module/Install.php:245 msgid "" "If the system cannot detect the correct path to your installation, enter the " "correct path here. This setting should only be set if you are using a " "restricted system and symbolic links to your webroot." msgstr "" -#: src/Module/Install.php:239 +#: src/Module/Install.php:248 msgid "Sub path of the URL" msgstr "" -#: src/Module/Install.php:241 +#: src/Module/Install.php:250 msgid "" "Overwrite this field in case the sub path determination isn't right, " "otherwise leave it as is. Leaving this field blank means the installation is " "at the base URL without sub path." msgstr "" -#: src/Module/Install.php:252 +#: src/Module/Install.php:261 msgid "Database connection" msgstr "" -#: src/Module/Install.php:253 +#: src/Module/Install.php:262 msgid "" "In order to install Friendica we need to know how to connect to your " "database." msgstr "" -#: src/Module/Install.php:254 +#: src/Module/Install.php:263 msgid "" "Please contact your hosting provider or site administrator if you have " "questions about these settings." msgstr "" -#: src/Module/Install.php:255 +#: src/Module/Install.php:264 msgid "" "The database you specify below should already exist. If it does not, please " "create it before continuing." msgstr "" -#: src/Module/Install.php:264 +#: src/Module/Install.php:273 msgid "Database Server Name" msgstr "" -#: src/Module/Install.php:269 +#: src/Module/Install.php:278 msgid "Database Login Name" msgstr "" -#: src/Module/Install.php:275 +#: src/Module/Install.php:284 msgid "Database Login Password" msgstr "" -#: src/Module/Install.php:277 +#: src/Module/Install.php:286 msgid "For security reasons the password must not be empty" msgstr "" -#: src/Module/Install.php:280 +#: src/Module/Install.php:289 msgid "Database Name" msgstr "" -#: src/Module/Install.php:284 src/Module/Install.php:314 +#: src/Module/Install.php:293 src/Module/Install.php:323 msgid "Please select a default timezone for your website" msgstr "" -#: src/Module/Install.php:299 +#: src/Module/Install.php:308 msgid "Site settings" msgstr "" -#: src/Module/Install.php:309 +#: src/Module/Install.php:318 msgid "Site administrator email address" msgstr "" -#: src/Module/Install.php:311 +#: src/Module/Install.php:320 msgid "" "Your account email address must match this in order to use the web admin " "panel." msgstr "" -#: src/Module/Install.php:318 +#: src/Module/Install.php:327 msgid "System Language:" msgstr "" -#: src/Module/Install.php:320 +#: src/Module/Install.php:329 msgid "" "Set the default language for your Friendica installation interface and to " "send emails." msgstr "" -#: src/Module/Install.php:332 +#: src/Module/Install.php:341 msgid "Your Friendica site database has been installed." msgstr "" -#: src/Module/Install.php:342 +#: src/Module/Install.php:351 msgid "Installation finished" msgstr "" -#: src/Module/Install.php:362 +#: src/Module/Install.php:371 msgid "

What next

" msgstr "" -#: src/Module/Install.php:363 +#: src/Module/Install.php:372 msgid "" "IMPORTANT: You will need to [manually] setup a scheduled task for the worker." msgstr "" -#: src/Module/Install.php:366 +#: src/Module/Install.php:375 #, php-format msgid "" "Go to your new Friendica node registration page " @@ -8431,64 +8431,64 @@ msgstr "" msgid "A Decentralized Social Network" msgstr "" -#: src/Module/Notifications/Introductions.php:77 +#: src/Module/Notifications/Introductions.php:93 msgid "Show Ignored Requests" msgstr "" -#: src/Module/Notifications/Introductions.php:77 +#: src/Module/Notifications/Introductions.php:93 msgid "Hide Ignored Requests" msgstr "" -#: src/Module/Notifications/Introductions.php:93 -#: src/Module/Notifications/Introductions.php:156 +#: src/Module/Notifications/Introductions.php:109 +#: src/Module/Notifications/Introductions.php:172 msgid "Notification type:" msgstr "" -#: src/Module/Notifications/Introductions.php:96 +#: src/Module/Notifications/Introductions.php:112 msgid "Suggested by:" msgstr "" -#: src/Module/Notifications/Introductions.php:121 +#: src/Module/Notifications/Introductions.php:137 msgid "Claims to be known to you: " msgstr "" -#: src/Module/Notifications/Introductions.php:122 -#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:118 +#: src/Module/Notifications/Introductions.php:138 +#: src/Module/OAuth/Acknowledge.php:48 src/Module/Register.php:127 msgid "No" msgstr "" -#: src/Module/Notifications/Introductions.php:130 +#: src/Module/Notifications/Introductions.php:146 msgid "Shall your connection be bidirectional or not?" msgstr "" -#: src/Module/Notifications/Introductions.php:131 +#: src/Module/Notifications/Introductions.php:147 #, php-format msgid "" "Accepting %s as a friend allows %s to subscribe to your posts, and you will " "also receive updates from them in your news feed." msgstr "" -#: src/Module/Notifications/Introductions.php:132 +#: src/Module/Notifications/Introductions.php:148 #, php-format msgid "" "Accepting %s as a subscriber allows them to subscribe to your posts, but you " "will not receive updates from them in your news feed." msgstr "" -#: src/Module/Notifications/Introductions.php:134 +#: src/Module/Notifications/Introductions.php:150 msgid "Friend" msgstr "" -#: src/Module/Notifications/Introductions.php:135 +#: src/Module/Notifications/Introductions.php:151 msgid "Subscriber" msgstr "" -#: src/Module/Notifications/Introductions.php:194 +#: src/Module/Notifications/Introductions.php:210 msgid "No introductions." msgstr "" -#: src/Module/Notifications/Introductions.php:195 -#: src/Module/Notifications/Notifications.php:121 +#: src/Module/Notifications/Introductions.php:211 +#: src/Module/Notifications/Notifications.php:135 #, php-format msgid "No more %s notifications." msgstr "" @@ -8497,23 +8497,23 @@ msgstr "" msgid "You must be logged in to show this page." msgstr "" -#: src/Module/Notifications/Notifications.php:52 +#: src/Module/Notifications/Notifications.php:66 msgid "Network Notifications" msgstr "" -#: src/Module/Notifications/Notifications.php:58 +#: src/Module/Notifications/Notifications.php:72 msgid "System Notifications" msgstr "" -#: src/Module/Notifications/Notifications.php:64 +#: src/Module/Notifications/Notifications.php:78 msgid "Personal Notifications" msgstr "" -#: src/Module/Notifications/Notifications.php:70 +#: src/Module/Notifications/Notifications.php:84 msgid "Home Notifications" msgstr "" -#: src/Module/Notifications/Notifications.php:126 +#: src/Module/Notifications/Notifications.php:140 msgid "Show unread" msgstr "" @@ -8527,15 +8527,15 @@ msgid "" "and/or create new posts for you?" msgstr "" -#: src/Module/OAuth/Authorize.php:55 +#: src/Module/OAuth/Authorize.php:54 msgid "Unsupported or missing response type" msgstr "" -#: src/Module/OAuth/Authorize.php:60 src/Module/OAuth/Token.php:65 +#: src/Module/OAuth/Authorize.php:59 src/Module/OAuth/Token.php:65 msgid "Incomplete request data" msgstr "" -#: src/Module/OAuth/Authorize.php:107 +#: src/Module/OAuth/Authorize.php:106 #, php-format msgid "" "Please copy the following authentication code into your application and " @@ -8669,163 +8669,163 @@ msgstr "" msgid "Remove post" msgstr "" -#: src/Module/Register.php:71 +#: src/Module/Register.php:80 msgid "Only parent users can create additional accounts." msgstr "" -#: src/Module/Register.php:103 +#: src/Module/Register.php:112 msgid "" "You may (optionally) fill in this form via OpenID by supplying your OpenID " "and clicking \"Register\"." msgstr "" -#: src/Module/Register.php:104 +#: src/Module/Register.php:113 msgid "" "If you are not familiar with OpenID, please leave that field blank and fill " "in the rest of the items." msgstr "" -#: src/Module/Register.php:105 +#: src/Module/Register.php:114 msgid "Your OpenID (optional): " msgstr "" -#: src/Module/Register.php:114 +#: src/Module/Register.php:123 msgid "Include your profile in member directory?" msgstr "" -#: src/Module/Register.php:137 +#: src/Module/Register.php:144 msgid "Note for the admin" msgstr "" -#: src/Module/Register.php:137 +#: src/Module/Register.php:144 msgid "Leave a message for the admin, why you want to join this node" msgstr "" -#: src/Module/Register.php:138 +#: src/Module/Register.php:145 msgid "Membership on this site is by invitation only." msgstr "" -#: src/Module/Register.php:139 +#: src/Module/Register.php:146 msgid "Your invitation code: " msgstr "" -#: src/Module/Register.php:147 +#: src/Module/Register.php:154 msgid "Your Full Name (e.g. Joe Smith, real or real-looking): " msgstr "" -#: src/Module/Register.php:148 +#: src/Module/Register.php:155 msgid "" "Your Email Address: (Initial information will be send there, so this has to " "be an existing address.)" msgstr "" -#: src/Module/Register.php:149 +#: src/Module/Register.php:156 msgid "Please repeat your e-mail address:" msgstr "" -#: src/Module/Register.php:151 +#: src/Module/Register.php:158 msgid "Leave empty for an auto generated password." msgstr "" -#: src/Module/Register.php:153 +#: src/Module/Register.php:160 #, php-format msgid "" "Choose a profile nickname. This must begin with a text character. Your " "profile address on this site will then be \"nickname@%s\"." msgstr "" -#: src/Module/Register.php:154 +#: src/Module/Register.php:161 msgid "Choose a nickname: " msgstr "" -#: src/Module/Register.php:163 +#: src/Module/Register.php:170 msgid "Import your profile to this friendica instance" msgstr "" -#: src/Module/Register.php:170 +#: src/Module/Register.php:177 msgid "Note: This node explicitly contains adult content" msgstr "" -#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155 +#: src/Module/Register.php:179 src/Module/Settings/Delegation.php:155 msgid "Parent Password:" msgstr "" -#: src/Module/Register.php:172 src/Module/Settings/Delegation.php:155 +#: src/Module/Register.php:179 src/Module/Settings/Delegation.php:155 msgid "" "Please enter the password of the parent account to legitimize your request." msgstr "" -#: src/Module/Register.php:201 +#: src/Module/Register.php:208 msgid "Password doesn't match." msgstr "" -#: src/Module/Register.php:207 +#: src/Module/Register.php:214 msgid "Please enter your password." msgstr "" -#: src/Module/Register.php:249 +#: src/Module/Register.php:256 msgid "You have entered too much information." msgstr "" -#: src/Module/Register.php:272 +#: src/Module/Register.php:279 msgid "Please enter the identical mail address in the second field." msgstr "" -#: src/Module/Register.php:299 +#: src/Module/Register.php:306 msgid "The additional account was created." msgstr "" -#: src/Module/Register.php:324 +#: src/Module/Register.php:331 msgid "" "Registration successful. Please check your email for further instructions." msgstr "" -#: src/Module/Register.php:328 +#: src/Module/Register.php:335 #, php-format msgid "" "Failed to send email message. Here your accout details:
login: %s
" "password: %s

You can change your password after login." msgstr "" -#: src/Module/Register.php:334 +#: src/Module/Register.php:341 msgid "Registration successful." msgstr "" -#: src/Module/Register.php:339 src/Module/Register.php:346 +#: src/Module/Register.php:346 src/Module/Register.php:353 msgid "Your registration can not be processed." msgstr "" -#: src/Module/Register.php:345 +#: src/Module/Register.php:352 msgid "You have to leave a request note for the admin." msgstr "" -#: src/Module/Register.php:391 +#: src/Module/Register.php:398 msgid "Your registration is pending approval by the site owner." msgstr "" -#: src/Module/RemoteFollow.php:62 +#: src/Module/RemoteFollow.php:72 msgid "Profile unavailable." msgstr "" -#: src/Module/RemoteFollow.php:68 +#: src/Module/RemoteFollow.php:78 msgid "Invalid locator" msgstr "" -#: src/Module/RemoteFollow.php:75 +#: src/Module/RemoteFollow.php:85 msgid "The provided profile link doesn't seem to be valid" msgstr "" -#: src/Module/RemoteFollow.php:80 +#: src/Module/RemoteFollow.php:90 msgid "" "Remote subscription can't be done for your network. Please subscribe " "directly on your system." msgstr "" -#: src/Module/RemoteFollow.php:110 +#: src/Module/RemoteFollow.php:122 msgid "Friend/Connection Request" msgstr "" -#: src/Module/RemoteFollow.php:111 +#: src/Module/RemoteFollow.php:123 #, php-format msgid "" "Enter your Webfinger address (user@domain.tld) or profile URL here. If this " @@ -8833,14 +8833,14 @@ msgid "" "or %s directly on your system." msgstr "" -#: src/Module/RemoteFollow.php:112 +#: src/Module/RemoteFollow.php:124 #, php-format msgid "" "If you are not yet a member of the free social web, follow " "this link to find a public Friendica node and join us today." msgstr "" -#: src/Module/RemoteFollow.php:113 +#: src/Module/RemoteFollow.php:125 msgid "Your Webfinger address or profile URL:" msgstr "" @@ -8857,15 +8857,15 @@ msgstr "" msgid "Items tagged with: %s" msgstr "" -#: src/Module/Search/Saved.php:44 +#: src/Module/Search/Saved.php:62 msgid "Search term was not saved." msgstr "" -#: src/Module/Search/Saved.php:47 +#: src/Module/Search/Saved.php:65 msgid "Search term already saved." msgstr "" -#: src/Module/Search/Saved.php:53 +#: src/Module/Search/Saved.php:71 msgid "Search term was not removed." msgstr "" @@ -8915,7 +8915,7 @@ msgstr "" msgid "privacy policy" msgstr "" -#: src/Module/Security/Logout.php:61 +#: src/Module/Security/Logout.php:87 msgid "Logged out." msgstr "" @@ -8935,39 +8935,39 @@ msgid "" "account to add the OpenID to it." msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:61 +#: src/Module/Security/TwoFactor/Recovery.php:73 #, php-format msgid "Remaining recovery codes: %d" msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:65 +#: src/Module/Security/TwoFactor/Recovery.php:77 #: src/Module/Security/TwoFactor/Verify.php:76 -#: src/Module/Settings/TwoFactor/Verify.php:82 +#: src/Module/Settings/TwoFactor/Verify.php:94 msgid "Invalid code, please retry." msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:84 +#: src/Module/Security/TwoFactor/Recovery.php:96 msgid "Two-factor recovery" msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:85 +#: src/Module/Security/TwoFactor/Recovery.php:97 msgid "" "

You can enter one of your one-time recovery codes in case you lost access " "to your mobile device.

" msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:86 +#: src/Module/Security/TwoFactor/Recovery.php:98 #: src/Module/Security/TwoFactor/Verify.php:99 #, php-format msgid "" "Don’t have your phone? Enter a two-factor recovery code" msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:87 +#: src/Module/Security/TwoFactor/Recovery.php:99 msgid "Please enter a recovery code" msgstr "" -#: src/Module/Security/TwoFactor/Recovery.php:88 +#: src/Module/Security/TwoFactor/Recovery.php:100 msgid "Submit recovery code and complete login" msgstr "" @@ -8978,7 +8978,7 @@ msgid "" msgstr "" #: src/Module/Security/TwoFactor/Verify.php:100 -#: src/Module/Settings/TwoFactor/Verify.php:141 +#: src/Module/Settings/TwoFactor/Verify.php:153 msgid "Please enter a code from your authentication app" msgstr "" @@ -9401,82 +9401,82 @@ msgstr "" msgid "select a photo from your photo albums" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:52 -#: src/Module/Settings/TwoFactor/Recovery.php:50 -#: src/Module/Settings/TwoFactor/Trusted.php:30 -#: src/Module/Settings/TwoFactor/Verify.php:56 +#: src/Module/Settings/TwoFactor/AppSpecific.php:64 +#: src/Module/Settings/TwoFactor/Recovery.php:62 +#: src/Module/Settings/TwoFactor/Trusted.php:45 +#: src/Module/Settings/TwoFactor/Verify.php:68 msgid "Please enter your password to access this page." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:70 +#: src/Module/Settings/TwoFactor/AppSpecific.php:82 msgid "App-specific password generation failed: The description is empty." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:73 +#: src/Module/Settings/TwoFactor/AppSpecific.php:85 msgid "" "App-specific password generation failed: This description already exists." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:77 +#: src/Module/Settings/TwoFactor/AppSpecific.php:89 msgid "New app-specific password generated." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:83 +#: src/Module/Settings/TwoFactor/AppSpecific.php:95 msgid "App-specific passwords successfully revoked." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:93 +#: src/Module/Settings/TwoFactor/AppSpecific.php:105 msgid "App-specific password successfully revoked." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:114 +#: src/Module/Settings/TwoFactor/AppSpecific.php:126 msgid "Two-factor app-specific passwords" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:116 +#: src/Module/Settings/TwoFactor/AppSpecific.php:128 msgid "" "

App-specific passwords are randomly generated passwords used instead your " "regular password to authenticate your account on third-party applications " "that don't support two-factor authentication.

" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:117 +#: src/Module/Settings/TwoFactor/AppSpecific.php:129 msgid "" "Make sure to copy your new app-specific password now. You won’t be able to " "see it again!" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:120 +#: src/Module/Settings/TwoFactor/AppSpecific.php:132 msgid "Description" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:121 +#: src/Module/Settings/TwoFactor/AppSpecific.php:133 msgid "Last Used" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:122 +#: src/Module/Settings/TwoFactor/AppSpecific.php:134 msgid "Revoke" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:123 +#: src/Module/Settings/TwoFactor/AppSpecific.php:135 msgid "Revoke All" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:126 +#: src/Module/Settings/TwoFactor/AppSpecific.php:138 msgid "" "When you generate a new app-specific password, you must use it right away, " "it will be shown to you once after you generate it." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:127 +#: src/Module/Settings/TwoFactor/AppSpecific.php:139 msgid "Generate new app-specific password" msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:128 +#: src/Module/Settings/TwoFactor/AppSpecific.php:140 msgid "Friendiqa on my Fairphone 2..." msgstr "" -#: src/Module/Settings/TwoFactor/AppSpecific.php:129 +#: src/Module/Settings/TwoFactor/AppSpecific.php:141 msgid "Generate" msgstr "" @@ -9576,15 +9576,15 @@ msgstr "" msgid "Finish app configuration" msgstr "" -#: src/Module/Settings/TwoFactor/Recovery.php:66 +#: src/Module/Settings/TwoFactor/Recovery.php:78 msgid "New recovery codes successfully generated." msgstr "" -#: src/Module/Settings/TwoFactor/Recovery.php:92 +#: src/Module/Settings/TwoFactor/Recovery.php:104 msgid "Two-factor recovery codes" msgstr "" -#: src/Module/Settings/TwoFactor/Recovery.php:94 +#: src/Module/Settings/TwoFactor/Recovery.php:106 msgid "" "

Recovery codes can be used to access your account in the event you lose " "access to your device and cannot receive two-factor authentication codes." msgstr "" -#: src/Module/Settings/TwoFactor/Recovery.php:96 +#: src/Module/Settings/TwoFactor/Recovery.php:108 msgid "" "When you generate new recovery codes, you must copy the new codes. Your old " "codes won’t work anymore." msgstr "" -#: src/Module/Settings/TwoFactor/Recovery.php:97 +#: src/Module/Settings/TwoFactor/Recovery.php:109 msgid "Generate new recovery codes" msgstr "" -#: src/Module/Settings/TwoFactor/Recovery.php:99 +#: src/Module/Settings/TwoFactor/Recovery.php:111 msgid "Next: Verification" msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:49 +#: src/Module/Settings/TwoFactor/Trusted.php:62 msgid "Trusted browsers successfully removed." msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:59 +#: src/Module/Settings/TwoFactor/Trusted.php:72 msgid "Trusted browser successfully removed." msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:97 +#: src/Module/Settings/TwoFactor/Trusted.php:109 msgid "Two-factor Trusted Browsers" msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:98 +#: src/Module/Settings/TwoFactor/Trusted.php:110 msgid "" "Trusted browsers are individual browsers you chose to skip two-factor " "authentication to access Friendica. Please use this feature sparingly, as it " "can negate the benefit of two-factor authentication." msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:99 +#: src/Module/Settings/TwoFactor/Trusted.php:111 msgid "Device" msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:100 +#: src/Module/Settings/TwoFactor/Trusted.php:112 msgid "OS" msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:102 +#: src/Module/Settings/TwoFactor/Trusted.php:114 msgid "Trusted" msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:103 +#: src/Module/Settings/TwoFactor/Trusted.php:115 msgid "Last Use" msgstr "" -#: src/Module/Settings/TwoFactor/Trusted.php:105 +#: src/Module/Settings/TwoFactor/Trusted.php:117 msgid "Remove All" msgstr "" -#: src/Module/Settings/TwoFactor/Verify.php:78 +#: src/Module/Settings/TwoFactor/Verify.php:90 msgid "Two-factor authentication successfully activated." msgstr "" -#: src/Module/Settings/TwoFactor/Verify.php:111 +#: src/Module/Settings/TwoFactor/Verify.php:123 #, php-format msgid "" "

Or you can submit the authentication settings manually:

\n" @@ -9669,53 +9669,53 @@ msgid "" "
" msgstr "" -#: src/Module/Settings/TwoFactor/Verify.php:131 +#: src/Module/Settings/TwoFactor/Verify.php:143 msgid "Two-factor code verification" msgstr "" -#: src/Module/Settings/TwoFactor/Verify.php:133 +#: src/Module/Settings/TwoFactor/Verify.php:145 msgid "" "

Please scan this QR Code with your authenticator app and submit the " "provided code.

" msgstr "" -#: src/Module/Settings/TwoFactor/Verify.php:135 +#: src/Module/Settings/TwoFactor/Verify.php:147 #, php-format msgid "" "

Or you can open the following URL in your mobile device:

%s

" msgstr "" -#: src/Module/Settings/TwoFactor/Verify.php:142 +#: src/Module/Settings/TwoFactor/Verify.php:154 msgid "Verify code and enable two-factor authentication" msgstr "" -#: src/Module/Settings/UserExport.php:68 +#: src/Module/Settings/UserExport.php:67 msgid "Export account" msgstr "" -#: src/Module/Settings/UserExport.php:68 +#: src/Module/Settings/UserExport.php:67 msgid "" "Export your account info and contacts. Use this to make a backup of your " "account and/or to move it to another server." msgstr "" -#: src/Module/Settings/UserExport.php:69 +#: src/Module/Settings/UserExport.php:68 msgid "Export all" msgstr "" -#: src/Module/Settings/UserExport.php:69 +#: src/Module/Settings/UserExport.php:68 msgid "" "Export your account info, contacts and all your items as json. Could be a " "very big file, and could take a lot of time. Use this to make a full backup " "of your account (photos are not exported)" msgstr "" -#: src/Module/Settings/UserExport.php:70 +#: src/Module/Settings/UserExport.php:69 msgid "Export Contacts to CSV" msgstr "" -#: src/Module/Settings/UserExport.php:70 +#: src/Module/Settings/UserExport.php:69 msgid "" "Export the list of the accounts you are following as CSV file. Compatible to " "e.g. Mastodon." @@ -9730,7 +9730,7 @@ msgstr "" msgid "Exception thrown in %s:%d" msgstr "" -#: src/Module/Tos.php:46 src/Module/Tos.php:88 +#: src/Module/Tos.php:58 src/Module/Tos.php:92 msgid "" "At the time of registration, and for providing communications between the " "user account and their contacts, the user has to provide a display name (pen " @@ -9743,14 +9743,14 @@ msgid "" "settings, it is not necessary for communication." msgstr "" -#: src/Module/Tos.php:47 src/Module/Tos.php:89 +#: src/Module/Tos.php:59 src/Module/Tos.php:93 msgid "" "This data is required for communication and is passed on to the nodes of the " "communication partners and is stored there. Users can enter additional " "private data that may be transmitted to the communication partners accounts." msgstr "" -#: src/Module/Tos.php:48 src/Module/Tos.php:90 +#: src/Module/Tos.php:60 src/Module/Tos.php:94 #, php-format msgid "" "At any point in time a logged in user can export their account data from the " @@ -9760,7 +9760,7 @@ msgid "" "data will also be requested from the nodes of the communication partners." msgstr "" -#: src/Module/Tos.php:51 src/Module/Tos.php:87 +#: src/Module/Tos.php:63 src/Module/Tos.php:91 msgid "Privacy Statement" msgstr "" diff --git a/view/theme/frio/js/filebrowser.js b/view/theme/frio/js/filebrowser.js index a9ee6ea08..bebb27907 100644 --- a/view/theme/frio/js/filebrowser.js +++ b/view/theme/frio/js/filebrowser.js @@ -96,7 +96,7 @@ var FileBrowser = { }); // Click on album link - $(".fbrowser").on("click", ".folders a, .path a", function (e) { + $(".fbrowser").on("click", ".folders button, .path button", function (e) { e.preventDefault(); var url = baseurl + diff --git a/view/theme/frio/templates/filebrowser.tpl b/view/theme/frio/templates/filebrowser.tpl index 1f849555c..e8c03cf38 100644 --- a/view/theme/frio/templates/filebrowser.tpl +++ b/view/theme/frio/templates/filebrowser.tpl @@ -8,9 +8,11 @@ {{* The breadcrumb navigation *}} -