You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.5 KiB
112 lines
2.5 KiB
<?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()); |
|
} |
|
|
|
}
|
|
|