As far as I understand it from the PEAR docs (
http://pear.php.net/manual/en/package.database.db-dataobject.intro-autobuilding.php)
DB_DataObject relies on schema file for its table definitions but you
can
hand code the class instead. This is effectively what I did by adding the
table() and key() functions to User_username.
Interestingly the other two plugins that define database tables (OpenID and
UserFlag) both include table and key functions in the appropriate DataObject
class definitions.
I added the following to User_username to get it to work
// now define your table structure.
// key is column name, value is type
function table() {
return array(
'user_id' => DB_DATAOBJECT_INT,
'username' => DB_DATAOBJECT_STR,
'provider_name' => DB_DATAOBJECT_STR ,
'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE +
DB_DATAOBJECT_TIME,
);
}
// now define the keys.
function keys() {
return array('provider_name', 'username');
}
2009/12/1 Chris Fanning <[email protected]>
> I don't know if I'm onto something or not.
>
> in the file /classes/Memcached_DataObject.php I added this log.
>
> function insert()
> {
> common_log(LOG_INFO, 'log database: '.$this->_database);
> common_log(LOG_INFO, 'log table: '.$this->__table);
>
> $result = parent::insert();
> return $result;
> }
>
>
> 2009-12-01 10:41:46 LOG_INFO: log database:
> 2009-12-01 10:41:46 LOG_INFO: log table: user_username
> 2009-12-01 10:41:46 LOG_ERR: PEAR error: DB_DataObject Error:
> insert:No table definition for user_username :
> 2009-12-01 10:41:46 LOG_ERR: #0
> PEAR_Error->PEAR_Error(string,integer,integer,string) called at
> [/usr/share/php/DB/DataObject/Error.php:44]
>
> Does that mean that perhaps the database name is missing?
>
> I'm stuck. But am learning something about php ;)
>
> Chris.
>
> On Tue, Dec 1, 2009 at 11:21 AM, Chris Fanning
> <[email protected]> wrote:
> > On Mon, Nov 30, 2009 at 2:52 PM, Martin Higham <[email protected]>
> wrote:
> >> I did find that if I added table() and key() functions to User_username
> that
> >> this fixed the problem.
> >
> > Could you please explain this a bit more?
> > Thanks.
> > Chris.
> >
> >> I don't know enough about how DB_DataObject works to know where it
> expects
> >> to find the table definition normally. Is there a script that needs to
> be
> >> run for the plugin database table definition to be created?
> >> Martin
> >>
> >> 2009/11/30 Chris Fanning <[email protected]>
> >>>
> >>> On Sat, Nov 28, 2009 at 5:00 PM, Martin Higham <[email protected]>
> >>> wrote:
> >>> > Forgot to send this reply to the list
> >>> >
> >>> >> Well the table is there, I can see it if I access the db through
> >>> >> phpadmin
> >>> >> but I still get the same error
> >>> >>
> >>> >>
> >>> >> 2009/11/27 Christopher Vollick <[email protected]>
> >>> >>>
> >>> >>> On 27-Nov-09, at 11:24 AM, Martin Higham wrote:
> >>> >>>>
> >>> >>>> User_username::register(object,string,string) is being called from
> >>> >>>> the
> >>> >>>> AuthenticationPlugin supplied as part of StatusNet 0.9.
> >>> >>>>
> >>> >>>> I would have expected the StatusNet code base to define any
> database
> >>> >>>> tables it needed, but it may be that I've missed a key part out
> from
> >>> >>>> the
> >>> >>>> Plugin setup.
> >>> >>>
> >>> >>> So it is.
> >>> >>> The onCheckSchema event of the Authentication plugin should
> construct
> >>> >>> that table.
> >>> >>> For whatever reason, it would seem it didn't for you.
> >>> >>>
> >>> >>> Try running scripts/checkschema.php to do it manually.
> >>> >>
> >>> >
> >>>
> >>> Hi, I'm running into the same issue with the LdapAuthenticationPlugin
> >>> After a fresh database install the table user_username is not present
> >>> however it is created with structure (but empty) after I try to login
> >>> with a user/pass on the ldap server.
> >>>
> >>> mysql> describe user_username;
> >>> +---------------+--------------+------+-----+---------+-------+
> >>> | Field | Type | Null | Key | Default | Extra |
> >>> +---------------+--------------+------+-----+---------+-------+
> >>> | provider_name | varchar(255) | NO | PRI | NULL | |
> >>> | username | varchar(255) | NO | PRI | NULL | |
> >>> | user_id | int(11) | NO | | NULL | |
> >>> | created | datetime | NO | | NULL | |
> >>> | modified | timestamp | YES | | NULL | |
> >>> +---------------+--------------+------+-----+---------+-------+
> >>>
> >>> The user attributes are taken from the ldap server and are copied into
> >>> the 'user' table.
> >>>
> >>> addPlugin('ldapAuthentication', array(
> >>> 'provider_name'=>'Example',
> >>> 'authoritative'=>true,
> >>> 'autoregistration'=>true,
> >>> ....
> >>>
> >>> log says:
> >>> 2009-11-30 12:34:46 LOG_ERR: PEAR error: DB_DataObject Error:
> >>> insert:No table definition for user_username :
> >>> 2009-11-30 12:34:46 LOG_ERR: #0
> >>> PEAR_Error->PEAR_Error(string,integer,integer,string) called at
> >>> [/usr/share/php/DB/DataObject/Error.php:44]
> >>> 2009-11-30 12:34:46 LOG_ERR: #1
> >>>
> >>>
> DB_DataObject_Error->DB_DataObject_Error(string,integer,integer,string,NULL)
> >>> called at [/usr/share/php/PEAR.php:576]
> >>> 2009-11-30 12:34:46 LOG_ERR: #2
> >>> PEAR->raiseError(string,integer,NULL,NULL,NULL,string) called at
> >>> [/usr/share/php/DB/DataObject.php:4144]
> >>> 2009-11-30 12:34:46 LOG_ERR: #3
> >>> DB_DataObject->raiseError(string,integer) called at
> >>> [/usr/share/php/DB/DataObject.php:904]
> >>> 2009-11-30 12:34:46 LOG_ERR: #4 DB_DataObject->insert() called at
> >>> [/var/www/statusnet-mainline-9.0.x/classes/Memcached_DataObject.php:69]
> >>> 2009-11-30 12:34:46 LOG_ERR: #5 Memcached_DataObject->insert() called
> >>> at
> >>>
> [/var/www/statusnet-mainline-9.0.x/plugins/Authentication/User_username.php:40]
> >>> 2009-11-30 12:34:46 LOG_ERR: #6
> >>> User_username::register(object,string,string) called at
> >>>
> >>>
> [/var/www/statusnet-mainline-9.0.x/plugins/Authentication/AuthenticationPlugin.php:136]
> >>> 2009-11-30 12:34:46 LOG_ERR: #7
> >>> AuthenticationPlugin->onStartCheckPassword(string,string,object)
> >>> called at []
> >>> 2009-11-30 12:34:46 LOG_ERR: #8 call_user_func_array(array,array)
> >>> called at [/var/www/statusnet-mainline-9.0.x/lib/event.php:105]
> >>> 2009-11-30 12:34:46 LOG_ERR: #9 Event::handle(string,array) called at
> >>> [/var/www/statusnet-mainline-9.0.x/lib/util.php:123]
> >>> 2009-11-30 12:34:46 LOG_ERR: #10 common_check_user(string,string)
> >>> called at [/var/www/statusnet-mainline-9.0.x/actions/login.php:139]
> >>> 2009-11-30 12:34:46 LOG_ERR: #11 LoginAction->checkLogin() called at
> >>> [/var/www/statusnet-mainline-9.0.x/actions/login.php:81]
> >>> 2009-11-30 12:34:46 LOG_ERR: #12 LoginAction->handle(array) called at
> >>> [/var/www/statusnet-mainline-9.0.x/index.php:297]
> >>> 2009-11-30 12:34:46 LOG_ERR: #13 main() called at
> >>> [/var/www/statusnet-mainline-9.0.x/index.php:312]
> >>>
> >>>
> >>> Where should I start looking?
> >>>
> >>> Thanks.
> >>> Chris.
> >>>
> >>> >
> >>> > _______________________________________________
> >>> > StatusNet-dev mailing list
> >>> > [email protected]
> >>> > http://lists.status.net/mailman/listinfo/statusnet-dev
> >>> >
> >>
> >>
> >
>
_______________________________________________
StatusNet-dev mailing list
[email protected]
http://lists.status.net/mailman/listinfo/statusnet-dev