aboutsummaryrefslogtreecommitdiff
path: root/app/Controllers/categoryController.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Controllers/categoryController.php')
-rw-r--r--app/Controllers/categoryController.php86
1 files changed, 77 insertions, 9 deletions
diff --git a/app/Controllers/categoryController.php b/app/Controllers/categoryController.php
index 7226e44af..62901c78e 100644
--- a/app/Controllers/categoryController.php
+++ b/app/Controllers/categoryController.php
@@ -40,8 +40,8 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController {
if (Minz_Request::isPost()) {
invalidateHttpCache();
- $cat_name = Minz_Request::param('new-category');
- if (!$cat_name) {
+ $cat_name = trim(Minz_Request::param('new-category', ''));
+ if ($cat_name == '') {
Minz_Request::bad(_t('feedback.sub.category.no_name'), $url_redirect);
}
@@ -51,12 +51,16 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController {
Minz_Request::bad(_t('feedback.sub.category.name_exists'), $url_redirect);
}
- $values = array(
- 'id' => $cat->id(),
- 'name' => $cat->name(),
- );
+ $opml_url = checkUrl(Minz_Request::param('opml_url', ''));
+ if ($opml_url != '') {
+ $cat->_kind(FreshRSS_Category::KIND_DYNAMIC_OPML);
+ $cat->_attributes('opml_url', $opml_url);
+ } else {
+ $cat->_kind(FreshRSS_Category::KIND_NORMAL);
+ $cat->_attributes('opml_url', null);
+ }
- if ($catDAO->addCategory($values)) {
+ if ($catDAO->addCategoryObject($cat)) {
$url_redirect['a'] = 'index';
Minz_Request::good(_t('feedback.sub.category.created', $cat->name()), $url_redirect);
} else {
@@ -156,6 +160,7 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController {
*
* Request parameter is:
* - id (of a category)
+ * - muted (truthy to remove only muted feeds, or falsy otherwise)
*/
public function emptyAction() {
$feedDAO = FreshRSS_Factory::createFeedDao();
@@ -169,10 +174,15 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController {
Minz_Request::bad(_t('feedback.sub.category.no_id'), $url_redirect);
}
+ $muted = Minz_Request::param('muted', null);
+ if ($muted !== null) {
+ $muted = boolval($muted);
+ }
+
// List feeds to remove then related user queries.
- $feeds = $feedDAO->listByCategory($id);
+ $feeds = $feedDAO->listByCategory($id, $muted);
- if ($feedDAO->deleteFeedByCategory($id)) {
+ if ($feedDAO->deleteFeedByCategory($id, $muted)) {
// TODO: Delete old favicons
// Remove related queries
@@ -190,4 +200,62 @@ class FreshRSS_category_Controller extends FreshRSS_ActionController {
Minz_Request::forward($url_redirect, true);
}
+
+ /**
+ * Request parameter is:
+ * - id (of a category)
+ */
+ public function refreshOpmlAction() {
+ $catDAO = FreshRSS_Factory::createCategoryDao();
+ $url_redirect = array('c' => 'subscription', 'a' => 'index');
+
+ if (Minz_Request::isPost()) {
+ invalidateHttpCache();
+
+ $id = Minz_Request::param('id');
+ if (!$id) {
+ Minz_Request::bad(_t('feedback.sub.category.no_id'), $url_redirect);
+ }
+
+ $category = $catDAO->searchById($id);
+ if ($category == null) {
+ Minz_Request::bad(_t('feedback.sub.category.not_exist'), $url_redirect);
+ }
+
+ invalidateHttpCache();
+
+ $ok = $category->refreshDynamicOpml();
+
+ if (Minz_Request::param('ajax')) {
+ Minz_Request::setGoodNotification(_t('feedback.sub.category.updated'));
+ $this->view->_layout(false);
+ } else {
+ if ($ok) {
+ Minz_Request::good(_t('feedback.sub.category.updated'), $url_redirect);
+ } else {
+ Minz_Request::bad(_t('feedback.sub.category.error'), $url_redirect);
+ }
+ Minz_Request::forward($url_redirect, true);
+ }
+ }
+ }
+
+ /** @return array<string,int> */
+ public static function refreshDynamicOpmls() {
+ $successes = 0;
+ $errors = 0;
+ $catDAO = FreshRSS_Factory::createCategoryDao();
+ $categories = $catDAO->listCategoriesOrderUpdate(FreshRSS_Context::$user_conf->dynamic_opml_ttl_default ?? 86400);
+ foreach ($categories as $category) {
+ if ($category->refreshDynamicOpml()) {
+ $successes++;
+ } else {
+ $errors++;
+ }
+ }
+ return [
+ 'successes' => $successes,
+ 'errors' => $errors,
+ ];
+ }
}