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/modules/tryout/classes/ActivityReportMgr.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$
// +---------------------------------------------------------------------------+

/**
 *
 *
 * @package sitebuilder
 * @author  
 * @version $Revision$
 * @since   PHP 4.1
 */
require_once('IncludeRvsLibs.php');
require_once('Pager/Pager.php');

require_once(SGL_MOD_DIR . '/../lib/RVSGL/SitebuilderDao/DbWrapper.php');
require_once(SGL_MOD_DIR . '/../lib/RVSGL/SitebuilderDao/TryoutDao.php');
require_once(SGL_MOD_DIR . '/../lib/RVSGL/SitebuilderDao/UsrDao.php');
require_once(SGL_MOD_DIR . '/../lib/RVSGL/SitebuilderDao/ProjectDao.php');
require_once(SGL_MOD_DIR . '/../lib/RVSGL/DaoFactory.php');
require_once(SGL_MOD_DIR . '/../lib/RVSGL/SitebuilderDao/ComponentDao.php');

class ActivityReportMgr extends IncludeRvsLibs
{
    function ActivityReportMgr()
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	parent::SGL_Manager();
		parent::IncludeRvsLibs();
		
    	$this->pageTitle = 'Tryout Activity Report';
    	$this->template  = 'activityReport.html';

    	$this->_aActionsMapping =  array(
            								'list'   => array('list') 
    									);
    }
    
    function validate($req, &$input)
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG);
        
        SGL::logMessage(null, PEAR_LOG_DEBUG);
        $this->validated 	   = true;
        $input->pageTitle      = $this->pageTitle;
        $input->masterTemplate = $this->masterTemplate;
        $input->template       = $this->template;
        
        //Action
        $input->action = ($req->get('action')) ? $req->get('action') : 'list';
        
        $input->getNumPage = ($req->get('getNumPage')) ? $req->get('getNumPage') : 10;
    }
    
    function _cmd_list($input, &$output)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
    	$aProjectByUser = array();
    	$aLastLogin = array();
    	$numProjectAll = 0;
    	$numUser = 0;
    	$sizeProjectAll = 0;
        
        ///Get key = usr_id , value = usr_name
        $aUsrRvs = $this->getUsrByUsrIdOnSiteBuilder();
        $aUsrSeagull = $this->getUsrByUsrIdOnSeagull($aUsrRvs);
        
        ///TODO TEST on sitebuilder
        //$aUsrSeagull = $this->getUsrByUsrIdOnSiteBuilder();
        
	   	$numUser = count($aUsrSeagull);
        
    	foreach($aUsrSeagull as $kUsrID => $vUsrName) {
            
    		//Find project data by userId
    		$aProjectName = $this->getProjectDataByUserId($kUsrID);
    		           
            //File last login
            $aLastLogin[$vUsrName]['last_login'] = $this->getLastLogin($vUsrName);
            
    		if(count($aProjectName) > 0) {
    			
    			foreach ($aProjectName as $kProId => $vProName) {
    				
    				//Find project publish by userId and projectId 
    				$res = $this->getPublishByUserIdAndProjectId($kUsrID, $kProId);
    				$res = $this->checkPublishPath($res);
    				
                    $publishPath = '';
                    $aPublish = RvsLibs_String::dbeExplode('/', $res[0]['rvs_publish_domain']);
                    
                    foreach ($aPublish as $k => $v) {
                        if ($v == 'tryout') {
                            break;
                        }       
                        $publishPath = $v;
                    }
                    
                    if (isset($res[0]['rvs_publish_path']) && $res[0]['rvs_publish_path'] != '') {

                    	$vUsrNameReplace = RvsLibs_String::preg_replace('/(\@)/', '-AT-', $vUsrName);
                    	
                    	$pathProject = RvsLibs_File::buildPath(
                                                                   array(
                                                                           RVS_USER_HOME
                                                                           , 'public_html'
                                                                           , $publishPath
                                                                           , 'tryout'
                                                                           , 'users'
                                                                           , end(RvsLibs_String::dbeExplode('/', $res[0]['rvs_publish_domain']))//'rvstryoutdemotryout'
                                                                           , $res[0]['rvs_publish_path']
                                                                        )
                                                             );
                    	

                    	if (is_dir($pathProject)) {

                    		$fileSize = 0;
                    		$dir_handle = @opendir($pathProject);

                    		$fileSize = $this->recursiveFile($dir_handle, $pathProject, $fileSize);

                    		$sizeProjectAll += $fileSize;
                    		$aProjectByUser[$vUsrName][$kProId]['fileSize'] = $this->formatBytes($fileSize,1);
                    		
                    		//Project Name
	                    	$aProjectByUser[$vUsrName][$kProId]['project_name'] = $vProName;
		                    
	                    	//Project Publish
		                    $aProjectByUser[$vUsrName][$kProId]['project_publish'] = (count($res)) ? $res : '';
		                    
		                    //Count Project
                            $numProjectAll ++;
                    		
                    	}
                    }
                    
                    
                    /*///TODO TEST
                    $vUsrNameReplace = RvsLibs_String::preg_replace('/(\@)/', '-AT-', $vUsrName);
                    $path = '/home/puttipong/public_html/tryout/users/' . $vUsrNameReplace . '/.rvsitebuilder/projects/' . $kProId;
                     
                    if (is_dir($path)) {

                    	$dir_handle = @opendir($path);
                    	$fileSize = 0;
                    	$fileSize = $this->recursiveFile($dir_handle, $path, $fileSize);

                    	$sizeProjectAll += $fileSize;
                    	$aProjectByUser[$vUsrName][$kProId]['fileSize'] = $this->formatBytes($fileSize,1);
                    	 
                    }///TODO END TEST*/

                    
    			}
    			
    		} else {
                $aProjectByUser[$vUsrName] = array();
            }
    		
        }
        
        $output->sizeProjectAll = $this->formatBytes($sizeProjectAll, 1);
        $output->numUser = $numUser;
        $output->numProjectAll = $numProjectAll;
        $output->aProjectByUser = $aProjectByUser;
        $output->aShowData = $this->_pager(&$input, &$output);
        $output->listNumPageOption = $this->listNumPageActivityReport($input->getNumPage);
        $output->aLastLogin = $aLastLogin;
    }
    
    /**
     * _connectSitebuilder - Connect data base to rvsitebuilder
     * 
     * @return Object $oSitebuilder;
     */
    function _connectSitebuilder()
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG);
        
        $oSitebuilder = TryoutDao::singleton($autoload = false);
        
        $dbh = $oSitebuilder->rvsConnectDb();
        $aSitebuilderConfig = $oSitebuilder->getSitebuilderConfig();
        
        $oSitebuilder->registRvsConf($aSitebuilderConfig, $dbh);
        $oSitebuilder->rvsInitialiseDbDataObject();
        
        return $oSitebuilder;
    }
    
    /**
     * InitialiseDbDataObject
     */
    function InitialiseDbDataObject() {
        
        //Init DB_DataObject
        $oTask = new SGL_Task_InitialiseDbDataObject();
        $ok = $oTask->run();
    }
    
    /**
     * refloerSizeFile - Refloer size file
     * 
     * @param Integer $fileSize - File size
     * @param String $fileName  - File name
     * @return Integer $fileSize - File name
     */
    function refloerSizeFile(&$fileSize, $fileName)
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
        if (is_file($fileName)) {
        	
        	$fileSize += filesize($fileName);
        }
        
        return $fileSize;
    }
    
    /**
     * recursiveFile - Find file on directory
     * 
     * @param Handle $dir_handle - Handle open dir
     * @param Sting $path - Path find file
     * @param Integer $fileSize - File size
     * @return Integer $fileSize - File size
     */
    function recursiveFile($dir_handle, $path, &$fileSize)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
        //running the while loop
        while (false !== ($file = readdir($dir_handle))) {
        	
            $dir = RvsLibs_File::buildPath(array($path, $file));
            
            if(is_dir($dir) && $file != '.' && $file != '..'  && is_link($dir) === FALSE)
            {
                $handle = @opendir($dir);
                
                $this->recursiveFile($handle, $dir, $fileSize);
                
            } else if ($file != '.' && $file != '..') {
            	
                $fileSize = $this->refloerSizeFile($fileSize, $dir);
            }
            
        }
        
        closedir($dir_handle);
        
        return $fileSize;
    }
    
    /**
     * getPublishByUserIdAndProjectId - Get project public
     * 
     * @param String $kuserID - User Id rvsitebuilder
     * @param $kproId - Project Id
     * @return Array - Project public data
     */
    function getPublishByUserIdAndProjectId($kuserID, $kproId)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
    	$oSitebuilder = $this->_connectSitebuilder();
    	return $oSitebuilder->findPublishByUserIdAndProjectId($kuserID, $kproId);
    }
    
    /**
     * getProjectDataByUserId - Get project on sitebuilder
     * 
     * @param Sting $kuserID - User ID rvsitebuilder 
     * @return Array - Project data
     */
    function getProjectDataByUserId($kuserID)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
    	$oSitebuilder = $this->_connectSitebuilder();
    	return $oSitebuilder->findprojectDataByUserId($kuserID);
    	
    }
    
    /**
     * getUsrByUsrIdOnRvsitebuilder - Get user on rvsitebuilder
     * 
     * @return Array - User on rvsitebuilder base
     */
    function getUsrByUsrIdOnSiteBuilder()
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
    	$oSitebuilder = $this->_connectSitebuilder();
    	return $oSitebuilder->findUsrByUsrId();
    }
    
    /**
     * getUsrByUsrIdOnSeagull - Get user on seagull base
     * 
     * @param Array $usrRvs - User on rvsitebuilder base
     * @return Array $aUsrSg - User on seagull base
     */
    function getUsrByUsrIdOnSeagull($usrRvs)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
    	$aUsrSg = array();
    	
    	$this->InitialiseDbDataObject();
    	$dbhSg = SGL_DB::singleton();
    	
        foreach ($usrRvs as $keys => $value) {
        	
        	$usrName = RvsLibs_String::preg_replace('/(rvstryout)/', '', $value);
        	
        	if ($usrName != 'admin') {
        	   $query = "SELECT username FROM " 
        	         . $this->conf['table']['user'] 
        	         . " WHERE username= " . $dbhSg->quoteSmart($usrName);
        	
        	   $getUsrSg = $dbhSg->getOne($query);
        	}
        	
        	if (isset($getUsrSg)) {
        		$aUsrSg[$keys] = $getUsrSg;
        	}
        	
        }
        
    	return $aUsrSg;
    }
    
    /**
     * getLastLogin - Get last login by user
     * 
     * @param String $usrName - User
     * @return String $getLastLogin - Date time last login user
     */
    function getLastLogin($usrName)
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG); 
        
        $getLastLogin = '';
        
        $this->InitialiseDbDataObject();
        $dbhSg = SGL_DB::singleton();
        
        $usrName = RvsLibs_String::preg_replace('/(rvstryout)/', '', $usrName);
        
        $query = "SELECT l.date_time FROM " 
                . $this->conf['table']['login'] . " l, " 
                . $this->conf['table']['user'] . " u "
                ."WHERE l.usr_id = u.usr_id AND u.username =  " . $dbhSg->quoteSmart($usrName) . "
                ORDER BY  l.date_time DESC ";
                
        $getLastLogin = $dbhSg->getOne($query);
        
        return $getLastLogin;
    }
    
    
    function checkPublishPath($aProjectPublish)
    {
    	$aProject = array();
    	$aPublish = array();
    	
    	foreach ($aProjectPublish as $aProject) {
    		
    		if(!RvsLibs_String::preg_match('/^\//', $aProject['rvs_publish_path'])) {
    			$aProject['rvs_publish_path'] = '/' . $aProject['rvs_publish_path'];
    		}
    		
    		$aPublish[] = ($aProject);

    	}
    	
    	return $aPublish ;
    }
    
    /**
     * setUrlPage - Set URL pager
     * 
     * @param Integer $numPage - Num page select
     * @return String $urlPage - Sring URL pager
     */
    function setUrlPage($numPage)
    {
    	SGL::logMessage(null, PEAR_LOG_DEBUG);
    	
	    $urlPage = RvsLibs_File::buildPath( 
	                                                      array( 
	                                                               SGL_BASE_URL
	                                                               , SGL_Config::get('site.frontScriptName')
	                                                               , 'tryout'
	                                                               , 'activityreport'
	                                                               , 'action'
	                                                               , 'list'
	                                                               , 'getNumPage'
	                                                               , $numPage
	                                                           )
	                                                 );
	                                                 
        return $urlPage;
    }
    
    /**
     * Pager
     * 
     * @param $input
     * @param $output
     * @return Pager
     */
	function _pager(&$input, &$output)
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG);
        
        $aProjectByUser = $output->aProjectByUser;
        $pagerUrl = $this->setUrlPage($input->getNumPage);
        
        $params = array(
			                 'mode'              =>  'Jumping'
			                 , 'itemData'        =>  $aProjectByUser
			                 , 'lastPagePre'     =>  '<span>Last</span>'
			                 , 'firstPagePost'   =>  '<span>First</span>'
			                 , 'prevImg'         =>  '<span>Previous</span>'
			                 , 'nextImg'         =>  '<span>Next</span>'
			                 , 'perPage'         =>  $input->getNumPage
			                 , 'delta'           =>  3
			                 , 'linkClass'       =>  ' onclick="Javascript:bSubmitted=true;"'
			                 , 'curPageLinkClassName' => 'current'
			                 , 'path'            =>  $pagerUrl
			                 , 'httpMethod'      =>  'POST'
                        );
    
        $oPager = & Pager::factory($params);
        $output->aUser = $oPager->getPageData();
        $oPager->getLinks();
        $output->links = $oPager->links;
        
        return  $aProjectByUser;
    }
    
    /**
     * listNumPageActivityReport - List num page activity report
     * 
     * @param Integer $numSelectId  - Select num page
     * @return Array $selectNumPage - SGL_Output::getnerateSelect
     */
 	function listNumPageActivityReport($numSelectId = false)
    {
        SGL::logMessage(null, PEAR_LOG_DEBUG);
        
        $numSelectId = ($numSelectId == false)
                            ? $this->setUrlPage('10')
                            : $this->setUrlPage($numSelectId);
        
        $aNumPage = array(
                            $this->setUrlPage('10') => 10
                            , $this->setUrlPage('20') => 20
                            , $this->setUrlPage('50') => 50
                         );                    
                         
        $selectNumPage = SGL_Output::generateSelect($aNumPage, $numSelectId);

        return $selectNumPage;
    }
    
    /**
     * Convert bytes to a more readable format
     * 
     * @param Integer $bytes
     * @param Integer $precision - Number of decimal
     * @return String - String format
     */
    function formatBytes($bytes, $precision = 2) 
    {
        $aUnits = array('B', 'KB', 'MB', 'GB', 'TB');
        
        $bytes = max($bytes, 0);
        $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
        $pow = min($pow, count($aUnits) - 1);
      
        $bytes /= pow(1024, $pow);
        
        return round($bytes, $precision) . ' ' . $aUnits[$pow];
    }
    
}

?>