You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

340 lines
6.8 KiB

<?php
use \Ospinto\Dbug;
use \SensioLabs\AnsiConverter\AnsiToHtmlConverter;
abstract class AbstractAction
{
protected $value;
protected $container;
protected $formatter;
public function __construct( $value )
{
$this->value = $value;
$this->setUp();
}
abstract public function decode();
abstract public function setUp();
public function setContainer( ContainerInterface $container )
{
$this->container = $container;
}
public function setFormatter( FormatterInterface $formatter )
{
$this->formatter = $formatter;
}
public function esc_raw()
{
return htmlentities( $this->value );
}
public function __toString()
{
$value = $this->decode();
$formatted = $this->formatter->format( $value );
return $this->container->wrap( $formatted );
}
}
class ActionQuotedPrintableDecode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return quoted_printable_decode( $this->value );
}
}
class ActionQuotedPrintableEncode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return quoted_printable_encode( $this->value );
}
}
class ActionBase64Encode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return base64_encode( $this->value );
}
}
class ActionBase64Decode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return base64_decode( $this->value );
}
}
class ActionUrldecode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return urldecode( $this->value );
}
}
class ActionUrlencode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return urlencode( $this->value );
}
}
class ActionSerialize extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return serialize( json_decode( $this->value ) );
}
}
class ActionUnserialize extends AbstractAction
{
public function setUp()
{
$this->setContainer( new DivContainer );
$this->setFormatter( new DbugFormatter );
}
public function decode()
{
return unserialize( $this->value );
}
}
class ActionJsonDecode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new DivContainer );
$this->setFormatter( new VarexportFormatter );
}
public function decode()
{
return json_decode( $this->value, true );
}
}
class ActionJsonEncode extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
return json_encode( $this->value );
}
}
class ActionDateC extends AbstractAction
{
public function setUp()
{
$this->setContainer( new DivContainer );
$this->setFormatter( new DbugFormatter );
}
public function decode()
{
$results = array();
array_map(function($value) use (&$results) {
$results[$value] = date('c', $value);
}, explode("\n", $this->value));
return $results;
}
}
class ActionStrtotime extends AbstractAction
{
public function setUp()
{
$this->setContainer( new DivContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
$tz = date_default_timezone_get();
date_default_timezone_set('UTC');
$time = strtotime($this->value);
$str_utc = date('c', $time);
date_default_timezone_set('America/New_York');
$str_ny = date('c', $time);
date_default_timezone_set($tz);
return "$time<br>$str_utc<br>$str_ny";
}
}
class ActionAnsi2Html extends AbstractAction
{
public function setUp()
{
$this->setContainer( new TextareaContainer );
$this->setFormatter( new EchoFormatter );
}
public function decode()
{
$converter = new AnsiToHtmlConverter();
return htmlentities(nl2br($converter->convert($this->value)));
}
}
class ActionParseStr extends AbstractAction
{
public function setUp()
{
$this->setContainer( new DivContainer );
$this->setFormatter( new DbugFormatter );
}
public function decode()
{
parse_str($this->value, $results);
return $results;
}
}
interface ContainerInterface
{
public function wrap( $contents );
}
class DivContainer implements ContainerInterface
{
public function wrap( $contents )
{
return '<div class="col">' . $contents . '</div>';
}
}
class TextareaContainer extends DivContainer
{
public function wrap( $contents )
{
return parent::wrap( '<textarea>' . $contents . '</textarea>' );
}
}
interface FormatterInterface
{
public function format( $value );
}
abstract class BufferedFormatter implements FormatterInterface {
const ESCAPE = false;
public function format( $value ) {
ob_start();
$this->bufferedFormat( $value );
$output = ob_get_clean();
if (static::ESCAPE) {
$output = '<pre>' . htmlentities($output) . '</pre>';
}
return $output;
}
abstract public function bufferedFormat( $value );
}
class DbugFormatter extends BufferedFormatter
{
public function bufferedFormat( $value )
{
new dBug( $value );
}
}
class VardumpFormatter extends BufferedFormatter
{
const ESCAPE = true;
public function bufferedFormat( $value )
{
var_dump( $value );
}
}
class EchoFormatter implements FormatterInterface
{
public function format( $value )
{
return $value;
}
}
class VarexportFormatter extends BufferedFormatter
{
const ESCAPE = true;
public function bufferedFormat( $value )
{
var_export( $value );
}
}