extensionController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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(_t('feedback.extensions.not_found', $ext_name),
  43. $url_redirect);
  44. }
  45. if ($ext->is_enabled()) {
  46. Minz_Request::bad(_t('feedback.extensions.already_enabled', $ext_name),
  47. $url_redirect);
  48. }
  49. if ($ext->getType() === 'system' && FreshRSS_Auth::hasAccess('admin')) {
  50. $ext->install();
  51. Minz_Configuration::addExtension($ext_name);
  52. Minz_Configuration::writeFile();
  53. Minz_Request::good(_t('feedback.extensions.enabled', $ext_name),
  54. $url_redirect);
  55. } elseif ($ext->getType() === 'user') {
  56. $ext->install();
  57. FreshRSS_Context::$conf->addExtension($ext_name);
  58. FreshRSS_Context::$conf->save();
  59. Minz_Request::good(_t('feedback.extensions.enabled', $ext_name),
  60. $url_redirect);
  61. } else {
  62. Minz_Request::bad(_t('feedback.extensions.no_access', $ext_name),
  63. $url_redirect);
  64. }
  65. }
  66. Minz_Request::forward($url_redirect, true);
  67. }
  68. /**
  69. * This action disables an enabled extension for the current user.
  70. *
  71. * System extensions can only be disabled by an administrator.
  72. *
  73. * Parameter is:
  74. * - e: the extension name (urlencoded).
  75. */
  76. public function disableAction() {
  77. $url_redirect = array('c' => 'extension', 'a' => 'index');
  78. if (Minz_Request::isPost()) {
  79. $ext_name = urldecode(Minz_Request::param('e'));
  80. $ext = Minz_ExtensionManager::find_extension($ext_name);
  81. if (is_null($ext)) {
  82. Minz_Request::bad(_t('feedback.extensions.not_found', $ext_name),
  83. $url_redirect);
  84. }
  85. if (!$ext->is_enabled()) {
  86. Minz_Request::bad(_t('feedback.extensions.not_enabled', $ext_name),
  87. $url_redirect);
  88. }
  89. if ($ext->getType() === 'system' && FreshRSS_Auth::hasAccess('admin')) {
  90. $ext->uninstall();
  91. Minz_Configuration::removeExtension($ext_name);
  92. Minz_Configuration::writeFile();
  93. Minz_Request::good(_t('feedback.extensions.disabled', $ext_name),
  94. $url_redirect);
  95. } elseif ($ext->getType() === 'user') {
  96. $ext->uninstall();
  97. FreshRSS_Context::$conf->removeExtension($ext_name);
  98. FreshRSS_Context::$conf->save();
  99. Minz_Request::good(_t('feedback.extensions.disabled', $ext_name),
  100. $url_redirect);
  101. } else {
  102. Minz_Request::bad(_t('feedback.extensions.no_access', $ext_name),
  103. $url_redirect);
  104. }
  105. }
  106. Minz_Request::forward($url_redirect, true);
  107. }
  108. public function removeAction() {
  109. }
  110. }