Weird problem when transplanting block-random script

dcigary

Joined: 2002-12-13
Posts: 21
Posted: Wed, 2003-06-11 02:01

Hi all,

I hacked up a copy of block-random for my own use on my digital picture frame, adding a few meta-tags for auto-refresh, etc. It's been working great for over a year now.

However, I'm trying to set up my brother's gallery server with the same block-random script (no changes) and when I try to access it, I don't get any errors, but all I get is the script printed on the screen AFTER the first section of code that uses "$gallery->". (The one in the DEFINE) The text that displays in the browser starts at:

app->albumDir . "/block-random.php .......

Both gallery servers are 1.3.3.

Here's my script: (Yeah, I know it's an old version, but it works!)

/*
 * 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.
 */

// 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;
    }
}

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

$album = chooseAlbum();

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

if (isset($index)) {
    $id = $album->getPhotoId($index);
    echo "<meta http-equiv=refresh content=300>";
    echo "<body bgcolor=#000000>";
    echo ""
            ."<center><a href=" .makeAlbumUrl($album->fields["name"], $id) .">"
            .$album->getPhotoTag($index,$full=0)
            ."</center></a>";

/*
    $caption = $album->getCaption($index);
    if ($caption) {
        echo "<br><center>$caption</center>";
    }

    echo "<br><center>From: "
            ."<a href=" .makeAlbumUrl($album->fields["name"]) .">"
            .$album->fields["title"]
            ."</a></center>";
*/
} else {
        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] = $val;
        }
        fclose($fd);
    }
}

function choosePhoto($album) {
    global $cache;

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

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

    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;

    $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;
            }
        }
    }
}
?>