categoryController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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' => 'subscription', 'a' => 'index');
  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 updates the given category.
  56. *
  57. * Request parameters are:
  58. * - id
  59. * - name
  60. */
  61. public function updateAction() {
  62. $catDAO = new FreshRSS_CategoryDAO();
  63. $url_redirect = array('c' => 'subscription', 'a' => 'index');
  64. if (Minz_Request::isPost()) {
  65. invalidateHttpCache();
  66. $id = Minz_Request::param('id');
  67. $name = Minz_Request::param('name', '');
  68. if (strlen($name) <= 0) {
  69. Minz_Request::bad(_t('category_no_name'), $url_redirect);
  70. }
  71. if ($catDAO->searchById($id) == null) {
  72. Minz_Request::bad(_t('category_not_exist'), $url_redirect);
  73. }
  74. $cat = new FreshRSS_Category($name);
  75. $values = array(
  76. 'name' => $cat->name(),
  77. );
  78. if ($catDAO->updateCategory($id, $values)) {
  79. Minz_Request::good(_t('category_updated'), $url_redirect);
  80. } else {
  81. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  82. }
  83. }
  84. Minz_Request::forward($url_redirect, true);
  85. }
  86. /**
  87. * This action deletes a category.
  88. * Feeds in the given category are moved in the default category.
  89. * Related user queries are deleted too.
  90. *
  91. * Request parameter is:
  92. * - id (of a category)
  93. */
  94. public function deleteAction() {
  95. $feedDAO = FreshRSS_Factory::createFeedDao();
  96. $catDAO = new FreshRSS_CategoryDAO();
  97. $default_category = $catDAO->getDefault();
  98. $url_redirect = array('c' => 'subscription', 'a' => 'index');
  99. if (Minz_Request::isPost()) {
  100. invalidateHttpCache();
  101. $id = Minz_Request::param('id');
  102. if (!$id) {
  103. Minz_Request::bad(_t('category_no_id'), $url_redirect);
  104. }
  105. if ($id === $default_category->id()) {
  106. Minz_Request::bad(_t('category_not_delete_default'), $url_redirect);
  107. }
  108. if ($feedDAO->changeCategory($id, $default_category->id()) === false) {
  109. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  110. }
  111. if ($catDAO->deleteCategory($id) === false) {
  112. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  113. }
  114. // Remove related queries.
  115. $this->view->conf->remove_query_by_get('c_' . $id);
  116. $this->view->conf->save();
  117. Minz_Request::good(_t('category_deleted'), $url_redirect);
  118. }
  119. Minz_Request::forward($url_redirect, true);
  120. }
  121. /**
  122. * This action deletes all the feeds relative to a given category.
  123. * Feed-related queries are deleted.
  124. *
  125. * Request parameter is:
  126. * - id (of a category)
  127. */
  128. public function emptyAction() {
  129. $feedDAO = FreshRSS_Factory::createFeedDao();
  130. $url_redirect = array('c' => 'subscription', 'a' => 'index');
  131. if (Minz_Request::isPost()) {
  132. invalidateHttpCache();
  133. $id = Minz_Request::param('id');
  134. if (!$id) {
  135. Minz_Request::bad(_t('category_no_id'), $url_redirect);
  136. }
  137. // List feeds to remove then related user queries.
  138. $feeds = $feedDAO->listByCategory($id);
  139. if ($feedDAO->deleteFeedByCategory($id)) {
  140. // TODO: Delete old favicons
  141. // Remove related queries
  142. foreach ($feeds as $feed) {
  143. $this->view->conf->remove_query_by_get('f_' . $feed->id());
  144. }
  145. $this->view->conf->save();
  146. Minz_Request::good(_t('category_emptied'), $url_redirect);
  147. } else {
  148. Minz_Request::bad(_t('error_occurred'), $url_redirect);
  149. }
  150. }
  151. Minz_Request::forward($url_redirect, true);
  152. }
  153. }