vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3 Articles (https://vborg.vbsupport.ru/forumdisplay.php?f=187)
-   -   Menalto's G2 integration into VB3 (https://vborg.vbsupport.ru/showthread.php?t=80478)

SilVert 03-20-2006 04:36 PM

Quote:

Originally Posted by johnmont
I got the integration working (somewhat) OK with 3.5.4 and gallery 2.0.4. But I took the plunge and installed 2.1RC and got the following error message from php:

Fatal error: Call to undefined function: iserror() in ~/forums/gallery.php on line 77

Where is the function isError() and is it gone from 2.1 as opposed to 2.0.4?
I did a multi file text search and can't find a function isError() in any of the files. Any suggestions would be appreciated.

(i've also posted over at the gallery2 website)

i had the same problem... i had to remove the CVS version i was using and reinstall the latest stable build. 2.1 i think is the latest.

took me a month or so to figure this out finally.

SilVert 03-21-2006 07:59 PM

nevermind... jsut saw your post and ?Variable? fixed the issue. man, whish i did that a month or so ago ;)

now, sombody get that stupid auto group adition to work! ;)

fringehead 03-26-2006 08:55 PM

So you have upgraded and are running 2.1? It's working without any issues?
I am going to give it a try. Definitely backing up the codebase, database and config file in case I need to revert to the old version.

I'll let you know how it goes!

Sean

Brent H 03-27-2006 03:55 AM

Anyone have Gallery 2.1 working with 3.5.4?

Here is my config file with a couple changes as outlined in the integration notes on the Gallery site:
PHP Code:

<?php 

// ####################### SET PHP ENVIRONMENT ########################### 
error_reporting(E_ALL & ~E_NOTICE); 

// #################### DEFINE IMPORTANT CONSTANTS ####################### 
define('NO_REGISTER_GLOBALS'1); 
define('THIS_SCRIPT''gallery2'); // change this depending on your filename 

// ################### PRE-CACHE TEMPLATES AND DATA ###################### 
// get special phrase groups 
$phrasegroups = array( 

); 

// get special data templates from the datastore 
$specialtemplates = array( 
     
); 

// pre-cache templates used by all actions 
$globaltemplates = array( 
    
'gallery2'
); 

// pre-cache templates used by specific actions 
$actiontemplates = array( 

); 

// ######################### REQUIRE BACK-END ############################ 
require_once('./global.php'); 

// ####################################################################### 
// ######################## START MAIN SCRIPT ############################ 
// ####################################################################### 

$navbits = array(); 
$navbits[$parent] = 'Gallery G2'

$navbits construct_navbits($navbits); 
eval(
'$navbar = "' fetch_template('navbar') . '";'); 

// ####################################################################### 
// ###################### Begin G2 integration code ######################
// ####################################################################### 
$data runGallery();
$data['title'] = (isset($data['title']) && !empty($data['title'])) ? $data['title'] : 'Gallery';

function 
runGallery() {
    global 
$vbulletin$userinfo;
        require_once(
'./gallery2/embed.php');
    
        
$data = array();
    
    
// if anonymous user, set g2 activeUser to null
        
$uid $vbulletin->userinfo['userid'] = '' $vbulletin->userinfo['userid']; 
 
        
// initiate G2 
        // you need to edit the following 4 lines to suite your VB3/G2 install!!!
        // this is setup for a install that looks like:
        //     public_html/VB/<vb files>
        //     public_html/gallery2/<gallery2 files>
        // and also setup for a VB3 tempalte name of 'gallery2'. if you have any
        // differences, make those changes here!
        // you might need to change 'loginRedirect' if you have your VB3 setup to 
        // where index.php is not the root page of VB3... i.e. if you've changed it
        // to forums.php or something of the like.
        
$ret GalleryEmbed::init(array('embedUri' => '/gallery2.php',
                        
'g2Uri ' => '/gallery2/',
                    
'loginRedirect' => 'index.php',
                    
'activeUserId' => $uid));
                        
    if (
$ret->isError()) 
        { 
           if (
$ret->getErrorCode() & ERROR_MISSING_OBJECT
           { 
             
// check if there's no G2 user mapped to the activeUserId 
             
$ret GalleryEmbed::isExternalIdMapped($uid'GalleryUser'); 
             if (
$ret->isError() && ($ret->getErrorCode() & ERROR_MISSING_OBJECT)) 
             { 
                 
// user not mapped, map create G2 user now 
                 // Get Arguments for the new user: 
                 
$args['fullname']     =   $vbulletin->userinfo['username']; 
                 
$args['username']    = $vbulletin->userinfo['username']; 
                 
$args['hashedpassword'] =   $vbulletin->userinfo['password']; 
                 
$args['hashmethod'] =    'md5'
                 
$args['email']       =   $vbulletin->userinfo['email']; 
                 
$args['language']   =   $vbulletin->userinfo['lang_code']; 
                 
$args['creationtimestamp']   =   $vbulletin->userinfo['joindate']; 
                  
                 
$retcreate GalleryEmbed :: createUser($uid$args); 
                 if (!
$retcreate->isSuccess()) 
                 { 
                    echo 
'<HR>line: '.__LINE__.', Failed to create G2 user with extId ['.$uid.']. Here is the error message from G2: <br />'.$retcreate->getAsHtml(); 
                    return 
false
                 } 
                                
$ret GalleryEmbed::checkActiveUser($uid); 
                if (
$ret->isError()) { 
                    print 
$ret->getAsHtml(); 
                    return 
false
                } 
             } 
             else 
             { 
                 echo 
'<HR>line: '.__LINE__.', G2 did not return a success status. Here is the error message from G2: <br />'.$ret->getAsHtml(); 
                      return 
false;
                         } 
         } 
         else 
         { 
                         echo 
'<HR>line: '.__LINE__.', G2 did not return a success status. Here is the error message from G2: <br />'.$ret->getAsHtml(); 
                  return 
false;
                 } 
       } 

    
// user interface: disable sidebar in G2 and get it as separate HTML to put it into a block
    //GalleryCapabilities::set('showSidebar', false);

    // handle the G2 request
    
$g2moddata GalleryEmbed::handleRequest();
  
    
// show error message if isDone is not defined
    
if (!isset($g2moddata['isDone'])) {
      
$data['bodyHtml'] = 'isDone is not defined, something very bad must have happened.';
      return 
$data;
    }
    
// die if it was a binary data (image) request
    
if ($g2moddata['isDone']) {
      exit; 
/* uploads module does this too */
    
}
   
    
// put the body html from G2 into the xaraya template 
    
$data['bodyHtml'] = isset($g2moddata['bodyHtml']) ? $g2moddata['bodyHtml'] : '';

    
// get the page title, javascript and css links from the <head> html from G2
    
$title ''$javascript = array();    $css = array();
 
    if (isset(
$g2moddata['headHtml'])) {
      list(
$data['title'], $css$javascript) = GalleryEmbed::parseHead($g2moddata['headHtml']);
      
$data['headHtml'] = $g2moddata['headHtml'];
    }
    
    
/* Add G2 javascript  */
    
if (!empty($javascript)) {
      foreach (
$javascript as $script) {
         
$data['javascript'] .= "\n".$script;
      }
    }

    
/* Add G2 css  */
    
if (!empty($css)) {
      foreach (
$css as $style) {
         
$data['css'] .= "\n".$style;
      }
    }

    
// sidebar block
    
if (isset($g2moddata['sidebarHtml']) && !empty($g2moddata['sidebarHtml'])) {
      
$data['sidebarHtml'] = $g2moddata['sidebarHtml'];
    }
    
    return 
$data;

// ####################################################################### 
// ####################### End G2 integration code #######################
// ####################################################################### 

eval('print_output("' fetch_template('gallery2') . '");'); 

?>

I keep getting this error:
Fatal error: Call to undefined function: iserror() in /home/paranorm/public_html/gallery2.php on line 74

Not sure what to do....

SilVert 03-27-2006 07:05 PM

Quote:

Originally Posted by Brent H
Anyone have Gallery 2.1 working with 3.5.4?

Here is my config file with a couple changes as outlined in the integration notes on the Gallery site:
PHP Code:

<?php 

// ####################### SET PHP ENVIRONMENT ########################### 
error_reporting(E_ALL & ~E_NOTICE); 

// #################### DEFINE IMPORTANT CONSTANTS ####################### 
define('NO_REGISTER_GLOBALS'1); 
define('THIS_SCRIPT''gallery2'); // change this depending on your filename 

// ################### PRE-CACHE TEMPLATES AND DATA ###################### 
// get special phrase groups 
$phrasegroups = array( 

); 

// get special data templates from the datastore 
$specialtemplates = array( 
     
); 

// pre-cache templates used by all actions 
$globaltemplates = array( 
    
'gallery2'
); 

// pre-cache templates used by specific actions 
$actiontemplates = array( 

); 

// ######################### REQUIRE BACK-END ############################ 
require_once('./global.php'); 

// ####################################################################### 
// ######################## START MAIN SCRIPT ############################ 
// ####################################################################### 

$navbits = array(); 
$navbits[$parent] = 'Gallery G2'

$navbits construct_navbits($navbits); 
eval(
'$navbar = "' fetch_template('navbar') . '";'); 

// ####################################################################### 
// ###################### Begin G2 integration code ######################
// ####################################################################### 
$data runGallery();
$data['title'] = (isset($data['title']) && !empty($data['title'])) ? $data['title'] : 'Gallery';

function 
runGallery() {
    global 
$vbulletin$userinfo;
        require_once(
'./gallery2/embed.php');
    
        
$data = array();
    
    
// if anonymous user, set g2 activeUser to null
        
$uid $vbulletin->userinfo['userid'] = '' $vbulletin->userinfo['userid']; 
 
        
// initiate G2 
        // you need to edit the following 4 lines to suite your VB3/G2 install!!!
        // this is setup for a install that looks like:
        //     public_html/VB/<vb files>
        //     public_html/gallery2/<gallery2 files>
        // and also setup for a VB3 tempalte name of 'gallery2'. if you have any
        // differences, make those changes here!
        // you might need to change 'loginRedirect' if you have your VB3 setup to 
        // where index.php is not the root page of VB3... i.e. if you've changed it
        // to forums.php or something of the like.
        
$ret GalleryEmbed::init(array('embedUri' => '/gallery2.php',
                        
'g2Uri ' => '/gallery2/',
                    
'loginRedirect' => 'index.php',
                    
'activeUserId' => $uid));
                        
    if (
$ret->isError()) 
        { 
           if (
$ret->getErrorCode() & ERROR_MISSING_OBJECT
           { 
             
// check if there's no G2 user mapped to the activeUserId 
             
$ret GalleryEmbed::isExternalIdMapped($uid'GalleryUser'); 
             if (
$ret->isError() && ($ret->getErrorCode() & ERROR_MISSING_OBJECT)) 
             { 
                 
// user not mapped, map create G2 user now 
                 // Get Arguments for the new user: 
                 
$args['fullname']     =   $vbulletin->userinfo['username']; 
                 
$args['username']    = $vbulletin->userinfo['username']; 
                 
$args['hashedpassword'] =   $vbulletin->userinfo['password']; 
                 
$args['hashmethod'] =    'md5'
                 
$args['email']       =   $vbulletin->userinfo['email']; 
                 
$args['language']   =   $vbulletin->userinfo['lang_code']; 
                 
$args['creationtimestamp']   =   $vbulletin->userinfo['joindate']; 
                  
                 
$retcreate GalleryEmbed :: createUser($uid$args); 
                 if (!
$retcreate->isSuccess()) 
                 { 
                    echo 
'<HR>line: '.__LINE__.', Failed to create G2 user with extId ['.$uid.']. Here is the error message from G2: <br />'.$retcreate->getAsHtml(); 
                    return 
false
                 } 
                                
$ret GalleryEmbed::checkActiveUser($uid); 
                if (
$ret->isError()) { 
                    print 
$ret->getAsHtml(); 
                    return 
false
                } 
             } 
             else 
             { 
                 echo 
'<HR>line: '.__LINE__.', G2 did not return a success status. Here is the error message from G2: <br />'.$ret->getAsHtml(); 
                      return 
false;
                         } 
         } 
         else 
         { 
                         echo 
'<HR>line: '.__LINE__.', G2 did not return a success status. Here is the error message from G2: <br />'.$ret->getAsHtml(); 
                  return 
false;
                 } 
       } 

    
// user interface: disable sidebar in G2 and get it as separate HTML to put it into a block
    //GalleryCapabilities::set('showSidebar', false);

    // handle the G2 request
    
$g2moddata GalleryEmbed::handleRequest();
  
    
// show error message if isDone is not defined
    
if (!isset($g2moddata['isDone'])) {
      
$data['bodyHtml'] = 'isDone is not defined, something very bad must have happened.';
      return 
$data;
    }
    
// die if it was a binary data (image) request
    
if ($g2moddata['isDone']) {
      exit; 
/* uploads module does this too */
    
}
   
    
// put the body html from G2 into the xaraya template 
    
$data['bodyHtml'] = isset($g2moddata['bodyHtml']) ? $g2moddata['bodyHtml'] : '';

    
// get the page title, javascript and css links from the <head> html from G2
    
$title ''$javascript = array();    $css = array();
 
    if (isset(
$g2moddata['headHtml'])) {
      list(
$data['title'], $css$javascript) = GalleryEmbed::parseHead($g2moddata['headHtml']);
      
$data['headHtml'] = $g2moddata['headHtml'];
    }
    
    
/* Add G2 javascript  */
    
if (!empty($javascript)) {
      foreach (
$javascript as $script) {
         
$data['javascript'] .= "\n".$script;
      }
    }

    
/* Add G2 css  */
    
if (!empty($css)) {
      foreach (
$css as $style) {
         
$data['css'] .= "\n".$style;
      }
    }

    
// sidebar block
    
if (isset($g2moddata['sidebarHtml']) && !empty($g2moddata['sidebarHtml'])) {
      
$data['sidebarHtml'] = $g2moddata['sidebarHtml'];
    }
    
    return 
$data;

// ####################################################################### 
// ####################### End G2 integration code #######################
// ####################################################################### 

eval('print_output("' fetch_template('gallery2') . '");'); 

?>

I keep getting this error:
Fatal error: Call to undefined function: iserror() in /home/paranorm/public_html/gallery2.php on line 74

Not sure what to do....

looks like you are having the same problem as me.... i think the IsError() is a invalid path somewhere... i have yet to find it...

Brent H 03-28-2006 04:27 AM

With some help from a member over on Menalto's site, I've got Gallery 2.1 and vBulletin 3.5.4 working together.

The only problem I've come across is when the user first accesses the gallery (causing the gallery to create the new user) I get this error:

Code:

Fatal error: Call to a member function on a non-object in /home/paranorm/public_html/gallery2.php on line 96
If they refresh the page, the problem disappears and everything works perfectly.

Here is my gallery2.php file, updated to work with Gallery 2.1 and vBulletin 3.5.4.

PHP Code:

<?php

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS'1);
define('THIS_SCRIPT''gallery'); // change this depending on your filename

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array(

);

// get special data templates from the datastore
$specialtemplates = array(

);

// pre-cache templates used by all actions
$globaltemplates = array(
'gallery2',
);

// pre-cache templates used by specific actions
$actiontemplates = array(

);

// ######################### REQUIRE BACK-END ############################

require_once('./global.php');

// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################

$navbits = array();
$navbits[$parent] = 'Gallery';
error_reporting(E_ALL );

$navbits construct_navbits($navbits);
eval(
'$navbar = "' fetch_template('navbar') . '";');

// #######################################################################
// ###################### Begin G2 INTEGRATION CODE ######################
// #######################################################################

$data runGallery();
$data['title'] = (isset($data['title']) && !empty($data['title'])) ? $data['title'] : 'Gallery';

function 
runGallery() {
global 
$vbulletin$userinfo;
require_once(
'/home/paranorm/public_html/gallery2/embed.php');

$data = array();

// If it's an anonymous user, set the g2 activeUser to null
$uid $vbulletin->userinfo['userid'] = '' $vbulletin->userinfo['userid'];

// initiate G2
// You need to edit the following 4 lines to suit your VB3 & G2 installations
// This is set up for an install that looks like:
// public_html/VB/<vb files>
// public_html/gallery2/<gallery2 files>
// and also setup for a VB3 template name of 'gallery2'. If you have any
// differences, make those changes here!
// You might need to change 'loginRedirect' if you have your VB3 setup to
// where index.php is not the root page of VB3... Like if you've changed it
// to forums.php or something of the like.

$ret GalleryEmbed::init(array('embedUri' => '/gallery2.php',
'g2Uri' => 'http://www.paranormalis.com/gallery2/',
'loginRedirect' => 'index.php',
'activeUserId' => $uid));
if (
$ret)
{
if (
$ret->getErrorCode() & ERROR_MISSING_OBJECT)
{
// Check if there's no G2 user mapped to the activeUserId
$ret GalleryEmbed::isExternalIdMapped($uid'GalleryUser');
if (
$ret && ($ret->getErrorCode() & ERROR_MISSING_OBJECT))
{
// User not mapped, create G2 user now
// Get Arguments for the new user:
$args['fullname'] = $vbulletin->userinfo['username'];
$args['username'] = $vbulletin->userinfo['username'];
$args['hashedpassword'] = $vbulletin->userinfo['password'];
$args['hashmethod'] = 'md5';
$args['email'] = $vbulletin->userinfo['email'];
$args['language'] = $vbulletin->userinfo['lang_code'];
$args['creationtimestamp'] = $vbulletin->userinfo['joindate'];

$retcreate GalleryEmbed :: createUser($uid$args);
if (!
$retcreate->isSuccess())
{
echo 
'<HR>line: '.__LINE__.', Failed to create G2 user with extId ['.$uid.']. Here is the error message from G2: <br />'.$retcreate->getAsHtml();
return 
false;
}
$ret GalleryEmbed::checkActiveUser($uid);
if (
$ret->isError()) {
print 
$ret->getAsHtml();
return 
false;
}
}
else
{
echo 
'<HR>line: '.__LINE__.', G2 did not return a success status. Here is the error message from G2: <br />'.$ret->getAsHtml();
return 
false;
}
}
else
{
echo 
'<HR>line: '.__LINE__.', G2 did not return a success status. Here is the error message from G2: <br />'.$ret->getAsHtml();
return 
false;
}
}

// user interface: disable sidebar in G2 and get it as separate HTML to put it into a block
//GalleryCapabilities::set('showSidebar', true);

// handle the G2 request
$g2moddata GalleryEmbed::handleRequest();

// show error message if isDone is not defined
if (!isset($g2moddata['isDone'])) {
$data['bodyHtml'] = 'isDone is not defined, something very bad must have happened.';
return 
$data;
}
// die if it was a binary data (image) request
if ($g2moddata['isDone']) {
exit; 
/* uploads module does this too */
}

// put the body html from G2 into the xaraya template
$data['bodyHtml'] = isset($g2moddata['bodyHtml']) ? $g2moddata['bodyHtml'] : '';

// get the page title, javascript and css links from the <head> html from G2
$title ''$javascript = array(); $css = array();

if (isset(
$g2moddata['headHtml'])) {
list(
$data['title'], $css$javascript) = GalleryEmbed::parseHead($g2moddata['headHtml']);
$data['headHtml'] = $g2moddata['headHtml'];
}

/* Add G2 javascript */
if (!empty($javascript)) {
foreach (
$javascript as $script) {
$data['javascript'] .= "\n".$script;
}
}

/* Add G2 css */
if (!empty($css)) {
foreach (
$css as $style) {
$data['css'] .= "\n".$style;
}
}

// sidebar block
if (isset($g2moddata['sidebarHtml']) && !empty($g2moddata['sidebarHtml'])) {
$data['sidebarHtml'] = $g2moddata['sidebarHtml'];
}

return 
$data;
}
// #######################################################################
// ####################### End G2 integration code #######################
// #######################################################################

eval('print_output("' fetch_template('gallery2') . '");');

?>

Maybe someone here can shed some light on this error and help me get it working 100%...

SilVert 03-28-2006 05:57 PM

if you go into notepad, and hit ctrl-G then tell it to goto line 96.. what is on that line...

Brent H 03-28-2006 08:47 PM

PHP Code:

if ($ret->isError()) 

That's what's there, along with a bunch of other stuff associated with that line below it.

SilVert 03-29-2006 06:08 PM

Quote:

Originally Posted by Brent H
PHP Code:

if ($ret->isError()) 

That's what's there, along with a bunch of other stuff associated with that line below it.

ugh.. i hate that isError() BS... that is the exact error i am having... probobly was on the same line...

i alreayd have a user created(my username) from previous attempts and since i dotn haev to create that account again, the integration script runs fine... so the script is working other than that part. the isError() part is what i have been having issues with from day ?1?...

there is a post that ?joshmount? made over on teh G2 integration section, he did nto respond to me asking for more info as of yesterday afternoon. i wish i could find where this problem was comming from... such a PITA.. and since VBB is closed source, Valiant or anybody over on the G2 forums wont help too much, but they will help with the G2 related issues :) helpfull normaly to :)

alright, i MIGHT have fixed the isError() BS...

try going into your gallery admin panel. goto the mod rewrite/URL rewrite.. scroll to the bottom and uncheck the "Show Item", and "Download Item". after you hit save you will probobly get somethign saying that your integration file does not exist... that is fine... if you hit back and refresh teh page the settings will have taken(mod rewrite does nto work yet).

then attempt to display the page again. after you login make your user an admin, then i got another browser(i use firefix as my default, so IE is my test browser) and login as a bogus user... that is the best way to test IMO :)

let me knwo how it goes :)

johnmont 03-30-2006 02:42 AM

Figured it out guys. The error caused by: if ($ret->isError()) is caused -- among other things -- that if things go correctly when doing the embed, nothing is returned by the $ret= statements. So what you need to do is:

Change:
Code:

$retcreate = GalleryEmbed :: createUser($uid, $args);
if (!$retcreate->isSuccess())

To:
Code:

$retcreate = GalleryEmbed :: createUser($uid, $args);
if ($retcreate)


First, I believe that $retcreate->isSuccess() is no longer used. In the new paradigm of this version, if you do something and its successful, you get nothing returned back to $ret. Only when there is an error, then you get something back in $ret.

So my replacement says, "if you get something back"...which is essentially what the previous statment said: "if what you get back is not successful"


Change:
Code:

$ret = GalleryEmbed::checkActiveUser($uid);
if ($ret->isError()) {

To:
Code:

$ret = GalleryEmbed::checkActiveUser($uid);
if ($ret) {

Basically the same dealio. In the original, you were saying "if what is returned is an error then....". Now, this says "if you get anything back the...". And since you only get something back when there is an error, then its doing the same thing.


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

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02439 seconds
  • Memory Usage 1,984KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (5)bbcode_code_printable
  • (5)bbcode_php_printable
  • (3)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (1)pagenav_pagelinkrel
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete