ElixirVault/www/system-brs-core/library/cSysConsole/cSysConsole.php

136 lines
3.7 KiB
PHP

<?php
namespace BRSystems\Core\Library\cSysConsole;
use BRSystems\Core\Library\cJSON\cJSON;
use BRSystems\Core\Library\cView\cView;
/**
* System console class - singleton
* to be modified as Dependency injection
*
* @category CMS
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @since Version 1.0
*/
class cSysConsole
{
private static $instance = null;
private $outputLines = array();
const C_TYPE = 't';
const C_FUNCTION = 'f';
const C_LINE_DATA = 'l';
const C_RESPONSE_DATA = 'r';
const C_TYPES_JS = 'JS';
const C_TYPES_PHP = 'PHP';
private static $vCommands = array(
'expand_sql' => array(
self::C_TYPE => 'JS', // Type of group JS - javascript handles action
self::C_FUNCTION => 'expandAllSqlQueries' // Javascript call function
),
'collapse_sql' => array(
self::C_TYPE => 'JS', // Type of group JS - javascript handles action
self::C_FUNCTION => 'collapseAllSqlQueries' // Javascript call function
),
'math' => array(
self::C_TYPE => 'PHP', // Type of group PHP - php script handles action
self::C_FUNCTION => 'parseBaseMathProblem' // php call function
),
);
public function __construct(){
}
public static function getInstance(){
// Singleton initiation
if (self::$instance == null) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Function to add output line
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category CMS
* @param array $lineData - line data to show
* @param string $type - line type
* @return void
*/
public function addOutputLine($lineData = array(), $type = ''){
if(!!$lineData){
$microTime = explode(' ', microtime());
$microTime[0] *= 1000000;
$this->outputLines[] = array(
't' => "{$microTime[0]}:{$microTime[1]}",
'd' => $lineData,
'c' => $type
);
}
}
/**
* Function to get output line data
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category CMS
* @return array - new line data
*/
public function getLineData(){
if(!!$this->outputLines){
foreach($this->outputLines as &$v){
// Format each line
$v['t'] = explode(':', $v['t']);
$v['t'] = date('H:i:s', $v['t'][1]) . " {$v['t'][0]}";
}
}
return $this->outputLines;
}
public function p(){
pr($this->outputLines);
}
/**
* Function to handle console command & send answers
*
* @author Mareks Keišs <mareks.keiss@brsystems.lv>
* @category CMS
* @return array - new line data
*/
public function handleConsoleCommand($sCommand){
if(isset(self::$vCommands[$sCommand])){
$c = self::$vCommands[$sCommand];
$oView = new cView($this);
if($c[self::C_TYPE] == self::C_TYPES_JS){
if(!empty($c[self::C_FUNCTION])){
$this->addOutputLine(array(
"{$c[self::C_TYPE]} : {$sCommand} - calling custom js function '{$c[self::C_FUNCTION]}'"
));
$oView->CONSOLE_DATA = $this->getLineData();
cJSON::sendOk(array(self::C_TYPE => $c[self::C_TYPE], self::C_FUNCTION => $c[self::C_FUNCTION], self::C_LINE_DATA => $oView->genHelperView('console/console-line.tpl')));
}
}
}
return $this->outputLines;
}
}