HEX
Server: Apache
System: Linux sg241.singhost.net 2.6.32-896.16.1.lve1.4.51.el6.x86_64 #1 SMP Wed Jan 17 13:19:23 EST 2018 x86_64
User: honghock (909)
PHP: 8.0.30
Disabled: passthru,system,shell_exec,show_source,exec,popen,proc_open
Upload Files
File: //opt/cpanel/ea-php54/root/usr/share/pear/RVSeagullMod/lib/RVSGL/rvsLibs/Publish.php
<?php
/* Reminder: always indent with 4 spaces (no tabs). */
// +---------------------------------------------------------------------------+
// WebSite:  http://www.rvglobalsoft.com
// Unauthorized copying is strictly forbidden and may result in severe legal action.
// Copyright (c) 2006 RV Global Soft Co.,Ltd. All rights reserved.
//
// =====YOU MUST KEEP THIS COPYRIGHTS NOTICE INTACT AND CAN NOT BE REMOVE =======
// Copyright (c) 2006 RV Global Soft Co.,Ltd. All rights reserved.
// This Agreement is a legal contract, which specifies the terms of the license
// and warranty limitation between you and RV Global Soft Co.,Ltd. and RV Site Builder.
// You should carefully read the following terms and conditions before
// installing or using this software.  Unless you have a different license
// agreement obtained from RV Global Soft Co.,Ltd., installation or use of this software
// indicates your acceptance of the license and warranty limitation terms
// contained in this Agreement. If you do not agree to the terms of this
// Agreement, promptly delete and destroy all copies of the Software.
//
// =====  Grant of License =======
// The Software may only be installed and used on a single host machine.
//
// =====  Disclaimer of Warranty =======
// THIS SOFTWARE AND ACCOMPANYING DOCUMENTATION ARE PROVIDED "AS IS" AND
// WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR ANY OTHER
// WARRANTIES WHETHER EXPRESSED OR IMPLIED.   BECAUSE OF THE VARIOUS HARDWARE
// AND SOFTWARE ENVIRONMENTS INTO WHICH RV SITE BUILDER MAY BE USED, NO WARRANTY OF
// FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.  THE USER MUST ASSUME THE
// ENTIRE RISK OF USING THIS PROGRAM.  ANY LIABILITY OF RV GLOBAL SOFT CO.,LTD. WILL BE
// LIMITED EXCLUSIVELY TO PRODUCT REPLACEMENT OR REFUND OF PURCHASE PRICE.
// IN NO CASE SHALL RV GLOBAL SOFT CO.,LTD. BE LIABLE FOR ANY INCIDENTAL, SPECIAL OR
// CONSEQUENTIAL DAMAGES OR LOSS, INCLUDING, WITHOUT LIMITATION, LOST PROFITS
// OR THE INABILITY TO USE EQUIPMENT OR ACCESS DATA, WHETHER SUCH DAMAGES ARE
// BASED UPON A BREACH OF EXPRESS OR IMPLIED WARRANTIES, BREACH OF CONTRACT,
// NEGLIGENCE, STRICT TORT, OR ANY OTHER LEGAL THEORY. THIS IS TRUE EVEN IF
// RV GLOBAL SOFT CO.,LTD. IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO CASE WILL
// RV GLOBAL SOFT CO.,LTD.'S LIABILITY EXCEED THE AMOUNT OF THE LICENSE FEE ACTUALLY PAID
// BY LICENSEE TO RV GLOBAL SOFT CO.,LTD.
// +---------------------------------------------------------------------------+
// $Id$
// +---------------------------------------------------------------------------+

/**
 * RvSiteBuilder publish libary
 *
 * @package RvsLibs
 * @author  Pairote Manunphol <pairote@rvglobalsoft.com>
 * @version $Revision$
 * @since   PHP 5.1
*/

if (class_exists('Publish_TaskRunner') === false) {
	class Publish_TaskRunner extends SGL_TaskRunner
	{

		function main($freeze=false)
		{
			$ret = array();
			$aTasks = array();
			if ($freeze === true) {
				$aTasks[] = array_shift($this->aTasks);
			} else {
				$aTasks = $this->aTasks;
			}

			foreach ($aTasks as $k => $oTask) {
				$return = $oTask->run($this->data);
				// log to system tmp dir if we're installing
				$err = is_a($return, 'PEAR_Error')
				? $return
				: 'ok';
				$ret[get_class($oTask)] = $return;
			}
			//var_dump($ret);
			return implode('', $ret);
		}
	}
}

if (class_exists('RvsLibs_Publish_Clean') === false) {
	class RvsLibs_Publish_Clean
	{
		/**
		 * จะลบก็ต่อเมื่อ ตอน publish website ระบุชื่อ folder name เท่านั้น
		 * ถ้าไม่ระบุ folder name path by doamain จะเท่ากับ /home/user/public_html
		 * ซึ่งจะไม่ลบ file หรือ folder ที่อยู่ภายใน /home/user/public_html นี้
		 *
		 * @param unknown_type $input
		 */
		function deletePublishFolder($projectId, $rvsUserId)
		{
			///Debug SGL::logMessage(null, PEAR_LOG_DEBUG);
			if (isset($aProjectPublishData) && is_array($aProjectPublishData)) {
				$aProjectPublishData = RvsLibs_Publish::getProjectPublishData($projectId, $rvsUserId);
				// Loop remove folder publish
				foreach ($aProjectPublishData as $k=>$v) {
					$aPathByDomain = RvsLibs_Publish::getPathByDomain($v->rvs_publish_domain);
					$publishPath = RvsLibs_File::buildPath(array($aPathByDomain['DIR'], $v->rvs_publish_path));
					if (is_dir($publishPath) && $v->rvs_publish_path) {
						RvsLibs_System::rm(array('-rf', $publishPath));
					}
				}
			}
		}
	}
}

if (class_exists('RvsLibs_Publish_Set') === false ) {
	class RvsLibs_Publish_Set extends RvsLibs_Publish_Clean
	{
		function PublishSetUserId($userId = null)
		{
			if (is_null($userId) === true) {

			} else {

			}
		}

		/**
		 * update publish data to table rvs_publish
		 *
		 * @param object $input
		 * @return array
		 */
		function updateRvsPublishData($project_id, $rvs_publish_domain, $UserFolder, $publishPath, $rvs_usr_id=null, $publishProtocal)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$rvs_usr_id = (is_null($rvs_usr_id) === true)
			               ? RvsLibs_User::getUserId()
			               : $rvs_usr_id;
			//  update Publish Data By ProjectId And PublishDomain And UserFolder And UsrId in rvs_publish and rvs_project table:Pornthip Phothong
			$aPublish = DaoFactory::Publish()->updatePublishDataByProjectIdAndPublishDomainAndUserFolderAndUsrId($project_id, $rvs_publish_domain, $UserFolder, $publishPath, $rvs_usr_id, $publishProtocal);
			return (isset($aPublish)) ? true : false;
		}

		/**
		 * Insert publish data to table rvs_publish
		 *
		 * @param object $input
		 * @return array
		 */
		function addRvsPublishData($project_id, $rvs_publish_domain, $UserFolder, $publishProtocal)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			// insert Publish Data in rvs_publish table : Pornthip Phothong
			$aPublish = DaoFactory::Publish()->insertPublishData($project_id, $rvs_publish_domain, $UserFolder, $publishProtocal);
			return (isset($aPublish) && $aPublish) ? true : false;
		}
	}
}

if (class_exists('RvsLibs_Publish_Get') === false) {
	class RvsLibs_Publish_Get extends RvsLibs_Publish_Set
	{
		/**
		 *
		 * @param $projectId
		 * @return Array
		 *
			(
			[68d364dc7edea48e8fa464cf8537e38c] => stdClass Object
			(
			[project_id] => 68d364dc7edea48e8fa464cf8537e38c
			[rvs_publish_protocal] => http
			[rvs_publish_domain] => 192.168.1.114
			[rvs_publish_path] => /testforums
			)
			)
			or PEAR error in failure.
			*/
		function getProjectPublishData($projectId=null)
		{
			///Debug SGL::logMessage(null, PEAR_LOG_DEBUG);
			$res = DaoFactory::Project()->findPublishDataByProjectId($projectId);
			if (SGL::isError($res) === true) {
				return SGL::raiseError(
				$res->getMessage()
				);
			}
			return $res;
		}

		function getPublishPath($projectId)
		{
			if (empty($projectId)) {
				return '';
			}
		    $publishPath = '';
		    $res = RvsLibs_Publish::getProjectPublishData($projectId);
		    if (SGL::isError($res) === true) {
		        return SGL::raiseError(
		        $res->getMessage()
		        );
		    }
		    //GET DOMAIN PATH ON DB
		    if (isset($res['$projectId']->rvs_domain_path) === true && $res['$projectId']->rvs_domain_path != '') {
		    	return $res['$projectId']->rvs_domain_path;
		    }
		    //GET DOMAIN PATH ON CPANEL TAG
		    if(isset($res[$projectId]->rvs_publish_domain) && $res[$projectId]->rvs_publish_domain != '') {
		        $aDNS = RvsLibs_Publish::getPathByDomain($res[$projectId]->rvs_publish_domain);
		        if (SGL::isError($aDNS) === true) {
		            return SGL::raiseError(
		            $aDNS->getMessage()
		            );
		        }
		        $publishPath = RvsLibs_File::buildPath(array($aDNS['DIR'], $res[$projectId]->rvs_publish_path));
		    }
		    return $publishPath;
		}

		function getPhpEchoXmlLine($matches)
		{
			var_dump($matches);
		}

		/**
		 * Get DIR by domain name
		 * @param $domain
		 * @return DIR of Domain
		 */
		function getPathByDomain($domain)
		{
			// optimize :nipaporn and modify cpHandle
			$oCp = CpHandle::factory();
			if(SGL::isError($oCp) === true) {
				return $oCp;
			}
			return $oCp->getRealDIRbyDomain($domain);
		}

		function getPageFilename($pagename)
		{
			$pagename = RvsLibs_String::trim($pagename);
			$pagename = preg_replace('/\/|\?|\ |\./' , '-', $pagename);
			$pagename = preg_replace('/&/' , '-and-', $pagename);
			$pagename = preg_replace('/#/' , '_', $pagename);
			$pagename = RvsLibs_Url::url_encode($pagename);
		/*
			if (strlen($pagename) > 250) {
				// %D0 %A0 %D0 %88 %D0 - -and- %A1 %E2 %80 %D0 %82 %D0 %A1 %D0
				$pagename = substr($pagename, 0, 247);

				// จาก ท้าย มาจนถึง % มีกี่ตัว ถ้า มี 0, 1 ตัว ให้ตัด อักขระ เพิ่มอีก จนถึงตัว % ที่เจอ
				// %D0 %A0 %D0 %88 %D0 - -and- %A1 %E2 %80 %
				// %D0 %A0 %D0 %88 %D0 - -and- %A1 %E2 %80 %A
				$pagename = preg_replace('/%[^%]*$/', '', $pagename);

				// ใส่ running number [0-9a-z]
				$oPublishReg = Publish_Registry::singleton();
				$runningNo = $oPublishReg->get('runningNo') + 1;
				$pagename = $pagename . '_' . $runningNo;
				$oPublishReg->set('runningNo', $runningNo);
			}
		*/
			return $pagename;
		}

	/**
     * Get url block login
     *
     * @param String $projectId
     * @return String - Url block login
     */
    function getUrlBlogLogin($projectId)
    {
       SGL::logMessage(null, PEAR_LOG_DEBUG);

       $res = RvsLibs_Publish::getProjectPublishData($projectId);
       $protocal = (defined(SSL_MODE) == true && SSL_MODE == 1) ? 'https://' : 'http://';

       return (count($res) > 0)
                        ? $protocal . $res[$projectId]->rvs_publish_domain . $res[$projectId]->rvs_publish_path . '/login/index.php'
                        : $protocal . 'yourdomain.com' . '/login/index.php';
    }

		/**
		 * Get Layout by page id
		 *
		 * @param string $pageId
		 * @return array
		 */
		function getLayoutTemplate($pageId)
		{
			$aRes = DaoFactory::OutSuggestion()->findNewLayoutByTemplateId($pageId, 'getarray');
			$aReturn = array();
			foreach ($aRes as $k => $v) {
				$aReturn[] = $v['layout_template_id'];
			}
			return $aReturn;
		}

		function getSideDataBlog($sideConfig, $projectId, $step3 = false)
		{
			if (!$sideConfig || !$projectId) {
				return '';
			}
			require_once SGL_MOD_DIR . '/sitebuilder/classes/SideMgr.php';
			$oSide = new SideMgr();
			$sideValue = $oSide->getSideVal($sideConfig, $projectId);
			//fixed PHPMD scan 07/07/2554
			//$bgBlogColor = ($sideValue) ? '#f3e5a8' : '#CCCCCC';
			if ($sideConfig == 'SIDE1' || $sideConfig == 'SIDE2') {
				$width = '160px';
			} else {
				$width = '96%';
			}

			if (RvsLibs_String::strtolower($sideConfig) == 'side1' || RvsLibs_String::strtolower($sideConfig) == 'side2') {
				// side1 , side2
				if ($sideValue != '') {
					$classPreviewNormal = 'EditPreviewCurrent';
					$classPreviewHover = 'EditSideHover';
				} else {
					$classPreviewNormal = 'EditSideNormal';
					$classPreviewHover = 'EditSideHover';
				}
			} else {
				// top , footer
				if ($sideValue != '') {
					$classPreviewNormal = 'EditPreviewCurrent';
					$classPreviewHover = 'EditSideHover';
				} else {
					$classPreviewNormal = 'EditSideNormal';
					$classPreviewHover = 'EditSideHover';
				}
			}
			$sideConfigTran = RvsLibs_String::translate($sideConfig);
			$side = RvsLibs_String::translate('EMBED CODE section', 'vprintf', array('sectionname' => $sideConfigTran));
			$sideUrl = SGL_BASE_URL . '/' . INDEX_PHPSU . '/sitebuilder/side/side_config/' . $sideConfig;

			if ($step3 == true) {
				$side1Code = <<<EOF
<!-- START BLOCK SITE $sideConfig -->
<div class="$classPreviewNormal" id="side_$sideConfig" idside="side_$sideConfig" url="$sideUrl"
    onmouseover="edfaultBorderIf(this.id, '$classPreviewHover');parent.jQuery.sitebuilder.editside.SwitchClassOver(parent.jQuery(this));"
    onmouseout="edfaultBorderIf(this.id, '$classPreviewNormal');parent.jQuery.sitebuilder.editside.SwitchClassOut(parent.jQuery(this));"
    onclick="parent.jQuery.sitebuilder.editside.OpenSide(parent.jQuery(this));"
    style="width: $width; cursor:pointer;"
>
$side
    <div align="right">' . RvsLibs_String::translate('Edit') . '</div>
</div>
<!-- START BLOCK SITE -->
EOF;
			} else {
				$side1Code = '<link href="' . SGL_BASE_URL . '/themes/default/sitebuilder/css/style.php" rel="stylesheet" type="text/css">';
				$side1Code .= '<div class="' . $classPreviewNormal . '" id="side_' . RvsLibs_String::strtolower($sideConfig) . '" style="width:' . $width . ';">' . $side . '</div>';
			}
			return $side1Code; //EMBED CODE TOP Section edit
		}

		function getAllSideId()
		{
			return array('TOP', 'BOTTOM', 'SIDE1', 'SIDE2');
		}

		function getEMBEDSideValue($projectId, $sideConfig)
		{
			///Debug SGL::logMessage(null, PEAR_LOG_DEBUG);
			//fixed PHPMD scan 07/07/2554
			return  DaoFactory::Side()->findSideIdByProjectId($projectId, RvsLibs_String::strtolower($sideConfig), 'getone', array('side_value'));
		}


		/**
		 * get componect block code
		 * เรียกไปยัง c{Component}UserMgr->publishExtraCode เพื่อขอข้อมูลของ code ที่จะให้เอาไปแสดงใน sode block ต่างๆ
		 *
		 * @param <string> $componentName
		 * @return <array> ; array('side_{componentName}_top' => 'Top');
		 */

		function getComponentPublishExtraCode($componentName, $loadAllBlockStyle=false)
		{

			/*
			 @TODO code ส่วนนี้ เป็น code ที่จะให้งานจริง แต่ comment เอาไว้เนื่องจากจะต้องไปปรับใน function publishExtraCode ใน c{Component}UserMgr ต่างๆกอน ถึงจะเห็นผล
			 $oMainComponent = MainComponent::singleton();
			 $oComponent = $oMainComponent->callComponentUser($componentName);
			 $aComponentExtraCodeConf = $oComponent->publishExtraCode();
			 */
			$oMainComponent = MainComponent::singleton();
			$oComponent = $oMainComponent->callComponentUser($componentName);
			if (empty($loadAllBlockStyle)) {
				$aComponentExtraCodeConf = $oComponent->publishExtraCode();
			} else {
				$aComponentExtraCodeConf = $oComponent->publishExtraCode($loadAllBlockStyle);
			}

			/// START Warning: นี่เป็นการจำลอง data ที่จะ return ออกไปเฉยๆ ไม่ใช่ data จริงๆ
			$cName = RvsLibs_String::strtolower($componentName);
			$aComponentExtraCode = array(
	            "{$cName}_side1" => array(
	                'codeForStaticpage' => "",
	                'codeForDynamicpage' => "",
	                'loadInSite' => 'side1',
	                'isUseinallpage' => true,
	                'isDisplayOnPublishOnly' => false,
				),
	            "{$cName}_side2" => array(
	                'codeForStaticpage' => "",
	                'codeForDynamicpage' => "",
	                'loadInSite' => 'side2',
	                'isUseinallpage' => true,
	                'isDisplayOnPublishOnly' => false,
				),
	            "{$cName}_top" => array(
	                'codeForStaticpage' => "",
	                'codeForDynamicpage' => "",
	                'loadInSite' => 'top',
	                'isUseinallpage' => true,
	                'isDisplayOnPublishOnly' => false,
				),
	            "{$cName}_bottom" => array(
	                'codeForStaticpage' => "",
	                'codeForDynamicpage' => "",
	                'loadInSite' => 'bottom',
	                'isUseinallpage' => true,
	                'isDisplayOnPublishOnly' => false,
				),
			);
			// optimize :nipaporn
			return array_merge($aComponentExtraCode, $aComponentExtraCodeConf);
		}
	}
}

if (class_exists('RvsLibs_Publish_Validate') === false ) {
	class RvsLibs_Publish_Validate extends RvsLibs_Publish_Get
	{
		function isUsageOnlineFom($pageData)
		{
			if (preg_match_all('/"formId[0-9a-zA-Z]+"/i', $pageData, $aMatch)) {
				return true;
			}

			if(preg_match_all('/DragAndDropForm_/i', $pageData, $aMatch)) {
				return true;
			}
			return (preg_match_all("/id\s*=\s*\"onlineForm/i", $pageData, $aMatch)) ? true : false;
		}

		function isPagenameExists($pagename)
		{
			$oPublishReg = Publish_Registry::singleton();
			$aPagenameList = $oPublishReg->get('pagenameList', 'count', $pagename);
			// optimize :nipaporn
			return (is_null($aPagenameList) === true)
				   ? false
				   : true;
		}

		function isComponent($componentId)
		{
			return (is_null($componentId) === true || $componentId == '' || $componentId == '0')
				    ? false
				    : true;
			// TODO :: เช็คว่ามี component นี้มีอยู่จริงหรือไม่
		}
	}
}

if (class_exists('RvsLibs_Publish') === false) {
	class RvsLibs_Publish extends RvsLibs_Publish_Validate
	{
		function taskLists()
		{
			return array(
			/*
			 * Site wide task list
			 */
			// Register deault values
              'PublishTask_RegisterTask'
            // List all file and forder to copy
			, 'PublishTask_PreBuildPage'
			// taskList()
			// 1. PublishTask_ListFileData
			// 2. PublishTask_MakeFolders
			// 3. PublishTask_ChangeTemplateVariables  // เพิ่มตัวแปร
			// 4. PublishTask_ComplierStaticDataForDynamic
			//-generate navigator
			//-generate pathWay TODO
			//-generate icon config by page TODO
			// Register default values to GAIP
			, 'PublishTask_ComplierStaticData'

			/*
			 * Page Task lists
			 */
			// Register values in page data to GAIP
			// replace IMAGE_URL, PUBLISH_URL
			, 'PublishTask_ComplierDynamicData'
			// Build Pages replace ตัวแปรต่างๆ
			, 'PublishTask_BuildPages'

			/*
			 * Site wide task list - after build page
			 */
			, 'PublishTask_PostBuildPage'
			// taskList()
			// 1. PublishTask_ProjectBackUpDatabase
			// 2. PublishTask_RemoveBeforePublish
			// 3. PublishTask_MakeFiles
			// 4. PublishTask_UpdateNavigaterCss
			// 5. PublishTask_UpdateFlashIndex
			// 6. PublishTask_ChangePermission
			// 7. PublishTask_FixedHtaccessFile
			// 8. PublishTask_ComponentPublishConfig
			// 9. PublishTask_MakeProjectConfig
			, 'PublishTask_SendTemplateStat'
			);
		}

		/**
		 * Enter description here...
		 *
		 * @param <string> $loadPublishTask
		 * @param <array> $aProjectPageId
		 * @param <array> $aCustomTask; Custom taks
		 * @return unknown
		 */

		function Init($loadPublishTask, $aData=null, $aCustomTask=null, $freeze=true)
		{
			SGL::logMessage('run task::' . $loadPublishTask, PEAR_LOG_DEBUG);
			$generalAPIFile = RvsLibs_File::buildPath(array(SGL_MOD_DIR, 'sitebuilder', 'classes', 'GeneralAPI.php'));

			require_once $generalAPIFile;
			/// Load Task File
			RvsLibs_Publish::_loadDefaultClass();
			//fixed PHPMD scan 07/07/2544
			//$aTaskFiles = array();
			$loadPublishTask = "{$loadPublishTask}";
			$TaskFiles = "Task{$loadPublishTask}";
			SGL::logMessage($TaskFiles, PEAR_LOG_DEBUG);
			$res = RvsLibs_Publish::_loadTaskFile($TaskFiles);
			if (SGL::isError($res)) {
				SGL::logMessage($res, PEAR_LOG_DEBUG);
				return $res;
			}
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$oPublishReg = Publish_Registry::singleton(); /// Warning: in freeze mode usage it
			$init = new Publish_TaskRunner();
			if (is_null($aData) === false) {
				$init->addData($aData);
			}
			$aTask = (is_null($aCustomTask) === true) ? RvsLibs_Publish::taskLists() : $aCustomTask;
			/// Check Class in task list
			foreach (RvsLibs_Publish::taskLists() as $v) {
				if (class_exists($v) === false) {
					return SGL::raiseError(
                'Find not found class ' . $v
					);
				}
			}

			if (is_scalar($aCustomTask)) {
				$init->addTask(new $aCustomTask);
			} else {
				foreach ($aTask as $task) {
					$init->addTask(new $task);
				}
			}
			$res = $init->main($freeze);
			return $res;
		}

		function _loadDefaultClass()
		{
			$aTaskFiles = array('Registry', 'PublishTaskInf', 'CommonTask');
			foreach ($aTaskFiles as $taskFile) {
				$res = RvsLibs_Publish::_loadTaskFile($taskFile);
				if (SGL::isError($res)) {
					return $res;
				}
			}
			$generalAPIFile = RvsLibs_File::buildPath(array(SGL_MOD_DIR, 'sitebuilder', 'classes', 'GeneralAPI.php'));
			require_once $generalAPIFile;
		}

		function freeze()
		{
			RvsLibs_Publish::_loadDefaultClass();
			//SGL::logMessage('***************************befor Freeze_Registry************', PEAR_LOG_DEBUG);
			return Publish_Freeze_Registry::freezer();
		}

		function unfreeze()
		{
			RvsLibs_Publish::_loadDefaultClass();
			Publish_Freeze_Registry::unfreezer();
		}

		function cleanFreezer()
		{
			Publish_Freeze_Registry::cleanFreezer();
		}

		function getRegistry()
		{
			RvsLibs_Publish::_loadDefaultClass();
			$oPublishReg = Publish_Registry::singleton();
			return $oPublishReg;
		}
		/**
		 * Include publish file
		 *
		 * @param <string> $task
		 * @access private
		 * @return bool; Returns TRUE on success or PEAR::ERROR on failure.
		 */
		function _loadTaskFile($taskFile)
		{
			/// Lookup publish task file
			$loadPublishTaskFile = RvsLibs_File::buildPath(array(SGL_MOD_DIR, 'sitebuilder', 'classes', 'Publish', $taskFile . '.php'));
			if (file_exists($loadPublishTaskFile) === false) {
				/// return Pear error if cannot found publish task file
				return SGL::raiseError(
                'Find not found Publish Task ' . $loadPublishTask
				);
			}
			require_once $loadPublishTaskFile;
			return true;
		}
	}
}

if (class_exists('Publish_Freeze_Registry') === false ) {
	class Publish_Freeze_Registry
	{
		public function freezer()
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			//fixed memory limit
			$oldMemory = @ini_get('memory_limit');
			$oldTimeOut = (int)@ini_get('max_execution_time');
			RvsLibs_Project::setMaximumMemory($oldMemory, $oldTimeOut);
			
			$aFreezeData = array();
			$aFreezeData['Publish_Registry'] = Publish_Registry::singleton();
			$aFreezeData['GeneralAPI'] = GeneralAPI::singleton();
			$oFreezeData = serialize($aFreezeData);
			unset($aFreezeData);
			if (SGL::isError($oFreezeData) === true) {
				return $oFreezeData;
			}
			$freezeFile = RvsLibs_File::buildPath(array(SGL_TMP_DIR, Publish_Freeze_Registry::getFreezeId()));
			if (file_exists($freezeFile) === true) {
				RvsLibs_System::unlink($freezeFile);
			}
			$fd = RvsLibs_File::fopen($freezeFile, 'w+');
			if (SGL::isError($fd) === true) {
				return $fd;
			}

			SGL::logMessage("check memory SB= 0 write path:" . $freezeFile, PEAR_LOG_DEBUG);
			$usage = memory_get_usage();
			//$peak = memory_get_peak_usage();
			$memoryLimit = @ini_get('memory_limit');
			SGL::logMessage("check memory SB= usage byte:" . $usage, PEAR_LOG_DEBUG);
			//SGL::logMessage("check memory SB= peak byte:" . $peak, PEAR_LOG_DEBUG);
			SGL::logMessage("check memory SB= limit byte:" . $memoryLimit - $usage, PEAR_LOG_DEBUG);
			if (($memoryLimit - $usage) < ($memoryLimit*0.1)) {
				@ini_set('memory_limit', '-1'); //set no memory_limit
				@set_time_limit(0); //set no memory_limit
				SGL::logMessage('=== set_time_limit(0); > no time limit ==' , PEAR_LOG_DEBUG);
				SGL::logMessage("check memory SB low memory", PEAR_LOG_DEBUG);
			}
			$gzFreezeData = gzcompress($oFreezeData, 9);

			//SGL::logMessage("check memory SB= 2 byte:" . strlen($oFreezeData), PEAR_LOG_DEBUG);
			RvsLibs_File::fwrite($fd, ($gzFreezeData === false) ? $oFreezeData : $gzFreezeData);
			RvsLibs_File::fclose($fd);
			unset($oFreezeData);
			unset($gzFreezeData);
			//@ini_restore('memory_limit');
			SGL::logMessage("check memory SB= 2 byte:" . memory_get_usage(), PEAR_LOG_DEBUG);
		}

		private function getFreezeId()
		{
			return 'freeze_' . md5('Publish_Freeze_Registry_' . SGL_Session::get('key'));
		}

		public function cleanFreezer()
		{
			$freezeFile = RvsLibs_File::buildPath(array(SGL_TMP_DIR, Publish_Freeze_Registry::getFreezeId()));
			if (file_exists($freezeFile) === true) {
				RvsLibs_System::unlink($freezeFile);
			}
		}

		public function unfreezer()
		{
			$freezeFile = RvsLibs_File::buildPath(array(SGL_TMP_DIR, Publish_Freeze_Registry::getFreezeId()));
			if (file_exists($freezeFile) === true) {
				$afrezeData = RvsLibs_File::file($freezeFile);
				$gzFrezeData = join('', $afrezeData);

				$usage = @memory_get_usage();
				$memoryLimit = @ini_get('memory_limit');
				if (($memoryLimit - $usage) < ($memoryLimit*0.1)) {
					@ini_set('memory_limit', '-1'); //set no memory_limit
					@set_time_limit(0); //set no memory_limit
					SGL::logMessage('=== set_time_limit(0); > no time limit ==' , PEAR_LOG_DEBUG);
					SGL::logMessage("check memory SB low memory", PEAR_LOG_DEBUG);
				}
				SGL::logMessage("Start gzuncompress:", PEAR_LOG_DEBUG);
				$frezeData = gzuncompress($gzFrezeData);
				SGL::logMessage("End gzuncompress:", PEAR_LOG_DEBUG);

				$frezeData = ($frezeData === false) ? $gzFrezeData : $frezeData;
				//fixed PHPMD scan 07/07/2544
				RvsLibs_System::unlink($freezeFile);

				static $instance;
				$instance = @unserialize($frezeData);

				unset($gzFrezeData);
				/// TODO : เพื่อความถูกต้องควรตรวจสอบ $instance ว่าเป็น Object ก่อน ยังไม่ได้ทำ
				$oTest["Publish_Registry"] = Publish_Registry::singleton(false, $instance["Publish_Registry"]);
				$oTest["GeneralAPI"] = GeneralAPI::singleton(false, $instance["GeneralAPI"]);

				foreach ($oTest as $k => $v) {
					if (get_class($instance[$k]) != get_class($v)) {
						/// TODO : ???????????
						return false;
					}
				}
			} else {
				//fixed PHPMD scan 07/07/2554
				Publish_Registry::singleton();
				GeneralAPI::singleton();
			}
		}
	}
}
/**
 * Tasl Register Publish
 * @author parinya
 *
 */

if (class_exists('PublishTask_RegisterTask') === false) {
	class PublishTask_RegisterTask extends SGL_Task
	{
		public function run($data = null)
		{

			Publish_Freeze_Registry::cleanFreezer();
			/// call class Publish_TaskRegister{PublishTask}
			$oPublishTask = Publish_TaskRegister::singleton();
			if ($oPublishTask === false) {
				/// return Pear error if cannot call function singleton of publish task
				return SGL::raiseError(
                'Cannot call function singleton of Publish_TaskRegister'
                );
			}
			$oPublishTask->oParent = $oPublishTask;
			$aSetupConstantsTaskList = $oPublishTask->taskList();
			foreach ($aSetupConstantsTaskList as $task) {
				$res = $oPublishTask->{$task}();
				if (SGL::isError($res) === true) {
					return SGL::raiseError(
                    'Publish_TaskRegister->' . $task . ' has problem.' . $res->getMessage()
					);
				}
			}
			return true;
		}
	}
}
/**
 * Task Register User DNS
 * @author parinya
 *
 */
if (class_exists('PublishTask_RegisterUserDNS') === false) {
	class PublishTask_RegisterUserDNS extends SGL_Task
	{
		public function run($data = null)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			Publish_Freeze_Registry::cleanFreezer();
			$oRegisterUserDNSTask = Publish_TaskRegisterUserDNS::singleton();
			$oRegisterUserDNSReg = Publish_Registry::singleton();
			$aDomain = RvsLibs_User::getUserDNS('1');
			$sqlWaitTimeout = $oRegisterUserDNSReg->get('sql_wait_timeout');
			foreach ($aDomain as $kDomain => $vDomain) {
				if (is_null($oRegisterUserDNSReg->get('userDns', $vDomain)) === true) {
					$ip = $oRegisterUserDNSTask->gethostbyname($vDomain);
					$oRegisterUserDNSReg->set('userDns', array('domain' => $vDomain, 'ip' => $ip));
				}
				$timeOut = RvsLibs_String::getExecuteTime($sqlWaitTimeout);
				if ($timeOut < 15) {
					SGL::logMessage("timeout >>>>", PEAR_LOG_DEBUG);
					$oRegisterUserDNSReg->set('timeout', 'YES');
					break;
				}
			}
		}
	}
}

if (class_exists('PublishTask_ComplierStaticData') === false ) {
	class PublishTask_ComplierStaticData extends SGL_Task
	{
		public function run($data = null)
		{
			/// Call class Publish_TaskComplierStaticData
			$oPublishTask = Publish_TaskComplierStaticData::singleton();
			$aComplierStaticDataTask = $oPublishTask->taskList();
			foreach ($aComplierStaticDataTask as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Publish_TaskComplierStaticData->' . $task . ' has problem.'
                    );
				}
				$oGeneralAPI = GeneralAPI::singleton();
				$oGeneralAPI->registerStatic($k, $val);
			}
		}

		function _registerAPIData($key, $val)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishReg->set('apiRegisStaticData', array('api_key' => $key, 'api_value' => $val));
		}
	}
}

if (class_exists('PublishTask_ComplierDynamicData') === false) {
	class PublishTask_ComplierDynamicData extends SGL_Task
	{

		public function run($data = null)
		{
			require_once SGL_MOD_DIR . '/sitebuilder/classes/Publish/CommonTask.php';
			/// Call class Publish_TaskComplierStaticData
			$oPublishReg = Publish_Registry::singleton();
			$projectId = $oPublishReg->get('project_id');
			$publishUrl = $oPublishReg->get('publishUrl');
			$publishPath = $oPublishReg->get('publishPath');
			$iUikit = $oPublishReg->get('isUikit');
			$isResponsive = $oPublishReg->get('isResponsiveTemplate');

			$oPublishTask = Publish_TaskComplierDynamicData::singleton();
			/// แก้ปัญหา time out
			$sqlWaitTimeout = $oPublishReg->get('sql_wait_timeout');
			$encode_page_list = $oPublishReg->get('encode_page_list');
			$timeout = $oPublishReg->get('timeout');
			if ($encode_page_list != '' && $timeout === 'YES') {
				$aProjectPageId = RvsLibs_Util::decodeArray($encode_page_list);
				$oPublishReg->set('timeout', 'NO');
			} else {
				$_aProjectPageId = $oPublishReg->get('pageData');
				$aProjectPageId = (is_null($_aProjectPageId) === true) ? array() : array_keys($_aProjectPageId);
			}
			if( !ini_get('safe_mode') ){
				set_time_limit(60);
			}
			$aTaskList = $oPublishTask->taskList();
			$oGeneralAPI = GeneralAPI::singleton();
			$oGeneralAPI->publishPath = $publishPath;
			$oGeneralAPI->publishUrl = $publishUrl;
			$oGeneralAPI->isCompoDB = $oPublishReg->get('isComponentDB');
			$oGeneralAPI->getSourceMode = $oPublishReg->get('action');
			if (count($aProjectPageId) > 0) {
				while ($projectPageIdId = array_pop($aProjectPageId)) {
					foreach ($aTaskList as $k => $v) {
						$val = $oPublishTask->{$v}($projectPageIdId);

						if (SGL::isError($val) === true) {
							return SGL::raiseError(
	                        'Cannot call singleton function of publish task :' . $v
							);
						}
						$oGeneralAPI->register($k, $val);
					}

					$oGeneralAPI->pageId = $projectPageIdId;
					//Start check template blank : by duangdaov
					$oPageData = (object)$oPublishReg->get('pageData', null, $projectPageIdId);
					if (isset($oPageData->blank_page) && $oPageData->blank_page == '1') {
                        $aCodePreview = $oPublishReg->get('templateBlank');
                    } else {
					   $aCodePreview = $oPublishReg->get('originalCodeData');
                    }

                    SGL::logMessage('witoon==>'.$projectPageIdId, PEAR_LOG_DEBUG);
                    if ($iUikit == true) {
                    	$homePageId =  $oPublishReg->get('lessPriority', 'project_page_id', $projectId);
                    	SGL::logMessage('witoon==>'.$homePageId."==".$projectPageIdId, PEAR_LOG_DEBUG);
                    	if ($homePageId == $projectPageIdId ) {
		                    //add newsletter block uikit
	                    	$aComponent = $oPublishReg->get('sideValue');


	                    	if (isset($aComponent['side_top_newsletter_top']['staticpage_data'])
	                    		&& $aComponent['side_top_newsletter_top']['staticpage_data']) {

		                    	$newsletterBlock = $aComponent['side_top_newsletter_top']['staticpage_data'];
		                    	//$aCodePreview = preg_replace('/<\!--\s*Start\s*BODY\s*-->/ims', "\n" . $newsletterBlock . "\n<!-- Start BODY -->", $aCodePreview);
		                    	$aCodePreview = preg_replace('/(<div[^>]*id\s*=\s*"selected_body"[^>]*>)/ims', "$1\n" . $newsletterBlock . "\n", $aCodePreview);
	                    	}

                    	}
                    }

                    //End check template blank
					$oGeneralAPI->register_template($aCodePreview);
					$pageCodeData = $oGeneralAPI->fetch();

					$oGeneralAPI->unregister('{BODY}');
					//delete site1 site2 in gallery


					if ($isResponsive == true) {
						//reponsive css
						$pageCodeData = RvsLibs_String::preg_replace('/href\="base\.css"/', 'href="' . $publishUrl . '/base.css"', $pageCodeData);
						$pageCodeData = RvsLibs_String::preg_replace('/href\="skeleton\.css"/', 'href="' . $publishUrl . '/skeleton.css"', $pageCodeData);
						$pageCodeData = RvsLibs_String::preg_replace('/href\="layout\.css"/', 'href="' . $publishUrl . '/layout.css"', $pageCodeData);

					} else {
						//validat hidden blog login
						$pageCodeData = $this->getComponentBlogLogin($projectId, $pageCodeData);
						$pageCodeData = RvsLibs_String::preg_replace('/href\="style\.css"/', 'href="' . $publishUrl . '/style.css"', $pageCodeData);
					}

					//uikit,rvsb-css
					$pageCodeData = preg_replace('/=\s*\"uikit\//i', '="' . $publishUrl . '/uikit/', $pageCodeData);
					$pageCodeData = preg_replace('/=\s*\"rvsb\-css\//i', '="' . $publishUrl . '/rvsb-css/', $pageCodeData);
					$pageCodeData = preg_replace('/=\s*\"rvsb\-js\//i', '="' . $publishUrl . '/rvsb-js/', $pageCodeData);

					$pageCodeData = RvsLibs_String::preg_replace('/<script\s*src\="AC_RunActiveContent\.js"/', '<script src="' . $publishUrl . '/AC_RunActiveContent.js"', $pageCodeData);
					$pageCodeData = RvsLibs_String::preg_replace('/<script\s*src\="Scripts\/AC_RunActiveContent\.js"/', '<script src="' . $publishUrl . '/Scripts/AC_RunActiveContent.js"', $pageCodeData);
					$pageCodeData = RvsLibs_String::preg_replace('/<link\s*rel\="stylesheet"\s*href\="templatespecific\.css"\s*type\="text\/css"\s*\/>/', '', $pageCodeData);
					// update width
					$pageCodeData = RvsLibs_Template::UpdateTemplateVar($pageCodeData);
					// update position
					$aCode = RvsLibs_Template::SetPositionLogoCompanySlogan($pageCodeData);
					$pageCodeData = $aCode['template'];
					$oPublishReg->set('complierPageData', array('project_page_id' => $projectPageIdId, 'pagedata' => $pageCodeData));
					$oPageData = (object)$oPublishReg->get('pageData', null, $projectPageIdId);
					$aThankPage = $oGeneralAPI->aThankPage;
					foreach ($aThankPage as $thankpagedata) {
						//ตัดปัญหาการ unregist pattern ไม่ได้
						//$oGeneralAPI->unregister('{BODY}');
						//$oGeneralAPI->register('{BODY}', $thankpagedata['pagedata']);

						$content = RvsLibs_Template::getLayoutUikit($thankpagedata['pagedata'], $iUikit, null);
						$code = RvsLibs_Template::getContainer($content, $iUikit, null);

						$aCodePreview = str_replace('{BODY}', $code, $aCodePreview);
						$oGeneralAPI->register_template($aCodePreview);
						$thankPageCode = $oGeneralAPI->fetch();

						if ($isResponsive == true) {
							//reponsive css
							$pageCodeData = RvsLibs_String::preg_replace('/href\="base\.css"/', 'href="' . $publishUrl . '/base.css"', $pageCodeData);
							$pageCodeData = RvsLibs_String::preg_replace('/href\="skeleton\.css"/', 'href="' . $publishUrl . '/skeleton.css"', $pageCodeData);
							$pageCodeData = RvsLibs_String::preg_replace('/href\="layout\.css"/', 'href="' . $publishUrl . '/layout.css"', $pageCodeData);
						} else {
							//VALIDATE DISPLAY BLOG LOGIN
							$thankPageCode = $this->getComponentBlogLogin($projectId, $thankPageCode);
							//END VALIDATE DISPLAY BLOG LOGIN
							$thankPageCode = RvsLibs_String::preg_replace('/href\="style\.css"/', 'href="' . $publishUrl . '/style.css"', $thankPageCode);
						}

						//uikit,rvsb-css
						$pageCodeData = preg_replace('/=\s*\"uikit\//i', '="' . $publishUrl . '/uikit/', $pageCodeData);
						$pageCodeData = preg_replace('/=\s*\"rvsb\-css\//i', '="' . $publishUrl . '/rvsb-css/', $pageCodeData);
						$pageCodeData = preg_replace('/=\s*\"rvsb\-js\//i', '="' . $publishUrl . '/rvsb-js/', $pageCodeData);

						$thankPageCode = RvsLibs_String::preg_replace('/<script\s*src\="AC_RunActiveContent\.js"/', '<script src="' . $publishUrl . '/AC_RunActiveContent.js"', $thankPageCode);
						$thankPageCode = RvsLibs_String::preg_replace('/<script\s*src\="Scripts\/AC_RunActiveContent\.js"/', '<script src="' . $publishUrl . '/Scripts/AC_RunActiveContent.js"', $thankPageCode);
						$thankPageCode = RvsLibs_String::preg_replace('/<link\s*rel\="stylesheet"\s*href\="templatespecific\.css"\s*type\="text\/css"\s*\/>/', '', $thankPageCode);

						//$thankPageCode = Publish_CommonComplierDynamicDataTask::cleanCode($thankPageCode);
						// update width
						$thankPageCode = RvsLibs_Template::UpdateTemplateVar($thankPageCode);
						// update position
						$aCode = RvsLibs_Template::SetPositionLogoCompanySlogan($thankPageCode);
						$thankPageCode = $aCode['template'];
						$oPageData->project_page_id = $thankpagedata['pagename'];
						$oPageData->page_data = $thankPageCode;
						$oPageData->filename = str_replace('.php', '', $thankpagedata['pagename']);
						$oPageData->page_name = $oPageData->filename;
						$oPageData->file_extension = 'php';
						$oPublishReg->set('pageData', $oPageData);
						$oPublishReg->set('complierPageData', array('project_page_id' => $thankpagedata['pagename'], 'pagedata' => $thankPageCode));
						$htmlHeader = $oPublishReg->get('isComponentDB') ? RvsLibs_Scripts::getIncludeFileReplace() : "";
						$aComponentConf = array(
		                    'rvs_component_id' => '0',
		                    'project_page_id' => $thankpagedata['pagename'],
		                    'header' =>  '',
		                    'footer' => '',
		                	'htmlheader' => $htmlHeader,
		    		        'page_type' => '',
						);
						$oPublishReg->set('componentInPage', $aComponentConf);
					}
					$oGeneralAPI->unregister();

					$timeOut = RvsLibs_String::getExecuteTime($sqlWaitTimeout);
					if ($timeOut < 15 && count($aProjectPageId) > 0) {
						//SGL::logMessage('Witoon***** Timeout', PEAR_LOG_DEBUG);
						$oPublishReg->set('encode_page_list', RvsLibs_Util::encodeArray($aProjectPageId));
						$oPublishReg->set('timeout', 'YES');
						break;
					}
				}
			}
		}

		function removeEmbedSide($pageCodeData)
		{
			return RvsLibs_String::preg_replace('/<!--\sBegin\sSIDE1\s-->(.*?)<!--\sEnd\sSIDE1\s-->/i', '', $pageCodeData);
		}

		function getComponentBlogLogin($projectId, $htmlCodeSideBlock)
		{
			SGL::logMessage(null, PEAR_LOG_DEBUG);
			$pattern = '/id="RVS_BlockLogin"/';
            $replacement = 'id="RVS_hideblock"';
			return (RvsLibs_Project::isEnableBlockLogin($projectId) === false)
				? RvsLibs_String::preg_replace($pattern, $replacement, $htmlCodeSideBlock)
				: $htmlCodeSideBlock;
		}

	}
}

if (class_exists('PublishTask_PreBuildPage') === false) {
	class PublishTask_PreBuildPage extends SGL_Task
	{
		public function run($data = null)
		{
			ob_start();
			/// Call class Publish_TaskComplierStaticData
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskPreBuildPage::singleton();

			$sqlWaitTimeout = $oPublishReg->get('sql_wait_timeout');
			$task_list = $oPublishReg->get('task_list');
			$validateTimeout = $oPublishReg->get('timeout');

			if ($task_list != '' && $validateTimeout === 'YES') {
				$aListFileTask = RvsLibs_Util::decodeArray($task_list);
				$oPublishReg->set('timeout', 'NO');
			} else {
				$aListFileTask = $oPublishTask->taskList();
				$oPublishReg->set('task_list', RvsLibs_Util::encodeArray($aListFileTask));
			}
			$aTaskList = $aListFileTask;
			foreach ($aListFileTask as $k => $v) {
				SGL::logMessage('Witoon*******Task:' . $v, PEAR_LOG_DEBUG);
				$o = new $v();
				$o->run($data=null);
				if (SGL::isError($o) === true) {
					return SGL::raiseError(
                    'Cannot call singleton function of publish task :' . $v
					);
				}
				$validateSubTimeout = $oPublishReg->get('sub_timeout');
				if ($validateSubTimeout === 'YES') {
					SGL::logMessage("Witoon timeout >>>>", PEAR_LOG_DEBUG);
					$oPublishReg->set('task_list', RvsLibs_Util::encodeArray($aTaskList));
					$oPublishReg->set('timeout', 'YES');
					break;
				}
				unset($aTaskList[$k]);
				$timeOut = RvsLibs_String::getExecuteTime($sqlWaitTimeout);
				SGL::logMessage('Witoon***** Time used:' . $timeOut, PEAR_LOG_DEBUG);
				if ($timeOut < 15 && count($aTaskList) > 0) {
				    SGL::logMessage("Witoon timeout >>>>", PEAR_LOG_DEBUG);
					$oPublishReg->set('task_list', RvsLibs_Util::encodeArray($aTaskList));
					$oPublishReg->set('timeout', 'YES');
					break;
				}
			}
		}
	}
}

if (class_exists('PublishTask_ListFileData') === false) {
	class PublishTask_ListFileData extends SGL_Task
	{
		public function run($data = null)
		{
			SGL::logMessage('run task =>', PEAR_LOG_DEBUG);
			/// Call class Publish_TaskComplierStaticData
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskListFile::singleton();

			$sqlWaitTimeout = $oPublishReg->get('sql_wait_timeout');
			$sub_task_list = $oPublishReg->get('sub_task_list');
			$sub_timeout = $oPublishReg->get('sub_timeout');

			if ($sub_task_list != '' && $sub_timeout === 'YES') {
				$aListFileTask = RvsLibs_Util::decodeArray($sub_task_list);
				$oPublishReg->set('sub_timeout', 'NO');
			} else {
				$aListFileTask = $oPublishTask->taskList();
			}
			$aTaskList = $aListFileTask;
			foreach ($aTaskList as $k => $v) {
				SGL::logMessage('Witoon*****Task :' . $v , PEAR_LOG_DEBUG);
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Cannot call singleton function of publish task :' . $v
					);
				}
				$validateSubTimeout = $oPublishReg->get('function_timeout');
				if ($validateSubTimeout === 'YES') {
				    $oPublishReg->set('sub_task_list', RvsLibs_Util::encodeArray($aTaskList));
				    $oPublishReg->set('sub_timeout', 'YES');
				    break;
				}
				unset($aTaskList[$k]);
				$timeOut = RvsLibs_String::getExecuteTime($sqlWaitTimeout);
				SGL::logMessage('Witoon***** Time used:' . $timeOut, PEAR_LOG_DEBUG);
				if ($timeOut < 10 && count($aTaskList) > 0) {
				    SGL::logMessage('Witoon Process is time out ', PEAR_LOG_DEBUG);
					$oPublishReg->set('sub_task_list', RvsLibs_Util::encodeArray($aTaskList));
					$oPublishReg->set('sub_timeout', 'YES');
					break;
				}
			}
		}
	}
}
/**
 * Make folders for publish
 * @package PublishTask
 * @author develop503
 */
if (class_exists('PublishTask_MakeFolders') === false) {
	class PublishTask_MakeFolders extends SGL_Task
	{
		public function run($data = null)
		{
			SGL::logMessage('run task =>', PEAR_LOG_DEBUG);
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskMakeFolders::singleton();
			$aMakeFolders = $oPublishTask->taskList();
			foreach ($aMakeFolders as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}
/**
 * Change Template variables
 * @author pharadol
 *
*/
if (class_exists('PublishTask_ChangeTemplateVariables') === false) {
	class PublishTask_ChangeTemplateVariables extends SGL_Task
	{
		public function run($data = null)
		{
			/// Call class Publish_TaskChangeTemplateVariables
			$oPublishTask = Publish_TaskChangeTemplateVariables::singleton();
			$aTaskList = $oPublishTask->taskList();
			foreach ($aTaskList as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Publish_TaskChangeTemplateVariables->' . $task . ' has problem.'
                    );
				}
				$oGeneralAPI = GeneralAPI::singleton();
				$oGeneralAPI->registerStatic($k, $val);
			}
		}

		function _registerAPIData($key, $val)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishReg->set('apiRegisStaticData', array('api_key' => $key, 'api_value' => $val));
		}
	}
}

/**
 * complier static data for dynamic
 * @author pharadol
 *
 */
if (class_exists('PublishTask_ComplierStaticDataForDynamic') === false) {
	class PublishTask_ComplierStaticDataForDynamic
	{
		public static function run($data = null)
		{
			/// Call class Publish_TaskComplierStaticDataForDynamic
			$oPublishTask = Publish_TaskComplierStaticDataForDynamic::singleton();
			$aTaskList = $oPublishTask->taskList();
			foreach ($aTaskList as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Publish_TaskComplierStaticDataForDynamic->' . $task . ' has problem.'
                    );
				}
				$oGeneralAPI = GeneralAPI::singleton();
				$oGeneralAPI->registerStatic($k, $val);
			}
		}

		function _registerAPIData($key, $val)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishReg->set('apiRegisStaticData', array('api_key' => $key, 'api_value' => $val));
		}
	}
}

/**
 * publish Component Config , publish header
 * @package PublishTask
 * @author develop503
 */
if (class_exists('PublishTask_ComponentPublishConfig') === false) {
	class PublishTask_ComponentPublishConfig extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskComponentPublishConfig::singleton();
			$task_list = $oPublishReg->get('sub_task_list');
			$timeout = $oPublishReg->get('sub_timeout');
			if ($task_list != '' && $timeout === 'YES') {
			    $aTaskList = RvsLibs_Util::decodeArray($task_list);
			    $oPublishReg->set('sub_timeout', 'NO');
			} else {
			    $aTaskList = $oPublishTask->taskList();
			}
			$aTaskList_buff = $aTaskList;
			foreach ($aTaskList as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
				$validateSubTimeout = $oPublishReg->get('function_timeout');
				if ($validateSubTimeout === 'YES') {
				    $oPublishReg->set('sub_task_list', RvsLibs_Util::encodeArray($aTaskList_buff));
				    $oPublishReg->set('sub_timeout', 'YES');
				    break;
				}
				unset($aTaskList_buff[$k]);
			}
		}
	}
}

if (class_exists('PublishTask_MakeProjectConfig') === false) {
	class PublishTask_MakeProjectConfig extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskMakeProjectConfig::singleton();
			$aMakeFolders = $oPublishTask->taskList();
			foreach ($aMakeFolders as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}

if (class_exists('PublishTask_SendTemplateStat') === false) {
    class PublishTask_SendTemplateStat extends SGL_Task
    {
        public function run($data = null)
        {
            $oPublishReg = Publish_Registry::singleton();
            $oPublishTask = Publish_TaskSendTemplateStat::singleton();
            $aSendTemplateStat = $oPublishTask->taskList();
            foreach ($aSendTemplateStat as $k => $v) {
                $val = $oPublishTask->{$v}();
                if (SGL::isError($val) === true) {
                    return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
                    );
                }
            }
        }
    }
}


/**
 * Build Page
 * @package PublishTask
 * @author develop503
 *
 */
if (class_exists('PublishTask_BuildPages') === false) {
	class PublishTask_BuildPages extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskBuildPages::singleton();
			$aTaskList = $oPublishTask->taskList();
			foreach ($aTaskList as $k => $v) {
				if ($v == 'buldIncludeFile') continue;
				$aPageData = $oPublishReg->get('complierPageData', 'project_page_id');
				foreach ($aPageData as $pageId => $value) {
					$val = $oPublishTask->{$v}($pageId);
				}
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    	'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
			$oPublishTask->buldIncludeFile();
		}
	}
}

/**
 * past build page
 * @author pharadol
 *
 */
if (class_exists('PublishTask_PostBuildPage') === false) {
	class PublishTask_PostBuildPage extends SGL_Task
	{
		public function run($data = null)
		{
			/// Call class Publish_TaskComplierStaticData
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskPostBuildPage::singleton();
			$task_list = $oPublishReg->get('task_list');
			$timeout = $oPublishReg->get('timeout');
			if ($task_list != '' && $timeout === 'YES') {
				$aListFileTask = RvsLibs_Util::decodeArray($task_list);
				$oPublishReg->set('timeout', 'NO');
			} else {
				$aListFileTask = $oPublishTask->taskList();
			}
			$aTaskList = $aListFileTask;
			foreach ($aListFileTask as $k => $v) {
				//SGL::logMessage('run task =>********' . $v, PEAR_LOG_DEBUG);
				$o = new $v();
				$o->run($data=null);
				if (SGL::isError($o) === true) {
					return SGL::raiseError(
                    'Cannot call singleton function of publish task :' . $v
					);
				}
				$validateSubTimeout = $oPublishReg->get('sub_timeout');
				if ($validateSubTimeout === 'YES') {
				    $oPublishReg->set('task_list', RvsLibs_Util::encodeArray($aTaskList));
				    $oPublishReg->set('timeout', 'YES');
				    break;
				}
				unset($aTaskList[$k]);
				if (count($aTaskList) > 0) {
					$oPublishReg->set('task_list', RvsLibs_Util::encodeArray($aTaskList));
					$oPublishReg->set('timeout', 'YES');
					break;
				}
			}
		}
	}
}

if (class_exists('PublishTask_MakeFiles') === false) {
	class PublishTask_MakeFiles extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskMakeFiles::singleton();
			$sqlWaitTimeout = $oPublishReg->get('sql_wait_timeout');
			$task_list = $oPublishReg->get('sub_task_list');
			$timeout = $oPublishReg->get('sub_timeout');
			if ($task_list != '' && $timeout === 'YES') {
			    $aTaskList = RvsLibs_Util::decodeArray($task_list);
			    $oPublishReg->set('sub_timeout', 'NO');
			} else {
			    $aTaskList = $oPublishTask->taskList();
			}
			$aTaskList_buff = $aTaskList;
			foreach ($aTaskList as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
				$validateSubTimeout = $oPublishReg->get('function_timeout');
				if ($validateSubTimeout === 'YES') {
				    $oPublishReg->set('sub_task_list', RvsLibs_Util::encodeArray($aTaskList_buff));
				    $oPublishReg->set('sub_timeout', 'YES');
				    break;
				}
				unset($aTaskList_buff[$k]);
				$timeOut = RvsLibs_String::getExecuteTime($sqlWaitTimeout);
				if ($timeOut < 15 && count($aTaskList_buff) > 0) {
				    $oPublishReg->set('sub_task_list', RvsLibs_Util::encodeArray($aTaskList_buff));
				    $oPublishReg->set('sub_timeout', 'YES');
				    break;
				}
			}
		}
	}
}

if (class_exists('PublishTask_UpdateFlashIndex') === false) {
	class PublishTask_UpdateFlashIndex extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskUpdateFlashIndex::singleton();
			$aMakeFiles = $oPublishTask->taskList();
			foreach ($aMakeFiles as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}

if (class_exists('PublishTask_UpdateNavigaterCss') === false) {
    class PublishTask_UpdateNavigaterCss extends SGL_Task
    {
        public function run($data = null)
        {
            $oPublishReg = Publish_Registry::singleton();
            $oPublishTask = Publish_TaskUpdateNavigaterCss::singleton();
            $aMakeFiles = $oPublishTask->taskList();
            foreach ($aMakeFiles as $k => $v) {
                $val = $oPublishTask->{$v}();
                if (SGL::isError($val) === true) {
                    return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
                    );
                }
            }
        }
    }
}

if (class_exists('PublishTask_FixedHtaccessFile') === false) {
	class PublishTask_FixedHtaccessFile extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskFixedHtaccessFile::singleton();
			$aMakeFolders = $oPublishTask->taskList();
			foreach ($aMakeFolders as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}

if (class_exists('PublishTask_ProjectBackUpDatabase') === false) {
	class PublishTask_ProjectBackUpDatabase extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskProjectBackUpDatabase::singleton();
			$aTaskList = $oPublishTask->taskList();
			foreach ($aTaskList as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}

if (class_exists('PublishTask_RemoveBeforePublish') === false) {
	class PublishTask_RemoveBeforePublish extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskRemoveBeforePublish::singleton();
			$aTaskList = $oPublishTask->taskList();
			foreach ($aTaskList as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}

if (class_exists('PublishTask_ChangePermission') === false) {
	class PublishTask_ChangePermission extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskChangePermission::singleton();
			$aMakeFolders = $oPublishTask->taskList();
			foreach ($aMakeFolders as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}

if (class_exists('PublishTask_ComplierPageForComponentDB') === false) {
	class PublishTask_ComplierPageForComponentDB extends SGL_Task
	{
		public function run($data = null)
		{
			$oPublishReg = Publish_Registry::singleton();
			$oPublishTask = Publish_TaskComplierPageForComponentDB::singleton();
			$aMakeFolders = $oPublishTask->taskList();
			foreach ($aMakeFolders as $k => $v) {
				$val = $oPublishTask->{$v}();
				if (SGL::isError($val) === true) {
					return SGL::raiseError(
                    'Error function of publish task :' . $v . ' ' . $val->getMessage()
					);
				}
			}
		}
	}
}
?>