Go Back   vb.org Archive > vBulletin Article Depository > Read An Article > vBulletin 3 Articles

Reply
 
Thread Tools
Menalto's G2 integration into VB3
whodah
Join Date: Feb 2004
Posts: 77

 

Show Printable Version Email this Page Subscription
whodah whodah is offline 04-23-2005, 10:00 PM

NOTE: Development for G2.1 and vB 3.5 is on this page: https://vborg.vbsupport.ru/showthread.php?t=111931

I was about to post this on Menalto's site until i realized that I'd be publicly posting VB3's code... A no-no!!! heh!

So, I'll post the instructions here, and then refer people to this post on how to do it! (obviously they'll have to log on w/ their licensed account to see it)

Ok, here's how to integrate menalto's G2 gallery into VB3.

Menalto's gallery is sweet.
Menalto's gallery is free.
Menalto's gallery is here: http://gallery.menalto.com/index.php



This works on my system of vBulletin 3.0.7 and Gallery 2 Holy Hand Grenade.

Known issues: VB3 has a password structure that consists of the user's password
plus the salt md5'ed together. It is not possible to strip out just the user's
password
. Thus, this script pushes the users's password plus salt from VB3 into
G2. The outcome - the standalone G2 passwords will not match *just* the user's
password! There is talks of looking into salt'ing in the future w/ G2
integration, but that's the dealio as of this integration technique... If you
are using G2 as 'embedded only', then game on, no worries. If not, then your
users will need to log on through the VB3 install to setup their session, then
can visit the G2 standalone if they wish...

Step 1 - create a new file named 'gallery2.php' as per this thread:
https://vborg.vbsupport.ru/showthread.php?t=62164
(thx Gary King!!!)

in that thread, the first box (the gallery2.php file), the contents will be (this is the section that contains the G2 embeded code which is available on Menalto's site... i'll update this thread w/ direct links once it's in place! *only* the G2 code is on their site, no VB3 code in accordance w/ the VB license agreement! ):
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( 
    'galley2', 
); 

// 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 $bbuserinfo;
        require_once('../gallery2/embed.php');
    
        $data = array();
    
    // if anonymous user, set g2 activeUser to null
        $uid = $bbuserinfo['userid'] = 0 ? '' : $bbuserinfo['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',
                    'embedPath' => '/VB',
                        'relativeG2Path' => '../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']     =   $bbuserinfo['username']; 
                 $args['username']    = $bbuserinfo['username']; 
                 $args['hashedpassword'] =   $bbuserinfo['password']; 
                 $args['hashmethod'] =    'md5'; 
                 $args['email']       =   $bbuserinfo['email']; 
                 $args['language']   =   $bbuserinfo['lang_code']; 
                 $args['creationtimestamp']   =   $bbuserinfo['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') . '");'); 

?>
in the above, you'll need to edit:
Code:
        $ret = GalleryEmbed::init(array('embedUri' => 'gallery2.php',
                    'embedPath' => '/VB',
                        'relativeG2Path' => '../gallery2',
                    'loginRedirect' => 'index.php',
                    'activeUserId' => $uid));
and
Code:
require_once('../gallery2/embed.php');
to suit your directory structure...

step 2 - creating the template
as per the same thread, https://vborg.vbsupport.ru/showthread.php?t=62164 (2nd code box) create a template named 'gallery2' (no tics) and in it, place the following code:
Code:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
 <head>
  $headinclude
  $data[headHtml]
 </head>
 <body>
  $header
  $navbar
  <table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
   <tr><td class="tcat">Gallery</td></tr>
   <tr><td class="alt1">$data[bodyHtml]</td></tr>
  </table>

  $footer
 </body>
</html>
that's it, enjoy!

oh, forgot to add!

in scouring the net, i've seen a couple of posts where people have offered to pay for this solution. if you are one of them, and are serious, then here's Menalto's donation link!

(nope, i'm not affiliated w/ them... if you wanna donate to me, then i'll redirect you to the donation link to the site that this is for: a non-profit saltwater aquariast club's site! )


edit 2006.01.11
Quote:
links in navbar don't work w/ rewrite module enabled. you can enable them, but then need to 'hardcode' the links in your navbar templates and do one phrase adjustment. it's still 'dynamic' as the encoding involves vB variables and not your actual url... but a change none the less! see #41 in this thread:
https://vborg.vbsupport.ru/showpost....8&postcount=41

can you put a 'user's gallery' link near the users' posts? yup, see post #65 in this thread:
https://vborg.vbsupport.ru/showpost....2&postcount=65

does it work in 3.5.x as a NON-plugin? yup, if you read through this post, you'll find tidbits here and there on what it takes to get it to work in 3.5.x

does it work in 3.5.x as a plugin? nope, not yet. nobody has coded it as a plugin as of this edit's date.
/edit 2006.01.11
Reply With Quote
  #62  
Old 09-11-2005, 09:46 AM
Wordplay Wordplay is offline
 
Join Date: Nov 2001
Location: Dengoku
Posts: 864
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

is there a way to import images and comments from 4images gallery into menalto's g2 gallery?
Reply With Quote
  #63  
Old 09-12-2005, 03:34 PM
whodah whodah is offline
 
Join Date: Feb 2004
Posts: 77
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

JimBean: just now getting your PM, dind't know i had one!

at any rate,yes! you are correct! galler2.php needs to be in the VB3 folder.

replying to your PM now!
Reply With Quote
  #64  
Old 09-22-2005, 03:14 PM
tkieffer's Avatar
tkieffer tkieffer is offline
 
Join Date: May 2002
Posts: 7
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I actually wanted to turn the menu bars off... in the newest version the setting has changed to:

Code:
GalleryCapabilities::set('showSidebarBlocks', false);
Reply With Quote
  #65  
Old 10-06-2005, 07:50 AM
zquestz zquestz is offline
 
Join Date: Nov 2004
Posts: 5
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Anyone figure out how to link to the "Your Album" part of Gallery from within VB? Been trying to figure out how to do this to no avail.

Basically I just want people to be able to jump to their member gallery easily without first going onto a Gallery page. Seems like it would be easy, but its trickier than it looks! Hahah.
Reply With Quote
  #66  
Old 10-06-2005, 02:43 PM
whodah whodah is offline
 
Join Date: Feb 2004
Posts: 77
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

this is on vB 3.0.x

havn't moved to 3.5 yet.

this will add a link beneath the post count of the user.

however it might not work for your situation. all of my members' galleries are their vB username.

like my username is: whodah
my gallery name is: whodah

i have a user named: nifty_guy
his gallery name is: nifty_guy

u get the idea

i have a cron job that runs nightly (u can run it as often as u want of course) that checks usernames against g2 entities of the same name that are albums. if it exists, it populates a custom field in vB. if that field exists, a link to their album shows up in their posts.

so - u might have to tweak this accordingly, i'm not posting this as a cookie-cutter solution. but should getcha goin!



there are no file modifications with this. there is one file [i]addition[/b]. the rest can be done from the admin control panel.

this involves:
  1. adding a user custom field
  2. adding a Scheduled Task (adding a file and adding the task in vB's admin page)
  3. modifying one postbit template


1: adding a user custom field
in your admin pages, go to: User Profile Fields -> Add New User Profile Field

call it wahtever you want. i titled mine:
Title: Gallery
Description: Does this user have a gallery in CVR_Members? If so, what's the name of the gallery?

you need ot make:
Field Editable by User: No

the rest you can fill out however you want. note the field number it assigns it. if you need to review it, click:
User Profile Fields -> User Profile Field Manager

and the 'Name' column is what you need to make a note of. in my case, it's: field10


2: adding a Scheduled Task
create the file:
includes/cron/gallery_field10.php

(yes, u can name the file whatever you want, just make a note of it)

**note: in the file right below this, replace 'field10' with your field number!

and in it add:
Code:
<?php  
    $whodiag = 0;
		
		$whomysqlstring = "SELECT * FROM user;";
		if($whodiag) {echo "<BR>line ".__LINE__.": whomysqlstring = $whomysqlstring<BR>"; }
		$results = mysql_query($whomysqlstring) or die ("Error: line ".__LINE__.": $whomysqlstring<BR>");
  	while ($row = mysql_fetch_array($results)) {
  				$whomysqlstring = "SELECT * FROM g2_FileSystemEntity WHERE g_pathComponent='".$row[username]."';";
					if($whodiag) {echo "<BR>line ".__LINE__.": whomysqlstring = $whomysqlstring<BR>"; }
					$results2 = mysql_query($whomysqlstring) or die ("Error: line ".__LINE__.": $whomysqlstring<BR>");
					if(mysql_numrows($results2)) { 
									if($whodiag) {echo "<BR>line ".__LINE__.": Found an album for ".$row[username]."<BR>"; }
									while ($row2 = mysql_fetch_array($results2)) {
  											$whomysqlstring = "UPDATE userfield SET `field10` = '".$row2[g_pathComponent]."' WHERE userid = '".$row[userid]."';";
												if($whodiag) {echo "<BR>line ".__LINE__.": whomysqlstring = $whomysqlstring<BR>"; }
  			  							mysql_query($whomysqlstring) or die ("Error: line ".__LINE__.": $whomysqlstring<BR>");
									}
					}

		}		
?>
go to: Scheduled Tasks -> Add New Scheduled Task
call it:
Title: Gallery Profile Updater
Filename: ./includes/cron/gallery_field10.php
(unless u used a different Filename above... if so, change accordingly)
and run it as often as u want. i run mine nightly. thus if a new user gets a gallery, it won't reflect on their posts til the next day. so for mine, everything is a star except Hour which is:
Hour: 2


after yer done, go ahead and 'Run Now' it.



3: modifying one postbit template
ok, if yer in legacy mode, yer using:
postbit_legacy
if not, it's probably
postbit
(someone correct me if i'm wrong)

so - edit the template yer using. for me, it's postbit_legacy.

in postbit or postbit_legacy (we use legacy), find:
Code:
<div>
					$vbphrase[posts]: $post[posts]
				</div>
below it add:
Code:
				<if condition="$post['field10']">
						<div>
    						<a href="$vboptions[bburl]/v/CVR_members/$post[field10]/">$post[musername]'s Gallery</a>
								<if condition="$blockinfo['whodahuserrandompic']">
        								 <!--  -->
        								 <BR>Their Daily Random Pic:<BR>$post[field14]
    						</if>
						</div>
				</if>
and now u'll get a nifty little link below their posts saying:
whodah's gallery

or

nifty_guy's gallery

ggs!
Reply With Quote
  #67  
Old 10-07-2005, 07:57 AM
fringehead fringehead is offline
 
Join Date: Nov 2004
Posts: 80
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I would like to have the vbulletin users have an account created for them, but I want to run Gallery as stand alone. Will their password work in stand-alone after their account has been created? How do I modify this script to use stand along instead of embedded? I have gotten an embedded to work I just don't like the big window fixing the gallery size. I also have my forum in a subdomain as well as my gallery....

zquestz can you post your code? Your site looks like what I want except your not in a subdomain... I have it working minus the images. The Matrix theme and gallery image comes through but all the pics are broken links and it seems the mod rewrite is all screwed up...

Thanks,

S
Reply With Quote
  #68  
Old 10-07-2005, 11:29 AM
zquestz zquestz is offline
 
Join Date: Nov 2004
Posts: 5
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Fringehead, you may be able to fix things by modifying the rewrite rules yourself to reflect your subdomains and other changes.

The rewrite code in gallery assumes you are running on a single domain. I also don't think you are going to be able to share cookies amongst both subdomains, so you are stuck with passing session id's in the url which I have found to be fairly slow.

As for the other problem with your gallery appearing inside a vbulletin window, thats easy to fix. Open the template for gallery2 and change it to:

Code:
$data[bodyHtml]
Yep... thats it. This keeps all the vbulletin headers, css and other things far away from your embed gallery the way it should be =)

Good luck on mod_rewrite, it's a nice site you have there.
Reply With Quote
  #69  
Old 10-07-2005, 01:54 PM
whodah whodah is offline
 
Join Date: Feb 2004
Posts: 77
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

last i looked - no, the password created from the vB integration into G2 will not work in standalone.

at least - not the way you want it to...

supose my password is: 123

so i go to vB and log on w/ my password of 123.

vB takes that '123' and adds it's SALT to it. i'm not exactly sure where/how, but that's what it does. so you enter '123' and vB sees 'SALT(123)'.

thus, the G2 integration script sends 'SALT(123)' to G2 as my password.

so - now i log out of vB and visit the standalone G2.

i attempt to log on w/ my password of '123' and get denied. because my password is not '123' but 'SALT(123)'.

so you'd have to do some code modification (sorry, i havn't looked into this myself nor plan to) to make the G2 authentication go through the same SALT as vB does or soemthing to that effect...

however - on the G2 forums, the user 'valiant' who works w/ the integration side of G2 has added SALT integration to the todo list. but on a low priority as aparently not a lot of CMS and/or forums use it in this manner.

i do have to add the 1 disclaimer that this information was based on about G2 RC2 and i havn't looked to see if it's been worked into G2 final. so u may want to research that!

HTH
Reply With Quote
  #70  
Old 10-07-2005, 06:53 PM
fringehead fringehead is offline
 
Join Date: Nov 2004
Posts: 80
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by zquestz
Fringehead, you may be able to fix things by modifying the rewrite rules yourself to reflect your subdomains and other changes.

The rewrite code in gallery assumes you are running on a single domain. I also don't think you are going to be able to share cookies amongst both subdomains, so you are stuck with passing session id's in the url which I have found to be fairly slow.

As for the other problem with your gallery appearing inside a vbulletin window, thats easy to fix. Open the template for gallery2 and change it to:

Code:
$data[bodyHtml]
Yep... thats it. This keeps all the vbulletin headers, css and other things far away from your embed gallery the way it should be =)

Good luck on mod_rewrite, it's a nice site you have there.

Thanks for the compliment! Those guys take some nice photos I see there is a line of code that looks very similiar to what you say to change... is this the line I change?

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

Sean
Reply With Quote
  #71  
Old 10-08-2005, 05:36 PM
zquestz zquestz is offline
 
Join Date: Nov 2004
Posts: 5
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Nope, you don't change the gallery2.php file at all. Only change the template it installed in admincp to the value I mentioned.
Reply With Quote
Reply

Thread Tools

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 12:59 PM.


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.04881 seconds
  • Memory Usage 2,352KB
  • Queries Executed 26 (?)
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
  • (11)bbcode_code
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_article
  • (1)navbar
  • (4)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (11)post_thanks_box
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (11)postbit_onlinestatus
  • (11)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_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
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete