Following the same technique used with the Login plugin - which set's the Zend::Registry('auth') to an instance of the Login class - the same is also needed for the UsersManager, and then the instance stored in Zend::Registry should replace the static method UsersManger::get_instance called from the Piwik_UsersManager_Controller.
The reason is found here in summary: http://forum.piwik.org/read.php?3,74485,74594#msg-74591
Keywords: hooks UsersManager thirdparty-plugin-development
Attachment: plugins/UsersManager/API.php
API.php
Attachment: Tested
API.2.php
as this is specific to your app, we are happy to do it, but are you able to submit a patch & test it for this new feature?
I'm happy too to do it and will submit it for test once finished.. But it should be noted that your description for the Login plugin as "Can be easily replaced to introduce a new Authentication mechanism" is a bit misleading till this moment.
I attached the API.php file with modifications needed to make the UsersManager overridable.
Will this work as well?
Index: plugins/UsersManager/API.php
===================================================================
--- plugins/UsersManager/API.php (revision 4334)
+++ plugins/UsersManager/API.php (working copy)
@@ -23,11 +23,16 @@
*/
static public function getInstance()
{
- if (self::$instance == null)
- {
- self::$instance = new self;
+ try {
+ $instance = Zend_Registry::get('UsersManager_API');
+ if( !($instance instanceof Piwik_UsersManager_API) ) {
+ throw new Exception('UsersManager_API must inherit Piwik_UsersManager_API');
+ }
+ } catch (Exception $e) {
+ $instance = new self;
}
- return self::$instance;
+ Zend_Registry::set('UsersManager_API', $instance);
+ return $instance;
}
const PREFERENCE_DEFAULT_REPORT = 'defaultReport';
If you confirm this works with your plugin I can commit
also, do you mind posting a quick example of how you use it, I will add it as a comment. thx
instead please refer to API.2.php attached
it was tested and passed
here is an example:
Register listener for some early hook like FrontController.initAuthenticationObject
and within the observer function:
Zend_Registry::set('UsersManager_API',Piwik_MyCustomUsersManager_API::getInstance());
the method Piwik_MyCustomUsersManager_API::getInstance() merely returns an instance of its class, which has methods overriden such as getUser and getUserByEmail etc... that looks inside other tables/data sources for users, instead of Piwik users table
(In [4434]) Fixes #2275 Thanks rahman for feedback!
I'm looking forward to participating more. You can assign me tasks regarding Piwik bugs fixes/feature requests.
rahman, it is better if you grab the tasks that are interesting to you! we also look forward to seeing more patches
Okay, I will search the timeline for tasks. I'm kinda new to this so not sure how I will occasionally declare undertaking a request to avoid duplicate work with other developers.
in general, it is safe to work on any ticket unless
Best to ask questions etc. No need to say "I'm going to work on this" because as we've seen in the past, most people who say that don't end up working on it so then it creates confusion ;)