categoryController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. /**
  3. * Controller to handle actions relative to categories.
  4. * User needs to be connected.
  5. */
  6. class FreshRSS_category_Controller extends Minz_ActionController {
  7. /**
  8. * This action is called before every other action in that class. It is
  9. * the common boiler plate for every action. It is triggered by the
  10. * underlying framework.
  11. *
  12. */
  13. public function firstAction() {
  14. if (!$this->view->loginOk) {
  15. Minz_Error::error(
  16. 403,
  17. array('error' => array(_t('access_denied')))
  18. );
  19. }
  20. $catDAO = new FreshRSS_CategoryDAO();
  21. $catDAO->checkDefault();
  22. }
  23. /**
  24. * This action creates a new category.
  25. *
  26. * Request parameter is:
  27. * - new-category
  28. */
  29. public function createAction() {
  30. $catDAO = new FreshRSS_CategoryDAO();
  31. $url_redirect = array('c' => 'configure', 'a' => 'categorize');
  32. if (Minz_Request::isPost()) {
  33. invalidateHttpCache();
  34. $cat_name = Minz_Request::param('new-category');
  35. if (!$cat_name) {
  36. Minz_Request::bad(_t('category_no_name'), $url_redirect);
  37. }
  38. $cat = new FreshRSS_Category($cat_name);
  39. if ($catDAO->searchByName($cat->name()) != null) {
  40. Minz_Request::bad(_t('category_name_exists'), $url_redirect);
  41. }
  42. $values = array(
  43. 'id' => $cat->id(),
  44. 'name' => $cat->name(),
  45. );
  46. if ($catDAO->addCategory($values)) {
  47. Minz_Request::good(_t('category_created', $cat->name()), $url_redirect);
  48. } else {
  49. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  50. }
  51. }
  52. Minz_Request::forward($url_redirect, true);
  53. }
  54. /**
  55. * This action deletes a category.
  56. * Feeds in the given category are moved in the default category.
  57. * Related user queries are deleted too.
  58. *
  59. * Request parameter is:
  60. * - id (of a category)
  61. */
  62. public function deleteAction() {
  63. $feedDAO = FreshRSS_Factory::createFeedDao();
  64. $catDAO = new FreshRSS_CategoryDAO();
  65. $default_category = $catDAO->getDefault();
  66. $url_redirect = array('c' => 'configure', 'a' => 'categorize');
  67. if (Minz_Request::isPost()) {
  68. invalidateHttpCache();
  69. $id = Minz_Request::param('id');
  70. if (!$id) {
  71. Minz_Request::bad(_t('category_no_id'), $url_redirect);
  72. }
  73. if ($feedDAO->changeCategory($id, $default_category->id()) === false) {
  74. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  75. }
  76. if ($catDAO->deleteCategory($id) === false) {
  77. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  78. }
  79. // Remove related queries.
  80. $this->view->conf->remove_query_by_get('c_' . $id);
  81. $this->view->conf->save();
  82. Minz_Request::good(_t('category_deleted'), $url_redirect);
  83. }
  84. Minz_Request::forward($url_redirect, true);
  85. }
  86. /**
  87. * This action deletes all the feeds relative to a given category.
  88. * Feed-related queries are deleted.
  89. *
  90. * Request parameter is:
  91. * - id (of a category)
  92. */
  93. public function emptyAction() {
  94. $feedDAO = FreshRSS_Factory::createFeedDao();
  95. $url_redirect = array('c' => 'configure', 'a' => 'categorize');
  96. if (Minz_Request::isPost()) {
  97. invalidateHttpCache();
  98. $id = Minz_Request::param('id');
  99. if (!$id) {
  100. Minz_Request::bad(_t('category_no_id'), $url_redirect);
  101. }
  102. // List feeds to remove then related user queries.
  103. $feeds = $feedDAO->listByCategory($id);
  104. if ($feedDAO->deleteFeedByCategory($id)) {
  105. // TODO: Delete old favicons
  106. // Remove related queries
  107. foreach ($feeds as $feed) {
  108. $this->view->conf->remove_query_by_get('f_' . $feed->id());
  109. }
  110. $this->view->conf->save();
  111. Minz_Request::good(_t('category_emptied'), $url_redirect);
  112. } else {
  113. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  114. }
  115. }
  116. Minz_Request::forward($url_redirect, true);
  117. }
  118. }