118 lines
2.8 KiB
PHP
118 lines
2.8 KiB
PHP
<?php
|
|
/*
|
|
* This file is part of the DebugBar package.
|
|
*
|
|
* (c) 2013 Maxime Bouroumeau-Fuseau
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace DebugBar;
|
|
|
|
/**
|
|
* Handler to list and open saved dataset
|
|
*/
|
|
class OpenHandler
|
|
{
|
|
protected $debugBar;
|
|
|
|
/**
|
|
* @param DebugBar $debugBar
|
|
* @throws DebugBarException
|
|
*/
|
|
public function __construct(DebugBar $debugBar)
|
|
{
|
|
if (!$debugBar->isDataPersisted()) {
|
|
throw new DebugBarException("DebugBar must have a storage backend to use OpenHandler");
|
|
}
|
|
$this->debugBar = $debugBar;
|
|
}
|
|
|
|
/**
|
|
* Handles the current request
|
|
*
|
|
* @param array $request Request data
|
|
* @param bool $echo
|
|
* @param bool $sendHeader
|
|
* @return string
|
|
* @throws DebugBarException
|
|
*/
|
|
public function handle($request = null, $echo = true, $sendHeader = true)
|
|
{
|
|
if ($request === null) {
|
|
$request = $_REQUEST;
|
|
}
|
|
|
|
$op = 'find';
|
|
if (isset($request['op'])) {
|
|
$op = $request['op'];
|
|
if (!in_array($op, array('find', 'get', 'clear'))) {
|
|
throw new DebugBarException("Invalid operation '{$request['op']}'");
|
|
}
|
|
}
|
|
|
|
if ($sendHeader) {
|
|
$this->debugBar->getHttpDriver()->setHeaders(array(
|
|
'Content-Type' => 'application/json'
|
|
));
|
|
}
|
|
|
|
$response = json_encode(call_user_func(array($this, $op), $request));
|
|
if ($echo) {
|
|
echo $response;
|
|
}
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Find operation
|
|
* @param $request
|
|
* @return array
|
|
*/
|
|
protected function find($request)
|
|
{
|
|
$max = 20;
|
|
if (isset($request['max'])) {
|
|
$max = $request['max'];
|
|
}
|
|
|
|
$offset = 0;
|
|
if (isset($request['offset'])) {
|
|
$offset = $request['offset'];
|
|
}
|
|
|
|
$filters = array();
|
|
foreach (array('utime', 'datetime', 'ip', 'uri', 'method') as $key) {
|
|
if (isset($request[$key])) {
|
|
$filters[$key] = $request[$key];
|
|
}
|
|
}
|
|
|
|
return $this->debugBar->getStorage()->find($filters, $max, $offset);
|
|
}
|
|
|
|
/**
|
|
* Get operation
|
|
* @param $request
|
|
* @return array
|
|
* @throws DebugBarException
|
|
*/
|
|
protected function get($request)
|
|
{
|
|
if (!isset($request['id'])) {
|
|
throw new DebugBarException("Missing 'id' parameter in 'get' operation");
|
|
}
|
|
return $this->debugBar->getStorage()->get($request['id']);
|
|
}
|
|
|
|
/**
|
|
* Clear operation
|
|
*/
|
|
protected function clear($request)
|
|
{
|
|
$this->debugBar->getStorage()->clear();
|
|
return array('success' => true);
|
|
}
|
|
}
|