PDA

View Full Version : Random Image Display. Menalto Gallery & CMPS


mholtum
06-25-2004, 03:00 PM
This module will display a random image on your portal using Gallery.

Copy and paste the entire contents into a file named "block-random.php" and FTP it or otherwise place it in your Gallery installation directory.


<?
/*
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2001 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

/*
* This block selects a random photo for display. It will only display photos
* from albums that are visible to the public. It will not display hidden
* photos.
*
* Once a day (or whatever you set CACHE_EXPIRED to) we scan all albums and
* create a cache file listing each public album and the number of photos it
* contains. For all subsequent attempts we use that cache file. This means
* that if you change your albums around it may take a day before this block
* starts (or stops) displaying them.
*/

/*
* With Barca-Hall modifications
*
* Latest revision: 8-Jun-2004 to clean-up HTML output to pass W3C validation.
*
*
* See: http://www.barcahall.com/gallery-block-random.html.
*/

// Hack prevention.
if (!empty($HTTP_GET_VARS["GALLERY_BASEDIR"]) ||
!empty($HTTP_POST_VARS["GALLERY_BASEDIR"]) ||
!empty($HTTP_COOKIE_VARS["GALLERY_BASEDIR"])) {
print "Security violation\n";
exit;
}

require($GALLERY_BASEDIR . "init.php");

if ($profile) {
$timer = time();
}

/* Initializing the seed */
srand ((double) microtime() * 1000000);

define(CACHE_FILE, $gallery->app->albumDir . "/block-random.cache");
define(CACHE_EXPIRED, 86400);

// Check the cache file to see if it's up to date
$rebuild = 1;
if (fs_file_exists(CACHE_FILE)) {
$stat = fs_stat(CACHE_FILE);
$mtime = $stat[9];
if (time() - $mtime < CACHE_EXPIRED) {
$rebuild = 0;
}
}

// Only select sub-albums that Everybody can access
$everybody = $gallery->userDB->getEverybody();

if ($rebuild) {
scanAlbums();
saveCache();
} else {
readCache();
}

// Parameter: size
// Specify that the thumbnail image should be resized when displayed,
// to fit a specific dimension in both height and width. Aspect ratio is maintained.
// Intended to reduce the size of images, but if the size specified is larger than either thumbnail dimension,
// the image will be enlarged (with a corresponding loss of quality.)
// Note: This does not create an additional thumbnail, nor does it alter the existing thumbnail;
// the image is dynamically scaled by the browser when rendered.
// Example: size=75
// Default: 0, meaning no resize.

if (!empty($HTTP_GET_VARS["size"]))
$size = $HTTP_GET_VARS["size"];
else
$size = 0;

// Parameter: domain
// Specify the value to which document.domain should be set.
// Not needed if this page and the page calling it are on the same server.
// Allows the page embedding this random photo page to resize the containing IFRAME,
// when the two pages are on different servers, but within a common domain (e.g. "www.foo.com" and "gallery.foo.com").
// The value specified must be the common suffix of the two server names, cannot be simply ".com",
// and the calling page must set its document.domain to the same value.
// Example: domain=foo.com
// Default: none. If not specified, no document.domain statement will be executed.

if (!empty($HTTP_GET_VARS["domain"]))
$domain = $HTTP_GET_VARS["domain"];

// Parameter: target
// Specify the value to be used in the target= attribute of the A tag.
// Example: target=_top
// Default: _blank

if (!empty($HTTP_GET_VARS["target"]))
$targetAttr = "target=\"".$HTTP_GET_VARS["target"] ."\"";
else
$targetAttr = "target=\"_blank\"";

// Parameter: album
// Limit the photo block to only one album (including its sub-albums).
// Example: album=nytrip
// Default: none. If not specified, all visible albums will be used.

if (!empty($HTTP_GET_VARS["album"]))
{
$album = new Album();
$album->load($HTTP_GET_VARS["album"]);
}
else
$album = chooseAlbum();

if ($album) {
$index = choosePhoto();
}

if (!$GALLERY_EMBEDDED_INSIDE) {
echo "<head>"
.getStyleSheetLink();

echo "<style type=\"text/css\">";
echo "BODY { margin:0 0; }";
if ($album->fields["bgcolor"]) {
echo "BODY { background-color:".$album->fields[bgcolor]."; }";
}
if ($album->fields["textcolor"]) {
echo "BODY {color:".$album->fields[textcolor]."; }";
}

echo "</style>";
if ($domain) {
echo "<script language='JavaScript'>document.domain='$domain';</script>";
}
echo "</head>";
}


if (isset($index)) {
$id = $album->getPhotoId($index);

echo "<center>"
."<a href=\"" .makeAlbumUrl($album->fields["name"], $id) ."\" $targetAttr>"
.$album->getThumbnailTag($index,$size)
."</a>";

$caption = $album->getCaption($index);
echo "<span class=caption>";
if ($caption) {
echo "<br>$caption";
}

echo "<br><i>From: </i>"
."<a href=\"" .makeAlbumUrl($album->fields["name"]) ."\" $targetAttr>"
.$album->fields["title"]
."</a></span></center></body>";
} else
{
// No photo chosen. Provide link to album itself, otherwise to top-level of gallery.
if ($album) {
echo "<center>"
."<a href=\"" .makeAlbumUrl($album->fields["name"]) ."\" $targetAttr>"
.$album->getHighlightAsThumbnailTag($size)
."</a><span class=caption><br>"
."<a href=\"" .makeAlbumUrl($album->fields["name"]) ."\" $targetAttr>"
.$album->fields["title"]
."</a></span></center></body>";
} else {
print "<center><a href=\"" . makeGalleryUrl("albums.php") . "\" $targetAttr>" . $gallery->app->galleryTitle . "</a></center>";
}

// print "No photo chosen.";
}

if ($profile) {
$elapsed = time() - $timer;
print "<br>Elapsed: $elapsed secs";
}

/*
* --------------------------------------------------
* Support functions
* --------------------------------------------------
*/

function saveCache() {
global $cache;
if ($fd = fs_fopen(CACHE_FILE, "w")) {
foreach ($cache as $key => $val) {
fwrite($fd, "$key/$val\n");
}
fclose($fd);
}
}

function readCache() {
global $cache;
if ($fd = fs_fopen(CACHE_FILE, "r")) {
while ($line = fgets($fd, 4096)) {
list($key, $val) = explode("/", $line);
$cache[$key] = trim($val);
}
fclose($fd);
}
}

function choosePhoto() {
global $cache;
global $album;

$count = $cache[$album->fields["name"]];
if ($count == 0) {
// Shouldn't happen
return null;
} else if ($count == 1) {
$choose = 1;
} else {
$choose = rand(1, (int) $count);
$wrap = 0;

// Skip an item in the album if it is Private (a hidden photo, or a protected sub-album)
while ( isPrivate($album, $choose) ) {
$choose++;
if ($choose > $count) {
$choose = 1;
$wrap++;

if ($wrap == 2) {
return null;
}
}
}
}

/*
* If we've picked a sub-album, then
* make it the chosen album, and
* recursively choose a photo from *it*
*/
$isSubAlbum = FALSE;
$subAlbumName = '';

// Backwards compatibility was lost in v1.4.3

if (method_exists($album, 'isAlbum')) {
// Gallery v1.4.3 or later
if ( $album->isAlbum($choose) ) {
$isSubAlbum = TRUE;
$subAlbumName = $album->getAlbumName($choose);
}
}
else {
// Gallery v1.4.2 or earlier
if ( $album->isAlbumName($choose) ) {
$isSubAlbum = TRUE;
$subAlbumName = $album->isAlbumName($choose);
}
}

if ( $isSubAlbum ) {
$album->load($subAlbumName);
return choosePhoto();
}

return $choose;
}

function chooseAlbum() {
global $cache;

/*
* The odds that an album will be selected is proportional
* to the number of (visible) items in the album.
*/

$total = 0;
foreach ($cache as $name => $count) {
if (!$choose) {
$choose = $name;
}

$total += $count;
if ($total != 0 && ($total == 1 || rand(1, $total) <= $count)) {
$choose = $name;
}
}

if ($choose) {
$album = new Album();
$album->load($choose);
return $album;
} else {
return null;
}
}

function scanAlbums() {
global $cache;
global $gallery;
global $everybody;

$cache = array();
// $everybody = $gallery->userDB->getEverybody();
$albumDB = new AlbumDB();
foreach ($albumDB->albumList as $tmpAlbum) {
if ($everybody->canReadAlbum($tmpAlbum)) {
$seeHidden = $everybody->canWriteToAlbum($tmpAlbum);
$numPhotos = $tmpAlbum->numPhotos($seeHidden);
$name = $tmpAlbum->fields["name"];
if ($numPhotos > 0) {
$cache[$name] = $numPhotos;
}
}
}
}

function isPrivate($alb, $idx) {
global $everybody;

$isSubAlbum = FALSE;
$subAlbumName = '';

if (method_exists($alb, 'isAlbum')) {
// Gallery v1.4.3 or later
$isSubAlbum = $alb->isAlbum($idx);
$subAlbumName = $alb->getAlbumName($idx);
}
else {
// Gallery v1.4.2 or earlier
$isSubAlbum = $alb->isAlbumName($idx);
$subAlbumName = $alb->isAlbumName($idx);
}

if ( $isSubAlbum ) {
$tmpAlb = new Album();
$tmpAlb->load($subAlbumName);
return ! $everybody->canReadAlbum($tmpAlb);
}

return $alb->isHidden($idx);
}

?>


Copy and paste the entire contents into a file named "block-random-support.js", and FTP it or otherwise place it in the docroot of your web server (not in your Gallery installation directory). You then must reference this file in the HTML Head of the page on which you want to display random images. Do this by placing the following line of code into the HEAD of your page (just above the closing </HEAD> is a good place), adjusting the SRC pathname as needed for your installation: script language="JavaScript" type="text/javascript" SRC="/block-random-support.js"></script>


// document.domain='yourdomain.com'; // Uncomment and edit if Access is Denied runtime JavaScript error occurs

function iFrameHeight(obj) {
aID = obj.id;

// if contentDocument exists, W3C compliant (Mozilla)
if (document.getElementById(aID).contentDocument){
obj.height = document.getElementById(aID).contentDocument.body.scrollHeight;
} else {
// IE
obj.style.height = document.frames[aID].document.body.scrollHeight;
}
}


Create a Template named adv_portal_random


<!-- Random Gallery Block -->

<script language="JavaScript" type="text/javascript" SRC="http://www.ravensrealm.net/block-random-support.js"></script>

<table align="center" border="0" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" class="tborder" width="100%">
<thead>
<tr>
<td class="tcat"><span class="smallfont"><strong>$vba_options[portal_blockbullet] Random Image </strong></span></td>
</tr>
</thead>
<tr>
<td class="$getbgrow" width="100%" align="center">
<IFRAME id="blockrandom1"
name="blockrandom1"
onLoad="iFrameHeight(this);"
src="http://yourdomain.com/gallery/block-random.php?size=125&target=_top"
width="125"
height="120" align=top scrolling=no frameborder=0>
[This feature requires IFRAME.]</IFRAME>
</td>
</tr>
</table>
<br />

<!-- End Random Gallery Block -->


Create a Module:
Module Title: Random Images (or whatever you want_
Module Identifier: Blank
File to include: None
Template to include random

Activate and place where you wish!

Graham Barns
07-30-2004, 10:20 AM
whats this gallery referring too i dont see ahy gallery script or one in the members area?

Our Sponsors
 

mholtum
07-30-2004, 10:50 AM
Gallery (http://gallery.menalto.com/modules.php?op=modload&name=News&file=index)

phoenixdown
07-31-2004, 11:34 AM
We're you able to intergrate vb's user log in with gallery?

Our Sponsors
 

mholtum
08-02-2004, 01:41 AM
We're you able to intergrate vb's user log in with gallery?
Not yet..

timo1st
08-13-2004, 01:06 AM
i got this error
Warning: main(init.php): failed to open stream: No such file or directory in /home/tamer/public_html/tomyalpom/block-random.php on line 50

Fatal error: main(): Failed opening required 'init.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/tamer/public_html/tomyalpom/block-random.php on line 50
??????]
any help

timo1st
08-15-2004, 03:38 PM
????? any help

timo1st
08-17-2004, 10:35 AM
mr mholtum
any help plz?

mholtum
08-18-2004, 02:07 AM
I would try to do it again.

1: Remove everything you have done.
2: Follow the directions exactly as posted.
3: You shouldn't get any errors.

If I can get it to work, anyone can..

timo1st
09-01-2004, 07:31 AM
in
Template to include :random
only ?

thejaxx
10-24-2004, 08:34 PM
Will this also support photopost?

memobug
10-25-2004, 01:11 AM
Will this also support photopost?

No this particular random image display module wouldn't work with photopost.

Regards,

Matt

centris
01-09-2005, 07:13 AM
Not sure if I read this right, but after installing the images do not rotate, only the first image is ever displayed.

You then must reference this file in the HTML Head of the page

Creating a html file is easy, but I don't get the above part? Where do you put this file and why is it not referenced in the create module??

Any help appreciated.

xnt
07-20-2005, 09:29 PM
I tried to install this module in CMPS 2.x but I was not able to use this as a left block module. If I did than all the blocks from the center will be shifted down under the last left block. It works fine when it's the only one or the last block on the right ??

Any ideas what went wrong ??? See pix attached

TIA

mholtum
07-21-2005, 12:07 AM
I tried to install this module in CMPS 2.x but I was not able to use this as a left block module. If I did than all the blocks from the center will be shifted down under the last left block. It works fine when it's the only one or the last block on the right ??

Any ideas what went wrong ??? See pix attached

TIA
It was designed for 1.x but if you change the Use Module Shell Template from yes to no, it may work.

mholtum
07-21-2005, 12:11 AM
in
Template to include :random
only ?
Yes

KW802
07-21-2005, 12:33 AM
mholtum, hope you don't mind but I changed the thread title to specify Menalto gallery so people know right away which "Gallery" it is. :)

mholtum
07-21-2005, 12:39 AM
mholtum, hope you don't mind but I changed the thread title to specify Menalto gallery so people know right away which "Gallery" it is. :)
That is great. I posted this long before vbagallery was released.. I havent used it since..


I was kinda thinking "Holy Thread Resurection Batman!"

KW802
07-21-2005, 12:46 AM
I was kinda thinking "Holy Thread Resurection Batman!"I didn't even notice when it was originally posted... I just assumed that you were playing around with Menalto for one of your sites. I should have known better than to think that you'd use something other than vBa Gallery. :p

oldgoat
07-14-2006, 07:09 PM
hello to all.
Running menalto gallery 2, vbulletin 3.5.4 and vbadvanced cmps 2.0.1

Stuck at one point, where and how do i do this part of the procedure:

You then must reference this file in the HTML Head of the page on which you want to display random images. Do this by placing the following line of code into the HEAD of your page (just above the closing </HEAD> is a good place), adjusting the SRC pathname as needed for your installation: script language="JavaScript" type="text/javascript" SRC="/block-random-support.js"></script>

thanks in advance for all your help.

oldgoat
07-15-2006, 01:05 PM
no one out there, been stuck for a long time.