From 2cbc08dbcf435712db61490f9c6c236c6bdfb393 Mon Sep 17 00:00:00 2001 From: christophboecker Date: Mon, 19 Aug 2024 15:03:09 +0200 Subject: [PATCH 1/4] =?UTF-8?q?Erse=20=C3=9Cberarbeitung=20mit=20RexStan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fragments/neues/entry.php | 12 ++++++------ fragments/neues/list-entry.php | 7 ++++--- install.php | 19 ++++++++++--------- lib/Api/Rss.php | 31 ++++++++++++++++++++++++++----- lib/Category.php | 4 ++-- lib/Cronjob/Sync.php | 2 ++ lib/Entry.php | 30 ++++++++++++++---------------- lib/EntryLang.php | 2 +- lib/neues.php | 4 ++++ 9 files changed, 69 insertions(+), 42 deletions(-) diff --git a/fragments/neues/entry.php b/fragments/neues/entry.php index b62e374..fe75397 100644 --- a/fragments/neues/entry.php +++ b/fragments/neues/entry.php @@ -24,10 +24,10 @@ getFormattedPublishDate() ?> - getAuthor()) : ?> - getAuthor()->getName()) : ?> + getAuthor()) : ?> + getAuthor()->getName()) : ?> von getAuthor()->getName()) ?> - getAuthor()->getNickname()): ?> + getAuthor()->getNickname()): ?> von getAuthor()->getNickname()) ?> @@ -40,7 +40,7 @@ getImage()); ?> - +
<?= htmlspecialchars($media->getTitle()) ?>
@@ -49,7 +49,7 @@ - getDescription()) : ?> + getDescription()) : ?>
getDescription() ?>
@@ -63,7 +63,7 @@ $media = rex_media::get($image); $mediaUrl = rex_media_manager::getUrl('rex_media_medium', $image); ?> - +
<?= htmlspecialchars($media->getTitle()) ?> diff --git a/fragments/neues/list-entry.php b/fragments/neues/list-entry.php index db027cc..c138a2f 100644 --- a/fragments/neues/list-entry.php +++ b/fragments/neues/list-entry.php @@ -12,7 +12,8 @@
- getCategories()) : ?> + + getCategories())) : ?>

getCategories()->toKeyValue('id', 'name'))) ?>

@@ -26,7 +27,7 @@ - getPublishDate()) : ?> + getPublishDate()) : ?>
getFormattedPublishDate() ?>
@@ -46,7 +47,7 @@ $media = rex_media::get($post->getImage()); $mediaUrl = rex_media_manager::getUrl('rex_media_medium', $post->getImage()); ?> - +
<?= htmlspecialchars($media->getTitle()) ?>
diff --git a/install.php b/install.php index 06630f6..e6aa281 100644 --- a/install.php +++ b/install.php @@ -13,12 +13,13 @@ use rex_sql; use rex_yform_manager_table_api; +$sql = rex_sql::factory(); + /* Tablesets aktualisieren */ -if (rex_addon::get('yform') && rex_addon::get('yform')->isAvailable()) { +if (rex_addon::get('yform')->isAvailable()) { rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json')); // Vorhandene leere UUID-Felder aktualisieren - $sql = rex_sql::factory(); $sql->setQuery('UPDATE ' . rex::getTable('neues_author') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); $sql->setQuery('UPDATE ' . rex::getTable('neues_category') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); $sql->setQuery('UPDATE ' . rex::getTable('neues_entry') . ' SET uuid = uuid() WHERE uuid IS NULL OR uuid = ""'); @@ -26,7 +27,7 @@ require_once __DIR__ . '/install/update_scheme.php'; } -if (!rex_media::get('neues_entry_fallback_image.png')) { +if (null === rex_media::get('neues_entry_fallback_image.png')) { rex_file::copy(__DIR__ . '/install/neues_entry_fallback_image.png', rex_path::media('neues_entry_fallback_image.png')); $data = []; $data['title'] = 'Aktuelles - Fallback-Image'; @@ -40,7 +41,7 @@ } /* Cronjob installieren */ -if (rex_addon::get('cronjob') && rex_addon::get('cronjob')->isAvailable()) { +if (rex_addon::get('cronjob')->isAvailable()) { $cronjobPublish = 'FriendsOfRedaxo\\Neues\\Cronjob\\Publish'; /** @@ -67,16 +68,16 @@ } /* URL-Profile installieren */ -if (rex_addon::get('url') && rex_addon::get('url')->isAvailable()) { +if (rex_addon::get('url')->isAvailable()) { if (false === rex_config::get('neues', 'url_profile', false)) { $rex_neues_category = array_filter(rex_sql::factory()->getArray("SELECT * FROM rex_url_generator_profile WHERE `table_name` = '1_xxx_rex_neues_category'")); - if (!$rex_neues_category) { - $query = str_replace('999999', rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_category.sql')); + if (0 < count($rex_neues_category)) { + $query = str_replace('999999', (string) rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_category.sql')); rex_sql::factory()->setQuery($query); } $rex_neues_entry = array_filter(rex_sql::factory()->getArray("SELECT * FROM rex_url_generator_profile WHERE `table_name` = '1_xxx_rex_neues_entry'")); - if (!$rex_neues_entry) { - $query = str_replace('999999', rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_entry.sql')); + if (0 < count($rex_neues_entry)) { + $query = str_replace('999999', (string) rex_article::getSiteStartArticleId(), rex_file::get(__DIR__ . '/install/rex_url_profile_neues_entry.sql')); rex_sql::factory()->setQuery($query); } /* URL-Profile wurden bereits einmal installiert, daher nicht nochmals installieren und Entwickler-Einstellungen respektieren */ diff --git a/lib/Api/Rss.php b/lib/Api/Rss.php index 85ab217..be62c63 100644 --- a/lib/Api/Rss.php +++ b/lib/Api/Rss.php @@ -6,6 +6,7 @@ use FriendsOfRedaxo\Neues\Entry; use rex; use rex_api_function; +use rex_api_result; use rex_clang; use rex_path; use rex_response; @@ -17,7 +18,11 @@ class Rss extends rex_api_function { protected $published = true; // Erlaubt den Aufruf aus dem Frontend - public function execute(): void + /** + * @return never + * @api + */ + public function execute(): rex_api_result { $domain_id = rex_request('domain_id', 'int', null); $lang_id = rex_request('lang_id', 'int', null); @@ -41,17 +46,32 @@ public function execute(): void exit; } - public static function getRssFeed($collection, $domain, $lang, $description, $filename) + /** + * @param rex_yform_manager_collection $collection + * @api + * + * TODO: Parameter Domain wird nicht benutzt: Klären ob der weg kann. Type fehlt + */ + public static function getRssFeed($collection, $domain, int $lang, string $description, string $filename): string|bool { return self::createRssFeed($collection, $domain, $lang, $description, $filename); } - public static function joinUrls($url1, $url2) + /** + * @api + */ + public static function joinUrls(string $url1, string $url2): string { return rtrim($url1, '/') . '/' . ltrim($url2, '/'); } - public static function createRssFeed(rex_yform_manager_collection $collection, $domain, $lang, $description, $filename = 'rss.neues.xml') + /** + * @param rex_yform_manager_collection $collection + * @api + * + * TODO: Parameter Domain wird nicht benutzt: Klären ob der weg kann. Type fehlt + */ + public static function createRssFeed(rex_yform_manager_collection $collection, $domain, int $lang, string $description, string $filename = 'rss.neues.xml'): string|bool { $xml = new SimpleXMLElement(''); @@ -60,12 +80,13 @@ public static function createRssFeed(rex_yform_manager_collection $collection, $ $channel->addChild('description', $description); $channel->addChild('link', rex::getServer()); + // RexStan: Only booleans are allowed in &&, int given on the left side. + // TODO: klären was der Teil `$lang &&` bewirken soll und ggf. rauswerfen if ($lang && $lang > 0) { $channel->addChild('language', rex_clang::get($lang)->getCode()); } foreach ($collection as $entry) { - /** @var neues_entry $entry */ $item = $channel->addChild('item'); $item->addChild('title', htmlspecialchars($entry->getName())); $item->addChild('description', htmlspecialchars(strip_tags($entry->getDescription()))); diff --git a/lib/Category.php b/lib/Category.php index 15b38e9..380a5ad 100644 --- a/lib/Category.php +++ b/lib/Category.php @@ -59,14 +59,14 @@ public function setName(string $name): self * Gibt die Einträge der Kategorie zurück. * Returns the entries of the Category. * - * @return rex_yform_manager_collection|null Die Einträge der Kategorie oder null, wenn keine Einträge vorhanden sind. / The entries of the Category or null if no entries are present. + * @return rex_yform_manager_collection Die Einträge der Kategorie oder null, wenn keine Einträge vorhanden sind. / The entries of the Category or null if no entries are present. * * Beispiel / Example: * $entries = $category->getEntries(); * * @api */ - public function getEntries(): ?rex_yform_manager_collection + public function getEntries(): rex_yform_manager_collection { return $this->getRelatedCollection('date_id'); } diff --git a/lib/Cronjob/Sync.php b/lib/Cronjob/Sync.php index ef20e84..5d825ef 100644 --- a/lib/Cronjob/Sync.php +++ b/lib/Cronjob/Sync.php @@ -8,9 +8,11 @@ use rex_cronjob; use rex_i18n; use rex_socket; +use rex_socket_response; class Sync extends rex_cronjob { + /** @var array $rest_urls */ private $rest_urls = ['category' => '/rest/neues/category/5.0.0/', 'author' => '/rest/neues/author/5.0.0/', 'entry' => '/rest/neues/entry/5.0.0/']; diff --git a/lib/Entry.php b/lib/Entry.php index 1a4aa72..303a1a9 100644 --- a/lib/Entry.php +++ b/lib/Entry.php @@ -15,6 +15,7 @@ use rex_yform_manager_collection; use rex_yform_manager_dataset; use rex_yform_manager_table; +use rex_yform_list; use function is_string; @@ -76,9 +77,9 @@ public function setName(string $name): self /** * YFORM_DATA_LIST: passt die Listendarstellung an. * - * @api * @param rex_extension_point $ep * @return void|rex_yform_list + * @api */ public static function epYformDataList(rex_extension_point $ep) { @@ -142,7 +143,7 @@ static function ($a) { * Gibt den Autor des Eintrags zurück. * Returns the author of the entry. * - * @return neues_author|null Der Autor des Eintrags oder null, wenn kein Autor gesetzt ist. / The author of the entry or null if no author is set. + * @return Author|null Der Autor des Eintrags oder null, wenn kein Autor gesetzt ist. / The author of the entry or null if no author is set. * * Beispiel / Example: * $author = $entry->getAuthor(); @@ -199,14 +200,14 @@ public function getTeaser(): string * Gibt die Kategorien des Eintrags zurück. * Returns the categories of the entry. * - * @return rex_yform_manager_collection|null Die Kategorien des Eintrags oder null, wenn keine Kategorien gesetzt sind. / The categories of the entry or null if no categories are set. + * @return rex_yform_manager_collection Die Kategorien des Eintrags oder eine leere Liste. / The categories of the entry or an empty list. * * Beispiel / Example: * $categories = $entry->getCategories(); * * @api */ - public function getCategories(): ?rex_yform_manager_collection + public function getCategories(): rex_yform_manager_collection { return $this->getRelatedCollection('category_ids'); } @@ -254,7 +255,7 @@ public function setImage(string $image): self * * Beispiel / Example: * $images = $entry->getImages(); - * + * TODO: null kommt nicht vor * @api */ public function getImages(): ?array @@ -488,16 +489,16 @@ public function setStatus(int $status): self * Finds online entries. If a Category ID is provided, only entries from this Category are returned. * * @param int|null $category_id Die ID der Kategorie. / The ID of the Category. - * @return rex_yform_manager_collection|null Die gefundenen Einträge oder null, wenn keine Einträge gefunden wurden. / The found entries or null if no entries were found. + * @return rex_yform_manager_collection Die gefundenen Einträge bzw. eine leere Liste. / The found entries or empty list. * * Beispiel / Example: * $entries = FriendsOfRedaxo\Neues\Entry::findOnline(1); * * @api */ - public static function findOnline(?int $category_id = null): ?rex_yform_manager_collection + public static function findOnline(?int $category_id = null): rex_yform_manager_collection { - if ($category_id) { + if (null !== $category_id) { return self::findByCategory($category_id); } return self::query()->where('status', 1, '>=')->find(); @@ -509,14 +510,14 @@ public static function findOnline(?int $category_id = null): ?rex_yform_manager_ * * @param int|null $category_id Die ID der Kategorie. / The ID of the Category. * @param int $status Der Status der Einträge. / The status of the entries. - * @return rex_yform_manager_collection|null Die gefundenen Einträge oder null, wenn keine Einträge gefunden wurden. / The found entries or null if no entries were found. + * @return rex_yform_manager_collection Die gefundenen Einträge bzw. eine leere Liste. / The found entries or empty list. * * Beispiel / Example: * $entries = FriendsOfRedaxo\Neues\Entry::findByCategory(1, 1); * * @api */ - public static function findByCategory(?int $category_id = null, int $status = 1): ?rex_yform_manager_collection + public static function findByCategory(?int $category_id = null, int $status = 1): rex_yform_manager_collection { $query = self::query(); $alias = $query->getTableAlias(); @@ -530,14 +531,14 @@ public static function findByCategory(?int $category_id = null, int $status = 1) * * @param string|array|null $category_ids Die IDs der Kategorien als String oder Array. / The IDs of the Categories as a String or Array. * @param int $status Der Status der Einträge. / The status of the entries. - * @return rex_yform_manager_collection|null Die gefundenen Einträge oder null, wenn keine Einträge gefunden wurden. / The found entries or null if no entries were found. + * @return rex_yform_manager_collection Die gefundenen Einträge bzw. eine leere Liste. / The found entries or empty list. * * Beispiel / Example: * $entries = FriendsOfRedaxo\Neues\Entry::findByCategoryIds('1,2', 1); * * @api */ - public static function findByCategoryIds(string|array|null $category_ids = null, int $status = 1): ?rex_yform_manager_collection + public static function findByCategoryIds(string|array|null $category_ids = null, int $status = 1): rex_yform_manager_collection { $query = self::query()->where('status', $status, '>='); @@ -568,9 +569,6 @@ public static function findByCategoryIds(string|array|null $category_ids = null, */ public function getUrl(string $profile = 'neues-entry-id'): string { - if ($url = rex_getUrl(null, null, [$profile => $this->getId()])) { - return $url; - } - return ''; + return rex_getUrl(null, null, [$profile => $this->getId()]); } } diff --git a/lib/EntryLang.php b/lib/EntryLang.php index 18e81a0..89bbf3a 100644 --- a/lib/EntryLang.php +++ b/lib/EntryLang.php @@ -22,7 +22,7 @@ class EntryLang extends rex_yform_manager_dataset * Gibt die News-Einträge der aktuellen Sprache zurück. * Returns the entries of the language. * - * @return rex_yform_manager_collection|null Die Einträge der Sprache oder null, wenn keine Einträge gefunden wurden. / The entries of the language or null if no entries were found. + * @return rex_yform_manager_collection Die Einträge der Sprache oder null, wenn keine Einträge gefunden wurden. / The entries of the language or null if no entries were found. * * Beispiel / Example: * $entries = $language->getEntries(); diff --git a/lib/neues.php b/lib/neues.php index 2c81604..cffdedc 100644 --- a/lib/neues.php +++ b/lib/neues.php @@ -21,6 +21,8 @@ class Neues * * Beispiel / Example: * echo neues::getList(2); + * + * @api */ public static function getList(int $rowsPerPage = 10, string $pageCursor = 'page'): string { @@ -47,6 +49,8 @@ public static function getList(int $rowsPerPage = 10, string $pageCursor = 'page * * Beispiel / Example: * echo neues::getEntry(2); + * + * @api */ public static function getEntry(int $postId): string { From aeaefec7d584e0dae5372ee3bfb526a2fe624a95 Mon Sep 17 00:00:00 2001 From: christophboecker Date: Mon, 19 Aug 2024 13:06:01 +0000 Subject: [PATCH 2/4] Apply php-cs-fixer changes --- fragments/neues/list-entry.php | 2 +- install.php | 2 ++ lib/Cronjob/Sync.php | 2 +- lib/Entry.php | 2 +- lib/neues.php | 4 ++-- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fragments/neues/list-entry.php b/fragments/neues/list-entry.php index c138a2f..e89c695 100644 --- a/fragments/neues/list-entry.php +++ b/fragments/neues/list-entry.php @@ -12,7 +12,7 @@
- + getCategories())) : ?>

getCategories()->toKeyValue('id', 'name'))) ?> diff --git a/install.php b/install.php index e6aa281..950d730 100644 --- a/install.php +++ b/install.php @@ -13,6 +13,8 @@ use rex_sql; use rex_yform_manager_table_api; +use function count; + $sql = rex_sql::factory(); /* Tablesets aktualisieren */ diff --git a/lib/Cronjob/Sync.php b/lib/Cronjob/Sync.php index 5d825ef..cb1798c 100644 --- a/lib/Cronjob/Sync.php +++ b/lib/Cronjob/Sync.php @@ -12,7 +12,7 @@ class Sync extends rex_cronjob { - /** @var array $rest_urls */ + /** @var array */ private $rest_urls = ['category' => '/rest/neues/category/5.0.0/', 'author' => '/rest/neues/author/5.0.0/', 'entry' => '/rest/neues/entry/5.0.0/']; diff --git a/lib/Entry.php b/lib/Entry.php index 303a1a9..f8f5327 100644 --- a/lib/Entry.php +++ b/lib/Entry.php @@ -12,10 +12,10 @@ use rex_media_plus; use rex_url; use rex_yform; +use rex_yform_list; use rex_yform_manager_collection; use rex_yform_manager_dataset; use rex_yform_manager_table; -use rex_yform_list; use function is_string; diff --git a/lib/neues.php b/lib/neues.php index cffdedc..3935d71 100644 --- a/lib/neues.php +++ b/lib/neues.php @@ -21,7 +21,7 @@ class Neues * * Beispiel / Example: * echo neues::getList(2); - * + * * @api */ public static function getList(int $rowsPerPage = 10, string $pageCursor = 'page'): string @@ -49,7 +49,7 @@ public static function getList(int $rowsPerPage = 10, string $pageCursor = 'page * * Beispiel / Example: * echo neues::getEntry(2); - * + * * @api */ public static function getEntry(int $postId): string From e0b1f8148d3d6de686f8830b6dd70bc4e375695e Mon Sep 17 00:00:00 2001 From: christophboecker Date: Mon, 19 Aug 2024 15:55:54 +0200 Subject: [PATCH 3/4] Update fragments/neues/entry.php Co-authored-by: Alexander Walther --- fragments/neues/entry.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fragments/neues/entry.php b/fragments/neues/entry.php index fe75397..1e51dbe 100644 --- a/fragments/neues/entry.php +++ b/fragments/neues/entry.php @@ -49,7 +49,7 @@ - getDescription()) : ?> + getDescription()) : ?>

getDescription() ?>
From cadb10b7f700e6c259cf7d4985979e2df46d21d0 Mon Sep 17 00:00:00 2001 From: christophboecker Date: Mon, 19 Aug 2024 15:57:06 +0200 Subject: [PATCH 4/4] Update install.php Co-authored-by: Alexander Walther --- install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.php b/install.php index 950d730..443fcb7 100644 --- a/install.php +++ b/install.php @@ -18,7 +18,7 @@ $sql = rex_sql::factory(); /* Tablesets aktualisieren */ -if (rex_addon::get('yform')->isAvailable()) { +if (rex_plugin::get('yform', 'manager')->isAvailable()) { rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/tableset.json')); // Vorhandene leere UUID-Felder aktualisieren