extensionController.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. }
  28. /**
  29. * This action enables a disabled extension for the current user.
  30. *
  31. * System extensions can only be enabled by an administrator.
  32. *
  33. * Parameter is:
  34. * - e: the extension name (urlencoded).
  35. */
  36. public function enableAction() {
  37. $url_redirect = array('c' => 'extension', 'a' => 'index');
  38. if (Minz_Request::isPost()) {
  39. $ext_name = urldecode(Minz_Request::param('e'));
  40. $ext = Minz_ExtensionManager::find_extension($ext_name);
  41. if (is_null($ext)) {
  42. Minz_Request::bad('feedback.extension.not_found', $url_redirect);
  43. }
  44. if ($ext->is_enabled()) {
  45. Minz_Request::bad('feedback.extension.already_enabled', $url_redirect);
  46. }
  47. if ($ext->getType() === 'system' && !FreshRSS_Auth::hasAccess('admin')) {
  48. Minz_Request::bad('feedback.extension.no_access', $url_redirect);
  49. }
  50. $ext->install();
  51. FreshRSS_Context::$conf->addExtension($ext_name);
  52. FreshRSS_Context::$conf->save();
  53. Minz_Request::good('feedback.extension.enabled', $url_redirect);
  54. }
  55. Minz_Request::forward($url_redirect, true);
  56. }
  57. /**
  58. * This action disables an enabled extension for the current user.
  59. *
  60. * System extensions can only be disabled by an administrator.
  61. *
  62. * Parameter is:
  63. * - e: the extension name (urlencoded).
  64. */
  65. public function disableAction() {
  66. $url_redirect = array('c' => 'extension', 'a' => 'index');
  67. if (Minz_Request::isPost()) {
  68. $ext_name = urldecode(Minz_Request::param('e'));
  69. $ext = Minz_ExtensionManager::find_extension($ext_name);
  70. if (is_null($ext)) {
  71. Minz_Request::bad('feedback.extension.not_found', $url_redirect);
  72. }
  73. if (!$ext->is_enabled()) {
  74. Minz_Request::bad('feedback.extension.not_enabled', $url_redirect);
  75. }
  76. if ($ext->getType() === 'system' && !FreshRSS_Auth::hasAccess('admin')) {
  77. Minz_Request::bad('feedback.extension.no_access', $url_redirect);
  78. }
  79. $ext->uninstall();
  80. FreshRSS_Context::$conf->removeExtension($ext_name);
  81. FreshRSS_Context::$conf->save();
  82. Minz_Request::good('feedback.extension.disabled', $url_redirect);
  83. }
  84. Minz_Request::forward($url_redirect, true);
  85. }
  86. public function removeAction() {
  87. }
  88. }