<?php /** * CodeIgniter * * An open source application development framework for PHP * * This content is released under the MIT License (MIT) * * Copyright (c) 2014-2019 British Columbia Institute of Technology * Copyright (c) 2019 CodeIgniter Foundation * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * @package CodeIgniter * @author CodeIgniter Dev Team * @copyright 2019 CodeIgniter Foundation * @license https://opensource.org/licenses/MIT MIT License * @link https://codeigniter.com * @since Version 4.0.0 * @filesource */ namespace CodeIgniter\Debug\Toolbar\Collectors; /** * History collector */ class History extends BaseCollector { /** * Whether this collector has data that can * be displayed in the Timeline. * * @var boolean */ protected $hasTimeline = false; /** * Whether this collector needs to display * content in a tab or not. * * @var boolean */ protected $hasTabContent = true; /** * Whether this collector needs to display * a label or not. * * @var boolean */ protected $hasLabel = true; /** * The 'title' of this Collector. * Used to name things in the toolbar HTML. * * @var string */ protected $title = 'History'; /** * @var array History files */ protected $files = []; //-------------------------------------------------------------------- /** * Specify time limit & file count for debug history. * * @param integer $current Current history time * @param integer $limit Max history files */ public function setFiles(int $current, int $limit = 20) { $filenames = glob(WRITEPATH . 'debugbar/debugbar_*.json'); $files = []; $counter = 0; foreach (array_reverse($filenames) as $filename) { $counter++; // Oldest files will be deleted if ($limit >= 0 && $counter > $limit) { unlink($filename); continue; } // Get the contents of this specific history request $contents = file_get_contents($filename); $contents = @json_decode($contents); if (json_last_error() === JSON_ERROR_NONE) { preg_match_all('/\d+/', $filename, $time); $time = (int)end($time[0]); // Debugbar files shown in History Collector $files[] = [ 'time' => $time, 'datetime' => date('Y-m-d H:i:s', $time), 'active' => $time === $current, 'status' => $contents->vars->response->statusCode, 'method' => $contents->method, 'url' => $contents->url, 'isAJAX' => $contents->isAJAX ? 'Yes' : 'No', 'contentType' => $contents->vars->response->contentType, ]; } } $this->files = $files; } //-------------------------------------------------------------------- /** * Returns the data of this collector to be formatted in the toolbar * * @return array */ public function display(): array { return ['files' => $this->files]; } //-------------------------------------------------------------------- /** * Displays the number of included files as a badge in the tab button. * * @return integer */ public function getBadgeValue(): int { return count($this->files); } /** * Return true if there are no history files. * * @return boolean */ public function isEmpty(): bool { return empty($this->files); } //-------------------------------------------------------------------- /** * Display the icon. * * Icon from https://icons8.com - 1em package * * @return string */ public function icon(): string { return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJySURBVEhL3ZU7aJNhGIVTpV6i4qCIgkIHxcXLErS4FBwUFNwiCKGhuTYJGaIgnRoo4qRu6iCiiIuIXXTTIkIpuqoFwaGgonUQlC5KafU5ycmNP0lTdPLA4fu+8573/a4/f6hXpFKpwUwmc9fDfweKbk+n07fgEv33TLSbtt/hvwNFT1PsG/zdTE0Gp+GFfD6/2fbVIxqNrqPIRbjg4t/hY8aztcngfDabHXbKyiiXy2vcrcPH8oDCry2FKDrA+Ar6L01E/ypyXzXaARjDGGcoeNxSDZXE0dHRA5VRE5LJ5CFy5jzJuOX2wHRHRnjbklZ6isQ3tIctBaAd4vlK3jLtkOVWqABBXd47jGHLmjTmSScttQV5J+SjfcUweFQEbsjAas5aqoCLXutJl7vtQsAzpRowYqkBinyCC8Vicb2lOih8zoldd0F8RD7qTFiqAnGrAy8stUAvi/hbqDM+YzkAFrLPdR5ZqoLXsd+Bh5YCIH7JniVdquUWxOPxDfboHhrI5XJ7HHhiqQXox+APe/Qk64+gGYVCYZs8cMpSFQj9JOoFzVqqo7k4HIvFYpscCoAjOmLffUsNUGRaQUwDlmofUa34ecsdgXdcXo4wbakBgiUFafXJV8A4DJ/2UrxUKm3E95H8RbjLcgOJRGILhnmCP+FBy5XvwN2uIPcy1AJvWgqC4xm2aU4Xb3lF4I+Tpyf8hRe5w3J7YLymSeA8Z3nSclv4WLRyFdfOjzrUFX0klJUEtZtntCNc+F69cz/FiDzEPtjzmcUMOr83kDQEX6pAJxJfpL3OX22n01YN7SZCoQnaSdoZ+Jz+PZihH3wt/xlCoT9M6nEtmRSPCQAAAABJRU5ErkJggg=='; } }