chevereto-free/app/routes/route.index.php

223 lines
6.2 KiB
PHP
Raw Normal View History

2016-08-18 20:39:31 +00:00
<?php
/* --------------------------------------------------------------------
Chevereto
http://chevereto.com/
@author Rodolfo Berrios A. <http://rodolfoberrios.com/>
<inbox@rodolfoberrios.com>
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
2017-11-09 19:02:18 +00:00
$random_ids = G\random_values($limit['min'], $limit['max'], 100);
2016-08-18 20:39:31 +00:00
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']);
}
2017-11-09 19:02:18 +00:00
2016-08-18 20:39:31 +00:00
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 = 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);
}
};