diff --git a/AdminNotification.php b/AdminNotification.php index a46a950..bfe18fe 100644 --- a/AdminNotification.php +++ b/AdminNotification.php @@ -2,6 +2,7 @@ namespace Piwik\Plugins\AdminNotification; +use Piwik\Piwik; use Piwik\Notification; /** @@ -9,11 +10,13 @@ class AdminNotification extends \Piwik\Plugin { private static $hooks = array( - 'Login.initSession.end' => 'setNotification', - 'Settings.AdminNotification.settingsUpdated' => 'setNotification' + 'Login.initSession.end' => 'setNotification', //Version 2.X Post login handler + 'Login.authenticate.successful' => 'setNotificationV3', //Version 3.X Post login handler + 'Settings.AdminNotification.settingsUpdated' => 'setNotification', //Version 2.X Setting updated handler + 'SystemSettings.updated' => 'settingsChangedV3' //Version 3.X Setting updated handler ); - //2.15 includes a new function for registering hooks. 2.15 wi + //2.15 includes a new function for registering hooks. public function registerEvents() { return self::$hooks; @@ -27,9 +30,15 @@ public function getListHooksRegistered() return self::$hooks; } + function postLoad() + { + //Piwik::addAction('SystemSettings.updated', array($this, 'settingsChangedV3')); + } + public function setNotification(){ + $settings = API::getInstance(); - + $enabled = $settings->isEnabled(); if ($enabled) { @@ -44,9 +53,40 @@ public function setNotification(){ $notification->context = $context; $notification->type = Notification::TYPE_PERSISTENT; $notification->priority = Notification::PRIORITY_MAX; - Notification\Manager::notify('admin_message', $notification); + Notification\Manager::notify('AdminNotification_notice', $notification); }else{ - Notification\Manager::cancel('admin_message'); + Notification\Manager::cancel('AdminNotification_notice'); } } + + public function settingsChangedV3($settings){ + if($settings->getPluginName() === 'AdminNotification'){ + $this->setNotificationV3(); + } + } + + public function setNotificationV3(){ + //Known issue. The alert notification is not updated until login/logout on v3.x. + + $settings = new SystemSettings(); + //print_r($settings->enabled->getValue()); + + if($settings->enabled->getValue()){ + + $notification = new Notification($settings->message->getValue()); + $notification->title = $settings->messageTitle->getValue(); + $notification->context = $settings->context->getValue(); + $notification->type = Notification::TYPE_PERSISTENT; + //$notification->priority = Notification::PRIORITY_MAX; + + //echo "NOTIFY"; + //print_r($notification); + + Notification\Manager::notify('AdminNotification_notice', $notification); + + }else{ + //echo "NOTIFY CANCEL"; + Notification\Manager::cancel('AdminNotification_notice'); + } + } } \ No newline at end of file diff --git a/README.md b/README.md index af55a3d..7a1d321 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,16 @@ Adds the ability for Piwik administrators to include an informative message on a The easiest way to install is to find the plugin in the [Piwik Marketplace](http://plugins.piwik.org/). ##Changelog +3.0.0 Piwik v3 compatible. 0.1.2 Tested with Piwik v2.15 and included new registerEvents() hook for compatibility with Piwik 3.0 0.1.1 Cleanup. Removed plugin template verbiage from code files. 0.1.0 Initial Release +##Known Issues +v3.0.0 Display/Update of notification required logout/login to see change. (Notification API not working as expected during tests) + ##License GPL v3 / fair use ## Support -Please [report any issues](https://github.com/jbrule/piwikplugin-AdminNotification/issues). Pull requests welcome. \ No newline at end of file +Please [report any issues](https://github.com/jbrule/piwikplugin-AdminNotification/issues). Pull requests welcome. diff --git a/SystemSettings.php b/SystemSettings.php new file mode 100644 index 0000000..08a7537 --- /dev/null +++ b/SystemSettings.php @@ -0,0 +1,102 @@ +metric->getValue(); + * $settings->description->getValue(); + */ +class SystemSettings extends \Piwik\Settings\Plugin\SystemSettings +{ + /** @var Setting */ + public $enabled; + + /** @var Setting */ + public $context; + + /** @var Setting */ + public $messageTitle; + + /** @var Setting */ + public $description; + + /** @var Setting */ + public $password; + + protected function init() + { + + $this->enabled = $this->createEnabledSetting(); + + $this->context = $this->createContextSetting(); + + $this->messageTitle = $this->createTitleSetting(); + + $this->message = $this->createMessageSetting(); + + } + + private function createEnabledSetting() + { + return $this->makeSetting('enabled', $default = false, FieldConfig::TYPE_BOOL, function (FieldConfig $field) { + $field->title = $this->t('EnabledSettingTitle'); + $field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX; + $field->description = $this->t('EnabledSettingDescription'); + $field->readableByCurrentUser = true; + }); + } + + private function createContextSetting() + { + return $this->makeSetting('context', $default = "info", FieldConfig::TYPE_STRING, function (FieldConfig $field) { + $field->title = $this->t('ContextSettingTitle'); + $field->condition = 'enabled'; + $field->uiControl = FieldConfig::UI_CONTROL_SINGLE_SELECT; + $field->description = $this->t('ContextSettingDescription'); + $field->availableValues = array(Notification::CONTEXT_INFO => Notification::CONTEXT_INFO, + Notification::CONTEXT_ERROR => Notification::CONTEXT_ERROR, + Notification::CONTEXT_SUCCESS => Notification::CONTEXT_SUCCESS, + Notification::CONTEXT_WARNING => Notification::CONTEXT_WARNING); + }); + } + + private function createTitleSetting() + { + return $this->makeSetting('title', $default = "Message from Piwik Administrator", FieldConfig::TYPE_STRING, function (FieldConfig $field) { + $field->title = $this->t('TitleSettingTitle'); + $field->condition = 'enabled'; + $field->uiControl = FieldConfig::UI_CONTROL_TEXT; + //$field->uiControlAttributes = array("size"=> 65); + $field->description = $this->t('TitleSettingDescription'); + }); + } + + private function createMessageSetting() + { + return $this->makeSetting('message', $default = "", FieldConfig::TYPE_STRING, function (FieldConfig $field) { + $field->title = $this->t('MessageSettingTitle'); + $field->condition = 'enabled'; + $field->uiControl = FieldConfig::UI_CONTROL_TEXTAREA; + $field->description = $this->t('MessageSettingDescription'); + }); + } + + private function t($translate_token){ + return Piwik::translate("AdminNotification_".$translate_token); + } +} diff --git a/lang/en.json b/lang/en.json index f915c78..d9324e1 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,7 +1,7 @@ { "AdminNotification": { "PluginDescription": "Places a message on all user's dashboards.", - "EnabledSettingTitle": "Enabled ", + "EnabledSettingTitle": "Enabled", "EnabledSettingDescription": " If enabled, the provided message will be displayed to users upon login.", "MessageSettingTitle": "Message", "MessageSettingDescription": "Message to display to users", diff --git a/plugin.json b/plugin.json index 8bc6388..26ddef1 100644 --- a/plugin.json +++ b/plugin.json @@ -1,19 +1,22 @@ -{ - "name": "AdminNotification", - "version": "0.1.2", - "description": "Adds the ability for Piwik administrators to include an informative message to all user's dashboards. This uses the built in Notification function.", - "license": "GPL v3+", - "keywords": ["admin message", "notification"], - "homepage": "https://github.com/jbrule/piwikplugin-AdminNotification", - "theme": false, - "require": { - "piwik": ">=2.12.0" - }, - "authors": [ - { - "name": "Josh Brule", - "email": "", - "homepage": "https://www.linkedin.com/pub/joshua-brule/15/326/9b9" - } - ] -} +{ + "name": "AdminNotification", + "version": "3.0.0", + "description": "Adds the ability for Piwik administrators to include an informative message to all user's dashboards. This uses the built in Notification function.", + "license": "GPL v3+", + "keywords": [ + "admin message", + "notification" + ], + "homepage": "https:\/\/github.com\/jbrule\/piwikplugin-AdminNotification", + "theme": false, + "require": { + "piwik": ">=3.0.4-stable,<4.0.0-b1" + }, + "authors": [ + { + "name": "Josh Brule", + "email": "", + "homepage": "https:\/\/github.com\/jbrule" + } + ] +} \ No newline at end of file