X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FPost%2FCategory.php;h=c242e8ffd878dd97ee046331d79a688667504aa9;hb=fdaff4303952427f222ee21f6b501d5087e25932;hp=d4a8469d4fd6478259ed6cb9a74159d1091c45ca;hpb=3d4ace7a9d8541c6e5977bc43eedc02da7257089;p=friendica.git diff --git a/src/Model/Post/Category.php b/src/Model/Post/Category.php index d4a8469d4f..c242e8ffd8 100644 --- a/src/Model/Post/Category.php +++ b/src/Model/Post/Category.php @@ -1,6 +1,6 @@ $uri_id, 'uid' => $uid]); + } + + /** + * Delete all categories and files from a given uri-id and user + * + * @param int $uri_id + * @param int $uid + * @return boolean success + * @throws \Exception + */ + public static function deleteFileByURIId(int $uri_id, int $uid, int $type, string $file) + { + $tagid = Tag::getID($file); + if (empty($tagid)) { + return false; + } + + return DBA::delete('post-category', ['uri-id' => $uri_id, 'uid' => $uid, 'type' => $type, 'tid' => $tagid]); + } /** * Generates the legacy item.file field string from an item ID. * Includes only file and category terms. * - * @param int $item_id + * @param int $uri_id + * @param int $uid * @return string * @throws \Exception */ @@ -49,7 +81,7 @@ class Category { $file_text = ''; - $tags = DBA::selectToArray('category-view', ['type', 'name'], ['uri-id' => $uri_id, 'uid' => $uid]); + $tags = DBA::selectToArray('category-view', ['type', 'name'], ['uri-id' => $uri_id, 'uid' => $uid, 'type' => [Category::FILE, Category::CATEGORY]]); foreach ($tags as $tag) { if ($tag['type'] == self::CATEGORY) { $file_text .= '<' . $tag['name'] . '>'; @@ -61,6 +93,63 @@ class Category return $file_text; } + /** + * Generates an array of files or categories of a given uri-id + * + * @param int $uid + * @param int $type + * @return array + * @throws \Exception + */ + public static function getArray(int $uid, int $type) + { + $tags = DBA::selectToArray('category-view', ['name'], ['uid' => $uid, 'type' => $type], + ['group_by' => ['name'], 'order' => ['name']]); + if (empty($tags)) { + return []; + } + + return array_column($tags, 'name'); + } + + public static function existsForURIId(int $uri_id, int $uid) + { + return DBA::exists('post-category', ['uri-id' => $uri_id, 'uid' => $uid]); + } + + /** + * Generates an array of files or categories of a given uri-id + * + * @param int $uri_id + * @param int $uid + * @param int $type + * @return array + * @throws \Exception + */ + public static function getArrayByURIId(int $uri_id, int $uid, int $type = self::CATEGORY) + { + $tags = DBA::selectToArray('category-view', ['type', 'name'], ['uri-id' => $uri_id, 'uid' => $uid, 'type' => $type]); + if (empty($tags)) { + return []; + } + + return array_column($tags, 'name'); + } + + /** + * Generates a comma separated list of files or categories + * + * @param int $uri_id + * @param int $uid + * @param int $type + * @return string + * @throws \Exception + */ + public static function getCSVByURIId(int $uri_id, int $uid, int $type) + { + return implode(',', self::getArrayByURIId($uri_id, $uid, $type)); + } + /** * Inserts new terms for the provided item ID based on the legacy item.file field BBCode content. * Deletes all previous file terms for the same item ID. @@ -72,16 +161,14 @@ class Category */ public static function storeTextByURIId(int $uri_id, int $uid, string $files) { - $message = Item::selectFirst(['deleted'], ['uri-id' => $uri_id, 'uid' => $uid]); - if (!DBA::isResult($message)) { - return; - } + $message = Post::selectFirst(['deleted'], ['uri-id' => $uri_id, 'uid' => $uid]); + if (DBA::isResult($message)) { + // Clean up all tags + DBA::delete('post-category', ['uri-id' => $uri_id, 'uid' => $uid]); - // Clean up all tags - DBA::delete('post-category', ['uri-id' => $uri_id, 'uid' => $uid]); - - if ($message['deleted']) { - return; + if ($message['deleted']) { + return; + } } if (preg_match_all("/\[(.*?)\]/ism", $files, $result)) { @@ -91,29 +178,34 @@ class Category continue; } - DBA::insert('post-category', [ - 'uri-id' => $uri_id, - 'uid' => $uid, - 'type' => self::FILE, - 'tid' => $tagid - ]); + self::storeByURIId($uri_id, $uid, self::FILE, $tagid); } } if (preg_match_all("/\<(.*?)\>/ism", $files, $result)) { foreach ($result[1] as $file) { - $tagid = Tag::getID($file); - if (empty($tagid)) { - continue; - } - - DBA::insert('post-category', [ - 'uri-id' => $uri_id, - 'uid' => $uid, - 'type' => self::CATEGORY, - 'tid' => $tagid - ]); + self::storeFileByURIId($uri_id, $uid, self::CATEGORY, $file); } } } + + public static function storeFileByURIId(int $uri_id, int $uid, int $type, string $file, string $url = ''): bool + { + $tagid = Tag::getID($file, $url); + if (empty($tagid)) { + return false; + } + + return self::storeByURIId($uri_id, $uid, $type, $tagid); + } + + private static function storeByURIId(int $uri_id, int $uid, int $type, int $tagid): bool + { + return DBA::replace('post-category', [ + 'uri-id' => $uri_id, + 'uid' => $uid, + 'type' => $type, + 'tid' => $tagid + ]); + } }