Skip to content

Commit

Permalink
Merge branch 'master' into new-themes
Browse files Browse the repository at this point in the history
  • Loading branch information
visavi committed Dec 29, 2018
2 parents e5d46d0 + 60b170f commit bf70577
Show file tree
Hide file tree
Showing 519 changed files with 10,152 additions and 8,014 deletions.
8 changes: 5 additions & 3 deletions .gitignore
Expand Up @@ -10,14 +10,16 @@ public/uploads/news/
public/uploads/photos/
public/uploads/pictures/
public/uploads/thumbnails/
public/uploads/smiles/
public/uploads/stickers/
public/uploads/blogs/
public/uploads/boards/
public/assets/modules/
app/Modules/
node_modules/
public/assets/css/compiled.css
public/assets/js/compiled.js
vendor
upgrade
public/assets/css/compiled.css
public/assets/js/compiled.js
composer.phar
.env
.idea/
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -3,6 +3,7 @@ language: php
php:
- 7.1
- 7.2
- 7.3

cache:
directories:
Expand Down
183 changes: 163 additions & 20 deletions app/Classes/Application.php
Expand Up @@ -2,50 +2,193 @@

namespace App\Classes;

use App\Models\Login;
use App\Models\User;
use DI\Container;
use FastRoute\Dispatcher;
use Illuminate\Database\Capsule\Manager as DB;
use Illuminate\Http\Request;
use Mobile_Detect;

class Application
{
public function __construct()
{
ob_start();
session_start();
date_default_timezone_set(setting('timezone'));

$this->cookieAuth();
$this->checkAuth();
$this->setSetting();
}

/**
* Запускает приложение
*/
public static function run()
public function run(): void
{
$router = self::getRouter();
$router = $this->getRouter();

if (! $router['target']) {
abort(404);
switch ($router[0]) {
case Dispatcher::FOUND:
echo $this->call($router);
break;
case Dispatcher::METHOD_NOT_ALLOWED:
abort(405);
break;
default:
abort(404);
break;
}
}

/**
* Вызывает контроллер
*
* @param array $router
* @return mixed
*/
private function call($router)
{
[, $controller, $params] = $router;

if (is_callable($router['target'])) {
$call = call_user_func_array($router['target'], $router['params']);
} else {
list($controller, $action) = self::getController($router);
$call = call_user_func_array([new $controller, $action], $router['params']);
if (isset($params['action'])) {
$controller[1] = $params['action'];
}

echo $call;
$container = new Container();
$container->set(Request::class, Request::createFromGlobals());

return $container->call($controller, $params);
}

/**
* Подготовливает пути из роутов
* Возвращает роутеры
*
* @param $router
* @return array
*/
private static function getController($router)
private function getRouter(): array
{
$target = explode('@', $router['target']);
$action = $router['params']['action'] ?? $target[1];
$dispatcher = require APP . '/routes.php';

return ['App\\Controllers\\'.$target[0], $action];
return $dispatcher->dispatch(server('REQUEST_METHOD'), server('PHP_SELF'));
}

/**
* Возвращает роутеры
* Авторизует по кукам
*
* @return array
* @return void
*/
private function cookieAuth(): void
{
if (empty($_SESSION['id']) && isset($_COOKIE['login'], $_COOKIE['password'])) {

$cookLogin = check($_COOKIE['login']);
$cookPass = check($_COOKIE['password']);

$user = User::query()->where('login', $cookLogin)->first();

if ($user && $cookLogin === $user->login && $cookPass === md5($user->password . env('APP_KEY'))) {
session_regenerate_id(1);

$_SESSION['id'] = $user->id;
$_SESSION['password'] = md5(env('APP_KEY') . $user->password);

$authorization = Login::query()
->where('user_id', $user->id)
->where('created_at', '>', SITETIME - 30)
->first();

if (! $authorization) {

Login::query()->create([
'user_id' => $user->id,
'ip' => getIp(),
'brow' => getBrowser(),
'created_at' => SITETIME,
]);
}

$user->update([
'visits' => DB::connection()->raw('visits + 1'),
'updated_at' => SITETIME
]);
}
}
}

/**
* Проверяет пользователя
*
* @return void
*/
private static function getRouter()
private function checkAuth(): void
{
return Registry::get('router')->match();
$request = Request::createFromGlobals();

if ($user = checkAuth()) {

Registry::set('user', $user);

setSetting([
'themes' => $user->themes,
'language' => $user->language,
]);

// Забанен
if ($user->level === User::BANNED && ! $request->is('ban', 'rules', 'logout')) {
redirect('/ban?user=' . $user->login);
}

// Подтверждение регистрации
if ($user->level === User::PENDED && setting('regkeys') && ! $request->is('key', 'ban', 'login', 'logout')) {
redirect('/key?user=' . $user->login);
}

// Получение ежедневного бонуса
if ($user->timebonus < SITETIME - 82800) {
$user->update([
'timebonus' => SITETIME,
'money' => DB::connection()->raw('money + ' . setting('bonusmoney')),
]);

setFlash('success', 'Получен ежедневный бонус ' . plural(setting('bonusmoney'), setting('moneyname')) . '!');
}
}
}

/**
* Устанавливает настройки
*
* @return void
* @throws \Exception
*/
private function setSetting(): void
{
$browser = new Mobile_Detect();

if (! getUser() || empty(setting('themes'))) {
if (! empty(setting('webthemes')) && ! $browser->isMobile() && ! $browser->isTablet()) {
setSetting(['themes' => setting('webthemes')]);
}
}

if (empty(setting('themes')) || ! file_exists(HOME . '/themes/' . setting('themes'))) {
setSetting(['themes' => 'default']);
}

if (empty(setting('language')) || ! file_exists(RESOURCES . '/lang/' . setting('language'))) {
setSetting(['language' => 'ru']);
}

/* Установка сессионных переменных */
if (empty($_SESSION['token'])) {
$_SESSION['token'] = str_random(8);
}

if (empty($_SESSION['protect'])) {
$_SESSION['protect'] = random_int(1000, 99999);
}
}
}

0 comments on commit bf70577

Please sign in to comment.