|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Controllers;
|
|
|
|
|
|
|
|
use App\Classes\Config;
|
|
|
|
use App\Classes\Db;
|
|
|
|
use App\Classes\Router;
|
|
|
|
use App\Classes\Session;
|
|
|
|
|
|
|
|
class IndexController extends PageController {
|
|
|
|
|
|
|
|
public function indexAction(): void
|
|
|
|
{
|
|
|
|
// Pull pages from cache
|
|
|
|
$pages = Db::getPages();
|
|
|
|
|
|
|
|
parent::routeAction(
|
|
|
|
array_search('home', array_column($pages, 'page', 'id')));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function captchaAction(): void
|
|
|
|
{
|
|
|
|
header('Content-type: image/jpeg');
|
|
|
|
|
|
|
|
if (!Session::exists('captcha')) {
|
|
|
|
Session::put('captcha', _randomStr(4, '0123456789'));
|
|
|
|
}
|
|
|
|
|
|
|
|
$imageWidth = 151;
|
|
|
|
$imageHeight = 51;
|
|
|
|
|
|
|
|
// Text
|
|
|
|
$textSize = 30;
|
|
|
|
$textFont = 'fonts/captcha.otf';
|
|
|
|
$text = Session::get('captcha');
|
|
|
|
|
|
|
|
// Generate position
|
|
|
|
$randPosX = rand(0, 40);
|
|
|
|
$randPosY = rand(35, 45);
|
|
|
|
|
|
|
|
// Calculate rotation from the position
|
|
|
|
$rotationFactorUp = 1.0 - (($randPosY - 40.0) / 5.0);
|
|
|
|
$rotationFactorDown = 1.0 - ((40.0 - $randPosY) / 5.0);
|
|
|
|
// Clamp between 0.0-1.0
|
|
|
|
$rotationFactorUp = max(0.0, min(1.0, $rotationFactorUp));
|
|
|
|
$rotationFactorDown = max(0.0, min(1.0, $rotationFactorDown));
|
|
|
|
$rotation = rand(-8 * $rotationFactorUp, 8 * $rotationFactorDown);
|
|
|
|
|
|
|
|
// Create image
|
|
|
|
$image = imagecreate($imageWidth, $imageHeight);
|
|
|
|
imagecolorallocate($image, 255, 255, 255);
|
|
|
|
|
|
|
|
// Render number
|
|
|
|
$textColor = imagecolorallocate($image, 0, 0, 0);
|
|
|
|
imagettftext($image, $textSize, $rotation, $randPosX, $randPosY,
|
|
|
|
$textColor, $textFont, $text);
|
|
|
|
|
|
|
|
// Render grid pattern
|
|
|
|
$lineColor = imagecolorallocate($image, 73, 106, 164);
|
|
|
|
$cord = 0;
|
|
|
|
for ($i = 1; $i <= 31; $i++) {
|
|
|
|
imageline($image, $cord, 0, $cord, 50, $lineColor);
|
|
|
|
imageline($image, 0, $cord, 150, $cord, $lineColor);
|
|
|
|
$cord = $cord + 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
imagejpeg($image);
|
|
|
|
exit();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function robotsAction(): void
|
|
|
|
{
|
|
|
|
$url = Config::c('APP_URL');
|
|
|
|
|
|
|
|
header('content-type: text/plain; charset=UTF-8');
|
|
|
|
echo <<< EOF
|
|
|
|
User-agent: *
|
|
|
|
Allow: /
|
|
|
|
Disallow: /admin
|
|
|
|
|
|
|
|
Sitemap: $url/sitemap.xml
|
|
|
|
EOF;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function sitemapAction(): void
|
|
|
|
{
|
|
|
|
$xml = new \SimpleXMLElement('<urlset/>');
|
|
|
|
|
|
|
|
// Config routes
|
|
|
|
$routes = array_column(Router::getRoutes(), '0');
|
|
|
|
|
|
|
|
// Remove /admin and /test pages
|
|
|
|
foreach ($routes as $key => $route) {
|
|
|
|
if (strpos($route, '/admin') !== false ||
|
|
|
|
strpos($route, '/test') !== false) {
|
|
|
|
|
|
|
|
unset($routes[$key]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($routes as $route) {
|
|
|
|
$url = $xml->addChild('url');
|
|
|
|
$loc = Config::c('APP_URL') . $route;
|
|
|
|
|
|
|
|
$url->addChild('loc', $loc);
|
|
|
|
}
|
|
|
|
|
|
|
|
header('content-type: text/xml; charset=UTF-8');
|
|
|
|
print($xml->asXML());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|