1. Go to this page and download the library: Download careset/zermelo library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
careset / zermelo example snippets
namespace App\Reports;
use CareSet\Zermelo\Reports\Tabular\AbstractTabularReport;
class ExampleReport extends AbstractTabularReport
{
/*
* Get the Report Name
*/
public function GetReportName(): string {
return("Enter your report name here");
}
/*
* Get the Report Description, bootstrap styled html is OK
*/
public function GetReportDescription(): ?string {
$desc = "This is your report description <b> HTML is fine here </b>";
return($desc);
}
/**
* This is what builds the report. It will accept a SQL statement or an Array of sql statements.
* Can be used in conjunction with Inputs to determine different output based on URI parameters
* Additional URI parameters are passed as
* $this->getCode() - which will give the first url segment after the report name
* $this->getParameters() - which will give an array of every later url segment after the getCode value
* $this->getInput() - which will give _GET and _POST parameters. Should also get values inside JSON that is posted... a unified view of user input
* $this->quote($something_you_got_from_the_user) - This wrapper to the PDO quote function is good for preventing SQL injection
* $this->setInput($key,$new_value) - a way to override _GET parameters (i.e. for initializing a sort for instance)
* For instance $this->setInput('order',[0 => ['order_by_me' => 'asc']]); will order the report, to start by the order_by_me column ASC.
* This replicates what is being passed from the front end data tables to the backend to make sorting work..
**/
public function GetSQL()
{
//replace with your own SQL
$sql = "SELECT * FROM information_schema.TABLES";
return $sql;
}
/**
* Each row content will be passed to MapRow.
* Values and header names can be changed.
* Columns cannot be added or removed
* You can decorate fields with html, with bootstrap css styling
*
*/
public function MapRow(array $row, int $row_number) :array
{
/*
//this logic would ensure that every cell in the TABLE_NAME column, was converted to a link to
//a table drilldown report
$table_name = $row['TABLE_NAME'];
$row['TABLE_NAME'] = "Gotta Love Those Row Decorations: $table_name";
//this will make table name a link to another report
//$row['TABLE_NAME'] = "<a href='/Zermelo/TableDrillDownReport/$table_name/'>$table_name</a>";
//this will do the same thing, but styling the link as a bootstrap button.
//$row['TABLE_NAME'] = "<a class='btn btn-primary btn-sm' href='/Zermelo/TableDrillDownReport/$table_name/'>$table_name</a>";
*/
return $row;
}
/**
* If a column needs to be forced to a certain format (i.e.ear auto-detection gets it wrong), it can be changed here
* Tags can also be applied to each header column
*/
public function OverrideHeader(array &$format, array &$tags): void
{
//$tags['field_to_bold_in_report_display'] = ['BOLD'];
//$tags['field_to_hide_by_default'] = ['HIDDEN'];
//$tags['field_to_italic_in_report_display'] = ['ITALIC'];
//$tags['field_to_right_align_in_report'] = ['RIGHT'];
//How to set the format of the display
//$format['numeric_field'] = 'NUMBER'; // Formats number in table using commas, and right-aligns
//$format['decimal_field'] = 'DECIMAL'; // Formats decimal to 4 places, and right-aligns
//$format['currency_field'] = 'CURRENCY'; // adds $ or Eurosign and right align
//$format['percent_field'] = 'PERCENT'; // adds % in the right place and right align
//$format['url_field'] = 'URL'; // auto-link using <a href='$url_field'>$url_field</a>
//$format['date_field'] = 'DATE'; // future date display
//$format['datetime_field'] = 'DATETIME'; //future date time display
//$format['time_field'] = 'TIME'; // future time display
//$format['row_summary_field'] = ['DETAIL']; // this field will be shown with a + sign in the column.
//pressing the plus will create a new row in the table
//that shows the actual contents of this column.
}
/**
* Header Format 'auto-detection' can be changed per report.
* it is based on seeing the strings below in a field name... it will then assume it should be styled accordingly
* So it a column label is 'very_good_num' or 'this num' will be matched by 'num' but 'number' will not work.
* so it is matched on ignore case on a column name segment, not on substring...
* By default, these are the column formats -
* public $DETAIL = ['Sentence'];
* public $URL = ['URL'];
* public $CURRENCY = ['Amt','Amount','Paid','Cost'];
* public $NUMBER = ['id','#','Num','Sum','Total','Cnt','Count'];
* public $DECIMAL = ['Avg','Average'];
* public $PERCENT = ['Percent','Ratio','Perentage'];
*
* It detects the column by using 'word' matching, separated white spaces or _.
* Example: TABLE_ROWS - ['TABLE','ROWS']
* It will also check the full column name
*/
public $NUMBER = ['ROWS','AVG','LENGTH','DATA_FREE'];
/*
* By Default, any numeric field will have statistical information will be passed on. AVG/STD/MIN/MAX/SUM
* Any Text column will have distinct count information passed on.
* Any Date will have MIN/MAX/AVG
* This field will add a "NO_SUMMARY" field to the column header to suggest the data not be displayed
*/
public $SUGGEST_NO_SUMMARY = ['ID'];
/**
* Want to use your own blade file for the report front-end?
* You can customize the report view based on the report
* When this is set to null, the report will use the view defined in the configuration file.
*
*/
public $REPORT_VIEW = null;
/*
* Get Indexes for cache table
* Because results are saved to a cache table, and then exported from there later searching, using the front end... can be very slow
* This returns an array of Index commands that will be run against the cache table
* because we do not know the name of the cache table in advance, these index commands must use the string '{{_CACHE_TABLE_}}' instead of
* the name of a specific table...
*/
public function GetIndexSQL(): ?array {
$index_sql = [
"ALTER TABLE {{_CACHE_TABLE_}} ADD INDEX(`COLUMN_NAME`);",
"ALTER TABLE {{_CACHE_TABLE_}} ADD INDEX(`TABLE_NAME`);",
"ALTER TABLE {{_CACHE_TABLE_}} ADD INDEX(`database_name`);",
"ALTER TABLE {{_CACHE_TABLE_}} ADD PRIMARY KEY( `database_name`, `TABLE_NAME`, `COLUMN_NAME`); "
];
// you can uncomment this line to enable the default report to automatically index the resulting cached table
// return($index_sql);
//returning null here results in no indexing happening on the cached results table
return(null);
}
/**
* @return null|string
*
* Return the footer of the report. This string will be placed in the footer element
* at the bottom of the page.
*/
public function GetReportFooter(): ?string
{
$footer = <<<FOOTER
<p>Made with love by CareSet</>
FOOTER;
return $footer;
}
/**
* @return null|string
*
* Add a string here to put in the class of the footer element of the report layout
*/
public function GetReportFooterClass(): ?string
{
// Add "fixed centered" to have your footer fixed to the bottom, and/or centered
// This will be put in the class= attribute of the footer
return "";
}
/**
* @return null|string
*
* This will place the enclosed Javascript in a <script> tag just before
* the body of your view. Note, there is no need to