歡迎光臨, 訪客. 請先 登入註冊一個帳號.
十一月 23, 2024, 09:50:22 上午
19595 文章 在 3865 主題 由 4579 會員
最新註冊會員: aa123aa1
LifeType 中文開發論壇  |  開發  |  外掛程式  |  外掛程式精華區  |  plog&vbb完全整合摸索过程 « 上篇主題 下篇主題 »
頁: [1]
作者 主題: plog&vbb完全整合摸索过程  (閱讀 102672 次)
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 於: 九月 08, 2005, 05:21:03 下午 »

我也还在摸索中,所以只好做到那一步,就写到哪一步
因为对php很陌生,所以进度会非常慢
我计划用一个月的时间完成
中间肯定会遇到各种问题,希望各位高手指正
少说废话,直接进入正题
首先,整合user表
因为plog的表会自动加上前缀plog_

//将plog_数据表前缀去掉

ALTER TABLE `plog_article_categories_link` RENAME `article_categories_link` ;
ALTER TABLE `plog_articles` RENAME `articles` ;
ALTER TABLE `plog_articles_categories` RENAME `articles_categories` ;
ALTER TABLE `plog_articles_comments` RENAME `articles_comments` ;
ALTER TABLE `plog_articles_notifications` RENAME `articles_notifications` ;
ALTER TABLE `plog_articles_text` RENAME `articles_text` ;
ALTER TABLE `plog_bayesian_filter_info` RENAME `bayesian_filter_info` ;
ALTER TABLE `plog_bayesian_tokens` RENAME `bayesian_tokens` ;
ALTER TABLE `plog_blogs` RENAME `blogs` ;
ALTER TABLE `plog_config` RENAME `config` ;
ALTER TABLE `plog_custom_fields_definition` RENAME `custom_fields_definition` ;
ALTER TABLE `plog_custom_fields_values` RENAME `custom_fields_values` ;
ALTER TABLE `plog_filtered_content` RENAME `filtered_content` ;
ALTER TABLE `plog_gallery_albums` RENAME `gallery_albums` ;
ALTER TABLE `plog_gallery_resources` RENAME `gallery_resources` ;
ALTER TABLE `plog_host_blocking_rules` RENAME `host_blocking_rules` ;
ALTER TABLE `plog_mylinks` RENAME `mylinks` ;
ALTER TABLE `plog_mylinks_categories` RENAME `mylinks_categories` ;
ALTER TABLE `plog_myrecent` RENAME `myrecent` ;
ALTER TABLE `plog_myrecent_categories` RENAME `myrecent_categories` ;
ALTER TABLE `plog_permissions` RENAME `permissions` ;
ALTER TABLE `plog_referers` RENAME `referers` ;
ALTER TABLE `plog_trackbacks` RENAME `trackbacks` ;
ALTER TABLE `plog_users` RENAME `users` ;
ALTER TABLE `plog_users_permissions` RENAME `users_permissions` ;

已記錄
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #1 於: 九月 08, 2005, 05:23:34 下午 »

//将plog的user表的特殊字段加入到vbb中

ALTER TABLE `user`
ADD `full_name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL AFTER `salt` ,
ADD `about` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci AFTER `full_name` ,
ADD `properties` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL AFTER `about` ,
ADD `status` INT( 4 ) DEFAULT '1' NOT NULL AFTER `properties` ,
ADD `resource_picture_id` INT( 10 ) DEFAULT '0' NOT NULL AFTER `status` ;

//修改plog中所有和user表有关的项目

class\dao\users.class.php(40): FROM  $query = "SELECT * FROM ".$this->getPrefix()."users
class\dao\users.class.php(70): FROM {$prefix}users u LEFT JOIN {$prefix}users_permissions p ON u.id = p.user_id
class\dao\users.class.php(92): FROM {$prefix}users u LEFT JOIN {$prefix}users_permissions p ON u.id = p.user_id
class\dao\users.class.php(118): FROM {$prefix}users u LEFT JOIN {$prefix}users_permissions p ON u.id = p.user_id
class\dao\users.class.php(329): $query = "SELECT {$prefix}users.* FROM {$prefix}users, {$prefix}blogs
class\dao\users.class.php(330): WHERE {$prefix}users.id = {$prefix}blogs.owner_id AND {$prefix}blogs.id = '".Db::qstr($blogId)."';";
class\dao\users.class.php(341): $query2 = "SELECT {$prefix}users.* FROM {$prefix}users, {$prefix}users_permissions
class\dao\users.class.php(342): WHERE {$prefix}users.id = {$prefix}users_permissions.user_id
class\dao\users.class.php(343): AND {$prefix}users_permissions.blog_id = '".Db::qstr($blogId)."';";
class\dao\users.class.php(409): $table = "{$prefix}users";
class\summary\data\summarytools.class.php(60): FROM {$prefix}users u LEFT JOIN {$prefix}users_permissions p ON u.id = p.user_id
将所有的users 改为 user
所对应sql语句中的的id改为userid
所对应sql语句中的的user改为username
已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #2 於: 九月 08, 2005, 05:28:15 下午 »

ㄟ .....

我實在不建議你這麼做!因為這樣寫出來的東西無法『重複使用』。

我建議:
1. 把 pLog 的 user authentication 的資料來源改到 vbb 的 table。
2. 如果是由 vbb login 進來時,自動產生 plog 的 session

這樣才會簡單!

你可以去參考這一篇 http://wiki.lifetype.org.tw/index.php/Check_Out_from_SVN,透過 SVN 去拿 1.1 的 code,裡面已經有整合 phpBB 的範例了!

你要是自己要『硬幹』,那會很累的。

作之前,先搜尋中、英文論壇一下吧!有太多的討論了!

Mark
已記錄

laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #3 於: 九月 08, 2005, 06:04:31 下午 »

但是我希望有人在vbb上注册一个用户的同时,也在plog中注册一个用户,如果有两个表,那么在注册的时候或者比较容易,但是在之后的修改,就会变得很麻烦

接着,我发现vbb和plog对密码的加密方式有所不同
plog就是简单的md5加密
vbb却非常复杂md5(md5(password).特殊字符)
特殊字符是在注册时候生成的存在user表的salt字段中
suoyitong
已記錄
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #4 於: 九月 08, 2005, 06:09:46 下午 »

非常感谢markwu的建议,但是我的e文水平实在是poor,阅读那些鸟文实在还不如读代码

对于password的加密,打算全不统一成md5(md5(password))方式

让两者的加密方式都是md5(md5(password))
虽然这种方式实在有点取巧(不含蓄点的说法就是下三赖)


//vbb
去掉随机字符串
functions_user.php
class_dm_user.php
中的函数fetch_user_salt()
最后return null;
//返回值改为null

//plog
md5(原来的)

Z:\share\www\plog\class\dao\userinfo.class.php(92): $this->_password = md5($newPassword);
Z:\share\www\plog\class\dao\users.class.php(41): WHERE user = '".Db::qstr($user)."' AND password = '".md5($pass)."'
Z:\share\www\plog\class\dao\users.class.php(71): WHERE u.user = '".Db::qstr($user)."' AND u.password = '".md5($pass)."'";
Z:\share\www\plog\class\dao\users.class.php(294): VALUES ('".Db::qstr($user->getUserName())."','".md5($user->getPassword())."','".
修改为md5(md5(password))方式
已記錄
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #5 於: 九月 08, 2005, 06:18:46 下午 »

下一步的任务是在vbb的登录中产生plog的session,继续摸索中
让plog的登录界面失效。。
这样做下去,plog成了vbb的一个附庸,虽然我的本意也是这样
但是在这个论坛上公开这样的言论,也有点诚惶诚恐~
« 最後編輯時間: 九月 08, 2005, 06:21:30 下午 由 laughtosky » 已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #6 於: 九月 08, 2005, 07:11:44 下午 »

下一步的任务是在vbb的登录中产生plog的session,继续摸索中
让plog的登录界面失效。。
这样做下去,plog成了vbb的一个附庸,虽然我的本意也是这样
但是在这个论坛上公开这样的言论,也有点诚惶诚恐~

還好阿,有什麼好惶恐!本來就是要看你的目的!只是這樣變成無法重複使用,呵呵,很是可惜!

Mark
已記錄

markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #7 於: 九月 08, 2005, 07:14:05 下午 »

但是我希望有人在vbb上注册一个用户的同时,也在plog中注册一个用户,如果有两个表,那么在注册的时候或者比较容易,但是在之后的修改,就会变得很麻烦

接着,我发现vbb和plog对密码的加密方式有所不同
plog就是简单的md5加密
vbb却非常复杂md5(md5(password).特殊字符)
特殊字符是在注册时候生成的存在user表的salt字段中
suoyitong

這就是 OO 的好處了!pLog 1.1 已經提供了一個新 interface, 稱為 userdata,透過他可以來新增對其他系統的認證,又不會改變到原來的程式。而且你說的資料庫的部分,他也會處理。

呵呵!你自己決定要怎麼作吧!

Mark
已記錄

laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #8 於: 九月 08, 2005, 09:32:00 下午 »

今天终于成为vbb的正版用户,庆祝一下~
已記錄
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #9 於: 九月 14, 2005, 08:40:30 上午 »

今天所有的测试都已经基本上成功
剩下的只是一些细节问题了

为了能在vbb的模板中显示出plog的信息
修改global.php代码
在93行附近插入
然后修改vbb模板的时候,使用$cui_blogid,$cui_blogname来代替当前用户的plog信息

//test by cui
//add plog session
$aaaa = 'hello';
if ($vbulletin->userinfo['userid'] != 0)
{
   $cui_userid = $vbulletin->userinfo['userid'];
   $cui_userinfo = $db->query_first("SELECT * FROM " .TABLE_PREFIX. "user As user where userid =".$cui_userid);

   //获取当前登录用户full_name,其实也没有太大的必要
   $cui_username = addslashes_js(unhtmlspecialchars($cui_userinfo['username'], true), '"');
   $cui_fullname = addslashes_js(unhtmlspecialchars($cui_userinfo['full_name'], true), '"');

   if ($cui_username != '')
   {
      $cui_bloginfo = $db->query_first("SELECT * FROM " .TABLE_PREFIX. "blogs As plogs where owner_id =".$cui_userid);
      //获取当前登录用户的plog
      $cui_blogid = addslashes_js(unhtmlspecialchars($cui_bloginfo['id'], true), '"');
      $cui_blogname = addslashes_js(unhtmlspecialchars($cui_bloginfo['blog'], true), '"');
      
      if ($cui_blogid != '')
      {
         //set session
      }
      else
      {
         //no blog
      }
   }
   else
   {
      //error user
   }
}
else
{
   //no login
}
//test by cui
已記錄
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #10 於: 九月 14, 2005, 08:43:33 上午 »

我用的vbb版本是3.5rc2
还有一点特别要注意
每个用户只能有一个blog
否着获取的只是第一个blog
如果想获取最后一个blog信息
在SQL语句中加上order by id desc
已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #11 於: 九月 14, 2005, 08:43:55 上午 »

Hi laughtosky:

我把這一篇移動到外掛程式精華區中了,這是一篇與 pLog/VBB 奮鬥的血淚史。呵呵。 開懷大笑

Mark
已記錄

laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #12 於: 九月 14, 2005, 08:51:39 上午 »

感谢mark~
对于一个不会php的人来说确实蛮辛苦的
接着来~
在vbb浏览用户个人信息中加入此人的blog

在member.php中大约326行加入
然后在摸版中调用$cui_userblogid,$cui_userblogname以获取plog信息


//test by cui
//show plog
if ($userinfo[userid] != '' && $userinfo[userid] != 0)
{
   $cui_userbloginfo = $db->query_first("SELECT * FROM " .TABLE_PREFIX. "blogs As blogs where owner_id =".$userinfo[userid] );
   $cui_userblogid = addslashes_js(unhtmlspecialchars($cui_userbloginfo['id'], true), '"');
   $cui_userblogname = addslashes_js(unhtmlspecialchars($cui_userbloginfo['blog'], true), '"');
   if ($cui_userblogid != '')
   {
      $show['blog'] = true;
   }
   else
   {
      $show['blog'] = false;
   }
}
else
{
   $show['blog'] = false;
}

//test by cui


我是在MEMBERINFO模版中
            <if condition="$show['pm']">
            <tr>
               <td>
                  $vbphrase[private_message]:<br />
                  <a href="private.php?$session[sessionurl]do=newpm&amp;u=$userinfo[userid]"><phrase 1="$userinfo[username]">$vbphrase[send_private_message_to_x]</phrase></a>
               </td>
            </tr>
            </if>
<!--add by cui-->
<if condition="$show['blog']">
<tr>
<td>
博客:<br />
<a href="gotoplog.php?mode=view&blogid=$cui_userblogid"  target="_blank" rel="nofollow">
<phrase 1="$userinfo[username]">
$cui_userblogname
</phrase>
</a>
</td>
</tr>
</if>
<!--add end-->
顺便说一下,mark这家伙干什么的
成天都挂在论坛上?
已記錄
laughtosky
新手見習
*
文章: 20


檢視個人資料
« 回覆文章 #13 於: 九月 14, 2005, 09:02:45 上午 »

最后做一个跳板,从vbb进入plog的时候设置plog的session

参考mark给的一段代码

// 產生一個新的 user 物件
$users = new Users();
// 取得 userInfo 物件 (透過正確的 username 與 password)
$userInfo = $users->getUserInfo( $userName, $userPassword );
// 取得使用者的 blog list
$userBlogs = $users->getUsersBlogs( $userInfo->getId(), BLOG_STATUS_ACTIVE );
// 用第一個 blog 來當作 blogID,並取得這個 blog ID 的 blogInfo
$blogInfo = end( $userBlogs );
// 取得 session
$session = HttpVars::getSession();
$sessionInfo = $session["SessionInfo"];
// 並且把資料寫入session
$sessionInfo->setValue( "userInfo", $userInfo );
$sessionInfo->setValue( "blogInfo", $blogInfo );
$session["SessionInfo"] = $sessionInfo;
HttpVars::setSession( $session );

我修改了一下users.class.php
在62行附近添加了一个函数
目的是不通过用户密码就能获取用户信息getUserInfo
//test by cui
        function cui_getUserInfo_nopass( $user)
        {
            $prefix = $this->getPrefix();
            $query = "SELECT u.userid AS userid, u.username AS username, 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}user u LEFT JOIN {$prefix}users_permissions p ON u.userid = p.user_id
                      WHERE u.username = '".Db::qstr($user)."'";

            $userInfo = $this->_getUserInfoFromQuery( $query );

            return $userInfo;
        }
//test by cui

然后
// 產生一個新的 user 物件
$users = new Users();
// 取得 userInfo 物件 (透過正確的 username 與 password)
$userInfo = $users->cui_getUserInfo_nopass( $userName );
// 取得使用者的 blog list
$userBlogs = $users->getUsersBlogs( $userInfo->getId(), BLOG_STATUS_ACTIVE );
// 用第一個 blog 來當作 blogID,並取得這個 blog ID 的 blogInfo
$blogInfo = end( $userBlogs );
// 取得 session
$session = HttpVars::getSession();
$sessionInfo = $session["SessionInfo"];
// 並且把資料寫入session
$sessionInfo->setValue( "userInfo", $userInfo );
$sessionInfo->setValue( "blogInfo", $blogInfo );
$session["SessionInfo"] = $sessionInfo;
HttpVars::setSession( $session );

只需要给出vbb的username的session就可以建立plog的session
然后跳转到admin.php就可以了

到此应该可以告一段落了
剩下的都是细节问题了

再次感谢mark无私的帮助~
« 最後編輯時間: 九月 14, 2005, 09:15:02 上午 由 laughtosky » 已記錄
頁: [1]
LifeType 中文開發論壇  |  開發  |  外掛程式  |  外掛程式精華區  |  plog&vbb完全整合摸索过程 « 上篇主題 下篇主題 »
    前往: