. * * PHP version 5 * @copyright eSales Media 2012 * @author Benjamin Roth * @package legalAgeCheck * @license GNU/LGPL * @filesource */ namespace legalAgeCheck; use Contao\Environment; use Contao\Input; use Contao\InsertTags; use Contao\PageModel; use Contao\LayoutModel; use Contao\PageRegular; use Contao\FrontendTemplate; use Contao\Frontend; use Haste\Http\Response\JsonResponse; use Haste\Http\Response\Response; /** * Class LegalAgeCheck * * @copyright eSales Media 2012 * @author Benjamin Roth * @package Controller */ class LegalAgeCheck extends Frontend { /** * Template * @var string */ protected $strTemplate = 'agecheck_dialog'; /** * Perform age check */ public function performAgeCheck(PageModel $objPage, LayoutModel $objLayout, PageRegular $objPageRegular) { // Trigger ajax cookie authentication if (Environment::get('isAjaxRequest') && Input::get('do') == 'legalage_authentication') { if (!is_null(Input::get('legalage_commit'))) { static::sendResponse(array('status'=>(static::ajaxUnlockPage() ? 'OK' : 'FAILED'))); } else { static::preconditionFailed(); } } // Skip age check if passed before //if ($this->Session->get('legalAgeCheck_passed')) if ($this->Input->cookie('legalAgeCheck_passed') || $objPage->es_ext_agecheck_ignorePage) { // $this->Session->set('legalAgeCheck_passed', null); return; } // Get root page $objRootPage = PageModel::findByPk($objPage->rootId); // Cancel verification if age check is disabled if (is_null($objRootPage) || !$objRootPage->es_ext_agecheck || $objRootPage->es_ext_agecheck_exitPage == $objPage->id) return; // Get exit page $objExitPage = PageModel::findWithDetails($objRootPage->es_ext_agecheck_exitPage); if (is_null($objExitPage) || !$objExitPage->published) return; // Load dialog template $objTemplate = new FrontendTemplate($this->strTemplate); // Load modal box template //$objModalBoxTemplate = new FrontendTemplate('agecheck_dialog_template'); // Set template vars $objTemplate->title = $objRootPage->es_ext_agecheck_title; $objTemplate->text = str_replace(array("\r", "\n"),array("\\r","\\n"),$objRootPage->es_ext_agecheck_text); $objTemplate->btn_over_18 = $GLOBALS['TL_LANG']['MSC']['es_legalagecheck']['over_18']; $objTemplate->btn_under_18 = $GLOBALS['TL_LANG']['MSC']['es_legalagecheck']['under_18']; // $objTemplate->exitPageURL = $this->generateFrontendUrl($objExitPage->row(), null, null, true); $objTemplate->exitPageURL = $objExitPage->getAbsoluteUrl(); // $objTemplate->commitURL = 'system/modules/legalAgeCheck/ajax/Ajax.php?do=legalage_authentication&legalage_commit='.$this->createToken(); $objTemplate->commitURL = Frontend::addToUrl('do=legalage_authentication&legalage_commit='.$this->createToken()); //$objTemplate->modalBoxTemplate = addcslashes($objModalBoxTemplate->parse(), "\\'\"&\n\r"); // Add dialog code to page $GLOBALS['TL_BODY'][] = InsertTags::replaceInsertTags($objTemplate->parse()); } public static function ajaxUnlockPage() { if (!\Input::get('legalage_commit')) return false; /*if ($this->Input->get('legalage_commit') == $this->Session->get('legalAgeCheck_token')) { $this->Session->set('legalAgeCheck_passed', true); $this->Session->set('legalAgeCheck_token', null); }*/ if (\Input::get('legalage_commit') == $_SESSION['legalAgeCheck_token']) { //preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', \Environment::get('host'), $regs); preg_match('/(?P[a-z0-9][a-z0-9\-]{1,63}|)\.(?P[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', \Environment::get('host'), $regs); setcookie('legalAgeCheck_passed', true, 0, '/',$regs['subdomain'].'.'.$regs['domain']); unset($_SESSION['legalAgeCheck_token']); return true; } return false; } protected function createToken() { if (!$_SESSION['legalAgeCheck_token']) { $length = 32; $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $random_string = ""; for ($p = 0; $p < $length; $p++) { $random_string .= $characters[mt_rand(0, strlen($characters))]; } $_SESSION['legalAgeCheck_token'] = $random_string; } return $_SESSION['legalAgeCheck_token']; } private static function sendResponse($content) { $objResponse = new JsonResponse($content); $objResponse->send(); } private static function preconditionFailed() { $objResponse = new Response('Precondition failed',412); $objResponse->send(); } }