Address PHPStan warnings in 'classes/api.php'.

This commit is contained in:
wn_ 2021-11-13 14:15:20 +00:00
parent 1ec003ce35
commit 3ba8d964b6
1 changed files with 60 additions and 49 deletions

View File

@ -13,13 +13,20 @@ class API extends Handler {
const E_UNKNOWN_METHOD = "UNKNOWN_METHOD";
const E_OPERATION_FAILED = "E_OPERATION_FAILED";
/** @var int|null */
private $seq;
private static function _param_to_bool($p) {
/**
* @param mixed $p
*/
private static function _param_to_bool($p): bool {
return $p && ($p !== "f" && $p !== "false");
}
private function _wrap($status, $reply) {
/**
* @param array<int|string, mixed> $reply
*/
private function _wrap(int $status, array $reply): void {
print json_encode([
"seq" => $this->seq,
"status" => $status,
@ -48,17 +55,17 @@ class API extends Handler {
return false;
}
function getVersion() {
function getVersion(): void {
$rv = array("version" => Config::get_version());
$this->_wrap(self::STATUS_OK, $rv);
}
function getApiLevel() {
function getApiLevel(): void {
$rv = array("level" => self::API_LEVEL);
$this->_wrap(self::STATUS_OK, $rv);
}
function login() {
function login(): void {
if (session_status() == PHP_SESSION_ACTIVE) {
session_destroy();
@ -87,22 +94,20 @@ class API extends Handler {
} else {
$this->_wrap(self::STATUS_ERR, array("error" => self::E_API_DISABLED));
}
} else {
$this->_wrap(self::STATUS_ERR, array("error" => self::E_LOGIN_ERROR));
return;
}
$this->_wrap(self::STATUS_ERR, array("error" => self::E_LOGIN_ERROR));
}
function logout() {
function logout(): void {
UserHelper::logout();
$this->_wrap(self::STATUS_OK, array("status" => "OK"));
}
function isLoggedIn() {
function isLoggedIn(): void {
$this->_wrap(self::STATUS_OK, array("status" => $_SESSION["uid"] != ''));
}
function getUnread() {
function getUnread(): void {
$feed_id = clean($_REQUEST["feed_id"] ?? "");
$is_cat = clean($_REQUEST["is_cat"] ?? "");
@ -114,12 +119,12 @@ class API extends Handler {
}
/* Method added for ttrss-reader for Android */
function getCounters() {
function getCounters(): void {
$this->_wrap(self::STATUS_OK, Counters::get_all());
}
function getFeeds() {
$cat_id = clean($_REQUEST["cat_id"]);
function getFeeds(): void {
$cat_id = (int) clean($_REQUEST["cat_id"]);
$unread_only = self::_param_to_bool(clean($_REQUEST["unread_only"] ?? 0));
$limit = (int) clean($_REQUEST["limit"] ?? 0);
$offset = (int) clean($_REQUEST["offset"] ?? 0);
@ -130,7 +135,7 @@ class API extends Handler {
$this->_wrap(self::STATUS_OK, $feeds);
}
function getCategories() {
function getCategories(): void {
$unread_only = self::_param_to_bool(clean($_REQUEST["unread_only"] ?? false));
$enable_nested = self::_param_to_bool(clean($_REQUEST["enable_nested"] ?? false));
$include_empty = self::_param_to_bool(clean($_REQUEST['include_empty'] ?? false));
@ -186,11 +191,11 @@ class API extends Handler {
$this->_wrap(self::STATUS_OK, $cats);
}
function getHeadlines() {
function getHeadlines(): void {
$feed_id = clean($_REQUEST["feed_id"]);
if ($feed_id !== "") {
if ($feed_id !== "" && is_numeric($feed_id)) {
if (is_numeric($feed_id)) $feed_id = (int) $feed_id;
$feed_id = (int) $feed_id;
$limit = (int)clean($_REQUEST["limit"] ?? 0 );
@ -237,7 +242,7 @@ class API extends Handler {
}
}
function updateArticle() {
function updateArticle(): void {
$article_ids = explode(",", clean($_REQUEST["article_ids"]));
$mode = (int) clean($_REQUEST["mode"]);
$data = clean($_REQUEST["data"] ?? "");
@ -303,7 +308,7 @@ class API extends Handler {
}
function getArticle() {
function getArticle(): void {
$article_ids = explode(',', clean($_REQUEST['article_id'] ?? ''));
$sanitize_content = self::_param_to_bool($_REQUEST['sanitize'] ?? true);
@ -351,7 +356,7 @@ class API extends Handler {
$article['content'] = Sanitizer::sanitize(
$entry->content,
self::_param_to_bool($entry->hide_images),
null, $entry->site_url, null, $entry->id);
false, $entry->site_url, null, $entry->id);
} else {
$article['content'] = $entry->content;
}
@ -375,7 +380,10 @@ class API extends Handler {
}
}
private function _get_config() {
/**
* @return array<string, array<string, string>|bool|int|string>
*/
private function _get_config(): array {
$config = [
"icons_dir" => Config::get(Config::ICONS_DIR),
"icons_url" => Config::get(Config::ICONS_URL)
@ -391,13 +399,13 @@ class API extends Handler {
return $config;
}
function getConfig() {
function getConfig(): void {
$config = $this->_get_config();
$this->_wrap(self::STATUS_OK, $config);
}
function updateFeed() {
function updateFeed(): void {
$feed_id = (int) clean($_REQUEST["feed_id"]);
if (!ini_get("open_basedir")) {
@ -407,10 +415,10 @@ class API extends Handler {
$this->_wrap(self::STATUS_OK, array("status" => "OK"));
}
function catchupFeed() {
function catchupFeed(): void {
$feed_id = clean($_REQUEST["feed_id"]);
$is_cat = clean($_REQUEST["is_cat"]) == "true";
$mode = clean($_REQUEST['mode'] ?? "");
$is_cat = clean($_REQUEST["is_cat"]);
$mode = clean($_REQUEST["mode"] ?? "");
if (!in_array($mode, ["all", "1day", "1week", "2week"]))
$mode = "all";
@ -420,13 +428,13 @@ class API extends Handler {
$this->_wrap(self::STATUS_OK, array("status" => "OK"));
}
function getPref() {
function getPref(): void {
$pref_name = clean($_REQUEST["pref_name"]);
$this->_wrap(self::STATUS_OK, array("value" => get_pref($pref_name)));
}
function getLabels() {
function getLabels(): void {
$article_id = (int)clean($_REQUEST['article_id'] ?? -1);
$rv = [];
@ -462,7 +470,7 @@ class API extends Handler {
$this->_wrap(self::STATUS_OK, $rv);
}
function setArticleLabel() {
function setArticleLabel(): void {
$article_ids = explode(",", clean($_REQUEST["article_ids"]));
$label_id = (int) clean($_REQUEST['label_id']);
@ -491,7 +499,7 @@ class API extends Handler {
}
function index($method) {
function index(string $method): void {
$plugin = PluginHost::getInstance()->get_api_method(strtolower($method));
if ($plugin && method_exists($plugin, $method)) {
@ -504,7 +512,7 @@ class API extends Handler {
}
}
function shareToPublished() {
function shareToPublished(): void {
$title = strip_tags(clean($_REQUEST["title"]));
$url = strip_tags(clean($_REQUEST["url"]));
$content = strip_tags(clean($_REQUEST["content"]));
@ -516,13 +524,12 @@ class API extends Handler {
}
}
private static function _api_get_feeds($cat_id, $unread_only, $limit, $offset, $include_nested = false) {
/**
* @return array<int, array{'id': int, 'title': string, 'unread': int, 'cat_id': int}>
*/
private static function _api_get_feeds(int $cat_id, bool $unread_only, int $limit, int $offset, bool $include_nested = false): array {
$feeds = [];
$limit = (int) $limit;
$offset = (int) $offset;
$cat_id = (int) $cat_id;
/* Labels */
/* API only: -4 All feeds, including virtual feeds */
@ -632,13 +639,16 @@ class API extends Handler {
return $feeds;
}
private static function _api_get_headlines($feed_id, $limit, $offset,
$filter, $is_cat, $show_excerpt, $show_content, $view_mode, $order,
$include_attachments, $since_id,
$search = "", $include_nested = false, $sanitize_content = true,
$force_update = false, $excerpt_length = 100, $check_first_id = false, $skip_first_id_check = false) {
/**
* @return array{0: array<int, array<string, mixed>>, 1: array<string, mixed>} $headlines, $headlines_header
*/
private static function _api_get_headlines(int $feed_id, int $limit, int $offset,
string $filter, bool $is_cat, bool $show_excerpt, bool $show_content, ?string $view_mode, string $order,
bool $include_attachments, int $since_id, string $search = "", bool $include_nested = false,
bool $sanitize_content = true, bool $force_update = false, int $excerpt_length = 100, ?int $check_first_id = null,
bool $skip_first_id_check = false): array {
if ($force_update && $feed_id > 0 && is_numeric($feed_id)) {
if ($force_update && is_numeric($feed_id) && $feed_id > 0) {
// Update the feed if required with some basic flood control
$feed = ORM::for_table('ttrss_feeds')
@ -746,7 +756,7 @@ class API extends Handler {
$headline_row["content"] = Sanitizer::sanitize(
$line["content"],
self::_param_to_bool($line['hide_images']),
null, $line["site_url"], null, $line["id"]);
false, $line["site_url"], null, $line["id"]);
} else {
$headline_row["content"] = $line["content"];
}
@ -803,7 +813,7 @@ class API extends Handler {
return array($headlines, $headlines_header);
}
function unsubscribeFeed() {
function unsubscribeFeed(): void {
$feed_id = (int) clean($_REQUEST["feed_id"]);
$feed_exists = ORM::for_table('ttrss_feeds')
@ -818,7 +828,7 @@ class API extends Handler {
}
}
function subscribeToFeed() {
function subscribeToFeed(): void {
$feed_url = clean($_REQUEST["feed_url"]);
$category_id = (int) clean($_REQUEST["category_id"]);
$login = clean($_REQUEST["login"]);
@ -833,7 +843,7 @@ class API extends Handler {
}
}
function getFeedTree() {
function getFeedTree(): void {
$include_empty = self::_param_to_bool(clean($_REQUEST['include_empty']));
$pf = new Pref_Feeds($_REQUEST);
@ -846,7 +856,7 @@ class API extends Handler {
}
// only works for labels or uncategorized for the time being
private function _is_cat_empty($id) {
private function _is_cat_empty(int $id): bool {
if ($id == -2) {
$label_count = ORM::for_table('ttrss_labels2')
->where('owner_uid', $_SESSION['uid'])
@ -865,7 +875,8 @@ class API extends Handler {
return false;
}
private function _get_custom_sort_types() {
/** @return array<string, string> */
private function _get_custom_sort_types(): array {
$ret = [];
PluginHost::getInstance()->run_hooks_callback(PluginHost::HOOK_HEADLINES_CUSTOM_SORT_MAP, function ($result) use (&$ret) {