POLE FORUM2

 找回密碼
 立即註冊
搜索
熱搜: 活動 交友 discuz
查看: 438|回復: 7

修改重建封面變成系統默認封面的BUG測試

[複製鏈接]

管理員

個性簽名:
倉庫工頭

積分信息:
威望:6087
金錢:9076810
貢獻:6198
儲蓄:2146643647

發表於 2016-1-13 07:52:11 | 顯示全部樓層 |閱讀模式

有圖片展示版的站長可能發現,在重新封面的時候,封面已經不是自己選擇的圖了,而是發帖時系統默認的了。這個問題反饋了半年了,人家不當是問題。所以就這樣了。自己動手吧。(其實有時真不是自己不會修改,也不是自己不想去修改,只是自己修改的太多,影響升級。但人家死活不重視,你拿他沒有辦法。)
需要修改的文件
source/admincp/admincp_counter.php
source/function/function_post.php
source/class/table/table_forum_threadimage.php

老規距,先分析問題。

為什麼會這樣,其實原因很簡單,在重建的時候,沒有讀取自己設置的封面,而只是直接從主題附件裡面選擇最後上傳的那張圖片。

首先,看看數據庫

SELECT *
FROM `pre_forum_threadimage`
LIMIT 0 , 30
        tid        attachment        remote
        編輯        刪除        1        201309/23/171902q7ahfsbt7xz957t7.jpg        0
        編輯        刪除        2        201310/30/114312uw221w8t8vw1z1yj.jpg        0
        編輯        刪除        3        201310/30/114537rlgk0k2kli2z9xg1.jpg        0
        編輯        刪除        4        201310/30/114619sutk8vvhunxvdbpk.jpg        0
        編輯        刪除        5        201310/30/114859ylvwz196kdmgw19q.jpg        0
        編輯        刪除        6        201310/30/120641lgkgq1oa7x00anag.jpg        0
        編輯        刪除        7        201310/30/121726olrzq3qkpnw383tz.jpg        0
        編輯        刪除        9        201310/30/122003uk63etg6wmtjjh4e.jpg        0
        編輯        刪除        11        201310/30/141256ixgxc0m0xzhqg0g0.jpg        0
        編輯        刪除        12        201310/30/141344qtaide36tzdilz35.jpg        0
        編輯        刪除        14        201312/29/225508mr9f7rdt7dhbbkp9.jpg        0



我們看到,數據庫記錄了封面圖片的原文件。


有原文件記錄就好辦了,再看看文件吧,打開



source/admincp/admincp_counter.php

關鍵部位 451-456行,版本不同略有不同

遊客,如果您要查看本帖隱藏內容請回復



可以很明顯的看到,數據庫中只記錄了TID,而處理函數是處理PID(紅色字體)
因此我們需要修改如下:
  1. foreach(C::t('forum_thread')->fetch_all_by_fid_cover_lastpost($fid, $cover, $starttime, $endtime, $current, $pertask) as $thread) {
  2.                 $processed = 1;
  3.                 $pid = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid'], 0);
  4.                 $pid = $pid['pid'];
  5.                 setthreadcover($pid,$thread['tid']);
  6.         }
複製代碼


好,現在我們找到setthreadcover函數。
在source/function/function_post.php文件的最後

  1. function setthreadcover($pid, $tid = 0, $aid = 0, $countimg = 0, $imgurl = '') {
  2.         global $_G;
  3.         $cover = 0;
  4.         if(empty($_G['uid']) || !intval($_G['setting']['forumpicstyle']['thumbheight']) || !intval($_G['setting']['forumpicstyle']['thumbwidth'])) {
  5.                 return false;
  6.         }

  7.         if(($pid || $aid) && empty($countimg)) {
  8.                 if(empty($imgurl)) {
  9.                         if($aid) {
  10.                                 $attachtable = 'aid:'.$aid;
  11.                                 $attach = C::t('forum_attachment_n')->fetch('aid:'.$aid, $aid, array(1, -1));
  12.                         }else{
  13.                                 $attachtable = 'pid:'.$pid;
  14.                                 $attach = C::t('forum_attachment_n')->fetch_max_image('pid:'.$pid, 'pid', $pid);
  15.                                 
  16.                         }
  17.                         if(!$attach) {
  18.                                 return false;
  19.                         }
  20.                         if(empty($_G['forum']['ismoderator']) && $_G['uid'] != $attach['uid']) {
  21.                                 return false;
  22.                         }
  23.                         $pid = empty($pid) ? $attach['pid'] : $pid;
  24.                         $tid = empty($tid) ? $attach['tid'] : $tid;
  25.                         $picsource = ($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']).'forum/'.$attach['attachment'];
  26.                 } else {
  27.                         $attachtable = 'pid:'.$pid;
  28.                         $picsource = $imgurl;
  29.                 }

  30.                 $basedir = !$_G['setting']['attachdir'] ? (DISCUZ_ROOT.'./data/attachment/') : $_G['setting']['attachdir'];
  31.                 $coverdir = 'threadcover/'.substr(md5($tid), 0, 2).'/'.substr(md5($tid), 2, 2).'/';
  32.                 dmkdir($basedir.'./forum/'.$coverdir);

  33.                 require_once libfile('class/image');
  34.                 $image = new image();
  35.                 if($image->Thumb($picsource, 'forum/'.$coverdir.$tid.'.jpg', $_G['setting']['forumpicstyle']['thumbwidth'], $_G['setting']['forumpicstyle']['thumbheight'], 2)) {
  36.                         $remote = '';
  37.                         if(getglobal('setting/ftp/on')) {
  38.                                 if(ftpcmd('upload', 'forum/'.$coverdir.$tid.'.jpg')) {
  39.                                         $remote = '-';
  40.                                 }
  41.                         }
  42.                         $cover = C::t('forum_attachment_n')->count_image_by_id($attachtable, 'pid', $pid);
  43.                         if($imgurl && empty($cover)) {
  44.                                 $cover = 1;
  45.                         }
  46.                         $cover = $remote.$cover;
  47.                 } else {
  48.                         return false;
  49.                 }
  50.         }
  51.         if($countimg) {
  52.                 if(empty($cover)) {
  53.                         $thread = C::t('forum_thread')->fetch($tid);
  54.                         $oldcover = $thread['cover'];

  55.                         $cover = C::t('forum_attachment_n')->count_image_by_id('tid:'.$tid, 'pid', $pid);
  56.                         if($cover) {
  57.                                 $cover = $oldcover < 0 ? '-'.$cover : $cover;
  58.                         }
  59.                 }
  60.         }
  61.         if($cover) {
  62.                 C::t('forum_thread')->update($tid, array('cover' => $cover));
  63.                 return true;
  64.         }
  65. }
複製代碼



發現這個函數有傳遞TID的參數。但在讀取圖片數據的時候只處理了AID和PID的情況,並沒有TID

if(($pid || $aid) && empty($countimg)) {
                if(empty($imgurl)) {
                        if($aid) {
                                $attachtable = 'aid:'.$aid;
                                $attach = C::t('forum_attachment_n')->fetch('aid:'.$aid, $aid, array(1, -1));
                        }else{
                                $attachtable = 'pid:'.$pid;
                                $attach = C::t('forum_attachment_n')->fetch_max_image('pid:'.$pid, 'pid', $pid);
                                
                        }



OK,那我們把他加上吧,修改如下:

  1. if(($pid || $aid) && empty($countimg)) {
  2.                 if(empty($imgurl)) {
  3.                         if($aid) {
  4.                                 $attachtable = 'aid:'.$aid;
  5.                                 $attach = C::t('forum_attachment_n')->fetch('aid:'.$aid, $aid, array(1, -1));
  6.                         } elseif($tid) {
  7.                                 $attachtable = 'pid:'.$pid;
  8.                                 $attach = C::t('forum_threadimage')->fetch($tid);
  9.                         }else{
  10.                                 $attachtable = 'pid:'.$pid;
  11.                                 $attach = C::t('forum_attachment_n')->fetch_max_image('pid:'.$pid, 'pid', $pid);
  12.                                 
  13.                         }
複製代碼


在上面的代碼修改中,我們給forum_threadimage添加了fetch動作。
因此,需要打開source/class/table/table_forum_threadimage.php 文件給他添加fetch動作

  1. public function fetch($tid) {
  2.                 return DB::fetch_first('SELECT * FROM %t WHERE tid=%d', array($this->_table,$tid));
  3.         }
複製代碼



到些全部修改完畢,測試通過。


希望有一定基礎的站長,測試一下,有沒有其它方面的問題

問題回復
一切依您的說法做了,發現不能重建封面(重建速度變很快),

請問是為何呢?

其他文件改了沒問題,

一加入這句就有問題了

} elseif($tid) {
                                $attachtable = 'pid:'.$pid;
                                $attach = C::t('forum_threadimage')->fetch($tid);

謝謝

回答
改成這樣即可
  1. foreach(C::t('forum_thread')->fetch_all_by_fid_cover_lastpost($fid, $cover, $starttime, $endtime, $current, $pertask) as $thread) {
  2.                 $processed = 1;
  3.                 $pid = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid'], 0);
  4.                 $pid = $pid['pid'];
  5.                 setthreadcover($pid);
  6.                 setthreadcover($pid,$thread['tid']);
複製代碼

論壇元老

積分信息:
威望:489
金錢:2163
貢獻:834
儲蓄:100

發表於 2017-5-17 07:39:35 | 顯示全部樓層
謝謝你的分享內容~太棒了

1 49 244

中級會員

積分信息:
威望:50
金錢:44
貢獻:51
儲蓄:0

發表於 2018-2-25 14:18:38 | 顯示全部樓層

本回复帖回复于 2017-5-17 07:39:35 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



谢谢你的分享内容~太棒了



不错.....

1 53 249

中級會員

積分信息:
威望:46
金錢:47
貢獻:57
儲蓄:0

發表於 2018-2-27 03:14:57 | 顯示全部樓層

本回复帖回复于 前天 14:18 ,认真回复,您的回复对楼主是莫大的鼓舞。



[quote]

本回复帖回复于 2017-5-17 07:39:35 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



谢谢你的分享内容~太棒了


不错.....


[/quote]

不错.....

1 40 166

註冊會員

積分信息:
威望:35
金錢:15
貢獻:41
儲蓄:0

發表於 2018-2-27 15:31:54 | 顯示全部樓層

bear197994 于 12 小时前 回复本贴,感谢 bear197994 的回复,回复对楼主是莫大的鼓舞。



[quote]

本回复帖回复于 前天 14:18 ,认真回复,您的回复对楼主是莫大的鼓舞。



[quote]

[table]
本回复帖回复于 2017-5-17 07:39:35 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



谢谢你的分享内容~太棒了


不错.....


[/quote]

不错.....


[/td][td][/td][/tr][tr][td][/td][td][/td][td][/td][/tr][/table][/quote]

不错.....

1 36 174

註冊會員

積分信息:
威望:34
金錢:32
貢獻:38
儲蓄:0

發表於 2018-2-28 02:25:59 | 顯示全部樓層

本回复帖回复于 昨天 15:31 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



[quote]

bear197994 于 12 小时前 回复本贴,感谢 bear197994 的回复,回复对楼主是莫大的鼓舞。



[quote]

[table]
本回复帖回复于 前天 14:18 ,认真回复,您的回复对楼主是莫大的鼓舞。



[quote]
[table]

[table]
本回复帖回复于 2017-5-17 07:39:35 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



谢谢你的分享内容~太棒了


不错.....


[/quote]

不错.....


[/td][td][/td][/tr][tr][td][/td][td][/td][td][/td][/tr][/table][/quote]

不错.....
[/td][td][/td][/tr][tr][td][/td][td][/td][td][/td][/tr][/table]

[/td][td][/td][/tr][tr][td][/td][td][/td][td][/td][/tr][/table][/quote]

不错.....
写点什么好呢?

1 48 223

中級會員

積分信息:
威望:47
金錢:32
貢獻:49
儲蓄:0

發表於 2018-3-1 09:04:06 | 顯示全部樓層

Offcn_Sd 于 4 天前 回复本贴,感谢 Offcn_Sd 的回复,回复对楼主是莫大的鼓舞。



[quote]

本回复帖回复于 2017-5-17 07:39:35 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



谢谢你的分享内容~太棒了


不错.....


[/quote]

不错.....

1 37 163

註冊會員

積分信息:
威望:27
金錢:16
貢獻:56
儲蓄:0

發表於 2018-3-2 09:36:44 | 顯示全部樓層

本回复帖回复于 5 天前 ,认真回复,您的回复对楼主是莫大的鼓舞。



[quote]

本回复帖回复于 2017-5-17 07:39:35 ,感谢您的回复,您的回复对楼主是莫大的鼓舞。



谢谢你的分享内容~太棒了


不错.....


[/quote]

不错.....
今天心情不错...
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

聯繫我們||小黑屋|手機版|Archiver|POLE FORUM2  

GMT+8, 2025-4-21 10:32 , Processed in 0.076719 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表