From c4eaab8a31660d9b333b34cad2d5d458e30e4963 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Tue, 2 Mar 2021 10:24:15 +0300
Subject: [PATCH] feeds/_add_cat: use ORM

---
 classes/feeds.php      | 43 +++++++++++++++---------------------------
 classes/opml.php       |  5 ++---
 classes/pref/feeds.php |  2 +-
 3 files changed, 18 insertions(+), 32 deletions(-)

diff --git a/classes/feeds.php b/classes/feeds.php
index 6f8ceeced..c67edbc51 100755
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -1909,40 +1909,27 @@ class Feeds extends Handler_Protected {
 			$cat->delete();
 	}
 
-	static function _add_cat($feed_cat, $parent_cat_id = false, $order_id = 0) {
+	static function _add_cat(string $title, int $owner_uid, int $parent_cat = null, int $order_id = 0) {
 
-		if (!$feed_cat) return false;
-
-		$feed_cat = mb_substr($feed_cat, 0, 250);
-		if (!$parent_cat_id) $parent_cat_id = null;
-
-		$pdo = Db::pdo();
-		$tr_in_progress = false;
-
-		try {
-			$pdo->beginTransaction();
-		} catch (Exception $e) {
-			$tr_in_progress = true;
-		}
-
-		$sth = $pdo->prepare("SELECT id FROM ttrss_feed_categories
-				WHERE (parent_cat = :parent OR (:parent IS NULL AND parent_cat IS NULL))
-				AND title = :title AND owner_uid = :uid");
-		$sth->execute([':parent' => $parent_cat_id, ':title' => $feed_cat, ':uid' => $_SESSION['uid']]);
-
-		if (!$sth->fetch()) {
+		$cat = ORM::for_table('ttrss_feed_categories')
+			->where('owner_uid', $owner_uid)
+			->where('parent_cat', $parent_cat)
+			->where('title', $title)
+			->find_one();
 
-			$sth = $pdo->prepare("INSERT INTO ttrss_feed_categories (owner_uid,title,parent_cat,order_id)
-					VALUES (?, ?, ?, ?)");
-			$sth->execute([$_SESSION['uid'], $feed_cat, $parent_cat_id, (int)$order_id]);
+		if (!$cat) {
+			$cat = ORM::for_table('ttrss_feed_categories')->create();
 
-			if (!$tr_in_progress) $pdo->commit();
+			$cat->set([
+				'owner_uid' => $owner_uid,
+				'parent_cat' => $parent_cat,
+				'order_id' => $order_id,
+				'title' => $title,
+			]);
 
-			return true;
+			return $cat->save();
 		}
 
-		$pdo->commit();
-
 		return false;
 	}
 
diff --git a/classes/opml.php b/classes/opml.php
index aa4879c4c..c60d411eb 100644
--- a/classes/opml.php
+++ b/classes/opml.php
@@ -31,7 +31,7 @@ class OPML extends Handler_Protected {
 			<body class='claro ttrss_utility'>
 			<h1>".__('OPML Utility')."</h1><div class='content'>";
 
-		Feeds::_add_cat("Imported feeds");
+		Feeds::_add_cat("Imported feeds", $owner_uid);
 
 		$this->opml_notice(__("Importing OPML..."));
 
@@ -521,9 +521,8 @@ class OPML extends Handler_Protected {
 
 				if ($cat_id === false) {
 					$order_id = (int) $root_node->attributes->getNamedItem('ttrssSortOrder')->nodeValue;
-					if (!$order_id) $order_id = 0;
 
-					Feeds::_add_cat($cat_title, $parent_id, $order_id);
+					Feeds::_add_cat($cat_title, $_SESSION['uid'], $parent_id ? $parent_id : null, (int)$order_id);
 					$cat_id = $this->get_feed_category($cat_title, $parent_id);
 				}
 
diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php
index 2afa9013c..340f6515d 100755
--- a/classes/pref/feeds.php
+++ b/classes/pref/feeds.php
@@ -867,7 +867,7 @@ class Pref_Feeds extends Handler_Protected {
 	function addCat() {
 		$feed_cat = clean($_REQUEST["cat"]);
 
-		Feeds::_add_cat($feed_cat);
+		Feeds::_add_cat($feed_cat, $_SESSION['uid']);
 	}
 
 	function importOpml() {
-- 
GitLab