$sql_order = "gridimage_id asc";
}
if (isset($_GET['xmas'])) {
    $ii = $db->getAll("select gridsquare_id from gridimage as gi where imageclass like '%christmas%' and moderation_status = 'pending' and submitted > date_sub(now(),interval 1 day) limit 10");
    foreach ($ii as $i => $row) {
        $db->Execute("REPLACE INTO gridsquare_moderation_lock SET user_id = {$USER->user_id}, gridsquare_id = {$row['gridsquare_id']}");
    }
    $sql_where .= " AND (lock_type = 'modding' OR imageclass like '%christmas%')";
}
$sql = "select gi.*,grid_reference,user.realname,imagecount {$sql_columns}\nfrom \n\tgridimage as gi\n\tinner join gridsquare as gs\n\t\tusing(gridsquare_id)\n\t{$sql_from}\n\tleft join gridsquare_moderation_lock as l\n\t\ton(gi.gridsquare_id=l.gridsquare_id and lock_obtained > date_sub(NOW(),INTERVAL 1 HOUR) )\n\tinner join user\n\t\ton(gi.user_id=user.user_id)\nwhere\n\t{$sql_where}\n\t{$sql_where2}\ngroup by gridimage_id\norder by\n\t{$sql_order}\nlimit {$limit}";
//implied: and user_id != {$USER->user_id}
// -> because squares with users images are locked
#############################
# fetch the list of images...
$images = new ImageList();
$c = $images->_getImagesBySql($sql);
$realname = array();
foreach ($images->images as $i => $image) {
    $token = new Token();
    $fix6fig = 0;
    if ($image->use6fig && ($image->natgrlen > 6 || $image->viewpoint_grlen > 6)) {
        $fix6fig = 1;
        $images->images[$i]->use6fig = 0;
    }
    $token->setValue("g", $images->images[$i]->getSubjectGridref(true));
    if ($image->viewpoint_eastings) {
        //note $image DOESNT work non php4, must use $images->images[$i]
        //move the photographer into the center to match the same done for the subject
        $correction = $images->images[$i]->viewpoint_grlen > 4 ? 0 : 500;
        $images->images[$i]->distance = sprintf("%0.2f", sqrt(pow($images->images[$i]->grid_square->nateastings - $images->images[$i]->viewpoint_eastings - $correction, 2) + pow($images->images[$i]->grid_square->natnorthings - $images->images[$i]->viewpoint_northings - $correction, 2)) / 1000);
        if (intval($images->images[$i]->grid_square->nateastings / 1000) != intval($images->images[$i]->viewpoint_eastings / 1000) || intval($images->images[$i]->grid_square->natnorthings / 1000) != intval($images->images[$i]->viewpoint_northings / 1000)) {
$ab = floor($USER->user_id / 10000);
$cacheid = "user{$ab}|{$USER->user_id}|{$max_gridimage_id}";
//what style should we use?
$style = $USER->getStyle();
if ($smarty->caching) {
    $smarty->caching = 2;
    // lifetime is per cache
    $smarty->cache_lifetime = 300;
    customExpiresHeader(300, false, true);
}
$smarty->assign('maincontentclass', 'content_photo' . $style);
//regenerate?
if (!$smarty->is_cached($template, $cacheid)) {
    $imagelist = new ImageList();
    $sql = "select gi.*,grid_reference " . "from gridimage as gi " . "inner join gridsquare as gs using(gridsquare_id) " . "where moderation_status != 'rejected' " . "and gi.user_id={$USER->user_id} " . ($max_gridimage_id ? " and gridimage_id < {$max_gridimage_id} " : '') . "order by gridimage_id desc limit 20";
    $imagelist->_getImagesBySql($sql);
    if (count($imagelist->images)) {
        foreach ($imagelist->images as $i => $image) {
            $imagelist->images[$i]->imagetakenString = getFormattedDate($image->imagetaken);
        }
        $smarty->assign_by_ref('images', $imagelist->images);
        $first = $imagelist->images[0];
        $smarty->assign('criteria', $first->submitted);
        $last = $imagelist->images[count($imagelist->images) - 1];
        $max_gridimage_id = $last->gridimage_id;
        $count++;
        if ($count < 10 && count($imagelist->images) == 20) {
            $token = new Token();
            $token->setValue("id", intval($max_gridimage_id));
            $token->setValue("c", intval($count));
            $smarty->assign('next', $token->getToken());