View file PF.Base/module/error/include/component/controller/404.class.php

File size: 3.92Kb
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * Display a 404 error
 * 
 * @copyright		[PHPFOX_COPYRIGHT]
 * @author  		Raymond Benc
 * @package  		Module_Error
 * @version 		$Id: 404.class.php 5846 2013-05-09 10:47:40Z Raymond_Benc $
 */
class Error_Component_Controller_404 extends Phpfox_Component 
{
	/**
	 * Controller
	 */
	public function process()
	{
		if (\Core\Route\Controller::$isApi) {
			header('Content-type: application/json');

			echo json_encode([
				'error' => 404,
				'uri' => $_SERVER['REQUEST_URI']
			]);
			exit;
		}

		$aRequests = Phpfox_Request::instance()->getRequests();
        
        if ($sPlugin = Phpfox_Plugin::get('error.component_controller_notfound_1')){eval($sPlugin); if (isset($mReturnPlugin)){ return $mReturnPlugin;}}
        
		$aNewRequests = array();
		$iCnt = 0;
		foreach ($aRequests as $sKey => $sValue)
		{
			if (!preg_match('/req[0-9]/', $sKey))
			{
				$aNewRequests[$sKey] = $sValue;
				
				continue;
			}
						
			if ($sValue == 'public')
			{
				continue;
			}
			
			$iCnt++;
			
			$aNewRequests['req' . $iCnt] = $sValue;
		}	
		
		if (isset($aNewRequests['req1']))
		{
			if ($aNewRequests['req1'] == 'gallery')
			{
				$aNewRequests['req1'] = 'photo';
			}
			elseif ($aNewRequests['req1'] == 'browse')
			{
				$aNewRequests['req1'] = 'user';
			}		
			elseif ($aNewRequests['req1'] == 'groups')
			{
				$aNewRequests['req1'] = 'group';
			}		
			elseif ($aNewRequests['req1'] == 'videos')
			{
				$aNewRequests['req1'] = 'video';
			}	
			elseif ($aNewRequests['req1'] == 'listing')
			{
				$aNewRequests['req1'] = 'marketplace';
			}				
		}
		
		if (isset($aNewRequests['req1']) && Phpfox::isModule($aNewRequests['req1']) && Phpfox::hasCallback($aNewRequests['req1'], 'legacyRedirect'))
		{
			$sRedirect = Phpfox::callback($aNewRequests['req1'] . '.legacyRedirect', $aNewRequests);	
		}
		
		if (isset($sRedirect) && $sRedirect !== false && !defined('PHPFOX_IS_FORCED_404'))
		{
			header('HTTP/1.1 301 Moved Permanently');
			
			if (is_array($sRedirect))
			{
				$this->url()->send($sRedirect[0], $sRedirect[1]);	
			}
			
			$this->url()->send($sRedirect);
		}
		
		if (Phpfox::getParam(array('balancer', 'enabled')))
		{
			$sDo = $this->request()->get(PHPFOX_GET_METHOD);
				
			if (preg_match('/\/file\/css\/(.*)_(.*)/i', $sDo, $aMatches))
			{
				$sContent = file_get_contents(Phpfox::getLib('server')->getServerUrl($aMatches[1]) . ltrim($sDo, '/'));
				
				$hFile = fopen(PHPFOX_DIR . ltrim($sDo, '/'), 'w+');
				fwrite($hFile, $sContent);
				fclose($hFile);				
				
				header("Content-type: text/css");
				echo $sContent;
				exit;
			}				
		}
		
		header("HTTP/1.0 404 Not Found");
		
		$sUrl = (isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : '');
		$sCurrentUrl = $_SERVER['REQUEST_URI'];
		$aParts = explode('?', $sCurrentUrl);
		$sNewUrl = $aParts[0];
		
		if (substr($sNewUrl, -3) == '.js')
		{
			exit(_p('javascript_file_not_found_dot'));
		}
		elseif (substr($sNewUrl, -4) == '.css')
		{
			exit(_p('css_file_not_found_dot'));
		}		
		
		if ($sUrl)
		{
			// If its an image lets create a small "not found" image
			if (substr($sUrl, -4) == '.gif' || substr($sUrl, -4) == '.png' || substr($sUrl, -4) == '.jpg' || substr($sUrl, -5) == '.jpeg') 
			{
				$sText = _p('not_found');
				$nW = 100;
		        $nH = 30;
		        $nLeft = 5;
		        $nTop = 5;
				$hImg = imagecreate($nW, $nH);
			    $nBgColor  = imagecolorallocate($hImg, 0, 0, 0);
		        $nTxtColor = imagecolorallocate($hImg, 255, 255, 255);
                imagestring($hImg, 5, $nLeft, $nTop,  $sText, $nTxtColor);
		        
		        ob_clean();
		        header('Content-Type: image/jpeg');
		        imagejpeg($hImg);        
				exit;		
			}	
		}
		
		$this->template()->errorClearAll();
		$this->template()->setTitle(_p('page_not_found'));
		$this->template()->setBreadCrumb(_p('page_not_found'));
		$this->template()->assign('aFilterMenus', array());
        return null;
	}
}