init
This commit is contained in:
commit
fc08d903dc
21
composer.json
Normal file
21
composer.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "at-lab/chartisan-port",
|
||||
"description": "Chartisan's PHP backend",
|
||||
"license": "MIT",
|
||||
"type": "library",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Èrik Campobadal Forés",
|
||||
"email": "soc@erik.cat"
|
||||
}
|
||||
],
|
||||
"minimum-stability": "dev",
|
||||
"require": {
|
||||
"php": ">=7.4"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Chartisan\\PHP\\": "src/"
|
||||
}
|
||||
}
|
||||
}
|
1
example/.gitignore
vendored
Normal file
1
example/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/vendor/*
|
2
example/Makefile
Normal file
2
example/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
all:
|
||||
php -S 127.0.0.1:9000 -t public/
|
21
example/app.php
Normal file
21
example/app.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
use Chartisan\PHP\Chartisan;
|
||||
|
||||
/**
|
||||
* Outputing JSON encoded data and
|
||||
* the CORS headers.
|
||||
*/
|
||||
header('Content-Type: application/json');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
|
||||
/**
|
||||
* Main application entry point.
|
||||
*/
|
||||
return fn (): string => Chartisan::build()
|
||||
->labels(['a', 'b', 'c'])
|
||||
->dataset('Sample 1', [1, 2 ,3])
|
||||
->dataset('Sample 2', [3, 2 ,1])
|
||||
->toJSON();
|
17
example/composer.json
Normal file
17
example/composer.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"type": "project",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "path",
|
||||
"url": "../",
|
||||
"options": {
|
||||
"symlink": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Chartisan\\PHP\\": "../src"
|
||||
}
|
||||
}
|
||||
}
|
18
example/public/index.php
Normal file
18
example/public/index.php
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
/**
|
||||
* Register the auto loader.
|
||||
*/
|
||||
require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
/**
|
||||
* Get the application response.
|
||||
*/
|
||||
$response = require_once __DIR__ . '/../app.php';
|
||||
|
||||
/**
|
||||
* Respond to the request.
|
||||
*/
|
||||
echo $response();
|
25
src/ChartData.php
Normal file
25
src/ChartData.php
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Chartisan\PHP;
|
||||
|
||||
/**
|
||||
* Represents the chart information.
|
||||
*/
|
||||
class ChartData
|
||||
{
|
||||
/**
|
||||
* Stores the chart labels.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
public array $labels = [];
|
||||
|
||||
/**
|
||||
* Stores the extra information of the chart if needed.
|
||||
*
|
||||
* @var array|null
|
||||
*/
|
||||
public ?array $extra = null;
|
||||
}
|
133
src/Chartisan.php
Normal file
133
src/Chartisan.php
Normal file
|
@ -0,0 +1,133 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Chartisan\PHP;
|
||||
|
||||
/**
|
||||
* Represents a chartisan chart instance.
|
||||
*/
|
||||
class Chartisan
|
||||
{
|
||||
/**
|
||||
* Stores the server data of the chart.
|
||||
*
|
||||
* @var ServerData
|
||||
*/
|
||||
protected ServerData $serverData;
|
||||
|
||||
/**
|
||||
* Creates a new instance of a chartisan chart.
|
||||
*
|
||||
* @param ServerData $serverData
|
||||
*/
|
||||
public function __construct(ServerData $serverData)
|
||||
{
|
||||
$this->serverData = $serverData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of a chartisan chart.
|
||||
*
|
||||
* @return Chartisan
|
||||
*/
|
||||
public static function build(): Chartisan
|
||||
{
|
||||
return new Chartisan(new ServerData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the chart labels.
|
||||
*
|
||||
* @param string[] $labels
|
||||
* @return Chartisan
|
||||
*/
|
||||
public function labels(array $labels): Chartisan
|
||||
{
|
||||
$this->serverData->chart->labels = $labels;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds extra information to the chart.
|
||||
*
|
||||
* @param array $value
|
||||
* @return Chartisan
|
||||
*/
|
||||
public function extra(array $value): Chartisan
|
||||
{
|
||||
$this->serverData->chart->extra = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* AdvancedDataset appends a new dataset to the chart or modifies an existing one.
|
||||
* If the ID has already been used, the dataset will be replaced with this one.
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $values
|
||||
* @param array|null $extra
|
||||
* @return Chartisan
|
||||
*/
|
||||
public function advancedDataset(string $name, array $values, ?array $extra): Chartisan
|
||||
{
|
||||
$dataset = $this->getDataset($name);
|
||||
if ($dataset) {
|
||||
$dataset->name = $name;
|
||||
$dataset->values = $values;
|
||||
$dataset->extra = $extra;
|
||||
} else {
|
||||
$this->serverData->datasets[] = new DatasetData($name, $values, $extra);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dataset adds a new simple dataset to the chart. If more advanced control is
|
||||
* needed, consider using `AdvancedDataset` instead.
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $values
|
||||
* @return Chartisan
|
||||
*/
|
||||
public function dataset(string $name, array $values): Chartisan
|
||||
{
|
||||
return $this->advancedDataset($name, $values, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the string representation JSON encoded.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function toJSON(): string
|
||||
{
|
||||
return json_encode($this->toObject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms it to an object.
|
||||
*
|
||||
* @return ServerData
|
||||
*/
|
||||
public function toObject(): ServerData
|
||||
{
|
||||
return $this->serverData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the dataset with the given name.
|
||||
*
|
||||
* @param string $name
|
||||
* @return ServerData|null
|
||||
*/
|
||||
protected function getDataset(string $name): ?DatasetData
|
||||
{
|
||||
foreach ($this->serverData->datasets as $dataset) {
|
||||
if ($dataset->name == $name) {
|
||||
return $dataset;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
46
src/DatasetData.php
Normal file
46
src/DatasetData.php
Normal file
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Chartisan\PHP;
|
||||
|
||||
/**
|
||||
* Represents the dataset information.
|
||||
*/
|
||||
class DatasetData
|
||||
{
|
||||
/**
|
||||
* Stores the dataset name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public string $name;
|
||||
|
||||
/**
|
||||
* Stores the dataset values.
|
||||
*
|
||||
* @var array[float]
|
||||
*/
|
||||
public array $values;
|
||||
|
||||
/**
|
||||
* Stores the dataset extra information if needed.
|
||||
*
|
||||
* @var ?array
|
||||
*/
|
||||
public ?array $extra;
|
||||
|
||||
/**
|
||||
* Creates a new instance of DatasetData.
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $values
|
||||
* @param array|null $extra
|
||||
*/
|
||||
public function __construct(string $name, array $values, ?array $extra)
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->values = $values;
|
||||
$this->extra = $extra;
|
||||
}
|
||||
}
|
34
src/ServerData.php
Normal file
34
src/ServerData.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Chartisan\PHP;
|
||||
|
||||
/**
|
||||
* ServerData represents how the server is expected
|
||||
* to send the data to the chartisan client.
|
||||
*/
|
||||
class ServerData
|
||||
{
|
||||
/**
|
||||
* Stores the chart information.
|
||||
*
|
||||
* @var ChartData
|
||||
*/
|
||||
public ChartData $chart;
|
||||
|
||||
/**
|
||||
* Stores the datasets of the chart.
|
||||
*
|
||||
* @var DatasetData[]
|
||||
*/
|
||||
public array $datasets = [];
|
||||
|
||||
/**
|
||||
* Creates a new instance of a server data.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->chart = new ChartData;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user