[pLog-svn] r2177 - in plog/trunk: class/dao class/dao/userdata config

Oscar Renalias oscar at renalias.net
Mon Jun 6 21:58:20 GMT 2005


Mark,

if I remember correctly, you mentioned that somebody involved in  
Mambo in Taiwan wanted to work with you on this feature... well now  
it's ready to be tested :) Creating a MamboUserDataProvider is  
probably no easy task but some feedback concerning how we could  
improve what I just added is welcome :)

Oscar

On 7 Jun 2005, at 00:37, oscar at devel.plogworld.net wrote:

> Author: oscar
> Date: 2005-06-06 21:37:24 +0000 (Mon, 06 Jun 2005)
> New Revision: 2177
>
> Added:
>    plog/trunk/class/dao/userdata/
>    plog/trunk/class/dao/userdata/baseuserdataprovider.class.php
>    plog/trunk/class/dao/userdata/phpbb2userdataprovider.class.php
>    plog/trunk/class/dao/userdata/ploguserdataprovider.class.php
>    plog/trunk/config/userdata.properties.php
> Modified:
>    plog/trunk/class/dao/users.class.php
> Log:
> let's keep breaking things... this time, one of the most  
> interesting features of 1.1 (IMHO): pluggable
> user-data backends. The current Users class is now nothing more  
> than a proxy class for the real
> user-data backend class that is doing the dirty job. By default we  
> will create packages using
> plog's own PlogUserDataProvider but users willing to integrate plog  
> with other tools such as phpbb2,
> ldap, mambo or kerberos will be able to easily switch by editing  
> one configuration file.
>
> Before you ask, the fact that this requires editing one config file  
> is intentional. This is not a
> feature that 98% of the common users will need to mess around with  
> so there's not much point in
> spending too much time making it pretty.
>
> The idea behind this feature is that plog will be able to use  
> external sources of user data, instead
> of using its own database tables, dynamically (as opposed to  
> synchronizing the user data every day,
> hour or once in a while) Whenever a user is added/removed/updated  
> in the host application, these
> changes will be immediately seen by plog and viceversa.
>
> This feature does *not* include single login mechanisms or anything  
> like that yet.
>
> At the code leve, user-data "providers" are classes that extend the  
> BaseUserDataProvider base class and provide all the methods that  
> the original Users class provided. Since all client classes of  
> Users expect a certain interface, this change does not break  
> anything anywhere in the code.
>
> Please keep in mind that this is a first approach, and a very rough  
> one. Nobody has even started
> working on additional providers so we don't know what difficulties  
> we can find when creating new
> ones... I am planning to take a look at phpbb2 because it should be  
> easy :), but so far the current
> plog user data backend is working just fine.
>
> Let me know if you have any questions...
>
>
> Added: plog/trunk/class/dao/userdata/baseuserdataprovider.class.php
> ===================================================================
> --- plog/trunk/class/dao/userdata/baseuserdataprovider.class.php     
> 2005-06-06 21:28:28 UTC (rev 2176)
> +++ plog/trunk/class/dao/userdata/baseuserdataprovider.class.php     
> 2005-06-06 21:37:24 UTC (rev 2177)
> @@ -0,0 +1,230 @@
> +<?php
> +
> +    include_once( PLOG_CLASS_PATH."class/dao/model.class.php" );
> +
> +    /**
> +     * This is the base class that defines the methods that all  
> user-data providers must implement.
> +     * It also provides some common methods that will be shared by  
> all user-data providers and that therefore
> +     * should exist in the parent class rather than being copied  
> many times in the child classes.
> +     *
> +     * \ingroup User_Data_Providers
> +     */
> +    class BaseUserDataProvider extends Model
> +    {
> +
> +        var $_providerConfig;
> +
> +        /**
> +         * Constructor of the class
> +         *
> +         * @param providerConfig a Properties object with  
> information about the
> +         * provider-specific parameters, which may vary depending  
> on the provider
> +         */
> +        function BaseUserDataProvider( $providerConfig )
> +        {
> +            $this->Model();
> +
> +            $this->_providerConfig = $providerConfig;
> +        }
> +
> +        /**
> +         * Returns the config specific data
> +         *
> +         * @return a Properties object with the provider  
> configuration, as it was defined
> +         * in the userdata.properties.php file
> +         */
> +        function getProviderConfiguration()
> +        {
> +            return( $this->_providerConfig );
> +        }
> +
> +        /**
> +         * Returns true if the user is in the database and the  
> username
> +         * and password match
> +         *
> +         * @param user Username of the user who we'd like to  
> authenticate
> +         * @param pass Password of the user
> +         * @return true if user and password correct or false  
> otherwise.
> +         */
> +        function authenticateUser( $user, $pass )
> +        {
> +        }
> +
> +        /**
> +         * Returns all the information associated to the user given
> +         *
> +         * @param user Username of the user from who we'd like to  
> get the information
> +         * @param pass Password of the user we'd like to get the  
> information
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfo( $user, $pass )
> +        {
> +        }
> +
> +        /**
> +         * Retrieves the user information but given only a username
> +         *
> +         * @param username The username of the user
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfoFromUsername( $username )
> +        {
> +        }
> +
> +        /**
> +         * Retrieves the user infromation but given only a userid
> +         *
> +         * @param userId User ID of the user from whom we'd like  
> to get the information
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfoFromId( $userid, $extendedInfo = false )
> +        {
> +        }
> +
> +        /**
> +         * Returns an array of BlogInfo objects with the  
> information of all the blogs to which
> +         * a user belongs
> +         *
> +         * @param userId Identifier of the user
> +         * @return An array of BlogInfo objects to whom the user  
> belongs.
> +         */
> +        function getUsersBlogs( $userid, $status = BLOG_STATUS_ALL )
> +        {
> +            $usersBlogs = Array();
> +            $blogs = new Blogs();
> +            $ids = Array();
> +
> +            // check if the user is the owner of any blog
> +            $prefix = $this->getPrefix();
> +            $owner = "SELECT * FROM {$prefix}blogs WHERE owner_id  
> = ".$userid;
> +            if( $status != BLOG_STATUS_ALL )
> +                $owner .= " AND status = '".Db::qstr( $status )."'";
> +
> +            $result = $this->Execute( $owner );
> +
> +            while( $row = $result->FetchRow($result)) {
> +                $usersBlogs[] = $blogs->_fillBlogInformation( $row );
> +                $ids[] = $row["id"];
> +            }
> +
> +            // and now check to which other blogs he or she belongs
> +            $otherBlogs = "SELECT b.* FROM {$prefix}blogs b,  
> {$prefix}users_permissions p
> +                           WHERE p.user_id = '".Db::qstr 
> ($userid)."' AND b.id = p.blog_id";
> +            if( !empty($usersBlogs)) {
> +                 $blogIds = implode( ",", $ids );
> +                 $otherBlogs .= " AND p.blog_id NOT IN (". 
> $blogIds.")";
> +            }
> +            if( $status != BLOG_STATUS_ALL )
> +                $otherBlogs .= " AND b.status = '".Db::qstr 
> ( $status )."'";
> +
> +            $result = $this->Execute( $otherBlogs );
> +            // now we know to which he or she belongs, so we only  
> have
> +            // to load the information about those blogs
> +            while( $row = $result->FetchRow($result)) {
> +                $usersBlogs[] = $blogs->_fillBlogInformation( $row );
> +            }
> +
> +            return $usersBlogs;
> +        }
> +
> +        /**
> +         * Returns an array with all the users available in the  
> database
> +         *
> +         * @param status
> +         * @param includeExtraInfo
> +         * @param page
> +         * @param itemsPerPage
> +         * @return An array containing all the users.
> +         */
> +        function getAllUsers( $status = USER_STATUS_ALL,  
> $includeExtraInfo = false, $page = -1, $itemsPerPage =  
> DEFAULT_ITEMS_PER_PAGE )
> +        {
> +        }
> +
> +        /**
> +         * Updates the information related to a user
> +         *
> +         * @param userInfo An UserInfo object containing the  
> <b>already udpated</b> information of the
> +         * user we would like to update.
> +         * @return Returns true if ok or false otherwise.
> +         */
> +        function updateUser( $userInfo )
> +        {
> +        }
> +
> +        /**
> +         * Adds a user to the database.
> +         *
> +         * @param user An UserInfo object with the necessary  
> information
> +         * @return Returns the identifier assigned to the user, or  
> false if there was any error. It will also modify the
> +         * UserInfo object passed by parameter and set its  
> database id.
> +         */
> +        function addUser( &$user )
> +        {
> +        }
> +
> +        /**
> +         * Returns an array with all the users that belong to the  
> given
> +         * blog.
> +         *
> +         * @param blogId The blog identifier.
> +         * @param includeOwner Wether to include the owner of the  
> blog or not.
> +         * @return An array with the information about the users  
> who belong in
> +         * one way or another to that blog.
> +         */
> +        function getBlogUsers( $blogId, $includeOwner = true,  
> $status = USER_STATUS_ALL )
> +        {
> +        }
> +
> +        /**
> +         * disables a user
> +         *
> +         * @param userId The identifier of the user we are trying  
> to disable
> +         */
> +        function disableUser( $userId )
> +        {
> +        }
> +
> +        /**
> +         * Removes users from the database
> +         *
> +         * @param userId The identifier of the user we are trying  
> to remove
> +         */
> +        function deleteUser( $userId )
> +        {
> +        }
> +
> +        /**
> +         * returns the total number of users
> +         *
> +         * @return total number of users
> +         */
> +        function getNumUsers( $status = USER_STATUS_ALL )
> +        {
> +        }
> +
> +        /**
> +         * returns true if the given username exists
> +         *
> +         * @param userName
> +         * @return true if it exists or false otherwise
> +         */
> +        function userExists( $userName )
> +        {
> +        }
> +
> +        /**
> +         * get the blogid of user own
> +         */
> +        function getUserBlogId( $username )
> +        {
> +        }
> +
> +        /**
> +         * check if the email account has been registered
> +         * @return true if the email account has been registered
> +         */
> +        function emailExists($email)
> +        {
> +        }
> +    }
> +?>
> \ No newline at end of file
>
>
> Property changes on: plog/trunk/class/dao/userdata/ 
> baseuserdataprovider.class.php
> ___________________________________________________________________
> Name: svn:executable
>    + *
>
> Added: plog/trunk/class/dao/userdata/phpbb2userdataprovider.class.php
> ===================================================================
> --- plog/trunk/class/dao/userdata/ 
> phpbb2userdataprovider.class.php    2005-06-06 21:28:28 UTC (rev 2176)
> +++ plog/trunk/class/dao/userdata/ 
> phpbb2userdataprovider.class.php    2005-06-06 21:37:24 UTC (rev 2177)
> @@ -0,0 +1,156 @@
> +<?php
> +
> +    include_once( PLOG_CLASS_PATH."class/dao/userdata/ 
> baseuserdataprovider.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/userinfo.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/ 
> userpermissions.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/userstatus.class.php" );
> +
> +    /**
> +     * Model representing the users in our application. Provides  
> the methods such as
> +     * authentication and querying for users.
> +     *
> +     * \ingroup User_Data_Providers
> +     */
> +    class PhpBB2UserDataProvider extends BaseUserDataProvider
> +    {
> +
> +        /**
> +         * Initializes the model
> +         */
> +        function PhpBB2UserDataProvider( $providerConfig )
> +        {
> +            $this->BaseUserDataProvider( $providerConfig );
> +        }
> +
> +        /**
> +         * Returns true if the user is in the database and the  
> username
> +         * and password match
> +         *
> +         * @param user Username of the user who we'd like to  
> authenticate
> +         * @param pass Password of the user
> +         * @return true if user and password correct or false  
> otherwise.
> +         */
> +        function authenticateUser( $user, $pass )
> +        {
> +        }
> +
> +        /**
> +         * Returns all the information associated to the user given
> +         *
> +         * @param user Username of the user from who we'd like to  
> get the information
> +         * @param pass Password of the user we'd like to get the  
> information
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfo( $user, $pass )
> +        {
> +        }
> +
> +        /**
> +         * Retrieves the user information but given only a username
> +         *
> +         * @param username The username of the user
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfoFromUsername( $username )
> +        {
> +        }
> +
> +        /**
> +         * Retrieves the user infromation but given only a userid
> +         *
> +         * @param userId User ID of the user from whom we'd like  
> to get the information
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfoFromId( $userid, $extendedInfo = false )
> +        {
> +        }
> +
> +        /**
> +         * Returns an array with all the users available in the  
> database
> +         *
> +         * @param status
> +         * @param includeExtraInfo
> +         * @param page
> +         * @param itemsPerPage
> +         * @return An array containing all the users.
> +         */
> +        function getAllUsers( $status = USER_STATUS_ALL,  
> $includeExtraInfo = false, $page = -1, $itemsPerPage =  
> DEFAULT_ITEMS_PER_PAGE )
> +        {
> +        }
> +
> +        /**
> +         * Updates the information related to a user
> +         *
> +         * @param userInfo An UserInfo object containing the  
> <b>already udpated</b> information of the
> +         * user we would like to update.
> +         * @return Returns true if ok or false otherwise.
> +         */
> +        function updateUser( $userInfo )
> +        {
> +        }
> +
> +        /**
> +         * Adds a user to the database.
> +         *
> +         * @param user An UserInfo object with the necessary  
> information
> +         * @return Returns the identifier assigned to the user, or  
> false if there was any error. It will also modify the
> +         * UserInfo object passed by parameter and set its  
> database id.
> +         */
> +        function addUser( &$user )
> +        {
> +        }
> +
> +        /**
> +         * disables a user
> +         *
> +         * @param userId The identifier of the user we are trying  
> to disable
> +         */
> +        function disableUser( $userId )
> +        {
> +        }
> +
> +        /**
> +         * Removes users from the database
> +         *
> +         * @param userId The identifier of the user we are trying  
> to remove
> +         */
> +        function deleteUser( $userId )
> +        {
> +        }
> +
> +        /**
> +         * returns the total number of users
> +         *
> +         * @return total number of users
> +         */
> +        function getNumUsers( $status = USER_STATUS_ALL )
> +        {
> +        }
> +
> +        /**
> +         * returns true if the given username exists
> +         *
> +         * @param userName
> +         * @return true if it exists or false otherwise
> +         */
> +        function userExists( $userName )
> +        {
> +        }
> +
> +        /**
> +         * get the blogid of user own
> +         */
> +        function getUserBlogId( $username )
> +        {
> +        }
> +
> +        /**
> +         * check if the email account has been registered
> +         * @return true if the email account has been registered
> +         */
> +        function emailExists($email)
> +        {
> +        }
> +    }
> +?>
>
>
> Property changes on: plog/trunk/class/dao/userdata/ 
> phpbb2userdataprovider.class.php
> ___________________________________________________________________
> Name: svn:executable
>    + *
>
> Added: plog/trunk/class/dao/userdata/ploguserdataprovider.class.php
> ===================================================================
> --- plog/trunk/class/dao/userdata/ploguserdataprovider.class.php     
> 2005-06-06 21:28:28 UTC (rev 2176)
> +++ plog/trunk/class/dao/userdata/ploguserdataprovider.class.php     
> 2005-06-06 21:37:24 UTC (rev 2177)
> @@ -0,0 +1,559 @@
> +<?php
> +
> +    include_once( PLOG_CLASS_PATH."class/dao/userdata/ 
> baseuserdataprovider.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/userinfo.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/ 
> userpermissions.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/dao/userstatus.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/gallery/dao/ 
> galleryresources.class.php" );
> +
> +    /**
> +     * Model representing the users in our application. Provides  
> the methods such as
> +     * authentication and querying for users.
> +     *
> +     * \ingroup User_Data_Providers
> +     */
> +    class PlogUserDataProvider extends BaseUserDataProvider
> +    {
> +
> +        /**
> +         * Initializes the model
> +         */
> +        function PlogUserDataProvider( $providerConfig )
> +        {
> +            $this->BaseUserDataProvider( $providerConfig, true );
> +
> +            $this->usercache = Array();
> +
> +            $this->perms =  new UserPermissions();
> +        }
> +
> +        /**
> +         * Returns true if the user is in the database and the  
> username
> +         * and password match
> +         *
> +         * @param user Username of the user who we'd like to  
> authenticate
> +         * @param pass Password of the user
> +         * @return true if user and password correct or false  
> otherwise.
> +         */
> +        function authenticateUser( $user, $pass )
> +        {
> +            $query = "SELECT * FROM ".$this->getPrefix()."users
> +                      WHERE user = '".Db::qstr($user)."' AND  
> password = '".md5($pass)."'
> +                            AND status = '".USER_STATUS_ACTIVE."'";
> +
> +            $result = $this->Execute( $query );
> +
> +            if( $result == false )
> +                return false;
> +
> +            if( $result->RecordCount() == 1 )
> +                return true;
> +            else
> +                return false;
> +        }
> +
> +        /**
> +         * Returns all the information associated to the user given
> +         *
> +         * @param user Username of the user from who we'd like to  
> get the information
> +         * @param pass Password of the user we'd like to get the  
> information
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfo( $user, $pass )
> +        {
> +            $userInfo = $this->getUserInfoFromUsername( $user );
> +            if ( $userInfo->getPassword() == md5($pass) ) {
> +                return $userInfo;
> +            } else {
> +                return false;
> +            }
> +        }
> +
> +        /**
> +         * Retrieves the user information but given only a username
> +         *
> +         * @param username The username of the user
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfoFromUsername( $username )
> +        {
> +            $userId = $this->_cache->getData( $username,  
> CACHE_USERIDBYNAME );
> +
> +            if ( !$userId ) {
> +                $prefix = $this->getPrefix();
> +                $query = "SELECT u.id AS id, u.user AS user,  
> u.password AS password, u.email AS email,
> +                                 u.about AS about, u.full_name AS  
> full_name, u.properties AS properties,
> +                                 u.resource_picture_id AS  
> resource_picture_id,
> +                                 IF(p.permission_id = 1, 1, 0 ) AS  
> site_admin,
> +                                 u.status AS status
> +                          FROM {$prefix}users u LEFT JOIN {$prefix} 
> users_permissions p ON u.id = p.user_id
> +                          WHERE u.user = '".Db::qstr($username)."'";
> +                 $userInfo = $this->_getUserInfoFromQuery( $query );
> +
> +                 if ( $userInfo ) {
> +                     $this->_cache->setData( $userInfo->getUsername 
> (), CACHE_USERIDBYNAME, $userInfo->getId() );
> +                     $this->_cache->setData( $userInfo->getId(),  
> CACHE_USERINFO, $userInfo );
> +                 }
> +
> +                 return $userInfo;
> +            }
> +
> +            return $this->getUserInfoFromId( $userId );
> +        }
> +
> +        /**
> +         * Retrieves the user infromation but given only a userid
> +         *
> +         * @param userId User ID of the user from whom we'd like  
> to get the information
> +         * @return Returns a UserInfo object with the requested  
> information, or false otherwise.
> +         */
> +        function getUserInfoFromId( $userid, $extendedInfo = false )
> +        {
> +            if( isset($this->usercache[$userid])) {
> +                $userInfo = $this->usercache[$userid];
> +            }
> +            else {
> +                $userInfo = $this->_cache->getData( $userid,  
> CACHE_USERINFO );
> +                if ( !$userInfo ) {
> +                    $prefix = $this->getPrefix();
> +                    $query = "SELECT u.id AS id, u.user AS user,  
> u.password AS password, u.email AS email,
> +                                     u.about AS about, u.full_name  
> AS full_name, u.properties AS properties,
> +                                     u.resource_picture_id AS  
> resource_picture_id,
> +                                     IF(p.permission_id = 1, 1,  
> 0 ) AS site_admin,
> +                                     u.status AS status
> +                              FROM {$prefix}users u LEFT JOIN  
> {$prefix}users_permissions p ON u.id = p.user_id
> +                              WHERE u.id = $userid";
> +
> +                    $userInfo = $this->_getUserInfoFromQuery 
> ( $query, $extendedInfo );
> +                    $this->_cache->setData( $userid,  
> CACHE_USERINFO, $userInfo );
> +                }
> +
> +                $this->usercache[$userid] = $userInfo;
> +            }
> +
> +            return $userInfo;
> +        }
> +
> +        /**
> +         * More common code used by several functions
> +         *
> +         * Private function used to fill in all the fields of  
> UserInfo objects given
> +         * a row of the database.
> +         */
> +        function _getUserInfoFromQuery( $sql_query, $extendedInfo  
> = false )
> +        {
> +            $result = $this->Execute( $sql_query );
> +            if( !$result )
> +                return false;
> +
> +            if( $result->RowCount() == 0 )
> +                return false;
> +
> +            $info = $result->FetchRow( $result );
> +
> +            $userInfo = $this->_fillUserInformation( $info,  
> $extendedInfo );
> +
> +            return $userInfo;
> +        }
> +
> +        /**
> +         * Given a result record from a Execute call, it will fill  
> in the
> +         * fields of the object, so that we don't have to repeat  
> the same
> +         * code too many times
> +         */
> +        function _fillUserInformation( $query_result, $extraInfo =  
> false )
> +        {
> +            $userInfo = new UserInfo( $query_result["user"],  
> $query_result["password"],
> +                                      $query_result["email"],
> +                                      $query_result["about"],
> +                                      $query_result["full_name"],
> +                                      $query_result 
> ["resource_picture_id"],
> +                                      unserialize($query_result 
> ["properties"]),
> +                                      $query_result["id"]);
> +
> +            if( $extraInfo ) {
> +                // load this data if explicitely required!
> +                $userBlogs = $this->getUsersBlogs($userInfo->getId 
> ());
> +                $userInfo->setBlogs($userBlogs);
> +            }
> +
> +            // set some permissions
> +            //$userInfo->setSiteAdmin($this->perms->isSiteAdmin 
> ( $userInfo->getId()));
> +            $userInfo->setSiteAdmin( $query_result["site_admin"] );
> +            $userInfo->setStatus( $query_result["status"] );
> +
> +            return $userInfo;
> +        }
> +
> +        /**
> +         * Returns an array with all the users available in the  
> database
> +         *
> +         * @param status
> +         * @param includeExtraInfo
> +         * @param searchTerms
> +         * @param page
> +         * @param itemsPerPage
> +         * @return An array containing all the users.
> +         */
> +        function getAllUsers( $status = USER_STATUS_ALL,  
> $includeExtraInfo = false, $searchTerms = "", $page = -1,  
> $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
> +        {
> +            if( $status != USER_STATUS_ALL )
> +                $whereStatus = "status = '".Db::qstr($status)."'";
> +            if( $searchTerms != "" )
> +                $whereSearch = $this->buildSearchCondition 
> ( $searchTerms );
> +
> +            $where = $this->buildWhereCondition( Array 
> ( $whereStatus, $whereSearch ));
> +
> +            $query = "SELECT * FROM ".$this->getPrefix()."users  
> $where ORDER BY id ASC";
> +
> +            $result = $this->Execute( $query, $page, $itemsPerPage );
> +
> +            $users = Array();
> +
> +            while ($info = $result->FetchRow( $result ))
> +                array_push( $users, $this->_fillUserInformation 
> ( $info, $includeExtraInfo ));
> +
> +            return $users;
> +        }
> +
> +        /**
> +         * @see Model::buildSearchCondition
> +         */
> +        function buildSearchCondition( $searchTerms )
> +        {
> +            $searchTerms = trim( $searchTerms );
> +            $searchCond = "(user LIKE '%".Db::qstr($searchTerms)."%'
> +                           OR full_name LIKE '%".Db::qstr 
> ($searchTerms)."%' OR
> +                           email LIKE '%".Db::qstr 
> ($searchTerms)."%')";
> +
> +            return( $searchCond );
> +        }
> +
> +        /**
> +         * Updates the information related to a user
> +         *
> +         * @param userInfo An UserInfo object containing the  
> <b>already udpated</b> information of the
> +         * user we would like to update.
> +         * @return Returns true if ok or false otherwise.
> +         */
> +        function updateUser( $userInfo )
> +        {
> +            $query = "UPDATE ".$this->getPrefix().
> +                     "users SET email = '".$userInfo->getEmail().
> +                     "', about = '".Db::qstr($userInfo- 
> >getAboutMyself()).
> +                     "', password = '".$userInfo->getPassword().
> +                     "', full_name = '".Db::qstr($userInfo- 
> >getFullName()).
> +                     "', resource_picture_id = '".Db::qstr 
> ($userInfo->getPictureId()).
> +                     "', properties = '".Db::qstr(serialize 
> ($userInfo->getProperties())).
> +                     "', status = '".Db::qstr($userInfo->getStatus 
> ()).
> +                     "' WHERE id = ".$userInfo->getId().";";
> +
> +            // update the users table
> +            $result = $this->Execute( $query );
> +
> +            // and now update the permissions, if there has been  
> any change
> +            $perms = new UserPermissions();
> +            $perms->updateSiteAdmin( $userInfo->getId(), $userInfo- 
> >isSiteAdmin());
> +
> +            $this->_cache->removeData( $userInfo->getId(),  
> CACHE_USERINFO );
> +            $this->_cache->removeData( $userInfo->getUsername(),  
> CACHE_USERIDBYNAME );
> +
> +            return $result;
> +        }
> +
> +        /**
> +         * Adds a user to the database.
> +         *
> +         * @param user An UserInfo object with the necessary  
> information
> +         * @return Returns the identifier assigned to the user, or  
> false if there was any error. It will also modify the
> +         * UserInfo object passed by parameter and set its  
> database id.
> +         */
> +        function addUser( &$user )
> +        {
> +            $query = "INSERT INTO ".$this->getPrefix()."users 
> (user,password,email,about,full_name,
> +                      resource_picture_id,properties,status)
> +                      VALUES ('".Db::qstr($user->getUserName 
> ())."','".md5($user->getPassword())."','".
> +                      Db::qstr($user->getEmail())."','".Db::qstr 
> ($user->getAboutMyself())."','".
> +                      Db::qstr($user->getFullName())."', '".
> +                      Db::qstr($user->getPictureId())."', '".
> +                      Db::qstr(serialize($user->getProperties 
> ()))."', '".
> +                      Db::qstr($user->getStatus())."');";
> +
> +            $result = $this->Execute( $query );
> +
> +            if( !$result )
> +                return false;
> +
> +            $userId = $this->_db->Insert_ID();
> +
> +            $user->setId( $userId );
> +
> +            return $userId;
> +        }
> +
> +        /**
> +         * Returns an array with all the users that belong to the  
> given
> +         * blog.
> +         *
> +         * @param blogId The blog identifier.
> +         * @param includeOwner Wether to include the owner of the  
> blog or not.
> +         * @param status
> +         * @param searchTerms
> +         * @return An array with the information about the users  
> who belong in
> +         * one way or another to that blog.
> +         */
> +        function getBlogUsers( $blogId, $includeOwner = true,  
> $status = USER_STATUS_ALL, $searchTerms = "" )
> +        {
> +            $users = Array();
> +            $prefix = $this->getPrefix();
> +
> +            // get the information about the owner, if requested so
> +            if( $includeOwner ) {
> +                $query = "SELECT {$prefix}users.* FROM {$prefix} 
> users, {$prefix}blogs
> +                          WHERE {$prefix}users.id = {$prefix} 
> blogs.owner_id AND {$prefix}blogs.id = '".Db::qstr($blogId)."';";
> +                $result = $this->Execute( $query );
> +
> +                if( !$result )
> +                    return false;
> +
> +                $row = $result->FetchRow();
> +                array_push( $users, $this->_fillUserInformation 
> ( $row ));
> +            }
> +
> +            // now get the other users who have permission for  
> that blog.
> +            $query2 = "SELECT {$prefix}users.* FROM {$prefix} 
> users, {$prefix}users_permissions
> +                       WHERE {$prefix}users.id = {$prefix} 
> users_permissions.user_id
> +                       AND {$prefix}users_permissions.blog_id =  
> '".Db::qstr($blogId)."';";
> +            $result2 = $this->Execute( $query2 );
> +            if( !$result2 ) // if error, return what we have so  
> far...
> +                return $users;
> +
> +            while( $row = $result2->FetchRow()) {
> +                array_push( $users, $this->_fillUserInformation 
> ($row));
> +            }
> +
> +            return $users;
> +        }
> +
> +        /**
> +         * disables a user
> +         *
> +         * @param userId The identifier of the user we are trying  
> to disable
> +         */
> +        function disableUser( $userId )
> +        {
> +            $query = "UPDATE ".$this->getPrefix()."users
> +                      SET status = '".USER_STATUS_DISABLED."'
> +                      WHERE id = '".Db::qstr($userId)."'";
> +
> +            $result = $this->Execute( $query );
> +
> +            if( !$result )
> +                return false;
> +
> +            if( $this->_db->Affected_Rows() == 0 )
> +                return false;
> +
> +            return true;
> +        }
> +
> +        /**
> +         * Removes users from the database
> +         *
> +         * @param userId The identifier of the user we are trying  
> to remove
> +         */
> +        function deleteUser( $userId )
> +        {
> +            // first, delete all of his/her permissions
> +            $perms = new UserPermissions();
> +            $perms->revokeUserPermissions( $userId );
> +
> +            $query = "DELETE FROM ".$this->getPrefix()."users  
> WHERE id = $userId;";
> +
> +            $result = $this->Execute( $query );
> +
> +            if( !$result )
> +                return false;
> +
> +            if( $this->_db->Affected_Rows() == 0 )
> +                return false;
> +
> +            $this->_cache->removeData( $userId, CACHE_USERINFO );
> +
> +            return true;
> +        }
> +
> +        /**
> +         * removes all users that have 'deleted' status
> +         *
> +         * @return Returns true if all users were deleted or false  
> otherwise.
> +         */
> +        function purgeUsers()
> +        {
> +            // we first need to delete all resources/album belong  
> to the blog,
> +            // we don't need to care if the ablum has sub album,  
> resource, we
> +            // just delete all albums, resources that belong the  
> blog which is
> +            // being deleted as a result of deleting the blog's owner
> +
> +            // first delete all resources
> +            $galleryresources = new GalleryResources();
> +            $r_query = "SELECT gr.id AS id, gr.owner_id as owner_id
> +                                  FROM ".$this->getPrefix 
> ()."gallery_resources AS gr, ".$this->getPrefix()."blogs AS b, ". 
> $this->getPrefix()."users AS u
> +                                  WHERE gr.owner_id=b.id AND  
> b.owner_id=u.id AND u.status = 2";
> +
> +            $r_result = $this->Execute( $r_query );
> +            if( !$r_result )
> +                return false;
> +
> +            while( $r_row = $r_result->FetchRow()) {
> +                $galleryresources->deleteResource( $r_row["id"],  
> $r_row["owner_id"] );
> +            }
> +
> +            // now delete album
> +            $galleryalbums = new GalleryAlbums();
> +            $al_query = "SELECT ga.id AS id, ga.owner_id as owner_id
> +                                  FROM ".$this->getPrefix 
> ()."gallery_albums AS ga, ".$this->getPrefix()."blogs AS b, ".$this- 
> >getPrefix()."users AS u
> +                                  WHERE ga.owner_id=b.id AND  
> b.owner_id=u.id AND u.status = 2";
> +
> +            $al_result = $this->Execute( $al_query );
> +            if( !$al_result )
> +                return false;
> +
> +            while( $al_row = $al_result->FetchRow()) {
> +                $galleryalbums->deleteAlbum( $al_row["id"], $al_row 
> ["owner_id"] );
> +            }
> +
> +            // check if the deleted user owns any blog, if they  
> does, delete the blog
> +            // the deleteBlog function will take care of deleting  
> articles etc...
> +            $blogs = new Blogs();
> +            $userfolder = new GalleryResourceStorage();
> +
> +            $b_query = "SELECT b.id
> +                                  FROM ".$this->getPrefix()."blogs  
> AS b, ".$this->getPrefix()."users AS u
> +                                  WHERE b.owner_id=u.id AND  
> u.status = 2";
> +
> +            $b_result = $this->Execute( $b_query );
> +            if( !$b_result )
> +                return false;
> +
> +            while( $b_row = $b_result->FetchRow()) {
> +                $blogs->deleteBlog( $b_row["id"] );
> +                // since the deleteResource doesn't take care of  
> deleting all the user folder
> +                // and now that we have the blog id here, we can  
> use the deleteDir function
> +                // to delete all uder folders and sub folders :)
> +                $filePath = $userfolder->getUserFolder( $b_row 
> ["id"] );
> +                File::deleteDir( $filePath, true, false );
> +            }
> +
> +            // now we need to check if user belong to any other  
> blog and have made any posts
> +            // at the moment, we cannot dertermine which resource  
> was posted by which user
> +            // so when user is deleted, resource posted by him/her  
> will stay intact in the blog
> +            // maybe we should notify the blog owner that his  
> member was deleted?
> +                        $articles = new Articles();
> +
> +                        $a_query = "SELECT a.id AS id, a.user_id  
> AS user_id, a.blog_id AS blog_id
> +                                              FROM ".$this- 
> >getPrefix()."articles AS a, ".$this->getPrefix()."users AS u
> +                                               WHERE  
> a.user_id=u.id AND u.status = 2";
> +            $a_result = $this->Execute( $a_query );
> +
> +            if( !$a_result )
> +                return false;
> +
> +            while( $a_row = $a_result->FetchRow()) {
> +                $articles->deleteArticle( $a_row["id"], $a_row 
> ["user_id"], $a_row["blog_id"], true );
> +            }
> +
> +            // finally remove the user
> +            $u_query = "SELECT * FROM ".$this->getPrefix()."users  
> WHERE status = 2";
> +
> +            $u_result = $this->Execute( $u_query );
> +            if( !$u_result )
> +                return false;
> +
> +            while( $u_row = $u_result->FetchRow()) {
> +                $this->deleteUser( $u_row["id"] );
> +            }
> +
> +            return true;
> +        }
> +
> +        /**
> +         * returns the total number of users
> +         *
> +         * @return total number of users
> +         */
> +        function getNumUsers( $status = USER_STATUS_ALL,  
> $searchTerms = "" )
> +        {
> +            $table = $this->getPrefix()."users";
> +            if( $status != USER_STATUS_ALL )
> +                $whereStatus = "status = '".Db::qstr($status)."'";
> +            if( $searchTerms != "" )
> +                $whereSearch = $this->buildSearchCondition 
> ( $searchTerms );
> +
> +            $where = $this->buildWhereCondition( Array 
> ( $whereStatus, $whereSearch ), false );
> +
> +            return( $this->getNumItems( $table, $where ));
> +        }
> +
> +        /**
> +         * returns true if the given username exists
> +         *
> +         * @param userName
> +         * @return true if it exists or false otherwise
> +         */
> +        function userExists( $userName )
> +        {
> +            return( $this->getUserInfoFromUsername( $userName ));
> +        }
> +
> +        /**
> +         * get the blogid of user own
> +         */
> +        function getUserBlogId( $username )
> +        {
> +            // default blog id
> +            $blogId = 1;
> +
> +            $usersBlogs = Array();
> +            $blogs = new Blogs();
> +
> +            $userinfo = $this->getUserInfoFromUsername($username);
> +            // if userinfo is null, this maybe because username is  
> not exists..
> +            // return 0 means, should go to summary page
> +            if(!$userinfo) return 0;
> +            $userid = $userinfo->getId();
> +            $userid = $userinfo->getId();
> +
> +            // check if the user is the owner of any blog
> +            $owner = "SELECT id FROM ".$this->getPrefix()."blogs  
> WHERE owner_id = ".$userid.";";
> +            $result = $this->Execute( $owner );
> +
> +            if(!$result)
> +                return $blogId;
> +
> +            while( $row = $result->FetchRow($result)) {
> +                $blogId = $row["id"];
> +            }
> +
> +            return $blogId;
> +        }
> +
> +        /**
> +         * check if the email account has been registered
> +         * @return true if the email account has been registered
> +         */
> +        function emailExists($email){
> +            $query = "SELECT email
> +                      FROM ".$this->getPrefix()."users
> +                      WHERE email = '".Db::qstr($email)."'";
> +
> +            $result = $this->Execute($query);
> +
> +            if($result && $result->RecordCount() >= 1)
> +                return true;
> +            else
> +                return false;
> +        }
> +    }
> +?>
> \ No newline at end of file
>
>
> Property changes on: plog/trunk/class/dao/userdata/ 
> ploguserdataprovider.class.php
> ___________________________________________________________________
> Name: svn:executable
>    + *
>
> Modified: plog/trunk/class/dao/users.class.php
> ===================================================================
> --- plog/trunk/class/dao/users.class.php    2005-06-06 21:28:28 UTC  
> (rev 2176)
> +++ plog/trunk/class/dao/users.class.php    2005-06-06 21:37:24 UTC  
> (rev 2177)
> @@ -1,11 +1,6 @@
>  <?php
>
> -    include_once( PLOG_CLASS_PATH."class/dao/model.class.php" );
> -    include_once( PLOG_CLASS_PATH."class/dao/userinfo.class.php" );
> -    include_once( PLOG_CLASS_PATH."class/dao/ 
> userpermissions.class.php" );
> -    include_once( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
> -    include_once( PLOG_CLASS_PATH."class/dao/userstatus.class.php" );
> -    include_once( PLOG_CLASS_PATH."class/gallery/dao/ 
> galleryresources.class.php" );
> +    include_once( PLOG_CLASS_PATH."class/object/object.class.php" );
>
>      /**
>       * Model representing the users in our application. Provides  
> the methods such as
> @@ -13,20 +8,52 @@
>       *
>       * \ingroup DAO
>       */
> -    class Users extends Model
> +    class Users extends Object
>      {
> +        var $_provider;
>
>          /**
>           * Initializes the model
>           */
>          function Users()
>          {
> -            $this->Model();
> -
> -            $this->usercache = Array();
> -
> -            $this->perms =  new UserPermissions();
> +            $this->Object();
> +
> +            $this->_loadUserDataProvider();
>          }
> +
> +        /**
> +         * @private
> +         * loads the user data provider specified in the config file
> +         */
> +        function _loadUserDataProvider()
> +        {
> +            // load the config file
> +            $config = new ConfigFileStorage( Array( "file" =>  
> PLOG_CLASS_PATH."config/userdata.properties.php" ));
> +
> +            // see which class has been configured as the user  
> data provider
> +            $providerClass = $config->getValue( "provider" );
> +
> +            $this->log->debug( "Tring to load provider:  
> $providerClass" );
> +
> +            if( !$providerClass ) {
> +                 die( "ERROR: No provider class was specified in  
> userdata.properties.php!" );
> +            }
> +
> +            // try to load the class
> +            include_once( PLOG_CLASS_PATH."class/dao/ 
> userdata/".strtolower( $providerClass ).".class.php" );
> +
> +            // try to check if the class has been defined at all...
> +            if( !class_exists( $providerClass )) {
> +                 die( "ERROR: Provider class $providerClass has  
> not been defined!" );
> +            }
> +
> +            // and if so, we can create an instance of it
> +            $this->_provider = new $providerClass( $config );
> +
> +            // all is well...
> +            return( true );
> +        }
>
>          /**
>           * Returns true if the user is in the database and the  
> username
> @@ -38,19 +65,7 @@
>           */
>          function authenticateUser( $user, $pass )
>          {
> -            $query = "SELECT * FROM ".$this->getPrefix()."users
> -                      WHERE user = '".Db::qstr($user)."' AND  
> password = '".md5($pass)."'
> -                            AND status = '".USER_STATUS_ACTIVE."'";
> -
> -            $result = $this->Execute( $query );
> -
> -            if( $result == false )
> -                return false;
> -
> -            if( $result->RecordCount() == 1 )
> -                return true;
> -            else
> -                return false;
> +            return( $this->_provider->authenticateUser( $user,  
> $pass ));
>          }
>
>          /**
> @@ -62,12 +77,7 @@
>           */
>          function getUserInfo( $user, $pass )
>          {
> -            $userInfo = $this->getUserInfoFromUsername( $user );
> -            if ( $userInfo->getPassword() == md5($pass) ) {
> -                return $userInfo;
> -            } else {
> -                return false;
> -            }
> +            return( $this->_provider->getUserInfo( $user, $pass ));
>          }
>
>          /**
> @@ -78,28 +88,7 @@
>           */
>          function getUserInfoFromUsername( $username )
>          {
> -            $userId = $this->_cache->getData( $username,  
> CACHE_USERIDBYNAME );
> -
> -            if ( !$userId ) {
> -                $prefix = $this->getPrefix();
> -                $query = "SELECT u.id AS id, u.user AS user,  
> u.password AS password, u.email AS email,
> -                                 u.about AS about, u.full_name AS  
> full_name, u.properties AS properties,
> -                                 u.resource_picture_id AS  
> resource_picture_id,
> -                                 IF(p.permission_id = 1, 1, 0 ) AS  
> site_admin,
> -                                 u.status AS status
> -                          FROM {$prefix}users u LEFT JOIN {$prefix} 
> users_permissions p ON u.id = p.user_id
> -                          WHERE u.user = '".Db::qstr($username)."'";
> -                 $userInfo = $this->_getUserInfoFromQuery( $query );
> -
> -                 if ( $userInfo ) {
> -                     $this->_cache->setData( $userInfo->getUsername 
> (), CACHE_USERIDBYNAME, $userInfo->getId() );
> -                     $this->_cache->setData( $userInfo->getId(),  
> CACHE_USERINFO, $userInfo );
> -                 }
> -
> -                 return $userInfo;
> -            }
> -
> -            return $this->getUserInfoFromId( $userId );
> +            return( $this->_provider->getUserInfoFromUsername 
> ( $username ));
>          }
>
>          /**
> @@ -110,83 +99,10 @@
>           */
>          function getUserInfoFromId( $userid, $extendedInfo = false )
>          {
> -            if( isset($this->usercache[$userid])) {
> -                $userInfo = $this->usercache[$userid];
> -            }
> -            else {
> -                $userInfo = $this->_cache->getData( $userid,  
> CACHE_USERINFO );
> -                if ( !$userInfo ) {
> -                    $prefix = $this->getPrefix();
> -                    $query = "SELECT u.id AS id, u.user AS user,  
> u.password AS password, u.email AS email,
> -                                     u.about AS about, u.full_name  
> AS full_name, u.properties AS properties,
> -                                     u.resource_picture_id AS  
> resource_picture_id,
> -                                     IF(p.permission_id = 1, 1,  
> 0 ) AS site_admin,
> -                                     u.status AS status
> -                              FROM {$prefix}users u LEFT JOIN  
> {$prefix}users_permissions p ON u.id = p.user_id
> -                              WHERE u.id = $userid";
> -
> -                    $userInfo = $this->_getUserInfoFromQuery 
> ( $query, $extendedInfo );
> -                    $this->_cache->setData( $userid,  
> CACHE_USERINFO, $userInfo );
> -                }
> -
> -                $this->usercache[$userid] = $userInfo;
> -            }
> -
> -            return $userInfo;
> +            return( $this->_provider->getUserInfoFromId( $userid,  
> $extendedInfo ));
>          }
>
>          /**
> -         * More common code used by several functions
> -         *
> -         * Private function used to fill in all the fields of  
> UserInfo objects given
> -         * a row of the database.
> -         */
> -        function _getUserInfoFromQuery( $sql_query, $extendedInfo  
> = false )
> -        {
> -            $result = $this->Execute( $sql_query );
> -            if( !$result )
> -                return false;
> -
> -            if( $result->RowCount() == 0 )
> -                return false;
> -
> -            $info = $result->FetchRow( $result );
> -
> -            $userInfo = $this->_fillUserInformation( $info,  
> $extendedInfo );
> -
> -            return $userInfo;
> -        }
> -
> -        /**
> -         * Given a result record from a Execute call, it will fill  
> in the
> -         * fields of the object, so that we don't have to repeat  
> the same
> -         * code too many times
> -         */
> -        function _fillUserInformation( $query_result, $extraInfo =  
> false )
> -        {
> -            $userInfo = new UserInfo( $query_result["user"],  
> $query_result["password"],
> -                                      $query_result["email"],
> -                                      $query_result["about"],
> -                                      $query_result["full_name"],
> -                                      $query_result 
> ["resource_picture_id"],
> -                                      unserialize($query_result 
> ["properties"]),
> -                                      $query_result["id"]);
> -
> -            if( $extraInfo ) {
> -                // load this data if explicitely required!
> -                $userBlogs = $this->getUsersBlogs($userInfo->getId 
> ());
> -                $userInfo->setBlogs($userBlogs);
> -            }
> -
> -            // set some permissions
> -            //$userInfo->setSiteAdmin($this->perms->isSiteAdmin 
> ( $userInfo->getId()));
> -            $userInfo->setSiteAdmin( $query_result["site_admin"] );
> -            $userInfo->setStatus( $query_result["status"] );
> -
> -            return $userInfo;
> -        }
> -
> -        /**
>           * Returns an array of BlogInfo objects with the  
> information of all the blogs to which
>           * a user belongs
>           *
> @@ -195,43 +111,7 @@
>           */
>          function getUsersBlogs( $userid, $status = BLOG_STATUS_ALL )
>          {
> -            $usersBlogs = Array();
> -            $blogs = new Blogs();
> -
> -            // check if the user is the owner of any blog
> -            $owner = "SELECT * FROM ".$this->getPrefix()."blogs  
> WHERE owner_id = ".$userid;
> -
> -            if( $status != BLOG_STATUS_ALL )
> -                $owner .= " AND status = '".Db::qstr( $status )."'";
> -
> -            $result = $this->Execute( $owner );
> -
> -            // return an empty array if the user is assigned to no  
> blog
> -            if( !$result )
> -                return Array();
> -
> -            while( $row = $result->FetchRow($result)) {
> -                $blogId = $row["id"];
> -                $blogInfo = $blogs->getBlogInfo( $blogId );
> -                //array_push( $usersBlogs, $blogId );
> -                array_push( $usersBlogs, $blogInfo );
> -            }
> -
> -            // and now check to which other blogs he or she belongs
> -            $otherBlogs = "SELECT * FROM ".$this->getPrefix 
> ()."users_permissions WHERE user_id = ".$userid.";";
> -            $result = $this->Execute( $otherBlogs );
> -            // now we know to which he or she belongs, so we only  
> have
> -            // to load the information about those blogs
> -            while( $row = $result->FetchRow($result)) {
> -                $blogId = $row["blog_id"];
> -                if( $blogId > 0 ) {
> -                    $blogInfo = $blogs->getBlogInfo( $blogId );
> -                    //array_push( $usersBlogs, $blogId );
> -                    array_push( $usersBlogs, $blogInfo );
> -                }
> -            }
> -
> -            return $usersBlogs;
> +            return( $this->_provider->getUsersBlogs( $userid,  
> $status ));
>          }
>
>          /**
> @@ -239,43 +119,13 @@
>           *
>           * @param status
>           * @param includeExtraInfo
> -         * @param searchTerms
>           * @param page
>           * @param itemsPerPage
>           * @return An array containing all the users.
>           */
> -        function getAllUsers( $status = USER_STATUS_ALL,  
> $includeExtraInfo = false, $searchTerms = "", $page = -1,  
> $itemsPerPage = DEFAULT_ITEMS_PER_PAGE )
> -        {
> -            if( $status != USER_STATUS_ALL )
> -                $whereStatus = "status = '".Db::qstr($status)."'";
> -            if( $searchTerms != "" )
> -                $whereSearch = $this->buildSearchCondition 
> ( $searchTerms );
> -
> -            $where = $this->buildWhereCondition( Array 
> ( $whereStatus, $whereSearch ));
> -
> -            $query = "SELECT * FROM ".$this->getPrefix()."users  
> $where ORDER BY id ASC";
> -
> -            $result = $this->Execute( $query, $page, $itemsPerPage );
> -
> -            $users = Array();
> -
> -            while ($info = $result->FetchRow( $result ))
> -                array_push( $users, $this->_fillUserInformation 
> ( $info, $includeExtraInfo ));
> -
> -            return $users;
> -        }
> -
> -        /**
> -         * @see Model::buildSearchCondition
> -         */
> -        function buildSearchCondition( $searchTerms )
> +        function getAllUsers( $status = USER_STATUS_ALL,  
> $includeExtraInfo = false, $page = -1, $itemsPerPage =  
> DEFAULT_ITEMS_PER_PAGE )
>          {
> -            $searchTerms = trim( $searchTerms );
> -            $searchCond = "(user LIKE '%".Db::qstr($searchTerms)."%'
> -                           OR full_name LIKE '%".Db::qstr 
> ($searchTerms)."%' OR
> -                           email LIKE '%".Db::qstr 
> ($searchTerms)."%')";
> -
> -            return( $searchCond );
> +            return( $this->_provider->getAllUsers( $status,  
> $includeExtraInfo, $page, $itemsPerPage ));
>          }
>
>          /**
> @@ -287,27 +137,7 @@
>           */
>          function updateUser( $userInfo )
>          {
> -            $query = "UPDATE ".$this->getPrefix().
> -                     "users SET email = '".$userInfo->getEmail().
> -                     "', about = '".Db::qstr($userInfo- 
> >getAboutMyself()).
> -                     "', password = '".$userInfo->getPassword().
> -                     "', full_name = '".Db::qstr($userInfo- 
> >getFullName()).
> -                     "', resource_picture_id = '".Db::qstr 
> ($userInfo->getPictureId()).
> -                     "', properties = '".Db::qstr(serialize 
> ($userInfo->getProperties())).
> -                     "', status = '".Db::qstr($userInfo->getStatus 
> ()).
> -                     "' WHERE id = ".$userInfo->getId().";";
> -
> -            // update the users table
> -            $result = $this->Execute( $query );
> -
> -            // and now update the permissions, if there has been  
> any change
> -            $perms = new UserPermissions();
> -            $perms->updateSiteAdmin( $userInfo->getId(), $userInfo- 
> >isSiteAdmin());
> -
> -            $this->_cache->removeData( $userInfo->getId(),  
> CACHE_USERINFO );
> -            $this->_cache->removeData( $userInfo->getUsername(),  
> CACHE_USERIDBYNAME );
> -
> -            return $result;
> +            return( $this->_provider->updateUser( $userInfo ));
>          }
>
>          /**
> @@ -319,25 +149,7 @@
>           */
>          function addUser( &$user )
>          {
> -            $query = "INSERT INTO ".$this->getPrefix()."users 
> (user,password,email,about,full_name,
> -                      resource_picture_id,properties,status)
> -                      VALUES ('".Db::qstr($user->getUserName 
> ())."','".md5($user->getPassword())."','".
> -                      Db::qstr($user->getEmail())."','".Db::qstr 
> ($user->getAboutMyself())."','".
> -                      Db::qstr($user->getFullName())."', '".
> -                      Db::qstr($user->getPictureId())."', '".
> -                      Db::qstr(serialize($user->getProperties 
> ()))."', '".
> -                      Db::qstr($user->getStatus())."');";
> -
> -            $result = $this->Execute( $query );
> -
> -            if( !$result )
> -                return false;
> -
> -            $userId = $this->_db->Insert_ID();
> -
> -            $user->setId( $userId );
> -
> -            return $userId;
> +            return( $this->_provider->addUser( $user ));
>          }
>
>          /**
> @@ -346,42 +158,12 @@
>           *
>           * @param blogId The blog identifier.
>           * @param includeOwner Wether to include the owner of the  
> blog or not.
> -         * @param status
> -         * @param searchTerms
>           * @return An array with the information about the users  
> who belong in
>           * one way or another to that blog.
>           */
> -        function getBlogUsers( $blogId, $includeOwner = true,  
> $status = USER_STATUS_ALL, $searchTerms = "" )
> +        function getBlogUsers( $blogId, $includeOwner = true,  
> $status = USER_STATUS_ALL )
>          {
> -            $users = Array();
> -            $prefix = $this->getPrefix();
> -
> -            // get the information about the owner, if requested so
> -            if( $includeOwner ) {
> -                $query = "SELECT {$prefix}users.* FROM {$prefix} 
> users, {$prefix}blogs
> -                          WHERE {$prefix}users.id = {$prefix} 
> blogs.owner_id AND {$prefix}blogs.id = '".Db::qstr($blogId)."';";
> -                $result = $this->Execute( $query );
> -
> -                if( !$result )
> -                    return false;
> -
> -                $row = $result->FetchRow();
> -                array_push( $users, $this->_fillUserInformation 
> ( $row ));
> -            }
> -
> -            // now get the other users who have permission for  
> that blog.
> -            $query2 = "SELECT {$prefix}users.* FROM {$prefix} 
> users, {$prefix}users_permissions
> -                       WHERE {$prefix}users.id = {$prefix} 
> users_permissions.user_id
> -                       AND {$prefix}users_permissions.blog_id =  
> '".Db::qstr($blogId)."';";
> -            $result2 = $this->Execute( $query2 );
> -            if( !$result2 ) // if error, return what we have so  
> far...
> -                return $users;
> -
> -            while( $row = $result2->FetchRow()) {
> -                array_push( $users, $this->_fillUserInformation 
> ($row));
> -            }
> -
> -            return $users;
> +            return( $this->_provider->getBlogUsers( $blogId,  
> $includeOwner, $status ));
>          }
>
>          /**
> @@ -391,19 +173,7 @@
>           */
>          function disableUser( $userId )
>          {
> -            $query = "UPDATE ".$this->getPrefix()."users
> -                      SET status = '".USER_STATUS_DISABLED."'
> -                      WHERE id = '".Db::qstr($userId)."'";
> -
> -            $result = $this->Execute( $query );
> -
> -            if( !$result )
> -                return false;
> -
> -            if( $this->_db->Affected_Rows() == 0 )
> -                return false;
> -
> -            return true;
> +            return( $this->_provider->disableUser( $userId ));
>          }
>
>          /**
> @@ -413,135 +183,17 @@
>           */
>          function deleteUser( $userId )
>          {
> -            // first, delete all of his/her permissions
> -            $perms = new UserPermissions();
> -            $perms->revokeUserPermissions( $userId );
> +            return( $this->_provider->deleteUser( $userId ));
> +        }
>
> -            $query = "DELETE FROM ".$this->getPrefix()."users  
> WHERE id = $userId;";
> -
> -            $result = $this->Execute( $query );
> -
> -            if( !$result )
> -                return false;
> -
> -            if( $this->_db->Affected_Rows() == 0 )
> -                return false;
> -
> -            $this->_cache->removeData( $userId, CACHE_USERINFO );
> -
> -            return true;
> -        }
> -
>          /**
> -         * removes all users that have 'deleted' status
> -         *
> -         * @return Returns true if all users were deleted or false  
> otherwise.
> -         */
> -        function purgeUsers()
> -        {
> -            // we first need to delete all resources/album belong  
> to the blog,
> -            // we don't need to care if the ablum has sub album,  
> resource, we
> -            // just delete all albums, resources that belong the  
> blog which is
> -            // being deleted as a result of deleting the blog's owner
> -
> -            // first delete all resources
> -            $galleryresources = new GalleryResources();
> -            $r_query = "SELECT gr.id AS id, gr.owner_id as owner_id
> -                                  FROM ".$this->getPrefix 
> ()."gallery_resources AS gr, ".$this->getPrefix()."blogs AS b, ". 
> $this->getPrefix()."users AS u
> -                                  WHERE gr.owner_id=b.id AND  
> b.owner_id=u.id AND u.status = 2";
> -
> -            $r_result = $this->Execute( $r_query );
> -            if( !$r_result )
> -                return false;
> -
> -            while( $r_row = $r_result->FetchRow()) {
> -                $galleryresources->deleteResource( $r_row["id"],  
> $r_row["owner_id"] );
> -            }
> -
> -            // now delete album
> -            $galleryalbums = new GalleryAlbums();
> -            $al_query = "SELECT ga.id AS id, ga.owner_id as owner_id
> -                                  FROM ".$this->getPrefix 
> ()."gallery_albums AS ga, ".$this->getPrefix()."blogs AS b, ".$this- 
> >getPrefix()."users AS u
> -                                  WHERE ga.owner_id=b.id AND  
> b.owner_id=u.id AND u.status = 2";
> -
> -            $al_result = $this->Execute( $al_query );
> -            if( !$al_result )
> -                return false;
> -
> -            while( $al_row = $al_result->FetchRow()) {
> -                $galleryalbums->deleteAlbum( $al_row["id"], $al_row 
> ["owner_id"] );
> -            }
> -
> -            // check if the deleted user owns any blog, if they  
> does, delete the blog
> -            // the deleteBlog function will take care of deleting  
> articles etc...
> -            $blogs = new Blogs();
> -            $userfolder = new GalleryResourceStorage();
> -
> -            $b_query = "SELECT b.id
> -                                  FROM ".$this->getPrefix()."blogs  
> AS b, ".$this->getPrefix()."users AS u
> -                                  WHERE b.owner_id=u.id AND  
> u.status = 2";
> -
> -            $b_result = $this->Execute( $b_query );
> -            if( !$b_result )
> -                return false;
> -
> -            while( $b_row = $b_result->FetchRow()) {
> -                $blogs->deleteBlog( $b_row["id"] );
> -                // since the deleteResource doesn't take care of  
> deleting all the user folder
> -                // and now that we have the blog id here, we can  
> use the deleteDir function
> -                // to delete all uder folders and sub folders :)
> -                $filePath = $userfolder->getUserFolder( $b_row 
> ["id"] );
> -                File::deleteDir( $filePath, true, false );
> -            }
> -
> -            // now we need to check if user belong to any other  
> blog and have made any posts
> -            // at the moment, we cannot dertermine which resource  
> was posted by which user
> -            // so when user is deleted, resource posted by him/her  
> will stay intact in the blog
> -            // maybe we should notify the blog owner that his  
> member was deleted?
> -                        $articles = new Articles();
> -
> -                        $a_query = "SELECT a.id AS id, a.user_id  
> AS user_id, a.blog_id AS blog_id
> -                                              FROM ".$this- 
> >getPrefix()."articles AS a, ".$this->getPrefix()."users AS u
> -                                               WHERE  
> a.user_id=u.id AND u.status = 2";
> -            $a_result = $this->Execute( $a_query );
> -
> -            if( !$a_result )
> -                return false;
> -
> -            while( $a_row = $a_result->FetchRow()) {
> -                $articles->deleteArticle( $a_row["id"], $a_row 
> ["user_id"], $a_row["blog_id"], true );
> -            }
> -
> -            // finally remove the user
> -            $u_query = "SELECT * FROM ".$this->getPrefix()."users  
> WHERE status = 2";
> -
> -            $u_result = $this->Execute( $u_query );
> -            if( !$u_result )
> -                return false;
> -
> -            while( $u_row = $u_result->FetchRow()) {
> -                $this->deleteUser( $u_row["id"] );
> -            }
> -
> -            return true;
> -        }
> -
> -        /**
>           * returns the total number of users
>           *
>           * @return total number of users
>           */
> -        function getNumUsers( $status = USER_STATUS_ALL,  
> $searchTerms = "" )
> +        function getNumUsers( $status = USER_STATUS_ALL )
>          {
> -            $table = $this->getPrefix()."users";
> -            if( $status != USER_STATUS_ALL )
> -                $whereStatus = "status = '".Db::qstr($status)."'";
> -            if( $searchTerms != "" )
> -                $whereSearch = $this->buildSearchCondition 
> ( $searchTerms );
> -
> -            $where = $this->buildWhereCondition( Array 
> ( $whereStatus, $whereSearch ), false );
> -
> -            return( $this->getNumItems( $table, $where ));
> +            return( $this->_provider->getNumUsers( $status ));
>          }
>
>          /**
> @@ -552,7 +204,7 @@
>           */
>          function userExists( $userName )
>          {
> -            return( $this->getUserInfoFromUsername( $userName ));
> +            return( $this->_provider->getUserInfoFromUsername 
> ( $userName ));
>          }
>
>          /**
> @@ -560,48 +212,16 @@
>           */
>          function getUserBlogId( $username )
>          {
> -            // default blog id
> -            $blogId = 1;
> -
> -            $usersBlogs = Array();
> -            $blogs = new Blogs();
> -
> -            $userinfo = $this->getUserInfoFromUsername($username);
> -            // if userinfo is null, this maybe because username is  
> not exists..
> -            // return 0 means, should go to summary page
> -            if(!$userinfo) return 0;
> -            $userid = $userinfo->getId();
> -            $userid = $userinfo->getId();
> -
> -            // check if the user is the owner of any blog
> -            $owner = "SELECT id FROM ".$this->getPrefix()."blogs  
> WHERE owner_id = ".$userid.";";
> -            $result = $this->Execute( $owner );
> -
> -            if(!$result)
> -                return $blogId;
> -
> -            while( $row = $result->FetchRow($result)) {
> -                $blogId = $row["id"];
> -            }
> -
> -            return $blogId;
> +            return( $this->_provider->getUserBlogId( $username ));
>          }
>
>          /**
>           * check if the email account has been registered
>           * @return true if the email account has been registered
>           */
> -        function emailExists($email){
> -            $query = "SELECT email
> -                      FROM ".$this->getPrefix()."users
> -                      WHERE email = '".Db::qstr($email)."'";
> -
> -            $result = $this->Execute($query);
> -
> -            if($result && $result->RecordCount() >= 1)
> -                return true;
> -            else
> -                return false;
> +        function emailExists($email)
> +        {
> +            return( $this->_provider->emailExists( $email ));
>          }
>      }
> -?>
> \ No newline at end of file
> +?>
>
> Added: plog/trunk/config/userdata.properties.php
> ===================================================================
> --- plog/trunk/config/userdata.properties.php    2005-06-06  
> 21:28:28 UTC (rev 2176)
> +++ plog/trunk/config/userdata.properties.php    2005-06-06  
> 21:37:24 UTC (rev 2177)
> @@ -0,0 +1,21 @@
> +<?php
> +
> +#
> +# Default user data provider, plog's own one
> +#
> +$config = Array(
> +  "provider" => "PlogUserDataProvider",
> +);
> +
> +#
> +# PHPBB2 user data provider -- Not implemented yet
> +#
> +/*$config = Array(
> +  "provider" => "PhpBB2UserDataProvider",
> +  "createBlogIfNotExisting" => true,
> +  "database" => "phpbb2",
> +  "user" => "xxx",
> +  "password" => "yyy",
> +  "prefix" => "phpbb_"
> +);*/
> +?>
>
>
> Property changes on: plog/trunk/config/userdata.properties.php
> ___________________________________________________________________
> Name: svn:executable
>    + *
>
> _______________________________________________
> pLog-svn mailing list
> pLog-svn at devel.plogworld.net
> http://devel.plogworld.net/mailman/listinfo/plog-svn
>
>




More information about the pLog-svn mailing list