<?php
/**
* Copyright (c) 2015, Till Wehowski
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of frdl/webfan nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY frdl/webfan ''AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL frdl/webfan BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
*/
namespace frdl\ApplicationComposer\Command;
abstract class CMD
{
protected $aSess;
protected $Console;
protected $argtoks;
protected $result;
abstract public function process();
abstract public function required();
function __construct(){
$this->aSess = & $_SESSION['frdl\xGlobal\webfan'] ;
}
protected function _read(&$handle, $blocksize) {
$ret = '';
while (!feof($handle)) {
@set_time_limit(ini_get('max_execution_time'));
$ret .= fread($handle, $blocksize);
}
return $ret;
}
public static function blocksize()
{
return (1024*1024);
}
public static function read($file, $modus = 'rb', $blocksize = null)
{
if(!is_readable($file))return false;
$handle = fopen($file, $modus);
$buffer = $this->_read($handle, ((!is_numeric($blocksize) || 0 !== $blocksize % 8) ? $this->blocksize() : intval($blocksize)));
fclose($handle);
return $buffer;
}
protected function writeToConfigFile(){
if(!isset($this->aSess['ADMINDATA']['CONFIGFILE']) || !file_exists($this->aSess['ADMINDATA']['CONFIGFILE'])){
return false;
}
$this->file = $this->aSess['ADMINDATA']['CONFIGFILE'];
$php = "<?php
/*
- Do not edit this file manually!
Application Composer - Config
Download: http://www.webfan.de/install/
*/
if(isset(\$this) &&
(
get_class(\$this) === '\\frdl\xGlobal\webfan'
|| is_subclass_of(\$this, '\\frdl\ApplicationComposer\Command\CMD')
|| get_class(\$this) === 'frdl\xGlobal\webfan'
|| is_subclass_of(\$this, 'frdl\ApplicationComposer\Command\CMD')
)){
\$this->data['config'] = ".var_export($this->data['config'], true).";
}
";
try{
chmod($this->file,0755);
} catch(\Exception $e){
}
if(false !== file_put_contents($this->file, $php)) {
try{
chmod($this->file,0644);
} catch(\Exception $e){
}
return true;
}else{
return false;
}
}
public function loadConfigFromFile($required = true){
if( false !== $required && (!isset($this->aSess['ADMINDATA']['CONFIGFILE']) || !file_exists($this->aSess['ADMINDATA']['CONFIGFILE']))){
return false;
}
$this->data = array();
$this->file = $this->aSess['ADMINDATA']['CONFIGFILE'];
if(false !== $required){
require $this->file;
}else{
include $this->file;
}
return true;
}
public function Console(){
return $this->Console;
}
public function help(){
$required = $this->required;
}
final public function getRequestOption($opt){
foreach($this->argtoks['options'] as $num => $o){
if($opt === $o['opt']){
return $o['value'];
}
}
return null;
}
final public function isArg($argument){
return ($this->argpos($argument) > -1);
}
final public function argpos($argument){
foreach($this->argtoks['arguments'] as $num => $arg){
if($argument === $arg['cmd']){
return $arg['pos'];
}
}
return -1;
}
final public function updateRequestOption($opt, $v){
foreach($this->argtoks['options'] as $num => &$o){
if($opt === $o['opt']){
$o['value'] = $v;
return true;
}
}
return false;
}
final public function putRequestOption($opt, $v){
if(true !== $this->updateRequestOption($opt, $v)){
$this->argtoks['options'][] = array(
'opt' => $opt,
'value' => $v,
'pos' => count($this->argtoks['options']),
);
return true;
}else{
return true;
}
}
final public function invoke(&$Console = null, $argtoks){
$this->Console = $Console;
$this->argtoks = $argtoks;
if(isset($this->argtoks['flags']['d'])){
ini_set('display_errors', 1);
error_reporting(E_ALL);
}
$this->result = new \frdl\ApplicationComposer\AjaxResult;
$this->result->type = 'print';
$this->result->out = '';
if(null !== $this->getRequestOption('callback'))$this->result->callback = $this->getRequestOption('callback');
call_user_func_array(array($this, 'process'), func_get_args());
return $this->result;
}
final public function __invoke(){
return call_user_func_array(array($this, 'invoke'), func_get_args());
}
final public function getName(){
$n = explode('\\', get_class($this));
return $n[count($n)-1];
}
final public function OutData(){
$p = func_get_args();
if(!isset($this->result))$this->result = new \frdl\ApplicationComposer\AjaxResult;
if(!isset( $this->result->type)) $this->result->type = 'print';
if(0 === count($p)){
return $this->result;
}elseif(1 === count($p)){
$this->result = $p[0];
}elseif(2 === count($p) && is_string($p[0])){
$this->result->{$p[0]} = $p[1];
}else{
return trigger_error('Invalid number of arguments in '.__METHOD__.' '.__LINE__, E_USER_ERROR);
}
return $this;
}
}
|