Sorry - there's a lot more to do for this to work. Undo the change I recommended and do this:
In init.inc.php, find
if (!GALLERY_ADMIN_MODE && $CONFIG['allow_private_albums']) get_private_album_set();
after, add
random_set();
In functions.inc.php, go to function get_pic_data. After the global statement, add
global $RANDOM_SET;
Find
case 'random': // Random pictures
if ($ALBUM_SET && $CURRENT_CAT_NAME) {
$album_name = $lang_meta_album_names['random'].' - '. $CURRENT_CAT_NAME;
} else {
$album_name = $lang_meta_album_names['random'];
}
$result = db_query("SELECT COUNT(*) from {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES' $ALBUM_SET");
$nbEnr = mysql_fetch_array($result);
$pic_count = $nbEnr[0];
mysql_free_result($result);
if($select_columns != '*') $select_columns .= ', aid';
// if we have more than 1000 pictures, we limit the number of picture returned
// by the SELECT statement as ORDER BY RAND() is time consuming
/* Commented out due to image not found bug
if ($pic_count > 1000) {
$result = db_query("SELECT COUNT(*) from {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES'");
$nbEnr = mysql_fetch_array($result);
$total_count = $nbEnr[0];
mysql_free_result($result);
$granularity = floor($total_count / RANDPOS_MAX_PIC);
$cor_gran = ceil($total_count / $pic_count);
srand(time());
for ($i=1; $i<= $cor_gran; $i++) $random_num_set =rand(0, $granularity).', ';
$random_num_set = substr($random_num_set,0, -2);
$result = db_query("SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE randpos IN ($random_num_set) AND approved = 'YES' $ALBUM_SET ORDER BY RAND() LIMIT $limit2");
} else {
*/
$sql = "SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES' $ALBUM_SET ORDER BY RAND() LIMIT $limit2";
$result = db_query($sql);
$rowset = array();
while($row = mysql_fetch_array($result)){
$row['caption_text'] = '';
$rowset[-$row['pid']] = $row;
}
mysql_free_result($result);
return $rowset;
break;
replace with
case 'random': // Random pictures
if ($ALBUM_SET && $CURRENT_CAT_NAME) {
$album_name = $lang_meta_album_names['random'].' - '. $CURRENT_CAT_NAME;
} else {
$album_name = $lang_meta_album_names['random'];
}
$sql = "SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES' $RANDOM_SET ORDER BY RAND() LIMIT $limit2";
$result = db_query($sql);
$rowset = array();
while($row = mysql_fetch_array($result)){
$row['caption_text'] = '';
$rowset[-$row['pid']] = $row;
}
mysql_free_result($result);
return $rowset;
break;
Add this new function:
function random_set()
{
global $CONFIG, $RANDOM_SET;
if ($CONFIG['allow_private_albums']) {
$query = 'SELECT aid
FROM ' . $CONFIG['TABLE_ALBUMS'] . '
WHERE visibility = 0';
$result = db_query($query);
if (mysql_num_rows($result))
{
$set = mysql_fetch_array($result);
$RANDOM_SET = 'AND aid in (' . implode(",", $set) . ') ';
} else {
$RANDOM_SET = 'AND aid in (0) ';
}
mysql_free_result($result);
} else {
$RANDOM_SET = '';
}
}
If you have similar issues with the last uploaded block, you can use the $RANDOM_SET to also exclude private images. Just look for case 'lastup': // Last uploads, find
$result = db_query("SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES' $ALBUM_SET ORDER BY pid DESC $limit");
and replace $ALBUM_SET with $RANDOM_SET.
See if that works for you.