diff --git a/application/controllers/admin/pluginmanager.php b/application/controllers/admin/pluginmanager.php index a643c008b55..a2669f3d6c2 100644 --- a/application/controllers/admin/pluginmanager.php +++ b/application/controllers/admin/pluginmanager.php @@ -1,11 +1,17 @@ getPluginManager(); @@ -57,6 +63,71 @@ public function index() $this->_renderWrappedTemplate('pluginmanager', 'index', array('data' => $data)); } + /** + * Activate a plugin + * + * @todo Defensive programming + * @param int $id Plugin id + * @return void + */ + public function activate($id) + { + $oPlugin = Plugin::model()->findByPk($id); + if (!is_null($oPlugin)) + { + $iStatus = $oPlugin->active; + if ($iStatus == 0) + { + // Load the plugin: + App()->getPluginManager()->loadPlugin($oPlugin->name, $id); + $result = App()->getPluginManager()->dispatchEvent(new PluginEvent('beforeActivate', $this), $oPlugin->name); + if ($result->get('success', true)) + { + $iStatus = 1; + } else + { + Yii::app()->user->setFlash('error', gT('Failed to activate the plugin.')); + $this->getController()->redirect(array('admin/pluginmanager/sa/index/')); + } + } + $oPlugin->active = $iStatus; + $oPlugin->save(); + Yii::app()->user->setFlash('success', gT('Plugin was activated')); + } + $this->getController()->redirect(array('admin/pluginmanager/sa/index/')); + } + + /** + * Deactivate plugin with $id + * + * @param int $id + * @return void + */ + public function deactivate($id) + { + $oPlugin = Plugin::model()->findByPk($id); + if (!is_null($oPlugin)) + { + $iStatus = $oPlugin->active; + if ($iStatus == 1) + { + $result = App()->getPluginManager()->dispatchEvent(new PluginEvent('beforeDeactivate', $this), $oPlugin->name); + if ($result->get('success', true)) + { + $iStatus = 0; + } else + { + Yii::app()->user->setFlash('error', gT('Failed to deactivate the plugin.')); + $this->getController()->redirect(array('admin/pluginmanager/sa/index/')); + } + } + $oPlugin->active = $iStatus; + $oPlugin->save(); + Yii::app()->user->setFlash('success', gT('Plugin was deactivated')); + } + $this->getController()->redirect(array('admin/pluginmanager/sa/index/')); + } + /** * Renders template(s) wrapped in header and footer * diff --git a/application/views/admin/pluginmanager/index.php b/application/views/admin/pluginmanager/index.php index fa69253833f..eeef4502856 100644 --- a/application/views/admin/pluginmanager/index.php +++ b/application/views/admin/pluginmanager/index.php @@ -31,9 +31,9 @@ 'value' => function($data) { if ($data['active'] == 0) { - $output = CHtml::link(CHtml::image(App()->getConfig('adminimageurl') . 'active.png', gT('Activate'), array('width' => 16, 'height' => 16)), array("/plugins/activate", "id" => $data['id'])); + $output = CHtml::link(CHtml::image(App()->getConfig('adminimageurl') . 'active.png', gT('Activate'), array('width' => 16, 'height' => 16)), array("/admin/pluginmanager/sa/activate", "id" => $data['id'])); } else { - $output = CHtml::link(CHtml::image(App()->getConfig('adminimageurl') . 'inactive.png', gT('Deactivate'), array('width' => 16, 'height' => 16)), array("/plugins/deactivate", "id" => $data['id'])); + $output = CHtml::link(CHtml::image(App()->getConfig('adminimageurl') . 'inactive.png', gT('Deactivate'), array('width' => 16, 'height' => 16)), array("/admin/pluginmanager/sa/deactivate", "id" => $data['id'])); } if(count($data['settings'])>0) {