Below is an email Chain I had with Greg earlier this year. You can use it as a starting point.
Can you explain, "... running Zuluru with a third-party user database" and how to go about setting that up. If it is not too extensive and you have time to explain.
DYoung
Greg Schmidt Jan 13
Zuluru includes user models that allow it to work with Joomla, Drupal or Zikula user databases. If your main site is running on one of those systems, then you can set this up (primarily by changing the security.auth_model setting in config/install.php), and this will let the two systems share a user database, and perhaps more importantly, give you single sign-on capability so you can switch between the two without needing to re-authenticate. I also have a partial solution for WordPress, but this is unreleased, as it's incomplete, and people running WordPress seem to only have one or two accounts on that site for system administration, as opposed to Joomla and Drupal sites where every member is encouraged to have their own account to access forums, etc. The todo list includes adding such a model for phpBB3 and perhaps other such systems.
There are also CMS-specific modules that can further enhance this integration, by essentially placing Zuluru "inside" the CMS template, but so far these are complicated to set up, and have only been offered to clients hosted with Zuluru.net; the expected level of support to get these set up and keep them running on an unknown system is more than I'm able to provide for free.
Greg.
DYoung Jan 13
Ok, so reading your comments in (for example) models/user_drupal.php, I put the 'drupal_root' and 'auth_session' lines in the config/install.php file where stated. Would that change then automatically allow the sharing of the user database or do I have to go to zuluru/install/install?
Greg Schmidt Jan 13
If you've changed the auth_model from User to UserDrupal and added the two new lines, that should be all you need for it to start using the Drupal database instead of the Zuluru one for user authentication. Note that the value of auth_session in particular can be a bit tricky to work out, in my limited experience.
DYoung Feb 3
I know you have said you have limited experience with this, but I have tried many things in the auth_session and constantly get the same results:
Fatal Error (256): ConnectionManager::getDataSource - Non-existent data source drupal [CORE/cake/libs/model/connection_manager.php, line 102]
Code | Context
$this->useDbConfig = $dataSource;
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$name = "drupal"
$_this = ConnectionManager
ConnectionManager::$config = DATABASE_CONFIG object
ConnectionManager::$_dataSources = array
ConnectionManager::$_connectionsEnum = array
ConnectionManager::getDataSource() - CORE/cake/libs/model/connection_manager.php, line 102
Model::setDataSource() - CORE/cake/libs/model/model.php, line 2852
Model::__construct() - CORE/cake/libs/model/model.php, line 469
UserDrupal::__construct() - APP/models/user_drupal.php, line 63
ClassRegistry::init() - CORE/cake/libs/class_registry.php, line 142
Person::__construct() - APP/models/person.php, line 322
ClassRegistry::init() - CORE/cake/libs/class_registry.php, line 142
Controller::loadModel() - CORE/cake/libs/controller/controller.php, line 637
Controller::constructClasses() - CORE/cake/libs/controller/controller.php, line 502
Dispatcher::_invoke() - CORE/cake/dispatcher.php, line 186
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 171
[main] - APP/webroot/index.php, line 83
I am a little confused with the "Non-existent data source drupal". If you have any insight that would be great, otherwise this is just an update to my previous message.
DYoung
Greg Schmidt Feb 3
Ah yes. You need to add the drupal data source (likely just an exact copy of the default data source, but with the name changed) in config/database.php. I'll document that requirement...
DYoung Feb 3
That helps. An exact copy? I pointed the 'database' to the drupal database and I did not get any errors. Working through things now. Thanks for the direction.
DYoung
Greg Schmidt Feb 3
to me
If Drupal is in a different database from Zuluru, then of course you need to change that. I usually find it easiest to put them in the same database, but that may just be me. Note that if the Drupal database has a table name prefix, that will come from the Drupal config itself; the prefix in the drupal data source in the config/database.php should be left blank.
DYoung Feb 3
I just tried putting them in the same database and ran into the problem with them both having a 'users' table.
If I try to install Drupal after Zuluru and point Drupal to the zuluru database, Drupal stops because there is already a 'users' table.
If I try to install Zuluru after Drupal and point Zuluru to the drupal database, Zuluru stops because there is already a 'users' table.
DYoung
Here is the Zuluru error:
Warning (512): SQL Error: 1050: Table 'users' already exists [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
Query: CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`session_cookie` varchar(50) DEFAULT NULL,
`last_login` datetime DEFAULT NULL,
`client_ip` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`),
UNIQUE KEY `user_name` (`user_name`)) DEFAULT CHARSET=utf8,
COLLATE=utf8_general_ci,
ENGINE=InnoDB;
Warning (512): SQL Error: 1054: Unknown column 'Users.id' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
Query: SELECT COUNT(*) AS `count` FROM `users` AS `Users` WHERE `Users`.`id` = 1
Notice (8): Undefined index: id [CORE/cake/libs/model/model.php, line 1329]
Warning (512): SQL Error: 1062: Duplicate entry '0' for key 'PRIMARY' [CORE/cake/libs/model/datasources/dbo_source.php, line 684]
Query: INSERT INTO `users` (`uid`, `access`, `login`, `status`, `picture`) VALUES (0, 0, 0, 0, 0)
Warning (2): Cannot modify header information - headers already sent by (output started at /usr/share/php/cake/libs/debugger.php:686) [CORE/cake/libs/controller/controller.php, line 742]
Greg Schmidt Feb 3
I don't know much about the Drupal install process or how to set the prefix there. I know it's in the config somewhere, and I think it's something that Drupal asks for during setup, but I obviously don't know how it deals with it internally.
As for Zuluru, it doesn't currently ask for the prefix during installation, but you can fudge it... Once you get past the page asking for database details, but before you start to populate it, the config/database.php file exists, and you can edit that manually to set the prefix for the "default" data source, to something like "z_". Then continue with the web install, and it should create the tables with your selected prefix.
Alternately, take your pre-existing stand-alone Zuluru database, rename the tables in it, dump it, and restore into the Drupal database.
Or, just leave them in separate databases; I believe that I've eliminated all of the bugs associated with that setup, or at least all of the serious ones, as I now have a large client running in that configuration.
Greg.
DYoung Feb 3
Continuing down the path with separate databases, (since that is what I currently have), it seems to be partially working.
When I go to http://localhost/drupal7 I can login as admin without a problem.
When I go to http://localhost/zuluru, I get the non-login view. (Limited Registration, League, Fields, Help and reset password.) When I go to http://localhost/zuluru/users/login and type the same login and password as drupal I get the "if you already have an account from a previous session, do not create another account....." So I then try the reset password option. I get the emails with the links to change the password and then I get the email with the new password.
When I go to http://localhost/zuluru/users/login and try admin, with the password from the email, it does not let me in.
When I go to http://localhost/drupal7 and login as admin I must use the password from the zuluru password change email.
So Zuluru seems to be changing the drupal admin user's password in the drupal database, but I can not see the admin level of the Zuluru page.
Thanks for all your help thus far. I will continue to search for answers and let you know what I find.
DYoung
DYoung Feb 3
Also you mentioned in your email about 1.7.3 that:
"...Zuluru "view player" page now shows a Zuluru user id and a CMS (e.g. Joomla) user id."
I only see a Zuluru user id, but no reference to any other user id. Should there be a field in the people table that refers to this CMS user id?
DYoung
Greg Schmidt Feb 3
I just realized that the one site using this in separate databases actually uses some different code for the login part, so it's possible that the standard login doesn't work right when they're in separate databases. I'll see about looking into this tomorrow and let you know what I learn.
The people table has a user_id field that should reference the Drupal user. If you had a pre-existing database of both users and people, that may not have been updated correctly, but the old code kept the two ID fields (Drupal user ID and Zuluru person ID) in sync, so user_id *should* have been set correctly in the update process.
Have you pulled all the latest bug fixes? The initial 1.7.3 release was, sadly, not a great moment in the annals of thorough testing.
Greg.
DYoung Feb 4
I have set up a new Drupal and Zuluru to mimic what I will do in production. I have downloaded the latest Zuluru Master.
Greg Schmidt Feb 4
Now that I think about this a little more, the login is actually behaving as I'd expect. That's maybe not how it should be expected to, but that's another question... Since you're using Drupal, you shouldn't actually have a link to
http://localhost/zuluru/users/login anywhere. You log in through Drupal, and Zuluru should recognize that session. The question is why it's not. My guess is that the auth_session may not be set correctly in config/install.php. I'm not really sure how to get the correct value there other than trial and error of various combinations of your host name; some of the sites I have running correctly have values of the ".xyz.com" form (note the leading period), and others are more like "abc.xyz.com".
DYoung Feb 4
Right, I have been looking and have also come the to the conclusion that it is not reading the cookie. I will pursue the auth_session more.
thanks for the direction.
DYoung
DYoung Feb 4
GOT IT!
As my Drupal site accessed at http://localhost/drupal7
the auth_session is set to localhost/drupal7
Things are preliminarily looking good.
Thanks
DYoung