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()); | 
						|
	} | 
						|
 | 
						|
}
 | 
						|
 |