Copyright (C) Rodolfo Berrios A. All rights reserved. BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA http://chevereto.com/license --------------------------------------------------------------------- */ $route = function($handler) { try { // Parse the current query string parse_str($_SERVER['QUERY_STRING'], $querystr); if(!in_array(key($querystr), ['random', 'lang']) and CHV\Settings::get('homepage_style') == 'route_explore') { $handler->mapRoute('explore'); include G_APP_PATH_ROUTES . 'route.explore.php'; return $route($handler); } $logged_user = CHV\Login::getUser(); // User status override redirect CHV\User::statusRedirect($logged_user['status']); // Process the index query string requests like "?lang=en" if($_SERVER['QUERY_STRING']) { switch(key($querystr)){ // Party Boy case 'random': if(!CHV\getSetting('website_random')) { break; } $tables = CHV\DB::getTables(); $db = CHV\DB::getInstance(); $db->query('SELECT MIN(image_id) as min, MAX(image_id) as max FROM '.$tables['images']); $limit = $db->fetchSingle(); // Try to get the right image $random_ids = G\random_values($limit['min'], $limit['max'], 100); if(is_null($random_ids)) { G\redirect(); } else { if(count($random_ids) == 1) { $random_ids[] = $random_ids[0]; } } if($limit['min'] !== $limit['max']) { // Do NOT show the last viewed image $last_viewed_image = CHV\decodeID($_SESSION['last_viewed_image']); if(($key = array_search($last_viewed_image, $random_ids)) !== false) { unset($random_ids[$key]); } } $query = 'SELECT image_id FROM '.$tables['images'].' LEFT JOIN '.$tables['albums'].' ON '.$tables['images'].'.image_album_id = '.$tables['albums'].'.album_id WHERE image_id IN ('.join(',', $random_ids).") AND (album_privacy = 'public' OR album_privacy IS NULL) "; // Don't show NSFW in random mode if(!CHV\getSetting('show_nsfw_in_random_mode')) { if($logged_user) { $query .= 'AND ('.$tables['images'].'.image_nsfw = 0 OR '.$tables['images'].'.image_user_id = '.$logged_user['id'].') '; } else { $query .= 'AND '.$tables['images'].'.image_nsfw = 0 '; } } if($handler::getCond('forced_private_mode')) { $query .= 'AND '.$tables['images'].'.image_user_id = '.$logged_user['id'].' '; } $query .= 'ORDER BY RAND() LIMIT 1'; $db->query($query); $imageID = $db->fetchSingle()['image_id']; $image = CHV\Image::getSingle($imageID, false, true);; // Does exists in the disk? if($image['file_resource']['chain']['image'] == NULL) $image = false; if(!$image) { if($_SESSION['random_failure'] > 3) { G\redirect(); } else { $_SESSION['random_failure'] += 1; } } else { unset($_SESSION['random_failure']); } return G\redirect($image ? CHV\Image::getUrlViewer(CHV\encodeID($imageID)) : '?random'); break; // Set the language by cookie then redirect to the original referer case 'lang': if(!CHV\getSetting('language_chooser_enable')) { return G\redirect(); } // Valid lang? if(!array_key_exists($querystr['lang'], CHV\get_available_languages())) { return G\redirect(); } $logged_user = CHV\Login::getUser(); if($logged_user and $logged_user['language'] !== $querystr['lang']) { CHV\User::update($logged_user['id'], ['language' => $querystr['lang']]); } // Store selected language in cookie setcookie('USER_SELECTED_LANG', $querystr['lang'], time()+(60*60*24*30), G_ROOT_PATH_RELATIVE); // Final redir G\redirect($_SESSION['REQUEST_REFERER']); break; // Legacy 1.X viewer request (?v=file.ext) case 'v': if(preg_match('{^\w*\.jpg|png|gif$}', $_GET['v'])) { $explode = array_filter(explode('.', $_GET['v'])); if(count($explode) == 2) { $image = CHV\DB::get('images', ['name' => $explode[0], 'extension' => $explode[1]], 'AND', [], 1); if($image) { $image = CHV\Image::formatArray($image); G\redirect($image['url_viewer']); } } } $handler->issue404(); break; // Allow any /?list= case 'list': $handler->template = 'index'; break; } } if (CHV\Settings::get('homepage_style') == 'split') { // Tabs $tabs = [ [ 'tools' => true, 'current' => true, 'id' => 'home-pics', 'type' => 'image' ] ]; // Handle the home uids $home_uids = CHV\getSetting('homepage_uids'); $home_uid_is_null = ($home_uids == '' or $home_uids == '0' ? true : false); $home_uid_arr = !$home_uid_is_null ? explode(',', $home_uids) : false; if(is_array($home_uid_arr)) { $home_uid_bind = []; foreach($home_uid_arr as $k => $v) { $home_uid_bind[] = ':user_id_' . $k; if($v == 0) { $home_uid_is_null = true; } } $home_uid_bind = implode(',', $home_uid_bind); } $list = new CHV\Listing; $list->setType('images'); $list->setOffset(0); $list->setLimit(24); $list->setItemsPerPage(24); $list->setSortType('date'); $list->setSortOrder('desc'); $list->output_tpl = 'image_plain'; if(is_array($home_uid_arr)) { $where = 'WHERE image_user_id IN('.$home_uid_bind.')'; if($home_uid_is_null) { $where .= ' OR image_user_id IS NULL'; } $list->setWhere($where); foreach($home_uid_arr as $k => $v) { $list->bind(':user_id_' . $k, $v); } } $list->exec(); $list->pagination = false; $handler::setVar('tabs', $tabs); $handler::setVar('list', $list); } $handler::setVar('doctitle', CHV\Settings::get('website_doctitle')); $handler::setVar('pre_doctitle', CHV\Settings::get('website_name')); if($logged_user['is_admin']) { $handler::setVar('user_items_editor', false); } } catch(Exception $e) { G\exception_to_error($e); } };