/**
 * Returns  a randomly selected image from the album or its subalbums. (May be NULL if none exists)
 *
 * @param mixed $rootAlbum optional album object/folder from which to get the image.
 * @param bool $daily set to true to change picture only once a day.
 * @param bool $showunpublished set true to consider all images
 *
 * @return object
 */
function getRandomImagesAlbum($rootAlbum = NULL, $daily = false, $showunpublished = false)
{
    global $_zp_current_album, $_zp_gallery, $_zp_current_search;
    if (empty($rootAlbum)) {
        $album = $_zp_current_album;
    } else {
        if (is_object($rootAlbum)) {
            $album = $rootAlbum;
        } else {
            $album = new Album($_zp_gallery, $rootAlbum);
        }
    }
    if ($daily && ($potd = getOption('picture_of_the_day:' . $album->name))) {
        $potd = unserialize($potd);
        if (date('Y-m-d', $potd['day']) == date('Y-m-d')) {
            $rndalbum = new Album($_zp_gallery, $potd['folder']);
            $image = newImage($rndalbum, $potd['filename']);
            if ($image->exists) {
                return $image;
            }
        }
    }
    $image = NULL;
    if ($album->isDynamic()) {
        $images = $album->getImages(0);
        shuffle($images);
        while (count($images) > 0) {
            $result = array_pop($images);
            if (is_valid_image($result['filename'])) {
                $image = newImage(new Album(new Gallery(), $result['folder']), $result['filename']);
            }
        }
    } else {
        $albumfolder = $album->getFolder();
        if ($album->isMyItem(LIST_RIGHTS) || $showunpublished) {
            $imageWhere = '';
            $albumNotWhere = '';
            $albumInWhere = '';
        } else {
            $imageWhere = " AND " . prefix('images') . ".show=1";
            $albumNotWhere = getProtectedAlbumsWhere();
            $albumInWhere = prefix('albums') . ".show=1";
        }
        $query = "SELECT id FROM " . prefix('albums') . " WHERE ";
        if ($albumInWhere) {
            $query .= $albumInWhere . ' AND ';
        }
        $query .= "folder LIKE " . db_quote($albumfolder . '%');
        $result = query_full_array($query);
        if (is_array($result) && count($result) > 0) {
            $albumInWhere = prefix('albums') . ".id in (";
            foreach ($result as $row) {
                $albumInWhere = $albumInWhere . $row['id'] . ", ";
            }
            $albumInWhere = ' AND ' . substr($albumInWhere, 0, -2) . ')';
            $c = 0;
            while (is_null($image) && $c < 10) {
                $result = query_single_row('SELECT COUNT(*) AS row_count ' . ' FROM ' . prefix('images') . ', ' . prefix('albums') . ' WHERE ' . prefix('albums') . '.folder!="" AND ' . prefix('images') . '.albumid = ' . prefix('albums') . '.id ' . $albumInWhere . $albumNotWhere . $imageWhere);
                $rand_row = rand(0, $result['row_count'] - 1);
                $result = query_single_row('SELECT ' . prefix('images') . '.filename, ' . prefix('albums') . '.folder ' . ' FROM ' . prefix('images') . ', ' . prefix('albums') . ' WHERE ' . prefix('images') . '.albumid = ' . prefix('albums') . '.id  ' . $albumInWhere . $albumNotWhere . $imageWhere . ' LIMIT ' . $rand_row . ', 1');
                $imageName = $result['filename'];
                if (is_valid_image($imageName)) {
                    $image = newImage(new Album(new Gallery(), $result['folder']), $imageName);
                }
                $c++;
            }
        }
    }
    if ($daily && is_object($image)) {
        $potd = array('day' => time(), 'folder' => $result['folder'], 'filename' => $result['filename']);
        setThemeOption('picture_of_the_day:' . $album->name, serialize($potd));
    }
    return $image;
}
/**
 * Returns  a randomly selected image from the album or its subalbums. (May be NULL if none exists)
 *
 * @param string $rootAlbum optional album folder from which to get the image.
 *
 * @return object
 */
function getRandomImagesAlbum($rootAlbum = null)
{
    global $_zp_current_album, $_zp_gallery, $_zp_current_search;
    if (empty($rootAlbum)) {
        $album = $_zp_current_album;
    } else {
        $album = new Album($_zp_gallery, $rootAlbum);
    }
    if ($album->isDynamic()) {
        $search = $album->getSearchEngine();
        $images = $search->getImages(0);
        $image = NULL;
        shuffle($images);
        while (count($images) > 0) {
            $randomImage = array_pop($images);
            if (is_valid_image($randomImage['filename'])) {
                $image = newImage(new Album(new Gallery(), $randomImage['folder']), $randomImage['filename']);
                return $image;
            }
        }
    } else {
        if (zp_loggedin()) {
            $imageWhere = '';
            $albumNotWhere = '';
        } else {
            $imageWhere = " AND " . prefix('images') . ".show=1";
            $albumNotWhere = getProtectedAlbumsWhere();
        }
        $albumInWhere = '';
        $albumfolder = $album->getFolder();
        $query = "SELECT id FROM " . prefix('albums') . " WHERE " . prefix('albums') . ".show = 1 AND folder LIKE '" . mysql_real_escape_string($albumfolder) . "%'";
        $result = query_full_array($query);
        $albumInWhere = prefix('albums') . ".id in (";
        foreach ($result as $row) {
            $albumInWhere = $albumInWhere . $row['id'] . ", ";
        }
        $albumInWhere = ' AND ' . substr($albumInWhere, 0, -2) . ')';
        $c = 0;
        while ($c < 10) {
            $result = query_single_row('SELECT COUNT(*) AS row_count ' . ' FROM ' . prefix('images') . ', ' . prefix('albums') . ' WHERE ' . prefix('albums') . '.folder!="" AND ' . prefix('images') . '.albumid = ' . prefix('albums') . '.id ' . $albumInWhere . $albumNotWhere . $imageWhere);
            $rand_row = rand(1, $result['row_count']);
            $result = query_single_row('SELECT ' . prefix('images') . '.filename, ' . prefix('albums') . '.folder ' . ' FROM ' . prefix('images') . ', ' . prefix('albums') . ' WHERE ' . prefix('images') . '.albumid = ' . prefix('albums') . '.id  ' . $albumInWhere . $albumNotWhere . $imageWhere . ' LIMIT ' . $rand_row . ', 1');
            $imageName = $result['filename'];
            if (is_valid_image($imageName)) {
                $image = newImage(new Album(new Gallery(), $result['folder']), $imageName);
                return $image;
            }
            $c++;
        }
    }
    return null;
}