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