281 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
    
 | 
						|
/**************************************/
 | 
						|
/****     SuperSmash Framework     ****/
 | 
						|
/****     Created By SuperSmash    ****/
 | 
						|
/****     Started on: 25-04-2012   ****/
 | 
						|
/**************************************/
 | 
						|
use settings\settings;
 | 
						|
 | 
						|
if (!defined("SUPERSMASH_FRAMEWORK")){die("You cannot access this page directly!");}
 | 
						|
 | 
						|
    // This function will autoload the classes that are not yet included/loaded in the SuperSmash Framework
 | 
						|
    function __autoload($className) 
 | 
						|
    {
 | 
						|
        // We will need to lowercase everything
 | 
						|
        $parts = explode(DS, strtolower($className));
 | 
						|
 | 
						|
        // We need to remove the first part of the array (if the value is empty)  
 | 
						|
        // (This can happen because you came from the root namespace)
 | 
						|
        if (empty($parts[0]))
 | 
						|
        { 
 | 
						|
            array_shift($parts);
 | 
						|
        };
 | 
						|
 | 
						|
        // Build the filePath
 | 
						|
        
 | 
						|
        $classPath = implode(DS, $parts);
 | 
						|
        $classPath = str_replace('\\', DS, $classPath);        
 | 
						|
 | 
						|
        // We need to assign our filePath as the root (so php looks there when looking for files)
 | 
						|
        $file = ROOT . DS . $classPath .'.php';
 | 
						|
 | 
						|
        $file = str_replace('supersmash', 'SuperSmash', $file);
 | 
						|
 | 
						|
        // If the file exists, then include it else show an error
 | 
						|
        if (!file_exists($file))
 | 
						|
        {
 | 
						|
            // Failed to load the class we where looking for.
 | 
						|
            showError('autoLoad', array(addslashes($className)), E_ERROR);
 | 
						|
        }
 | 
						|
        require_once($file);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will handle all the errors that where given by PHP (this will be the default error handler)
 | 
						|
    function errorHandler($errorNumber, $errorMessage, $errorFile, $errorLine) {
 | 
						|
        if(!$errorNumber)
 | 
						|
        {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        
 | 
						|
        // Get the debug instance
 | 
						|
        $debug = loadClass('Debug');	
 | 
						|
        
 | 
						|
        // Trigger the error
 | 
						|
        $debug->triggerError($errorNumber, $errorMessage, $errorFile, $errorLine, debug_backtrace());
 | 
						|
 | 
						|
        // Don't execute PHP internal error handler
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will show the errorMessage
 | 
						|
    function showError($errorMessage = 'none', $arguments = null, $level = E_ERROR) 
 | 
						|
    {
 | 
						|
        // Let get a backtrace for deep debugging
 | 
						|
        $backtrace = debug_backtrace();
 | 
						|
        $calling = $backtrace[0];
 | 
						|
        
 | 
						|
        $language = system\SuperSmash\SuperSmash::language();
 | 
						|
        $message = $language->get($errorMessage);
 | 
						|
        
 | 
						|
        // Allow custom messages
 | 
						|
        if(!$message) 
 | 
						|
        {
 | 
						|
            $message = $errorMessage;
 | 
						|
        }
 | 
						|
        
 | 
						|
        // check if there are any arguments
 | 
						|
        if(is_array($arguments)) 
 | 
						|
        {
 | 
						|
            // Add the arguments to the message
 | 
						|
            $message = vsprintf($message, $arguments);
 | 
						|
        }
 | 
						|
        
 | 
						|
        // Get the debug instance
 | 
						|
        $debug = loadClass('Debug');
 | 
						|
 | 
						|
        // Add a break to the errorMessage
 | 
						|
        $message = "<br>" . $message;
 | 
						|
 | 
						|
        // Trigger the error
 | 
						|
        $debug->triggerError($level, $message, $calling['file'], $calling['line'], $backtrace);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will show an 404 error page
 | 
						|
    function show_404() 
 | 
						|
    {
 | 
						|
        // Get the debug instance
 | 
						|
        $debug = loadClass('Debug');
 | 
						|
 | 
						|
        // Show the error
 | 
						|
        $debug->showError(404);        
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will log a message to a specified filename log
 | 
						|
    function logMessage($message, $filename = DEBUG) 
 | 
						|
    {		
 | 
						|
        // Get the debug instance
 | 
						|
        $debug = loadClass('Debug');
 | 
						|
 | 
						|
        // Log the error
 | 
						|
        $debug->log($message, $filename);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function returns an item of the configuration file
 | 
						|
    function configuration($item, $type = 'SuperSmash') 
 | 
						|
    {   
 | 
						|
        // Get the config instance
 | 
						|
        $configuration = loadClass('Configuration');
 | 
						|
 | 
						|
        // Return the specific item
 | 
						|
        return $configuration->get($item, $type);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will set an item in the configuration file
 | 
						|
    function configurationSet($item, $value, $name = 'SuperSmash') 
 | 
						|
    {
 | 
						|
        // Get the config instance
 | 
						|
        $configuration = loadClass('Configuration');	
 | 
						|
 | 
						|
         // Set the specific configuration item in the configuration file
 | 
						|
        $configuration->set($item, $value, $name);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will save a configuration to the configuration.php file
 | 
						|
    function configurationSave($name) 
 | 
						|
    {
 | 
						|
        // Get the config instance
 | 
						|
        $configuration = loadClass('Configuration');	
 | 
						|
        
 | 
						|
        // Save the configuration to the configuration.php file
 | 
						|
        return $configuration->save($name);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will load the specific configuration in the configuration.php
 | 
						|
    function configurationLoad($file, $name, $array = false) 
 | 
						|
    {	
 | 
						|
        $configuration = loadClass('Configuration');
 | 
						|
        $configuration->load($file, $name, $array);
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will get an instance of the controller
 | 
						|
    function getInstance()
 | 
						|
    {
 | 
						|
        if (class_exists('application\\SuperSmash\\Controller', false)) 
 | 
						|
        {
 | 
						|
            return application\SuperSmash\Controller::getInstance();
 | 
						|
        } 
 | 
						|
        elseif (class_exists('system\\SuperSmash\\Controller', false)) 
 | 
						|
        {
 | 
						|
            return system\SuperSmash\Controller::getInstance();
 | 
						|
        } 
 | 
						|
        else 
 | 
						|
        {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    // This function will return the website URL and the URL information
 | 
						|
    function getUrlInformation() 
 | 
						|
    {
 | 
						|
        return loadClass('Router')->getUrlInformation();
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will load a specific className
 | 
						|
    function loadClass($className, $type = 'SuperSmash', $parameters = array()) 
 | 
						|
    {
 | 
						|
        // We need to create a className path for the correct class
 | 
						|
        if(strpos($className, '\\') === false) 
 | 
						|
        {
 | 
						|
            $className = $type . DS . $className;
 | 
						|
        }
 | 
						|
 | 
						|
        // We will need to lowercase everything
 | 
						|
        $class = strtolower($className);
 | 
						|
 | 
						|
        // We will need to change the SuperSmash directory to its capital case
 | 
						|
        $class = str_replace('supersmash', 'SuperSmash', $class);
 | 
						|
        
 | 
						|
        // Create a storageName for the class
 | 
						|
        $store_name = str_replace('\\', '_', $class);
 | 
						|
 | 
						|
        // Check if the class exists in the registry
 | 
						|
        $loaded = \system\SuperSmash\Registry::singleton()->load($store_name);
 | 
						|
        if($loaded !== null) 
 | 
						|
        {
 | 
						|
            return $loaded;
 | 
						|
        }
 | 
						|
 | 
						|
        // The class was not found in the registry so we need to look for the classFile ourself
 | 
						|
        // Split the class path in parts
 | 
						|
        $parts = explode('\\', $class);
 | 
						|
        // Build our filepath
 | 
						|
        $file = str_replace('\\', DS, implode('\\', $parts));
 | 
						|
 | 
						|
        // If we dont have the full path, we need to create it
 | 
						|
        if($parts[0] !== 'system' && $parts[0] !== 'application') 
 | 
						|
        {
 | 
						|
            // Check for needed classes in the Application library folder
 | 
						|
            if(file_exists(settings::getFilePath() . DS . settings::getApp() . DS . $file . '.php')) 
 | 
						|
            {
 | 
						|
                $file = settings::getFilePath() . DS . settings::getApp() . DS . $file .'.php';
 | 
						|
                $className = DS . 'application' . DS .  $className;
 | 
						|
            } 
 | 
						|
            else 
 | 
						|
            {
 | 
						|
                $file = SYSTEM . DS . $file .'.php';
 | 
						|
                $className = DS .'system' . DS . $className;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else 
 | 
						|
        {
 | 
						|
            $file = ROOT . $file .'.php';
 | 
						|
        }
 | 
						|
 | 
						|
        require_once ($file);
 | 
						|
 | 
						|
        if (!class_exists($className))
 | 
						|
        {
 | 
						|
            // We only want the className and dont need the parent paths
 | 
						|
            if (strlen(strstr($className, DS . "system" . DS . "SuperSmash" . DS))>0) $className = str_replace(DS . "system" . DS . "SuperSmash" . DS, "", $className);                    
 | 
						|
 | 
						|
            // Check if the class needs parameters
 | 
						|
            if (!empty($parameters))
 | 
						|
            {
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    $newClass = new ReflectionClass($className);
 | 
						|
                    $newClass = $newClass->newInstanceArgs($parameters);
 | 
						|
                } 
 | 
						|
                catch (Exception $exception)
 | 
						|
                {
 | 
						|
                    die("The class $className could not be loaded >>> <br/><br/> $exception");
 | 
						|
                }           
 | 
						|
            } 
 | 
						|
            else 
 | 
						|
            {
 | 
						|
                    // Create an object of the new class
 | 
						|
                    $newClass = '\system\\SuperSmash\\' . $className;
 | 
						|
                    $newClass = new $newClass;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        // Store the new object in the registry
 | 
						|
        \system\SuperSmash\Registry::singleton()->store($store_name, $newClass); 
 | 
						|
 | 
						|
        // return the new class.
 | 
						|
        return $newClass;
 | 
						|
    }
 | 
						|
 | 
						|
    // This function will redirect you to a specified URL after a specified waiting time
 | 
						|
    function redirect($url, $wait = 0) 
 | 
						|
    {
 | 
						|
        // Check if the URL is valid. If not then add our current websiteURL to it.
 | 
						|
        if(!preg_match('@^(mailto|ftp|http(s)?)://@i', $url)) 
 | 
						|
        {
 | 
						|
            $websiteURL = getUrlInformation();
 | 
						|
            $url = $websiteURL['websiteURL'] .'/'. $url;
 | 
						|
        }
 | 
						|
 | 
						|
        // Check if we need to wait a few seconds before we can redirect the user
 | 
						|
        if($wait >= 1) 
 | 
						|
        {
 | 
						|
            header("Refresh:". $wait .";url=". $url);
 | 
						|
        } 
 | 
						|
        else 
 | 
						|
        {
 | 
						|
            header("Location: ".$url);
 | 
						|
            die();
 | 
						|
        }
 | 
						|
    }
 | 
						|
?>
 |