@anonymous-matomo-user opened this Issue on April 6th 2011

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

@anonymous-matomo-user commented on April 7th 2011

Attachment: plugins/UsersManager/API.php

@anonymous-matomo-user commented on April 7th 2011

Attachment: Tested

@mattab commented on April 6th 2011 Member

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?

@anonymous-matomo-user commented on April 7th 2011

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.

@anonymous-matomo-user commented on April 7th 2011

I attached the API.php file with modifications needed to make the UsersManager overridable.

@mattab commented on April 7th 2011 Member

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

@anonymous-matomo-user commented on April 7th 2011

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:


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

@mattab commented on April 13th 2011 Member

(In [4434]) Fixes #2275 Thanks rahman for feedback!

@anonymous-matomo-user commented on April 13th 2011


@anonymous-matomo-user commented on April 14th 2011

I'm looking forward to participating more. You can assign me tasks regarding Piwik bugs fixes/feature requests.

@mattab commented on April 14th 2011 Member

rahman, it is better if you grab the tasks that are interesting to you! we also look forward to seeing more patches

@anonymous-matomo-user commented on April 14th 2011

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.

@mattab commented on April 14th 2011 Member

in general, it is safe to work on any ticket unless

  • it was recently created and might be work in progress
  • it is already assigned to someone

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 ;)

This Issue was closed on April 14th 2011
Powered by GitHub Issue Mirror