/home/coolpkct/www/websites/cake3.cool.rocks/admin/classes/controller.php
<?php
defined('SK_ACCESS')||die('<h1>403: Forbidden</h1>');
$ds = DIRECTORY_SEPARATOR;
require_once "classes{$ds}skconfig.php";
require_once "classes{$ds}board.php";
require_once "classes{$ds}request.php";
require_once "classes{$ds}commandresolver.php";
require_once "classes{$ds}auth.php";
require_once "classes{$ds}filer.php";
require_once "classes{$ds}screen.php";
require_once "classes{$ds}loginscreen.php";
require_once "settings{$ds}constants.php";
require_once "classes{$ds}errorhandler.php";
require_once "classes{$ds}exceptionhandler.php";
require_once "classes{$ds}debug.php";
require_once "classes{$ds}helpers.php";
require_once "commands{$ds}showpages.php";
require_once "commands{$ds}setup.php";

class Controller
{
    private $config;
  
    private function __construct() {}
    
    /**
     * Setup new Controller instance
     */
    public static function run()
    {
        if (version_compare(PHP_VERSION, '5.2.0', '<')) {
            die('Your php version is '.PHP_VERSION.'. Showkase requires php version 5.2.0 or later. Contact your web host for how to upgrade.');
        }
        @ini_set('session.use_cookies', '1');
        @ini_set('session.use_only_cookies', '1');
        session_start();
        $instance = new Controller();
        $instance->init();
        $instance->handleRequest();
    }

    /**
     * Initialise Controller instance
     */
    public function init() {
        header('Content-Type: text/html; charset=utf-8');
        //Collect unexpected error messages and show nicely in Screen::getHtml
        ob_start();
        error_reporting(DEBUG ? E_ALL : E_ERROR);
        set_exception_handler(array('ExceptionHandler', 'handle'));
        $errorHandler = new ErrorHandler();
        if (
            version_compare(phpversion(), '5.0', '>=' )
            && version_compare(phpversion(), '5.3', '<' )
        ) {
            @ini_set('zend.ze1_compatibility_mode', '0');
        }
        if (DEBUG) @ini_set('display_errors', 1);
        @ini_set('html_errors', 1);
        $this->config = SkConfig::getInstance();
    }
    /**
     * Handle new request
     */
    public function handleRequest()
    {
        $request = new Request();
        if (!$this->config->siteIsSetup()) {
            $cmd = new Setup();
            $cmd->execute($request);
            return;
        }
        $this->checkLogin($request);
        $this->postMessages($request);
        $cmdResolver = new CommandResolver();
        $cmd = $cmdResolver->getCommand($request);
        $cmd->execute($request);        
    }
    
    /**
     * Post messages relating to passwords etc
     *
     * @param object request
     * @return void
     */
     private function postMessages(Request $request)
     {
          $cmd = $request->getProperty('cmd');
          if (file_exists($this->config->getAuthResetPath())) {
              Board::addMessage('Password reset file is active &ndash; delete the file immediatedly after changing your password.', 'error');
          }
          elseif (
              $_SESSION[SESSION_DEFAULT_PASS]
              && ($cmd != 'setup')
              && ($cmd != 'account')
              && ($cmd != 'repair')
              && ($cmd != 'files')
              && ($cmd != 'publish')
              && (!DEMO_MODE)
          ) {
            Board::addMessage('Installation password is still in use &ndash; please <a href="index.php?cmd=account" title="link to user admin screen">change your password</a>', 'warning');
          }
          if (
              DEMO_MODE
              && ($cmd != 'publish')
              ) {
              Board::addMessage('This is a demonstration version of Showkase. Some functions are disabled and changes will not be saved.', 'warning');
          }
     }
      
    /**
     * Checks login and creates login screen if necessary
     * Bypasses normal command mechanism
     *
     * @access public
     * @return void
     */
    function checkLogin(Request $request)
    {
        $auth = new Auth();
        $timeout = false;
        $elapsedTimeout = (
            isset($_SESSION[LOGIN_TIME])
            && (time() > ($_SESSION[LOGIN_TIME] + ELAPSED_TIMEOUT_SECONDS))
        );
        $inactivityTimeout = (
            isset($_SESSION[INACTIVITY_TIMEOUT])
            && (INACTIVITY_SECONDS > 0)
            && (time() - $_SESSION[INACTIVITY_TIMEOUT]) > INACTIVITY_SECONDS
        );
        if (
            $inactivityTimeout
            || (DEMO_MODE && $elapsedTimeout)
        ) {
            $timeout = true;
            Board::addMessage('Session timed out', 'warning');
        }
        $_SESSION[INACTIVITY_TIMEOUT] = time();
        $logout = (
              $request->propertyIsSet('cmd')
              && $request->getProperty('cmd') == 'logout'
          );
        if ($logout || !$auth->login() || $timeout) {
            $auth->logout();
            $screen = new loginScreen('Showkase &ndash; log-in', 'login');
            print $screen->getHtmlHead();
            print $screen->getContentHtml(array());
            print $screen->getFooter();
            exit;
       }
    }
}