extensionController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <?php
  2. /**
  3. * The controller to manage extensions.
  4. */
  5. class FreshRSS_extension_Controller extends Minz_ActionController {
  6. /**
  7. * This action is called before every other action in that class. It is
  8. * the common boiler plate for every action. It is triggered by the
  9. * underlying framework.
  10. */
  11. public function firstAction() {
  12. if (!FreshRSS_Auth::hasAccess()) {
  13. Minz_Error::error(403);
  14. }
  15. }
  16. /**
  17. * This action lists all the extensions available to the current user.
  18. */
  19. public function indexAction() {
  20. Minz_View::prependTitle(_t('admin.extensions.title') . ' · ');
  21. $this->view->extension_list = Minz_ExtensionManager::list_extensions();
  22. }
  23. public function configureAction() {
  24. if (Minz_Request::param('ajax')) {
  25. $this->view->_useLayout(false);
  26. }
  27. $ext_name = urldecode(Minz_Request::param('e'));
  28. $ext = Minz_ExtensionManager::find_extension($ext_name);
  29. if (is_null($ext)) {
  30. Minz_Error::error(404);
  31. }
  32. if ($ext->getType() === 'system' && !FreshRSS_Auth::hasAccess('admin')) {
  33. Minz_Error::error(403);
  34. }
  35. $this->view->extension = $ext;
  36. if (Minz_Request::isPost()) {
  37. $this->view->extension->handleConfigureAction();
  38. }
  39. }
  40. /**
  41. * This action enables a disabled extension for the current user.
  42. *
  43. * System extensions can only be enabled by an administrator.
  44. *
  45. * Parameter is:
  46. * - e: the extension name (urlencoded).
  47. */
  48. public function enableAction() {
  49. $url_redirect = array('c' => 'extension', 'a' => 'index');
  50. if (Minz_Request::isPost()) {
  51. $ext_name = urldecode(Minz_Request::param('e'));
  52. $ext = Minz_ExtensionManager::find_extension($ext_name);
  53. if (is_null($ext)) {
  54. Minz_Request::bad(_t('feedback.extensions.not_found', $ext_name),
  55. $url_redirect);
  56. }
  57. if ($ext->is_enabled()) {
  58. Minz_Request::bad(_t('feedback.extensions.already_enabled', $ext_name),
  59. $url_redirect);
  60. }
  61. if ($ext->getType() === 'system' && FreshRSS_Auth::hasAccess('admin')) {
  62. $ext->install();
  63. Minz_Configuration::addExtension($ext_name);
  64. Minz_Configuration::writeFile();
  65. Minz_Request::good(_t('feedback.extensions.enabled', $ext_name),
  66. $url_redirect);
  67. } elseif ($ext->getType() === 'user') {
  68. $ext->install();
  69. FreshRSS_Context::$conf->addExtension($ext_name);
  70. FreshRSS_Context::$conf->save();
  71. Minz_Request::good(_t('feedback.extensions.enabled', $ext_name),
  72. $url_redirect);
  73. } else {
  74. Minz_Request::bad(_t('feedback.extensions.no_access', $ext_name),
  75. $url_redirect);
  76. }
  77. }
  78. Minz_Request::forward($url_redirect, true);
  79. }
  80. /**
  81. * This action disables an enabled extension for the current user.
  82. *
  83. * System extensions can only be disabled by an administrator.
  84. *
  85. * Parameter is:
  86. * - e: the extension name (urlencoded).
  87. */
  88. public function disableAction() {
  89. $url_redirect = array('c' => 'extension', 'a' => 'index');
  90. if (Minz_Request::isPost()) {
  91. $ext_name = urldecode(Minz_Request::param('e'));
  92. $ext = Minz_ExtensionManager::find_extension($ext_name);
  93. if (is_null($ext)) {
  94. Minz_Request::bad(_t('feedback.extensions.not_found', $ext_name),
  95. $url_redirect);
  96. }
  97. if (!$ext->is_enabled()) {
  98. Minz_Request::bad(_t('feedback.extensions.not_enabled', $ext_name),
  99. $url_redirect);
  100. }
  101. if ($ext->getType() === 'system' && FreshRSS_Auth::hasAccess('admin')) {
  102. $ext->uninstall();
  103. Minz_Configuration::removeExtension($ext_name);
  104. Minz_Configuration::writeFile();
  105. Minz_Request::good(_t('feedback.extensions.disabled', $ext_name),
  106. $url_redirect);
  107. } elseif ($ext->getType() === 'user') {
  108. $ext->uninstall();
  109. FreshRSS_Context::$conf->removeExtension($ext_name);
  110. FreshRSS_Context::$conf->save();
  111. Minz_Request::good(_t('feedback.extensions.disabled', $ext_name),
  112. $url_redirect);
  113. } else {
  114. Minz_Request::bad(_t('feedback.extensions.no_access', $ext_name),
  115. $url_redirect);
  116. }
  117. }
  118. Minz_Request::forward($url_redirect, true);
  119. }
  120. public function removeAction() {
  121. if (!FreshRSS_Auth::hasAccess('admin')) {
  122. Minz_Error::error(403);
  123. }
  124. $url_redirect = array('c' => 'extension', 'a' => 'index');
  125. Minz_Request::bad('not implemented yet!', $url_redirect);
  126. }
  127. }