This tutorial will outline the steps needed to integrate your vBulletin 3.5.X and Menalto Gallery 2.1 installations. The original thread located here has become a little too scattered, and since it's original focus was on the Gallery 2.0 and vBulletin 3.0 series, I think it'd be beneficial to start this new thread so that the information is more easily found for the 3.5.X and 2.1 series.
Before we begin, you should be aware that this tutorial assumes that you'll be placing your gallery in the root directory for your forums. My directory structure looks a little like this:
public_html/Vbulletin Files
and
public_html/gallery2/Gallery Files
As long as your gallery folder is located within your root vBulletin directory, this should work just fine.
Step 1: Install Menalto Gallery 2.1. Remember to upload the "gallery2" folder INSIDE your root vBulletin directory!
Step 2:
Create a new file containing the following, and save it as gallery2.php:
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(
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'] = 0 ? '' : $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)
{
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) {
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();
And that's basically it! Your gallery should now be accessable via www.yoursite.com/gallery2.php or www.yoursite.com/forums/gallery2.php (depending on how you have it set up).
You can achieve further integration by using johnmont's plugins which will:
Delete users from the Gallery when you delete them from the vBulletin control panel.
Update user information in the gallery when they change their information in the User CP.
John has given me permission to post them The attached gallery-plugins.xml file will create two new plugins called Delete Gallery User and Update Gallery User. You'll need to edit both of these plugins after installation and change
(it's the very first line in both of them) to match your site setup.
Hopefully this tutorial sparks a little more interest in this area and we can get some additional people contributing solutions to achieve tighter integration :banana:
As the integration progresses, I'll update this thread to keep everything together and accessable.
No problem I had a tough time getting this to work because it was so spread out, and primarily had to do with the older versions... A huge thanks goes to johnmont for helping me through it and for providing his excellent coding.
No problem I had a tough time getting this to work because it was so spread out, and primarily had to do with the older versions... A huge thanks goes to johnmont for helping me through it and for providing his excellent coding.
yea, it was kinda a pain since the old thread died off with support. but alas, we got it to work and now that somebody who knows PHP(Johnmount) is on this again, it might go places
Quote:
Originally Posted by albertsch9
Can someone help me?
The gallery2.php gives me only a white Page.
you need to edit the gallery2.php(or whatever the name) files referance to the VBB template name.
did that make sence?
you created a VBB template called "X"(most likley Gallery). now you need to go into yout gallery2.php file and edit the referances that say "Y"(most likley Gallery2 if you copied Brent's code ) to say "X".. that better
you need to edit the gallery2.php(or whatever the name) files referance to the VBB template name.
did that make sence?
you created a VBB template called "X"(most likley Gallery). now you need to go into yout gallery2.php file and edit the referances that say "Y"(most likley Gallery2 if you copied Brent's code ) to say "X".. that better
I created a template named gallery2 the gallery2.php calls the template gallery2 and it dosent work
I tried messing around with a directory structure like that a while back. You'd have to make sure that every reference to an external vBulletin file like
PHP Code:
require_once('./global.php');
was changed to something like
PHP Code:
require_once('../home/global.php');
The problem I ran in to was that it expected files referenced by global.php to be located in places that they aren't...
Here is something helpful when you are dealing with problems like this. In whatever file you are using to call global.php (in this case a gallery file in another directory), use something like this:
PHP Code:
// Full path to vBulletin
define('CWD', '/path/to/html/vBulletin');
// Get some custom functions from vBulletin directory
require_once(CWD . '/includes/functions_loo.php');
The CWD constant will insure that all calls to vBulletin files point to the right directory, even the ones vBulletin makes on its own when you include global.php. Just make sure you always use the constant in the require_once(); function and everything should work correctly (unless you set the wrong path!).
Here is something helpful when you are dealing with problems like this. In whatever file you are using to call global.php (in this case a gallery file in another directory), use something like this:
PHP Code:
// Full path to vBulletin define('CWD', '/path/to/html/vBulletin');
// Get some custom functions from vBulletin directory require_once(CWD . '/includes/functions_loo.php');
The CWD constant will insure that all calls to vBulletin files point to the right directory, even the ones vBulletin makes on its own when you include global.php. Just make sure you always use the constant in the require_once(); function and everything should work correctly (unless you set the wrong path!).
Hope that helps.
im not 100% why
PHP Code:
global.php
is called, but i assume it is to get VBB to integrate correctly. but what is