Skip to content

Commit

Permalink
Dev: Show red cross in plugin manager for load error plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
olleharstedt committed Mar 21, 2018
1 parent 1b62ae1 commit ab5e61e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 31 deletions.
32 changes: 14 additions & 18 deletions application/controllers/admin/PluginManagerController.php
Expand Up @@ -16,7 +16,10 @@ public function index()
{
$oPluginManager = App()->getPluginManager();

$oPluginManager->scanPlugins();

// Scan the plugins folder.
/*
$aDiscoveredPlugins = $oPluginManager->scanPlugins();
$aInstalledPlugins = $oPluginManager->getInstalledPlugins();
$aInstalledNames = array_map(
Expand All @@ -27,7 +30,6 @@ function ($installedPlugin) {
);
// Install newly discovered plugins.
/*
foreach ($aDiscoveredPlugins as $discoveredPlugin) {
if (!in_array($discoveredPlugin['pluginClass'], $aInstalledNames)) {
$oPlugin = new Plugin();
Expand All @@ -45,22 +47,14 @@ function ($installedPlugin) {
$aoPlugins = Plugin::model()->findAll(array('order' => 'name'));
$data = array();
foreach ($aoPlugins as $oPlugin) {
/* @var $plugin Plugin */
$plugin = App()->getPluginManager()->loadPlugin($oPlugin->name, $oPlugin->id);
if ($plugin) {
$aPluginSettings = $plugin->getPluginSettings(false);
$data[] = array(
'id' => $oPlugin->id,
'name' => $aDiscoveredPlugins[$oPlugin->name]['pluginName'],
'description' => $aDiscoveredPlugins[$oPlugin->name]['description'],
'active' => $oPlugin->active,
'settings' => $aPluginSettings,
'new' => !in_array($oPlugin->name, $aInstalledNames)
);
} else {
tracevar($oPlugin->name);
// What?
}
$data[] = [
'id' => $oPlugin->id,
'name' => $oPlugin->name,
'load_error' => $oPlugin->load_error,
'description' => '',
'active' => $oPlugin->active,
'settings' => []
];
}

if (Yii::app()->request->getParam('pageSize')) {
Expand All @@ -70,11 +64,13 @@ function ($installedPlugin) {
$aData['fullpagebar']['returnbutton']['url'] = 'index';
$aData['fullpagebar']['returnbutton']['text'] = gT('Return to admin home');
$aData['data'] = $data;
$this->_renderWrappedTemplate('pluginmanager', 'index', $aData);

if (!Permission::model()->hasGlobalPermission('settings', 'read')) {
Yii::app()->setFlashMessage(gT("No permission"), 'error');
$this->getController()->redirect(array('/admin'));
}

$this->_renderWrappedTemplate('pluginmanager', 'index', $aData);
}

/**
Expand Down
10 changes: 7 additions & 3 deletions application/libraries/PluginManager/PluginManager.php
Expand Up @@ -49,7 +49,7 @@ class PluginManager extends \CApplicationComponent
/**
* @var PluginManagerShutdownFunction
*/
protected $shutdownObject;
public $shutdownObject;

/**
* Creates the plugin manager.
Expand Down Expand Up @@ -385,7 +385,9 @@ public function loadPlugins()
$records = $pluginModel->findAllByAttributes(array('active'=>1));

foreach ($records as $record) {
$this->loadPlugin($record->name, $record->id);
if ($record->load_error == 0) {
$this->loadPlugin($record->name, $record->id);
}
}
} else {
// Log it ? tracevar ?
Expand All @@ -401,7 +403,9 @@ public function loadAllPlugins()
{
$records = Plugin::model()->findAll();
foreach ($records as $record) {
$this->loadPlugin($record->name, $record->id);
if ($record->load_error == 0) {
$this->loadPlugin($record->name, $record->id);
}
}
}

Expand Down
Expand Up @@ -43,6 +43,14 @@ public function disable()
$this->enabled = false;
}

/**
* @return boolean
*/
public function isEnabled()
{
return $this->enabled;
}

/**
*
*/
Expand Down
16 changes: 12 additions & 4 deletions application/models/behaviors/PluginEventBehavior.php
Expand Up @@ -25,8 +25,12 @@ public function afterDelete(CEvent $event)

public function afterSave(CEvent $event)
{
$this->dispatchPluginModelEvent('after'.get_class($this->owner).'Save');
$this->dispatchPluginModelEvent('afterModelSave');
$pluginManager = App()->getPluginManager();
// Don't propagate event if we're in a shutdown, since it will lead to an infinite loop.
if (!$pluginManager->shutdownObject->isEnabled()) {
$this->dispatchPluginModelEvent('after'.get_class($this->owner).'Save');
$this->dispatchPluginModelEvent('afterModelSave');
}
}

public function beforeDelete(CModelEvent $event)
Expand All @@ -37,8 +41,12 @@ public function beforeDelete(CModelEvent $event)

public function beforeSave(CModelEvent $event)
{
$this->dispatchPluginModelEvent('before'.get_class($this->owner).'Save');
$this->dispatchPluginModelEvent('beforeModelSave');
$pluginManager = App()->getPluginManager();
// Don't propagate event if we're in a shutdown, since it will lead to an infinite loop.
if (!$pluginManager->shutdownObject->isEnabled()) {
$this->dispatchPluginModelEvent('before'.get_class($this->owner).'Save');
$this->dispatchPluginModelEvent('beforeModelSave');
}
}

/**
Expand Down
16 changes: 10 additions & 6 deletions application/views/admin/pluginmanager/index.php
Expand Up @@ -61,12 +61,14 @@
//'value' => function($data) { return ($data['active'] == 1 ? CHtml::image(App()->getConfig('adminimageurl') . 'active.png', gT('Active'), array('width' => 32, 'height' => 32)) : CHtml::image(App()->getConfig('adminimageurl') . 'inactive.png', gT('Inactive'), array('width' => 32, 'height' => 32))); }
'value' => function($data)
{
if ($data['active'] == 1)
{
if ($data['load_error'] == 1) {
return sprintf(
"<span data-toggle='tooltip' title='%s' class='btntooltip fa fa-times text-warning'></span>",
gT('Plugin load error')
);
} elseif ($data['active'] == 1) {
return "<span class='fa fa-circle'></span>";
}
else
{
} else {
return "<span class='fa fa-circle-thin'></span>";
}
}
Expand All @@ -91,7 +93,9 @@
$output='';
if(Permission::model()->hasGlobalPermission('settings','update'))
{
if ($data['active'] == 0)
if ($data['load_error'] == 1) {
$output = '';
} elseif ($data['active'] == 0)
{
$output = "<a href='#activate' data-action='activate' data-id='".$data['id']."' class='ls_action_changestate btn btn-default btn-xs btntooltip'>"
. "<span class='fa fa-power-off'>&nbsp;</span>"
Expand Down

0 comments on commit ab5e61e

Please sign in to comment.