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];
}
}
?>