Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 01-03-2011, 08:14 PM
saimon69 saimon69 is offline
 
Join Date: Jun 2010
Posts: 21
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default [cms 4.0.7] URGENT - Insert attachments from PHP script

I am working in a migration from fireboard to vBulletin and this migration involved a certain amount of custom scripts for those functions unsupported by impex; i am running those scripts locally on my machine before to upload the finished database on the server.
Among all the script, i did write a script to transport attachments from fireboard to vbulletin; the script is written trying to understand how the attachment system works from the database interactions, transform the attachement in a BLOB and update it in the filedata table - following impex instructions to store attachments in the DB - and did produced a good amount of empty attachment links on the forum; would like to know what modifications should i do to make the import work properly, thanks.

Saimon69

PHP Code:
<?php
   
/**
    * Retrieve fireboard attachments,
    * upload it as BLOB and insert it into related vBulletin threads
    * hope this works ^^; 
    */

ini_set('max_execution_time'2400);
    
    require(
'includes/db_connection.php');

    
//define the url where to get source attachments
    
    
define('BASE_ATT_PATH','http://localhost/vbcms/');


//initialize variables
//configure the attachment type
$attachtypes = array(
                array(
'ext'=>'gif','mimetype'=>'Content-type: image/gif''maxW'=>620,'maxH'=>280,'maxsize'=>20000,'th'=>1),
                array(
'ext'=>'GIF','mimetype'=>'Content-type: image/gif''maxW'=>620,'maxH'=>280,'maxsize'=>20000,'th'=>1),
                array(
'ext'=>'jpeg','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
                array(
'ext'=>'jpg','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>100000'th'=>1),
                array(
'ext'=>'JPG','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>100000'th'=>1),        
                array(
'ext'=>'jpe','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
                array(
'ext'=>'txt','mimetype'=>'Content-type: plain/text''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
                array(
'ext'=>'png','mimetype'=>'Content-type: image/png''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
                array(
'ext'=>'doc','mimetype'=>'Content-type: application/msword''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
                array(
'ext'=>'htm','mimetype'=>'Content-type: text/html''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
                array(
'ext'=>'html','mimetype'=>'Content-type: text/html''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
                array(
'ext'=>'pdf','mimetype'=>'Content-type: application/pdf''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
                array(
'ext'=>'bmp','mimetype'=>'Content-type: image/bitmap''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
                array(
'ext'=>'psd','mimetype'=>'Content-type: unknown/unknown''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
                array(
'ext'=>'zip','mimetype'=>'Content-type: application/zip''maxW'=>0,'maxH'=>0,'maxsize'=>100000'th'=>0),
                array(
'ext'=>'rar','mimetype'=>'Content-type: application/x-rar''maxW'=>0,'maxH'=>0,'maxsize'=>100000'th'=>0),
                );

//make attachtypes global to be called from inside function                
    
    
$jfbthreads = array();
    
$jfbattachs = array();
    
$vbusers = array();
    
$vbposts = array();
    
$vbattachdatas = array();
    
$vbattach 'temp/';
    
$vbattachthumb 'temp/';
    
$now time();
    
    
//connect to joomla database
    
    
connect_oldwebsite();
    
    
//retrieve attachment info from fireboard
    
    
$sql0 "SELECT * FROM jos_fb_attachments";
    
    
$res0 mysql_query($sql0)  or die('Invalid query: ' mysql_error());

    while(
$row0 mysql_fetch_object($res0)){
        
array_push($jfbattachs, array( 'mesid'=>$row0->mesid,
                                        
'filelocation'=>$row0->filelocation,
        ));

    } 
//end while
    
    //retrieve fireboard thread info
    //just the thread id to compare with importedthreadid in vbulletin
    
    
foreach($jfbattachs as $i=>$value){
    
$sql00 "SELECT * FROM jos_fb_messages WHERE id = ".$jfbattachs[$i]['mesid']." ";

    
$res00 mysql_query($sql00)  or die('Invalid query: ' mysql_error());
    
        if(
$res00){
            while(
$row00 mysql_fetch_array($res00) ){
                
array_push($jfbthreads,array(    'id'=>$row00['id'],
                
'thread'=>$row00['thread'] ,
                
'catid'=>$row00['catid'] ,
                
'name'=>$row00['name'] ,
                
'userid'=>$row00['userid'] ,
                
'email'=>$row00['email'] ,
                
'subject'=>$row00['subject'] ,
                
'time'=>$row00['time'] ,
                
'ip'=>$row00['ip'] ,
                ));
            }
//end while
        
//end if
    
//end foreach
    
    //connect to vbulletin
connect_vbcms();        
    
//retrieve required thread information from the thread table
    
foreach($jfbthreads as $i=>$value){
    
$sql1 "SELECT * FROM post WHERE importthreadid = ".$jfbthreads[$i]['thread']." ";
    
$res1 mysql_query($sql1) or die('Invalid query: ' mysql_error());
    
    if(
$res1){
        while(
$row1 mysql_fetch_object($res1)){
            
array_push$vbposts, array(     'postid'=>$row1->postid ,
            
'threadid'=>$row1->threadid ,
            
'parentid'=>$row1->parentid ,
            
'username'=>$row1->username ,
            
'userid'=>$row1->userid ,
            
'title'=>$row1->title ,
            
'dateline'=>$row1->dateline ,
            
'pagetext'=>$row1->pagetext ,
            
'allowsmilie'=>$row1->allowsmilie ,
            
'showsignature'=>$row1->showsignature ,
            
'ipaddress'=>$row1->ipaddress ,
            
'iconid'=>$row1->iconid ,
            
'visible'=>$row1->visible ,
            
'attach'=>$row1->attach ,
            
'infraction'=>$row1->infraction ,
            
'reportthreadid'=>$row1->reportthreadid ,
            
'htmlstate'=>$row1->htmlstate ,
            
'importthreadid'=>$row1->importthreadid ,
            
'importpostid'=>$row1->importpostid ,
            ));
    
        } 
//end while 
    
//end if 
//end foreach 
    
//time to start populate
//we need to populate several tables: first of all filedata with the file content,
//second the linkers in the table attachment, then attachmentcategoryuser table,
//and at last set a flag in the correct post table and update the counter in the thread table

$querycnt 0;

foreach (
$vbposts as $i=>$value){
    foreach(
$jfbthreads as $j=>$value){
        if(
$jfbthreads[$j]['id'] == $vbposts[$i]['importpostid']  ){
            
        
//parse jfbattachs - filter paths to be read from the database properly
        
        
foreach($jfbattachs as $k=>$value){
            if(
$jfbattachs[$k]['mesid'] == $jfbthreads[$j]['id']){
                if(
stristr($jfbattachs[$k]['filelocation'],'fbfiles') != false){
                    
$attachmentpath str_ireplace('/home/oldwebsite/public_html/''' $jfbattachs[$k]['filelocation']);
                } 
//end if
                
                
if(stristr($jfbattachs[$k]['filelocation'],'com_fireboard') != false){
                    
$attachmentpath str_ireplace('/web/htdocs/www.oldwebsite.org/home/components/com_fireboard/''' $jfbattachs[$k]['filelocation']);
                } 
//end if                
                
                
if(stristr($jfbattachs[$k]['filelocation'],'oldwebsite/public') != false){
                    
$attachmentpath str_ireplace('/home/oldwebsite/public_html/components/com_fireboard/''' $jfbattachs[$k]['filelocation']);
                } 
//end if
                
                
if(stristr($jfbattachs[$k]['filelocation'],'oldwebsite/public_html/images') != false){
                    
$attachmentpath str_ireplace('/home/oldwebsite/public_html/''' $jfbattachs[$k]['filelocation']);
                } 
//end if
                
            
print 'id: '.$vbposts[$i]['postid'].' - oldid: '.$jfbthreads[$j]['id'].' - path - old: '.$jfbattachs[$k]['filelocation'].' - new: '.$attachmentpath.'<br/>';

                    
$fnarray explode('/',$attachmentpath);
                    
$filename $fnarray[(count($fnarray))-1];
                    
$fnnoext substr($filename,0,-4);
                    
$fnext substr($filename,-3);
    
                
$retrievefile BASE_ATT_PATH $attachmentpath;
                
        print
'retrievefile: '.$retrievefile.'<br/>importedfile: '.$importedfile.'<br/>';
                
        
//lets start with extensions, treat it differently from archives
        
$isImage 0;

            switch(
$fnext){
                case 
'gif':
                
$file1 imagecreatefromgif($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('gif',$attachtypes);
                break;
                
                case 
'GIF':
                
$file1 imagecreatefromgif($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('gif',$attachtypes);
                break;
                
                case 
'jpeg':
                
$file1 imagecreatefromjpeg($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('jpeg',$attachtypes);
                break;
            
                case 
'jpg':
                
$file1 imagecreatefromjpeg($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('jpg',$attachtypes);
                break;
                
                case 
'JPG':
                
$file1 imagecreatefromjpeg($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('jpg',$attachtypes);
                break;
            
                case 
'jpe':
                
$file1 imagecreatefromjpeg($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('jpe',$attachtypes);
                break;
            
                case 
'txt':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('txt',$attachtypes);
                break;
        
                case 
'htm':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('htm',$attachtypes);
                break;
                
                case 
'html':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('htnl',$attachtypes);
                break;

                case 
'png':
                
$file1 imagecreatefrompng($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('png',$attachtypes);
                break;
            
                case 
'doc':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('doc',$attachtypes);
                break;
            
                case 
'pdf':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('pdf',$attachtypes);
                break;
                
                case 
'bmp':
                
$file1 imagecreatefrombmp($retrievefile);
                
$isImage 1;
                
$imgPar retrieveImgParams('bmp',$attachtypes);
                break;
                
                case 
'psd':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('psd',$attachtypes);
                break;
                
                case 
'zip':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('zip',$attachtypes);
                break;
                
                case 
'rar':
                
$file1 file_get_contents($retrievefile);
                
$isImage 0;
                
$imgPar retrieveImgParams('rar',$attachtypes);
                break;
            
            }    
//end switch
                
            
    
if ($isImage == 1){
        print 
'the file '.$retrievefile.' <u>is an image</u> (or so i think)<br/>';

        
$maxsizeW $imgPar['maxW'];
        
$maxsizeH $imgPar['maxH'];
        
$hasThumb $imgPar['th'];
        
$mimeType $imgPar['mimetype'];
        
$imgext $imgPar['ext'];
        
//determine sizes
        
$imgsize getimagesize($retrievefile);
        
$img1w $imgsize[0];
        
$img1h $imgsize[1];
        
$ratio round($img1w/$img1h,2);
        
//determine size for avatar
        
$img1w = ($img1w >$maxsizeW ) ? $maxsizeW $img1w;
        
$img1h = ($img1h >$maxsizeH ) ? $maxsizeH $img1h;
        
//determine size for thumbnail
        
$img2w = ($img1w >100 ) ? 100 $img1w;
        
$img2h =  round($img2w/$ratio); //rounded width/ratio
        //create avatar pic
        
$attach imagecreatetruecolor($img1w,$img1h);
        
imagecopyresampled($attach,$file1,0,0,0,0,$img1w,$img1h,$img1w,$img1h); 
        
//create avatar thumbnail
    
if($hasThumb == 1){    
        
$attachthumb imagecreatetruecolor($img2w,$img2h);
        
imagecopyresampled($attachthumb,$file1,0,0,0,0,$img2w,$img2h,$img1w,$img1h); 
        }
// end if 
                
        //start buffering        
        
ob_start();        

    switch(
$imgext){
        case 
'gif':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagegif($attach$imgrendered);
        break;
        
        case 
'GIF':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagegif($attach$imgrendered);
        break;
        
        case 
'jpeg':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagejpeg($attach,$imgrendered,80);
        break;
        
        case 
'jpg':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagejpeg($attach,$imgrendered,80);
        break;
        
        case 
'JPG':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagejpeg($attach,$imgrendered,80);
        break;
        
        
        case 
'jpe':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagejpeg($attach,$imgrendered,80);
        break;
        
        case 
'png':
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
imagepng($attach,$imgrendered);
        break;
        
        case 
'bmp':
        
$imgrendered $vbattach.$fnnoext.'.png';
        
//store it as png since bmp support in GD is non existent
        
imagepng($attach,$imgrendered);
        break;
        
    } 
//end switch 
    
        
ob_end_clean();
        
        if(
$hasThumb == 1){ 
        
        
ob_start();        
        
                
//all thumbnails are stored as png
                
$thumbrendered $vbattachthumb.$fnnoext."_thu.png";
                
imagepng($attachthumb,$thumbrendered);

        
ob_end_clean();
        }
//end if 
        
    
//end if 
    
if($isImage == 0){        
    
        
$img1w 0;
        
$img1h 0;
        
$img2w 0;
        
$img2h 0;
        
$mimeType $imgPar['mimetype'];
        
$imgext $imgPar['ext'];
        
$hasThumb 0;
        
        
//gotta copy files in temp/ 

        
ob_start();
        
        
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
        
file_put_contents($imgrendered$file1);
        
        
ob_end_clean();
    
    } 
//end if is Image
            
    // process the file        
    // start with storing the pic in the filedata table        
    
    
$myattach addslashes(file_get_contents($imgrendered));
    
$myattachfilesize filesize($imgrendered);
    
$myattachhash md5_file($imgrendered);
    if(
$hasThumb == 1){
        
$myattachthumb addslashes(file_get_contents($thumbrendered));
        
$myattachthumbfilesize filesize($thumbrendered);
    } else {
        
$myattachthumb null;
        
$myattachthumbfilesize 0;
        
$img2w 0;
        
$img2h 0;
    } 
//end if
            
    //prepare the mysql query for filedata
    
    
$sql11 "INSERT INTO filedata    (    filedataid,
        userid,
        dateline,
        thumbnail_dateline,
        filedata,
        filesize,
        filehash,
        thumbnail,
        thumbnail_filesize,
        extension,
        refcount,
        width,
        height,
        thumbnail_width,
        thumbnail_height    
    ) VALUES (
        NULL,
        "
.$vbposts[$i]['userid'].",
        "
.$now.",
        "
.$now.",
        '"
.$myattach."',
        "
.$myattachfilesize.",
        '"
.$myattachhash."',
        '"
.$myattachthumb."',
        "
.$myattachthumbfilesize.",
        '"
.$imgext."',
        1,
        "
.$img1w.",
        "
.$img1h.",
        "
.$img2w.",
        "
.$img2h."                                
    )"
;

    @
fclose($imgrendered); 
    if(
$hasThumb == 1){
        @
fclose($thumbrendered); 
    }
        
$res11 mysql_query($sql11) or die('Invalid query: ' mysql_error());
        
printf("Records inserted: %d\n"mysql_affected_rows());            
        
     
$filedataindex =     mysql_insert_id();
        
sleep(1);
        
    
//sql query for table attachment
    //retrieve if there are already records linked to that post
    
    
$sql12 "INSERT INTO attachment (    attachmentid,
        contenttypeid,
        contentid,
        userid,
        dateline,
        filedataid,
        state,
        counter,
        posthash,
        filename,
        caption,
        reportthreadid,
        settings,
        displayorder,
        importattachmentid
        
        ) VALUES (
        NULL,
        1,
        "
.$vbposts[$i]['postid'].",
        "
.$vbposts[$i]['userid'].",
        "
.$now.",
        "
.$filedataindex.",
        'visible',
        1,
        '',
        '"
.$fnnoext.'.'.$imgext."',
        NULL,
        0,
        NULL,
        0,
        "
.$jfbthreads[$j]['id']."
    
        )"
;
                                        
    print 
'sql12 ='.$sql12.'<br/>';    
        
$res12 mysql_query($sql12) or die('Invalid query: ' mysql_error());
        
printf("Records inserted: %d\n"mysql_affected_rows());

    
$attachmentid mysql_insert_id();
        
//    sql query for attachmentcategoryuser
    
    
$sql13 "INSERT INTO attachmentcategoryuser (    filedataid,
        userid,
        categoryid,
        filename,
        dateline
        )    VALUES (
        "
.$filedataindex.",
        "
.$vbposts[$i]['userid'].",
        0,
        '"
.$fnnoext.'.'.$imgext."',
        "
.$now."
        )"
;
    
        print 
'sql13 ='.$sql13.'<br/>';    
        
$res13 mysql_query($sql13) or die('Invalid query: ' mysql_error());
        
printf("Records inserted: %d\n"mysql_affected_rows());
        
    
//and at last fix the post table adding there is an attach
    //need to insert the BBCODE [ATTACH]attachnumber[/ATTACH]
    
    
$sql14 "UPDATE post SET attach = 1, pagetext = CONCAT(pagetext,'[ATTACH]".$attachmentid."[/ATTACH]<br/>') WHERE postid = ".$vbposts[$i]['postid']." ";
    
    print 
'sql14 ='.$sql14.'<br/>';    
        
$res14 mysql_query($sql14) or die('Invalid query: ' mysql_error());
        
printf("Records inserted: %d\n"mysql_affected_rows());
    
    if(
$querycnt<50){
    
$querycnt++;
    } else {
    print 
'sleep<br/>';
    
sleep(5);
    
$querycnt 0;
    }
    
            } 
//end if 
        
//end foreach 
        
        
//end if 
    
//end foreach 
//end foreach 

//imagecreatefrombmp function from php.net since GD does not support bmp directly

function imagecreatefrombmp($p_sFile){
    
//    Load the image into a string
    
$file    =    fopen($p_sFile,"rb");
    
$read    =    fread($file,10);
    while(!
feof($file)&&($read<>""))
        
$read    .=    fread($file,1024);
   
    
$temp    =    unpack("H*",$read);
    
$hex    =    $temp[1];
    
$header    =    substr($hex,0,108);
   
    
//    Process the header
    //    Structure: http://www.fastgraph.com/help/bmp_header_format.html
    
if (substr($header,0,4)=="424d")
    {
        
//    Cut it in parts of 2 bytes
        
$header_parts    =    str_split($header,2);
        
//    Get the width        4 bytes
        
$width            =    hexdec($header_parts[19].$header_parts[18]);
        
//    Get the height        4 bytes
        
$height            =    hexdec($header_parts[23].$header_parts[22]);
        
//    Unset the header params
        
unset($header_parts);
    }
   
    
//    Define starting X and Y
    
$x 0;
    
$y 1;
   
    
//    Create newimage
    
$image imagecreatetruecolor($width,$height);
   
    
//    Grab the body from the image
    
$body substr($hex,108);

    
//    Calculate if padding at the end-line is needed
    //    Divided by two to keep overview.
    //    1 byte = 2 HEX-chars
    
$body_size = (strlen($body)/2);
    
$header_size = ($width*$height);

    
//    Use end-line padding? Only when needed
    
$usePadding = ($body_size>($header_size*3)+4);
   
    
//    Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption
    //    Calculate the next DWORD-position in the body
    
for ($i=0;$i<$body_size;$i+=3)
    {
        
//    Calculate line-ending and padding
        
if ($x>=$width)
        {
            
//    If padding needed, ignore image-padding
            //    Shift i to the ending of the current 32-bit-block
            
if ($usePadding)
                
$i    +=    $width%4;
           
            
//    Reset horizontal position
            
$x    =    0;
           
            
//    Raise the height-position (bottom-up)
            
$y++;
           
            
//    Reached the image-height? Break the for-loop
            
if ($y>$height)
                break;
        }
       
        
//    Calculation of the RGB-pixel (defined as BGR in image-data)
        //    Define $i_pos as absolute position in the body
        
$i_pos $i*2;
        
$r hexdec($body[$i_pos+4].$body[$i_pos+5]);
        
$g hexdec($body[$i_pos+2].$body[$i_pos+3]);
        
$b hexdec($body[$i_pos].$body[$i_pos+1]);
       
        
//    Calculate and draw the pixel
        
$color imagecolorallocate($image,$r,$g,$b);
        
imagesetpixel($image,$x,$height-$y,$color);
       
        
//    Raise the horizontal position
        
$x++;
    }
   
    
//    Unset the body / free the memory
    
unset($body);
   
    
//    Return image-object
    
return $image;
//end function 

//function that parse the attachtypes array and return the values for the file format

function retrieveImgParams($type,$attachtypes){

//    global $attacthypes;

//    print_r($attachtypes);
    
    
print 'type = '.$type.'<br/>';

    foreach (
$attachtypes as $i=>$value){
    if(
$attachtypes[$i]['ext'] == $type){
    
    return array(    
'ext'=> $attachtypes[$i]['ext'],
    
'mimetype'=> $attachtypes[$i]['mimetype'],
    
'maxW'=> $attachtypes[$i]['maxW'],
    
'maxH'=> $attachtypes[$i]['maxH'],
    
'maxsize'=> $attachtypes[$i]['maxsize'],
    
'th'=> $attachtypes[$i]['th'],
    );
    } 
//end if
    
}//end foreach
//end function

?>
Reply With Quote
  #2  
Old 01-04-2011, 04:11 PM
saimon69 saimon69 is offline
 
Join Date: Jun 2010
Posts: 21
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I checked better my script and found several errors that i fixed,included an unnecessary double foreach and a better handling of the 'attach' field; i post it here hping to do a favor and that maybe can be used for improving compatibility.

Saimon69
PHP Code:
/**
* Retrieve fireboard attachments,
* upload it as BLOB and insert it into related vBulletin threads
* new: put a GET 'mode' value: if 0 or none = test, if 1 = real    
* hope this works ^^; 
*/

$mode $_GET['mode'];
if(!
$mode || $mode == ''){
$mode 0;
}

ini_set('max_execution_time'2400);
require(
'includes/db_connection.php');

//define the url where to get source attachments
define('BASE_ATT_PATH','http://localhost/vbcms/');

//initialize variables
//configure the attachment type
$attachtypes = array(
array(
'ext'=>'gif','mimetype'=>'Content-type: image/gif''maxW'=>620,'maxH'=>280,'maxsize'=>20000,'th'=>1),
array(
'ext'=>'GIF','mimetype'=>'Content-type: image/gif''maxW'=>620,'maxH'=>280,'maxsize'=>20000,'th'=>1),
array(
'ext'=>'jpeg','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
array(
'ext'=>'jpg','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>100000'th'=>1),
array(
'ext'=>'JPG','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>100000'th'=>1),
array(
'ext'=>'jpe','mimetype'=>'Content-type: image/jpeg''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
array(
'ext'=>'txt','mimetype'=>'Content-type: plain/text''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
array(
'ext'=>'png','mimetype'=>'Content-type: image/png''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
array(
'ext'=>'doc','mimetype'=>'Content-type: application/msword''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
array(
'ext'=>'htm','mimetype'=>'Content-type: text/html''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
array(
'ext'=>'html','mimetype'=>'Content-type: text/html''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
array(
'ext'=>'pdf','mimetype'=>'Content-type: application/pdf''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
array(
'ext'=>'bmp','mimetype'=>'Content-type: image/bitmap''maxW'=>620,'maxH'=>280,'maxsize'=>20000'th'=>1),
array(
'ext'=>'psd','mimetype'=>'Content-type: unknown/unknown''maxW'=>0,'maxH'=>0,'maxsize'=>20000'th'=>0),
array(
'ext'=>'zip','mimetype'=>'Content-type: application/zip''maxW'=>0,'maxH'=>0,'maxsize'=>100000'th'=>0),
array(
'ext'=>'rar','mimetype'=>'Content-type: application/x-rar''maxW'=>0,'maxH'=>0,'maxsize'=>100000'th'=>0),
);
                
//make attachtypes global to be called from inside function                
$jfbthreads = array();
$jfbattachs = array();
$vbusers = array();
$vbposts = array();
$vbattachdatas = array();
$vbattach 'temp/';
$vbattachthumb 'temp/';
$now time();

//connect to joomla database
connect_oldwebsite();

//------------------------------------------------------------------
//retrieve attachment info from fireboard

$sql0 "SELECT * FROM jos_fb_attachments";
$res0 mysql_query($sql0)  or die('Invalid query: ' mysql_error());

while(
$row0 mysql_fetch_object($res0)){
array_push($jfbattachs, array( 'mesid'=>$row0->mesid,
'filelocation'=>$row0->filelocation,
));

//end while

//retrieve fireboard thread info
//will not need all the info, just the thread id to compare with importedthreadid in vbulletin
    
    
foreach($jfbattachs as $i=>$value){
$sql00 "SELECT * FROM jos_fb_messages WHERE id = ".$jfbattachs[$i]['mesid']." ";
    
    
$res00 mysql_query($sql00)  or die('Invalid query: ' mysql_error());
            
if(
$res00){
while(
$row00 mysql_fetch_array($res00) ){
    
array_push($jfbthreads,array(    'id'=>$row00['id'],
    
'thread'=>$row00['thread'] ,
    
'catid'=>$row00['catid'] ,
    
'name'=>$row00['name'] ,
    
'userid'=>$row00['userid'] ,
    
'email'=>$row00['email'] ,
    
'subject'=>$row00['subject'] ,
    
'time'=>$row00['time'] ,
    
'ip'=>$row00['ip'] ,                        
    ));
}
//end while
//end if
//end foreach
    
//-----------------------------------------
// About Attachment handling
// vBulletin stores the attachments in the filedata table; attachment is stored as blob
// and if the MIME-type returns as image generates a thumbnail with max width of 100px;
// an hash of the file and of the thumbnail is generated and sizes are stored if the 
// format is recognized
// attachment linkers are stored in the table attachment: an attachment id, contenttypeid
// of the linker node (cms article=18, 1 for a thread post, more refer to the table contenttype)
// the uploader userid, the contentid(thread id if post, nodeid if from cms or blog)
// then the posthash (not used for threads), filename, caption (not used), reportthreadid,
// displayorder [0], importattachmentid (from impex)
// other datas on the attachmentcategoryuser table:
// filedataid, userid, categoryid,filename,dateline
// tables attachmentcategory and attachmentpermission are not used for threads
// Also, in the table post the attach value is increased
// newly found: if an attachment is inline, inside the table attachmentviews appears the id of the online attachment.
//----------------------------------------

//connect to vbulletin
connect_vbcms();    

//retrieve required thread information from the thread table
    
    
foreach($jfbthreads as $i=>$value){
    
$sql1 "SELECT * FROM post WHERE importpostid = ".$jfbthreads[$i]['id']." ";
$res1 mysql_query($sql1) or die('Invalid query: ' mysql_error());

if(
$res1){
while(
$row1 mysql_fetch_object($res1)){
array_push$vbposts, array(     'postid'=>$row1->postid ,
'threadid'=>$row1->threadid ,
'parentid'=>$row1->parentid ,
'username'=>$row1->username ,
'userid'=>$row1->userid ,
'title'=>$row1->title ,
'dateline'=>$row1->dateline ,
'pagetext'=>$row1->pagetext ,
'allowsmilie'=>$row1->allowsmilie ,
'showsignature'=>$row1->showsignature ,
'ipaddress'=>$row1->ipaddress ,
'iconid'=>$row1->iconid ,
'visible'=>$row1->visible ,
'attach'=>$row1->attach ,
'infraction'=>$row1->infraction ,
'reportthreadid'=>$row1->reportthreadid ,
'htmlstate'=>$row1->htmlstate ,
'importthreadid'=>$row1->importthreadid ,
'importpostid'=>$row1->importpostid ,
));
//end while row1
//end if res1
    
//end foreach jfbthreads
    
//time to start populate
//First of all filedata with the file content,
//second the linkers in the table attachment, then attachmentcategoryuser table,
//and at last set a flag in the correct post table and update the counter in the thread table

$querycnt 0;
foreach (
$vbposts as $i=>$value){
            
//========================================
//parse jfbattachs - filter paths to be read from the database properly
    
foreach($jfbattachs as $k=>$value){

if(
$jfbattachs[$k]['mesid'] == $vbposts[$i]['importpostid']){
print 
'<b> k = '.$k.'</b><br/>';
    
if(
stristr($jfbattachs[$k]['filelocation'],'fbfiles') != false){
    
$attachmentpath str_ireplace('/home/oldwebsite/public_html/''' $jfbattachs[$k]['filelocation']);
//end if

if(stristr($jfbattachs[$k]['filelocation'],'com_fireboard') != false){
    
$attachmentpath str_ireplace('/web/htdocs/www.oldwebsitelia.org/home/components/com_fireboard/''' $jfbattachs[$k]['filelocation']);
//end if                

if(stristr($jfbattachs[$k]['filelocation'],'oldwebsite/public') != false){
    
$attachmentpath str_ireplace('/home/oldwebsite/public_html/components/com_fireboard/''' $jfbattachs[$k]['filelocation']);
//end if

if(stristr($jfbattachs[$k]['filelocation'],'oldwebsite/public_html/images') != false){
    
$attachmentpath str_ireplace('/home/oldwebsite/public_html/''' $jfbattachs[$k]['filelocation']);
//end if
    
print 'id: '.$vbposts[$i]['postid'].' - oldid: '.$vbposts[$i]['importpostid'].' - path - old: '.$jfbattachs[$k]['filelocation'].' - new: '.$attachmentpath.'<br/>';

$fnarray explode('/',$attachmentpath);
$filename $fnarray[(count($fnarray))-1];
$fnnoext substr($filename,0,-4);
$fnext substr($filename,-3);

$retrievefile BASE_ATT_PATH $attachmentpath;
        
print
'retrievefile: '.$retrievefile.'<br/>importedfile: '.$importedfile.'<br/>';
            
//==========================================
//lets start with extensions, treat it differently from archives
$isImage 0;


switch(
strtolower($fnext)){
case 
'gif':
$file1 imagecreatefromgif($retrievefile);
$isImage 1;
$imgPar retrieveImgParams('gif',$attachtypes);
break;

case 
'jpeg':
$file1 imagecreatefromjpeg($retrievefile);
$isImage 1;
$imgPar retrieveImgParams('jpeg',$attachtypes);
break;

case 
'jpg':
$file1 imagecreatefromjpeg($retrievefile);
$isImage 1;
$imgPar retrieveImgParams('jpg',$attachtypes);
break;

case 
'jpe':
$file1 imagecreatefromjpeg($retrievefile);
$isImage 1;
$imgPar retrieveImgParams('jpe',$attachtypes);
break;

case 
'txt':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('txt',$attachtypes);
break;

case 
'htm':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('htm',$attachtypes);
break;

case 
'html':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('html',$attachtypes);
break;

case 
'png':
$file1 imagecreatefrompng($retrievefile);
$isImage 1;
$imgPar retrieveImgParams('png',$attachtypes);
break;

case 
'doc':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('doc',$attachtypes);
break;

case 
'pdf':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('pdf',$attachtypes);
break;

case 
'bmp':
$file1 imagecreatefrombmp($retrievefile);
$isImage 1;
$imgPar retrieveImgParams('bmp',$attachtypes);
break;

case 
'psd':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('psd',$attachtypes);
break;

case 
'zip':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('zip',$attachtypes);
break;

case 
'rar':
$file1 file_get_contents($retrievefile);
$isImage 0;
$imgPar retrieveImgParams('rar',$attachtypes);
break;

}    
//end switch
                
                
if ($isImage == 1){
print 
'the file '.$retrievefile.' <u>is an image</u> (or so i think)<br/>';

$maxsizeW $imgPar['maxW'];
$maxsizeH $imgPar['maxH'];
$hasThumb $imgPar['th'];
$mimeType $imgPar['mimetype'];
$imgext $imgPar['ext'];

//determine sizes
$imgsize getimagesize($retrievefile);
$img1w $imgsize[0];
$img1h $imgsize[1];
$ratio round($img1w/$img1h,2);

//determine size for avatar
$img1w = ($img1w >$maxsizeW ) ? $maxsizeW $img1w;
$img1h = ($img1h >$maxsizeH ) ? $maxsizeH $img1h;

//determine size for thumbnail
$img2w = ($img1w >100 ) ? 100 $img1w;
$img2h =  round($img2w/$ratio); //rounded width/ratio
//create avatar pic
$attach imagecreatetruecolor($img1w,$img1h);
imagecopyresampled($attach,$file1,0,0,0,0,$img1w,$img1h,$img1w,$img1h); 
    
//create avatar thumbnail
if($hasThumb == 1){    
$attachthumb imagecreatetruecolor($img2w,$img2h);
imagecopyresampled($attachthumb,$file1,0,0,0,0,$img2w,$img2h,$img1w,$img1h); 
}
// end if hasThumb
            
    
//start buffering        
ob_start();        
switch(
strtolower($imgext)){
case 
'gif':
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
imagegif($attach$imgrendered);
break;

case 
'jpeg':
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
imagejpeg($attach,$imgrendered,80);
break;

case 
'jpg':
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
imagejpeg($attach,$imgrendered,80);
break;

case 
'jpe':
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
imagejpeg($attach,$imgrendered,80);
break;

case 
'png':
$imgrendered $vbattach.$fnnoext.'.'.$imgext;
imagepng($attach,$imgrendered);
break;

case 
'bmp':
$imgrendered $vbattach.$fnnoext.'.png';
//store it as png since bmp support in GD is non existent
imagepng($attach,$imgrendered);
break;
    
//end switch $ext

    
ob_end_clean();
    
if(
$hasThumb == 1){ 

ob_start();        

//all thumbnails are stored as png
$thumbrendered $vbattachthumb.$fnnoext."_thu.jpg";
imagejpeg($attachthumb,$thumbrendered,80);

ob_end_clean();
}
//end if hasThumb
    
//end if is Image
if($isImage == 0){        

$img1w 0;
$img1h 0;
$img2w 0;
$img2h 0;
$mimeType $imgPar['mimetype'];
$imgext $imgPar['ext'];
$hasThumb 0;

//gotta copy files in temp/ 

ob_start();

$imgrendered $vbattach.$fnnoext.'.'.$imgext;
file_put_contents($imgrendered$file1);

ob_end_clean();
            
//end if is Image
            
//===========================================
// process the file        
// start with storing the pic in the filedata table        
    
$myattach addslashes(file_get_contents($imgrendered));
$myattachfilesize filesize($imgrendered);
$myattachhash md5_file($imgrendered);
if(
$hasThumb == 1){
    
$myattachthumb addslashes(file_get_contents($thumbrendered));
    
$myattachthumbfilesize filesize($thumbrendered);
} else {
    
$myattachthumb null;
    
$myattachthumbfilesize 0;
    
$img2w 0;
    
$img2h 0;
//end if
            
//prepare the mysql query for filedata
//new: since have the problem that same attachment can be added to the post more times, will
//check that the same file is not already present
    
$sql11 "INSERT INTO filedata    (    filedataid,
userid,
dateline,
thumbnail_dateline,
filedata,
filesize,
filehash,
thumbnail,
thumbnail_filesize,
extension,
refcount,
width,
height,
thumbnail_width,
thumbnail_height
) VALUES (
NULL,
"
.$vbposts[$i]['userid'].",
"
.$now.",
"
.$now.",
'"
.$myattach."',
"
.$myattachfilesize.",
'"
.$myattachhash."',
'"
.$myattachthumb."',
"
.$myattachthumbfilesize.",
'"
.$imgext."',
1,
"
.$img1w.",
"
.$img1h.",
"
.$img2w.",
"
.$img2h."
)"
;

//dummy query to display what is going on                                    
$sql11b "INSERT INTO filedata    (    filedataid,
userid,
dateline,
thumbnail_dateline,
filedata,
filesize,
filehash,
thumbnail,
thumbnail_filesize,
extension,
refcount,
width,
height,
thumbnail_width,
thumbnail_height
) VALUES (
NULL,
"
.$vbposts[$i]['userid'].",
"
.$now.",
"
.$now.",
'[attachbinary]',
"
.$myattachfilesize.",
'"
.$myattachhash."',
'[thumbbinary]',
"
.$myattachthumbfilesize.",
'"
.$imgext."',
1,
"
.$img1w.",
"
.$img1h.",
"
.$img2w.",
"
.$img2h."
)"
;
    
@
fclose($imgrendered); 
if(
$hasThumb == 1){
    @
fclose($thumbrendered); 
}
    
print 
'sql11 ='.$sql11b.'<br/>';    

if(
$mode == '1'){
    print 
'real insert<br/>';
    
$res11 mysql_query($sql11) or die('Invalid query: ' mysql_error());
}
    
printf("Records inserted: %d\n"mysql_affected_rows());
        
$filedataindex =     mysql_insert_id();

sleep(1);
    
//sql query for table attachment
//retrieve if there are already records linked to that post
//contenttypeid for posts is 1
//contentid is the post number

$sql12 "INSERT INTO attachment (    attachmentid,
contenttypeid,
contentid,
userid,
dateline,
filedataid,
state,
counter,
posthash,
filename,
caption,
reportthreadid,
settings,
displayorder,
importattachmentid
) VALUES (
NULL,
1,
"
.$vbposts[$i]['postid'].",
"
.$vbposts[$i]['userid'].",
"
.$now.",
"
.$filedataindex.",
'visible',
1,
'',
'"
.$fnnoext.'.'.$imgext."',
NULL,
0,
NULL,
0,
"
.$vbposts[$i]['importpostid']."
)"
;
                                    
print 
'sql12 ='.$sql12.'<br/>';    
if(
$mode == '1'){
print 
'real insert<br/>';
$res12 mysql_query($sql12) or die('Invalid query: ' mysql_error());
}
printf("Records inserted: %d\n"mysql_affected_rows());
$attachmentid mysql_insert_id();
        
//    sql query for attachmentcategoryuser
    
$sql13 "INSERT INTO attachmentcategoryuser (    filedataid,
userid,
categoryid,
filename,
dateline
)    VALUES (
"
.$filedataindex.",
"
.$vbposts[$i]['userid'].",
0,
'"
.$fnnoext.'.'.$imgext."',
"
.$now."
)"
;

print 
'sql13 ='.$sql13.'<br/>';    
if(
$mode == '1'){
print 
'real insert<br/>';
$res13 mysql_query($sql13) or die('Invalid query: ' mysql_error());
}
printf("Records inserted: %d\n"mysql_affected_rows());

//and at last fix the post table updating the attachment number.
//first get the content of the pagetext

$sql140 "SELECT attach FROM post WHERE postid = ".$vbposts[$i]['postid']." ";
$res140 mysql_query($sql140);

while(
$row140 mysql_fetch_array($res140)){
$numattach $row140['attach'];
}
//end while

$numattach+=1;

$sql14 "UPDATE post SET attach = "$numattach ." WHERE postid = ".$vbposts[$i]['postid']." ";

print 
'sql14 ='.$sql14.'<br/>';    
if(
$mode == '1'){
    print 
'real insert<br/>';
    
$res14 mysql_query($sql14) or die('Invalid query: ' mysql_error());
}
printf("Records inserted: %d\n"mysql_affected_rows());
    
if(
$querycnt<50){
$querycnt++;
} else {
print 
'sleep<br/>';
//    sleep(5);
$querycnt 0;
}

//end if jfbattachs
//end foreach jfbattachs
//end foreach vbposts

//===================================
//imagecreatefrombmp function from php.net since GD does not support bmp directly

function imagecreatefrombmp($p_sFile){
//    Load the image into a string
$file    =    fopen($p_sFile,"rb");
$read    =    fread($file,10);
while(!
feof($file)&&($read<>""))
    
$read    .=    fread($file,1024);

$temp    =    unpack("H*",$read);
$hex    =    $temp[1];
$header    =    substr($hex,0,108);

//    Process the header
//    Structure: http://www.fastgraph.com/help/bmp_header_format.html
if (substr($header,0,4)=="424d")
{
//    Cut it in parts of 2 bytes
$header_parts str_split($header,2);
//    Get the width 4 bytes
$width hexdec($header_parts[19].$header_parts[18]);
//    Get the height 4 bytes
$height hexdec($header_parts[23].$header_parts[22]);
//    Unset the header params
unset($header_parts);
}

//    Define starting X and Y
$x 0;
$y 1;

//    Create newimage
$image imagecreatetruecolor($width,$height);

//    Grab the body from the image
$body substr($hex,108);

//    Calculate if padding at the end-line is needed
//    Divided by two to keep overview.
//    1 byte = 2 HEX-chars
$body_size = (strlen($body)/2);
$header_size = ($width*$height);

//    Use end-line padding? Only when needed
$usePadding = ($body_size>($header_size*3)+4);

// Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption
// Calculate the next DWORD-position in the body
for ($i=0;$i<$body_size;$i+=3)
{
//    Calculate line-ending and padding
if ($x>=$width)
{
// If padding needed, ignore image-padding
// Shift i to the ending of the current 32-bit-block
if ($usePadding)
    
$i += $width%4;

// Reset horizontal position
$x 0;

// Raise the height-position (bottom-up)
$y++;

// Reached the image-height? Break the for-loop
if ($y>$height)
    break;
}

// Calculation of the RGB-pixel (defined as BGR in image-data)
// Define $i_pos as absolute position in the body
$i_pos $i*2;
$r hexdec($body[$i_pos+4].$body[$i_pos+5]);
$g hexdec($body[$i_pos+2].$body[$i_pos+3]);
$b hexdec($body[$i_pos].$body[$i_pos+1]);

// Calculate and draw the pixel
$color imagecolorallocate($image,$r,$g,$b);
imagesetpixel($image,$x,$height-$y,$color);

// Raise the horizontal position
$x++;
}
// Unset the body / free the memory
unset($body);

// Return image-object
return $image;
//end function 
    
//=========================================
//function that parse the attachtypes array and return the values for the file format

function retrieveImgParams($type,$attachtypes){

foreach (
$attachtypes as $i=>$value){
if(
$attachtypes[$i]['ext'] == $type){
return array(    
'ext'=> $attachtypes[$i]['ext'],
'mimetype'=> $attachtypes[$i]['mimetype'],
'maxW'=> $attachtypes[$i]['maxW'],
'maxH'=> $attachtypes[$i]['maxH'],
'maxsize'=> $attachtypes[$i]['maxsize'],
'th'=> $attachtypes[$i]['th'],
);
//end if
}//end foreach
//end function 
Reply With Quote
  #3  
Old 07-15-2013, 04:41 AM
loxone loxone is offline
 
Join Date: Mar 2013
Posts: 1
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

thanks man for posting this
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 07:34 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04394 seconds
  • Memory Usage 2,738KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (2)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (3)post_thanks_box
  • (3)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (3)post_thanks_postbit_info
  • (3)postbit
  • (3)postbit_onlinestatus
  • (3)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete