Bladeren bron

code improvement for phpstan and humans ;) (#5084)

* code improvement for phpstan and humans ;)

* code improvement for phpstan and humans ;)

* code improvement for phpstan and humans ;)

* code improvement for phpstan and humans ;)

* PHPSTAN level 6

* PHPStan level 9

* Avoid return mixed

---------

Co-authored-by: Luc <sanchezluc+freshrss@gmail.com>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
Luc SANCHEZ 3 jaren geleden
bovenliggende
commit
b9a62a6aaa
2 gewijzigde bestanden met toevoegingen van 69 en 26 verwijderingen
  1. 41 14
      app/Models/Tag.php
  2. 28 12
      app/Models/TagDAO.php

+ 41 - 14
app/Models/Tag.php

@@ -5,40 +5,61 @@ class FreshRSS_Tag extends Minz_Model {
 	 * @var int
 	 */
 	private $id = 0;
+	/**
+	 * @var string
+	 */
 	private $name;
+	/**
+	 * @var array<string,mixed>
+	 */
 	private $attributes = [];
+	/**
+	 * @var int
+	 */
 	private $nbEntries = -1;
+	/**
+	 * @var int
+	 */
 	private $nbUnread = -1;
 
-	public function __construct($name = '') {
+	public function __construct(string $name = '') {
 		$this->_name($name);
 	}
 
-	public function id() {
+	public function id(): int {
 		return $this->id;
 	}
 
-	public function _id($value) {
+	/**
+	 * @param int|string $value
+	 */
+	public function _id($value): void {
 		$this->id = (int)$value;
 	}
 
-	public function name() {
+	public function name(): string {
 		return $this->name;
 	}
 
-	public function _name($value) {
+	public function _name(string $value): void {
 		$this->name = trim($value);
 	}
 
-	public function attributes($key = '') {
+	/**
+	 * @return mixed|string|array<string,mixed>|null
+	 */
+	public function attributes(string $key = '') {
 		if ($key == '') {
 			return $this->attributes;
 		} else {
-			return isset($this->attributes[$key]) ? $this->attributes[$key] : null;
+			return $this->attributes[$key] ?? null;
 		}
 	}
 
-	public function _attributes($key, $value) {
+	/**
+	 * @param mixed|string|array<string,mixed>|null $value
+	 */
+	public function _attributes(string $key, $value = null): void {
 		if ($key == '') {
 			if (is_string($value)) {
 				$value = json_decode($value, true);
@@ -53,27 +74,33 @@ class FreshRSS_Tag extends Minz_Model {
 		}
 	}
 
-	public function nbEntries() {
+	public function nbEntries(): int {
 		if ($this->nbEntries < 0) {
 			$tagDAO = FreshRSS_Factory::createTagDao();
-			$this->nbEntries = $tagDAO->countEntries($this->id());
+			$this->nbEntries = $tagDAO->countEntries($this->id()) ?: 0;
 		}
 		return $this->nbEntries;
 	}
 
-	public function _nbEntries($value) {
+	/**
+	 * @param string|int $value
+	 */
+	public function _nbEntries($value): void {
 		$this->nbEntries = (int)$value;
 	}
 
-	public function nbUnread() {
+	public function nbUnread(): int {
 		if ($this->nbUnread < 0) {
 			$tagDAO = FreshRSS_Factory::createTagDao();
-			$this->nbUnread = $tagDAO->countNotRead($this->id());
+			$this->nbUnread = $tagDAO->countNotRead($this->id()) ?: 0;
 		}
 		return $this->nbUnread;
 	}
 
-	public function _nbUnread($value) {
+	/**
+	 * @param string|int$value
+	 */
+	public function _nbUnread($value): void {
 		$this->nbUnread = (int)$value;
 	}
 }

+ 28 - 12
app/Models/TagDAO.php

@@ -267,12 +267,13 @@ SQL;
 		return $newestItemUsec;
 	}
 
+	/** @return int|false */
 	public function count() {
 		$sql = 'SELECT COUNT(*) AS count FROM `_tag`';
 		$stm = $this->pdo->query($sql);
 		if ($stm !== false) {
 			$res = $stm->fetchAll(PDO::FETCH_ASSOC);
-			return $res[0]['count'];
+			return (int)$res[0]['count'];
 		} else {
 			$info = $this->pdo->errorInfo();
 			if ($this->autoUpdateDb($info)) {
@@ -283,16 +284,27 @@ SQL;
 		}
 	}
 
-	public function countEntries($id) {
+	/**
+	 * @return int|false
+	 */
+	public function countEntries(int $id) {
 		$sql = 'SELECT COUNT(*) AS count FROM `_entrytag` WHERE id_tag=?';
-		$stm = $this->pdo->prepare($sql);
 		$values = array($id);
-		$stm->execute($values);
-		$res = $stm->fetchAll(PDO::FETCH_ASSOC);
-		return $res[0]['count'];
+		if (($stm = $this->pdo->prepare($sql)) !== false &&
+			$stm->execute($values) &&
+			($res = $stm->fetchAll(PDO::FETCH_ASSOC)) !== false) {
+			return (int)$res[0]['count'];
+		} else {
+			$info = is_object($stm) ? $stm->errorInfo() : $this->pdo->errorInfo();
+			Minz_Log::error('SQL error ' . __METHOD__ . json_encode($info));
+			return false;
+		}
 	}
 
-	public function countNotRead($id = null) {
+	/**
+	 * @return int|false
+	 */
+	public function countNotRead(?int $id = null) {
 		$sql = 'SELECT COUNT(*) AS count FROM `_entrytag` et '
 			 . 'INNER JOIN `_entry` e ON et.id_entry=e.id '
 			 . 'WHERE e.is_read=0';
@@ -303,11 +315,15 @@ SQL;
 			$values = [$id];
 		}
 
-		$stm = $this->pdo->prepare($sql);
-
-		$stm->execute($values);
-		$res = $stm->fetchAll(PDO::FETCH_ASSOC);
-		return $res[0]['count'];
+		if (($stm = $this->pdo->prepare($sql)) !== false &&
+			$stm->execute($values) &&
+			($res = $stm->fetchAll(PDO::FETCH_ASSOC)) !== false) {
+			return (int)$res[0]['count'];
+		} else {
+			$info = is_object($stm) ? $stm->errorInfo() : $this->pdo->errorInfo();
+			Minz_Log::error('SQL error ' . __METHOD__ . json_encode($info));
+			return false;
+		}
 	}
 
 	public function tagEntry($id_tag, $id_entry, $checked = true) {