extensionController.php 3.3 KB

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