Merge pull request #6 from copenhagentruckwash/development
Refactor pagination and filtering logic
This commit is contained in:
+22
-17
@@ -7,11 +7,11 @@ use mysqli;
|
|||||||
|
|
||||||
class db
|
class db
|
||||||
{
|
{
|
||||||
|
public mysqli $conn;
|
||||||
private string $host;
|
private string $host;
|
||||||
private string $user;
|
private string $user;
|
||||||
private string $password;
|
private string $password;
|
||||||
private string $database;
|
private string $database;
|
||||||
public mysqli $conn;
|
|
||||||
|
|
||||||
public function __construct(array $config)
|
public function __construct(array $config)
|
||||||
{
|
{
|
||||||
@@ -31,22 +31,6 @@ class db
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function query(string $sql): \mysqli_result|bool
|
|
||||||
{
|
|
||||||
// If the connection is not established, connect
|
|
||||||
return $this->conn->query($sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetch_assoc($result)
|
|
||||||
{
|
|
||||||
return $result->fetch_assoc();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetch_all($result)
|
|
||||||
{
|
|
||||||
return $result->fetch_all(MYSQLI_ASSOC);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function escape_string(string $string): string
|
public function escape_string(string $string): string
|
||||||
{
|
{
|
||||||
return $this->conn->real_escape_string($string);
|
return $this->conn->real_escape_string($string);
|
||||||
@@ -64,6 +48,17 @@ class db
|
|||||||
return $this->fetch_assoc($result);
|
return $this->fetch_assoc($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function query(string $sql): \mysqli_result|bool
|
||||||
|
{
|
||||||
|
// If the connection is not established, connect
|
||||||
|
return $this->conn->query($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fetch_assoc($result)
|
||||||
|
{
|
||||||
|
return $result->fetch_assoc();
|
||||||
|
}
|
||||||
|
|
||||||
public function list_objects(string $table): array
|
public function list_objects(string $table): array
|
||||||
{
|
{
|
||||||
$sql = "SELECT * FROM $table";
|
$sql = "SELECT * FROM $table";
|
||||||
@@ -71,6 +66,11 @@ class db
|
|||||||
return $this->fetch_all($result);
|
return $this->fetch_all($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function fetch_all($result)
|
||||||
|
{
|
||||||
|
return $result->fetch_all(MYSQLI_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
public function list_objects_paginated(string $table, int $page, int $limit): array
|
public function list_objects_paginated(string $table, int $page, int $limit): array
|
||||||
{
|
{
|
||||||
$offset = ($page - 1) * $limit;
|
$offset = ($page - 1) * $limit;
|
||||||
@@ -103,4 +103,9 @@ class db
|
|||||||
{
|
{
|
||||||
return $this->conn;
|
return $this->conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function prepare(string $sql): false|\mysqli_stmt
|
||||||
|
{
|
||||||
|
return $this->conn->prepare($sql);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+41
-23
@@ -11,6 +11,12 @@ class response implements response_i
|
|||||||
private array $data = [];
|
private array $data = [];
|
||||||
private array $meta = [];
|
private array $meta = [];
|
||||||
private array $includes = [];
|
private array $includes = [];
|
||||||
|
|
||||||
|
#[NoReturn] public function success(mixed $data, int $status = null): void
|
||||||
|
{
|
||||||
|
$this->response(true, $data, $status);
|
||||||
|
}
|
||||||
|
|
||||||
#[NoReturn] public function response(bool $success, mixed $data, int $status = null): void
|
#[NoReturn] public function response(bool $success, mixed $data, int $status = null): void
|
||||||
{
|
{
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
@@ -20,7 +26,7 @@ class response implements response_i
|
|||||||
http_response_code($success ? 200 : 400);
|
http_response_code($success ? 200 : 400);
|
||||||
}
|
}
|
||||||
// If the data isn't an array, convert it to an array
|
// If the data isn't an array, convert it to an array
|
||||||
if (! is_array($data)) {
|
if (!is_array($data)) {
|
||||||
$data = ['message' => $data];
|
$data = ['message' => $data];
|
||||||
}
|
}
|
||||||
echo json_encode([
|
echo json_encode([
|
||||||
@@ -32,9 +38,9 @@ class response implements response_i
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[NoReturn] public function success(mixed $data, int $status = null): void
|
#[NoReturn] public function not_found(): void
|
||||||
{
|
{
|
||||||
$this->response(true, $data, $status);
|
$this->error('Not found', 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[NoReturn] public function error(mixed $data, int $status = null): void
|
#[NoReturn] public function error(mixed $data, int $status = null): void
|
||||||
@@ -42,31 +48,11 @@ class response implements response_i
|
|||||||
$this->response(false, $data, $status);
|
$this->response(false, $data, $status);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[NoReturn] public function not_found(): void
|
|
||||||
{
|
|
||||||
$this->error('Not found', 404);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[NoReturn] public function rate_limit_exceeded(): void
|
#[NoReturn] public function rate_limit_exceeded(): void
|
||||||
{
|
{
|
||||||
$this->error('Rate limit exceeded', 429);
|
$this->error('Rate limit exceeded', 429);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add_data(string $key, mixed $value): void
|
|
||||||
{
|
|
||||||
$this->data[$key] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function add_meta(string $key, mixed $value): void
|
|
||||||
{
|
|
||||||
$this->meta[$key] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function add_included(string $key, mixed $value): void
|
|
||||||
{
|
|
||||||
$this->includes[$key] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function matching_route_found(): void
|
public function matching_route_found(): void
|
||||||
{
|
{
|
||||||
$this->matching_route_found = true;
|
$this->matching_route_found = true;
|
||||||
@@ -97,6 +83,11 @@ class response implements response_i
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function add_meta(string $key, mixed $value): void
|
||||||
|
{
|
||||||
|
$this->meta[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
public function get_data(): array
|
public function get_data(): array
|
||||||
{
|
{
|
||||||
return $this->data;
|
return $this->data;
|
||||||
@@ -112,6 +103,11 @@ class response implements response_i
|
|||||||
$this->add_data('debug', $data);
|
$this->add_data('debug', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function add_data(string $key, mixed $value): void
|
||||||
|
{
|
||||||
|
$this->data[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
public function getRequestParameter(string $key): string|null
|
public function getRequestParameter(string $key): string|null
|
||||||
{
|
{
|
||||||
// Get the request data if the method is POST, PUT or PATCH
|
// Get the request data if the method is POST, PUT or PATCH
|
||||||
@@ -130,4 +126,26 @@ class response implements response_i
|
|||||||
{
|
{
|
||||||
$this->add_included($string, $dataArray);
|
$this->add_included($string, $dataArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function add_included(string $key, mixed $value): void
|
||||||
|
{
|
||||||
|
$this->includes[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function parseFilters(?string $filters): array|null
|
||||||
|
{
|
||||||
|
if ($filters) {
|
||||||
|
$filters = explode(',', $filters);
|
||||||
|
$temp = [];
|
||||||
|
foreach ( $filters as $filter ) {
|
||||||
|
$filter = explode(':', $filter);
|
||||||
|
$temp[$filter[0]] = $filter[1];
|
||||||
|
}
|
||||||
|
$filters = $temp;
|
||||||
|
}
|
||||||
|
if ($filters) {
|
||||||
|
return $filters;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+7
-5
@@ -1,10 +1,10 @@
|
|||||||
<?php global $CONFIG_DB, $DEBUG, $ENCRYPTION_KEY, $CORS, $ECONOMIC_API;
|
<?php global $CONFIG_DB, $DEBUG, $ENCRYPTION_KEY, $CORS, $ECONOMIC_API, $WORDPRESS_STATIC_TOKEN, $USE_PROD_ECONOMIC_IN_DEBUG;
|
||||||
$CONFIG_DB = [
|
$CONFIG_DB = [
|
||||||
'host' => '', // IP address of the database server e.g. 127.0.0.1
|
'host' => '', // IP address of the database server e.g. 127.0.0.1
|
||||||
'user' => '', // Username of the database server e.g. root
|
'user' => '', // Username of the database server e.g. root
|
||||||
'password' => '', // Password of the database server e.g. password123
|
'password' => '', // Password of the database server e.g. password123
|
||||||
'database' => '' // Name of the database e.g. my_database
|
'database' => '' // Name of the database e.g. my_database
|
||||||
];
|
];
|
||||||
$DEBUG = true; // Set to true to enable debugging (Error messages will be shown, and this should never be used in production)
|
$DEBUG = true; // Set to true to enable debugging (Error messages will be shown, and this should never be used in production)
|
||||||
$USE_PROD_ECONOMIC_IN_DEBUG = true; // Set to true to use the production economic API in debug mode
|
$USE_PROD_ECONOMIC_IN_DEBUG = true; // Set to true to use the production economic API in debug mode
|
||||||
$ENCRYPTION_KEY = ''; // 44 Characters long encryption key
|
$ENCRYPTION_KEY = ''; // 44 Characters long encryption key
|
||||||
@@ -13,11 +13,13 @@ $ECONOMIC_API = [
|
|||||||
'app_access_grant' => '', // Economic API access grant token (1)
|
'app_access_grant' => '', // Economic API access grant token (1)
|
||||||
'app_access_grant2' => '', // Economic API access grant token (2)
|
'app_access_grant2' => '', // Economic API access grant token (2)
|
||||||
'app_secret_token' => '' // Economic API secret token
|
'app_secret_token' => '' // Economic API secret token
|
||||||
];
|
];
|
||||||
if ($DEBUG && !$USE_PROD_ECONOMIC_IN_DEBUG) {
|
if ($DEBUG && !$USE_PROD_ECONOMIC_IN_DEBUG) {
|
||||||
$ECONOMIC_API = [
|
$ECONOMIC_API = [
|
||||||
'app_access_grant' => '', // Development Economic API access grant token (1)
|
'app_access_grant' => '', // Development Economic API access grant token (1)
|
||||||
'app_access_grant2' => '', // Development Economic API access grant token (2)
|
'app_access_grant2' => '', // Development Economic API access grant token (2)
|
||||||
'app_secret_token' => '' // Development Economic API secret token
|
'app_secret_token' => '' // Development Economic API secret token
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
$WORDPRESS_STATIC_TOKEN = ''; // Static token used to authenticate the WordPress plugin
|
||||||
|
$EMAIL_WASH_CERTIFICATE_TOKEN = ''; // Token used to authenticate the wash certificate generator
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is the processor that handles the certificate download requests
|
||||||
|
* It is here to avoid direct access to the certificate download API
|
||||||
|
*/
|
||||||
|
require_once '../../../config.php';
|
||||||
|
global $WORDPRESS_STATIC_TOKEN;
|
||||||
|
// Male sure the config file is loaded and configured
|
||||||
|
if (!isset($WORDPRESS_STATIC_TOKEN)) {
|
||||||
|
header('HTTP/1.0 500 Internal Server Error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the certificate ID from the query string
|
||||||
|
$certificate_id = $_GET['certificate_id'] ?? '';
|
||||||
|
|
||||||
|
// Check if the certificate ID is a number
|
||||||
|
if (!is_numeric($certificate_id) || $certificate_id < 1) {
|
||||||
|
header('HTTP/1.0 403 Bad Request');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Add authentication here
|
||||||
|
|
||||||
|
// Check if the certificate exists in the /output/certificates folder
|
||||||
|
if (!file_exists("../output/certificates/wash_certificate_" . $certificate_id . ".pdf")) {
|
||||||
|
header('HTTP/1.0 403 Bad Request');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the headers
|
||||||
|
header('Content-Type: application/pdf');
|
||||||
|
header('Content-Disposition: attachment; filename="wash certificate ' . $certificate_id . '.pdf"');
|
||||||
|
|
||||||
|
// Output the certificate
|
||||||
|
readfile("../output/certificates/wash_certificate_" . $certificate_id . ".pdf");
|
||||||
|
exit;
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"repositories": [
|
||||||
|
{
|
||||||
|
"type": "composer",
|
||||||
|
"url": "http://packagist.org",
|
||||||
|
"options": {
|
||||||
|
"ssl": {
|
||||||
|
"verify_peer": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"phpoffice/phpspreadsheet": "^3.4",
|
||||||
|
"mpdf/mpdf": "^8.2",
|
||||||
|
"dompdf/dompdf": "^3.0",
|
||||||
|
"tecnickcom/tcpdf": "^6.7",
|
||||||
|
"mitoteam/jpgraph": "^10.4",
|
||||||
|
"setasign/fpdi": "^2.6",
|
||||||
|
"setasign/fpdf": "^1.8",
|
||||||
|
"ext-mysqli": "*"
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+1375
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Courier';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
for ( $i = 0; $i <= 255; $i++ )
|
||||||
|
$cw[chr($i)] = 600;
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Courier-Bold';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
for ( $i = 0; $i <= 255; $i++ )
|
||||||
|
$cw[chr($i)] = 600;
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Courier-BoldOblique';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
for ( $i = 0; $i <= 255; $i++ )
|
||||||
|
$cw[chr($i)] = 600;
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Courier-Oblique';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
for ( $i = 0; $i <= 255; $i++ )
|
||||||
|
$cw[chr($i)] = 600;
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Helvetica';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 278, chr(1) => 278, chr(2) => 278, chr(3) => 278, chr(4) => 278, chr(5) => 278, chr(6) => 278, chr(7) => 278, chr(8) => 278, chr(9) => 278, chr(10) => 278, chr(11) => 278, chr(12) => 278, chr(13) => 278, chr(14) => 278, chr(15) => 278, chr(16) => 278, chr(17) => 278, chr(18) => 278, chr(19) => 278, chr(20) => 278, chr(21) => 278,
|
||||||
|
chr(22) => 278, chr(23) => 278, chr(24) => 278, chr(25) => 278, chr(26) => 278, chr(27) => 278, chr(28) => 278, chr(29) => 278, chr(30) => 278, chr(31) => 278, ' ' => 278, '!' => 278, '"' => 355, '#' => 556, '$' => 556, '%' => 889, '&' => 667, '\'' => 191, '(' => 333, ')' => 333, '*' => 389, '+' => 584,
|
||||||
|
',' => 278, '-' => 333, '.' => 278, '/' => 278, '0' => 556, '1' => 556, '2' => 556, '3' => 556, '4' => 556, '5' => 556, '6' => 556, '7' => 556, '8' => 556, '9' => 556, ':' => 278, ';' => 278, '<' => 584, '=' => 584, '>' => 584, '?' => 556, '@' => 1015, 'A' => 667,
|
||||||
|
'B' => 667, 'C' => 722, 'D' => 722, 'E' => 667, 'F' => 611, 'G' => 778, 'H' => 722, 'I' => 278, 'J' => 500, 'K' => 667, 'L' => 556, 'M' => 833, 'N' => 722, 'O' => 778, 'P' => 667, 'Q' => 778, 'R' => 722, 'S' => 667, 'T' => 611, 'U' => 722, 'V' => 667, 'W' => 944,
|
||||||
|
'X' => 667, 'Y' => 667, 'Z' => 611, '[' => 278, '\\' => 278, ']' => 278, '^' => 469, '_' => 556, '`' => 333, 'a' => 556, 'b' => 556, 'c' => 500, 'd' => 556, 'e' => 556, 'f' => 278, 'g' => 556, 'h' => 556, 'i' => 222, 'j' => 222, 'k' => 500, 'l' => 222, 'm' => 833,
|
||||||
|
'n' => 556, 'o' => 556, 'p' => 556, 'q' => 556, 'r' => 333, 's' => 500, 't' => 278, 'u' => 556, 'v' => 500, 'w' => 722, 'x' => 500, 'y' => 500, 'z' => 500, '{' => 334, '|' => 260, '}' => 334, '~' => 584, chr(127) => 350, chr(128) => 556, chr(129) => 350, chr(130) => 222, chr(131) => 556,
|
||||||
|
chr(132) => 333, chr(133) => 1000, chr(134) => 556, chr(135) => 556, chr(136) => 333, chr(137) => 1000, chr(138) => 667, chr(139) => 333, chr(140) => 1000, chr(141) => 350, chr(142) => 611, chr(143) => 350, chr(144) => 350, chr(145) => 222, chr(146) => 222, chr(147) => 333, chr(148) => 333, chr(149) => 350, chr(150) => 556, chr(151) => 1000, chr(152) => 333, chr(153) => 1000,
|
||||||
|
chr(154) => 500, chr(155) => 333, chr(156) => 944, chr(157) => 350, chr(158) => 500, chr(159) => 667, chr(160) => 278, chr(161) => 333, chr(162) => 556, chr(163) => 556, chr(164) => 556, chr(165) => 556, chr(166) => 260, chr(167) => 556, chr(168) => 333, chr(169) => 737, chr(170) => 370, chr(171) => 556, chr(172) => 584, chr(173) => 333, chr(174) => 737, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 584, chr(178) => 333, chr(179) => 333, chr(180) => 333, chr(181) => 556, chr(182) => 537, chr(183) => 278, chr(184) => 333, chr(185) => 333, chr(186) => 365, chr(187) => 556, chr(188) => 834, chr(189) => 834, chr(190) => 834, chr(191) => 611, chr(192) => 667, chr(193) => 667, chr(194) => 667, chr(195) => 667, chr(196) => 667, chr(197) => 667,
|
||||||
|
chr(198) => 1000, chr(199) => 722, chr(200) => 667, chr(201) => 667, chr(202) => 667, chr(203) => 667, chr(204) => 278, chr(205) => 278, chr(206) => 278, chr(207) => 278, chr(208) => 722, chr(209) => 722, chr(210) => 778, chr(211) => 778, chr(212) => 778, chr(213) => 778, chr(214) => 778, chr(215) => 584, chr(216) => 778, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 667, chr(222) => 667, chr(223) => 611, chr(224) => 556, chr(225) => 556, chr(226) => 556, chr(227) => 556, chr(228) => 556, chr(229) => 556, chr(230) => 889, chr(231) => 500, chr(232) => 556, chr(233) => 556, chr(234) => 556, chr(235) => 556, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 556, chr(241) => 556,
|
||||||
|
chr(242) => 556, chr(243) => 556, chr(244) => 556, chr(245) => 556, chr(246) => 556, chr(247) => 584, chr(248) => 611, chr(249) => 556, chr(250) => 556, chr(251) => 556, chr(252) => 556, chr(253) => 500, chr(254) => 556, chr(255) => 500);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Helvetica-Bold';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 278, chr(1) => 278, chr(2) => 278, chr(3) => 278, chr(4) => 278, chr(5) => 278, chr(6) => 278, chr(7) => 278, chr(8) => 278, chr(9) => 278, chr(10) => 278, chr(11) => 278, chr(12) => 278, chr(13) => 278, chr(14) => 278, chr(15) => 278, chr(16) => 278, chr(17) => 278, chr(18) => 278, chr(19) => 278, chr(20) => 278, chr(21) => 278,
|
||||||
|
chr(22) => 278, chr(23) => 278, chr(24) => 278, chr(25) => 278, chr(26) => 278, chr(27) => 278, chr(28) => 278, chr(29) => 278, chr(30) => 278, chr(31) => 278, ' ' => 278, '!' => 333, '"' => 474, '#' => 556, '$' => 556, '%' => 889, '&' => 722, '\'' => 238, '(' => 333, ')' => 333, '*' => 389, '+' => 584,
|
||||||
|
',' => 278, '-' => 333, '.' => 278, '/' => 278, '0' => 556, '1' => 556, '2' => 556, '3' => 556, '4' => 556, '5' => 556, '6' => 556, '7' => 556, '8' => 556, '9' => 556, ':' => 333, ';' => 333, '<' => 584, '=' => 584, '>' => 584, '?' => 611, '@' => 975, 'A' => 722,
|
||||||
|
'B' => 722, 'C' => 722, 'D' => 722, 'E' => 667, 'F' => 611, 'G' => 778, 'H' => 722, 'I' => 278, 'J' => 556, 'K' => 722, 'L' => 611, 'M' => 833, 'N' => 722, 'O' => 778, 'P' => 667, 'Q' => 778, 'R' => 722, 'S' => 667, 'T' => 611, 'U' => 722, 'V' => 667, 'W' => 944,
|
||||||
|
'X' => 667, 'Y' => 667, 'Z' => 611, '[' => 333, '\\' => 278, ']' => 333, '^' => 584, '_' => 556, '`' => 333, 'a' => 556, 'b' => 611, 'c' => 556, 'd' => 611, 'e' => 556, 'f' => 333, 'g' => 611, 'h' => 611, 'i' => 278, 'j' => 278, 'k' => 556, 'l' => 278, 'm' => 889,
|
||||||
|
'n' => 611, 'o' => 611, 'p' => 611, 'q' => 611, 'r' => 389, 's' => 556, 't' => 333, 'u' => 611, 'v' => 556, 'w' => 778, 'x' => 556, 'y' => 556, 'z' => 500, '{' => 389, '|' => 280, '}' => 389, '~' => 584, chr(127) => 350, chr(128) => 556, chr(129) => 350, chr(130) => 278, chr(131) => 556,
|
||||||
|
chr(132) => 500, chr(133) => 1000, chr(134) => 556, chr(135) => 556, chr(136) => 333, chr(137) => 1000, chr(138) => 667, chr(139) => 333, chr(140) => 1000, chr(141) => 350, chr(142) => 611, chr(143) => 350, chr(144) => 350, chr(145) => 278, chr(146) => 278, chr(147) => 500, chr(148) => 500, chr(149) => 350, chr(150) => 556, chr(151) => 1000, chr(152) => 333, chr(153) => 1000,
|
||||||
|
chr(154) => 556, chr(155) => 333, chr(156) => 944, chr(157) => 350, chr(158) => 500, chr(159) => 667, chr(160) => 278, chr(161) => 333, chr(162) => 556, chr(163) => 556, chr(164) => 556, chr(165) => 556, chr(166) => 280, chr(167) => 556, chr(168) => 333, chr(169) => 737, chr(170) => 370, chr(171) => 556, chr(172) => 584, chr(173) => 333, chr(174) => 737, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 584, chr(178) => 333, chr(179) => 333, chr(180) => 333, chr(181) => 611, chr(182) => 556, chr(183) => 278, chr(184) => 333, chr(185) => 333, chr(186) => 365, chr(187) => 556, chr(188) => 834, chr(189) => 834, chr(190) => 834, chr(191) => 611, chr(192) => 722, chr(193) => 722, chr(194) => 722, chr(195) => 722, chr(196) => 722, chr(197) => 722,
|
||||||
|
chr(198) => 1000, chr(199) => 722, chr(200) => 667, chr(201) => 667, chr(202) => 667, chr(203) => 667, chr(204) => 278, chr(205) => 278, chr(206) => 278, chr(207) => 278, chr(208) => 722, chr(209) => 722, chr(210) => 778, chr(211) => 778, chr(212) => 778, chr(213) => 778, chr(214) => 778, chr(215) => 584, chr(216) => 778, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 667, chr(222) => 667, chr(223) => 611, chr(224) => 556, chr(225) => 556, chr(226) => 556, chr(227) => 556, chr(228) => 556, chr(229) => 556, chr(230) => 889, chr(231) => 556, chr(232) => 556, chr(233) => 556, chr(234) => 556, chr(235) => 556, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 611, chr(241) => 611,
|
||||||
|
chr(242) => 611, chr(243) => 611, chr(244) => 611, chr(245) => 611, chr(246) => 611, chr(247) => 584, chr(248) => 611, chr(249) => 611, chr(250) => 611, chr(251) => 611, chr(252) => 611, chr(253) => 556, chr(254) => 611, chr(255) => 556);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Helvetica-BoldOblique';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 278, chr(1) => 278, chr(2) => 278, chr(3) => 278, chr(4) => 278, chr(5) => 278, chr(6) => 278, chr(7) => 278, chr(8) => 278, chr(9) => 278, chr(10) => 278, chr(11) => 278, chr(12) => 278, chr(13) => 278, chr(14) => 278, chr(15) => 278, chr(16) => 278, chr(17) => 278, chr(18) => 278, chr(19) => 278, chr(20) => 278, chr(21) => 278,
|
||||||
|
chr(22) => 278, chr(23) => 278, chr(24) => 278, chr(25) => 278, chr(26) => 278, chr(27) => 278, chr(28) => 278, chr(29) => 278, chr(30) => 278, chr(31) => 278, ' ' => 278, '!' => 333, '"' => 474, '#' => 556, '$' => 556, '%' => 889, '&' => 722, '\'' => 238, '(' => 333, ')' => 333, '*' => 389, '+' => 584,
|
||||||
|
',' => 278, '-' => 333, '.' => 278, '/' => 278, '0' => 556, '1' => 556, '2' => 556, '3' => 556, '4' => 556, '5' => 556, '6' => 556, '7' => 556, '8' => 556, '9' => 556, ':' => 333, ';' => 333, '<' => 584, '=' => 584, '>' => 584, '?' => 611, '@' => 975, 'A' => 722,
|
||||||
|
'B' => 722, 'C' => 722, 'D' => 722, 'E' => 667, 'F' => 611, 'G' => 778, 'H' => 722, 'I' => 278, 'J' => 556, 'K' => 722, 'L' => 611, 'M' => 833, 'N' => 722, 'O' => 778, 'P' => 667, 'Q' => 778, 'R' => 722, 'S' => 667, 'T' => 611, 'U' => 722, 'V' => 667, 'W' => 944,
|
||||||
|
'X' => 667, 'Y' => 667, 'Z' => 611, '[' => 333, '\\' => 278, ']' => 333, '^' => 584, '_' => 556, '`' => 333, 'a' => 556, 'b' => 611, 'c' => 556, 'd' => 611, 'e' => 556, 'f' => 333, 'g' => 611, 'h' => 611, 'i' => 278, 'j' => 278, 'k' => 556, 'l' => 278, 'm' => 889,
|
||||||
|
'n' => 611, 'o' => 611, 'p' => 611, 'q' => 611, 'r' => 389, 's' => 556, 't' => 333, 'u' => 611, 'v' => 556, 'w' => 778, 'x' => 556, 'y' => 556, 'z' => 500, '{' => 389, '|' => 280, '}' => 389, '~' => 584, chr(127) => 350, chr(128) => 556, chr(129) => 350, chr(130) => 278, chr(131) => 556,
|
||||||
|
chr(132) => 500, chr(133) => 1000, chr(134) => 556, chr(135) => 556, chr(136) => 333, chr(137) => 1000, chr(138) => 667, chr(139) => 333, chr(140) => 1000, chr(141) => 350, chr(142) => 611, chr(143) => 350, chr(144) => 350, chr(145) => 278, chr(146) => 278, chr(147) => 500, chr(148) => 500, chr(149) => 350, chr(150) => 556, chr(151) => 1000, chr(152) => 333, chr(153) => 1000,
|
||||||
|
chr(154) => 556, chr(155) => 333, chr(156) => 944, chr(157) => 350, chr(158) => 500, chr(159) => 667, chr(160) => 278, chr(161) => 333, chr(162) => 556, chr(163) => 556, chr(164) => 556, chr(165) => 556, chr(166) => 280, chr(167) => 556, chr(168) => 333, chr(169) => 737, chr(170) => 370, chr(171) => 556, chr(172) => 584, chr(173) => 333, chr(174) => 737, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 584, chr(178) => 333, chr(179) => 333, chr(180) => 333, chr(181) => 611, chr(182) => 556, chr(183) => 278, chr(184) => 333, chr(185) => 333, chr(186) => 365, chr(187) => 556, chr(188) => 834, chr(189) => 834, chr(190) => 834, chr(191) => 611, chr(192) => 722, chr(193) => 722, chr(194) => 722, chr(195) => 722, chr(196) => 722, chr(197) => 722,
|
||||||
|
chr(198) => 1000, chr(199) => 722, chr(200) => 667, chr(201) => 667, chr(202) => 667, chr(203) => 667, chr(204) => 278, chr(205) => 278, chr(206) => 278, chr(207) => 278, chr(208) => 722, chr(209) => 722, chr(210) => 778, chr(211) => 778, chr(212) => 778, chr(213) => 778, chr(214) => 778, chr(215) => 584, chr(216) => 778, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 667, chr(222) => 667, chr(223) => 611, chr(224) => 556, chr(225) => 556, chr(226) => 556, chr(227) => 556, chr(228) => 556, chr(229) => 556, chr(230) => 889, chr(231) => 556, chr(232) => 556, chr(233) => 556, chr(234) => 556, chr(235) => 556, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 611, chr(241) => 611,
|
||||||
|
chr(242) => 611, chr(243) => 611, chr(244) => 611, chr(245) => 611, chr(246) => 611, chr(247) => 584, chr(248) => 611, chr(249) => 611, chr(250) => 611, chr(251) => 611, chr(252) => 611, chr(253) => 556, chr(254) => 611, chr(255) => 556);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Helvetica-Oblique';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 278, chr(1) => 278, chr(2) => 278, chr(3) => 278, chr(4) => 278, chr(5) => 278, chr(6) => 278, chr(7) => 278, chr(8) => 278, chr(9) => 278, chr(10) => 278, chr(11) => 278, chr(12) => 278, chr(13) => 278, chr(14) => 278, chr(15) => 278, chr(16) => 278, chr(17) => 278, chr(18) => 278, chr(19) => 278, chr(20) => 278, chr(21) => 278,
|
||||||
|
chr(22) => 278, chr(23) => 278, chr(24) => 278, chr(25) => 278, chr(26) => 278, chr(27) => 278, chr(28) => 278, chr(29) => 278, chr(30) => 278, chr(31) => 278, ' ' => 278, '!' => 278, '"' => 355, '#' => 556, '$' => 556, '%' => 889, '&' => 667, '\'' => 191, '(' => 333, ')' => 333, '*' => 389, '+' => 584,
|
||||||
|
',' => 278, '-' => 333, '.' => 278, '/' => 278, '0' => 556, '1' => 556, '2' => 556, '3' => 556, '4' => 556, '5' => 556, '6' => 556, '7' => 556, '8' => 556, '9' => 556, ':' => 278, ';' => 278, '<' => 584, '=' => 584, '>' => 584, '?' => 556, '@' => 1015, 'A' => 667,
|
||||||
|
'B' => 667, 'C' => 722, 'D' => 722, 'E' => 667, 'F' => 611, 'G' => 778, 'H' => 722, 'I' => 278, 'J' => 500, 'K' => 667, 'L' => 556, 'M' => 833, 'N' => 722, 'O' => 778, 'P' => 667, 'Q' => 778, 'R' => 722, 'S' => 667, 'T' => 611, 'U' => 722, 'V' => 667, 'W' => 944,
|
||||||
|
'X' => 667, 'Y' => 667, 'Z' => 611, '[' => 278, '\\' => 278, ']' => 278, '^' => 469, '_' => 556, '`' => 333, 'a' => 556, 'b' => 556, 'c' => 500, 'd' => 556, 'e' => 556, 'f' => 278, 'g' => 556, 'h' => 556, 'i' => 222, 'j' => 222, 'k' => 500, 'l' => 222, 'm' => 833,
|
||||||
|
'n' => 556, 'o' => 556, 'p' => 556, 'q' => 556, 'r' => 333, 's' => 500, 't' => 278, 'u' => 556, 'v' => 500, 'w' => 722, 'x' => 500, 'y' => 500, 'z' => 500, '{' => 334, '|' => 260, '}' => 334, '~' => 584, chr(127) => 350, chr(128) => 556, chr(129) => 350, chr(130) => 222, chr(131) => 556,
|
||||||
|
chr(132) => 333, chr(133) => 1000, chr(134) => 556, chr(135) => 556, chr(136) => 333, chr(137) => 1000, chr(138) => 667, chr(139) => 333, chr(140) => 1000, chr(141) => 350, chr(142) => 611, chr(143) => 350, chr(144) => 350, chr(145) => 222, chr(146) => 222, chr(147) => 333, chr(148) => 333, chr(149) => 350, chr(150) => 556, chr(151) => 1000, chr(152) => 333, chr(153) => 1000,
|
||||||
|
chr(154) => 500, chr(155) => 333, chr(156) => 944, chr(157) => 350, chr(158) => 500, chr(159) => 667, chr(160) => 278, chr(161) => 333, chr(162) => 556, chr(163) => 556, chr(164) => 556, chr(165) => 556, chr(166) => 260, chr(167) => 556, chr(168) => 333, chr(169) => 737, chr(170) => 370, chr(171) => 556, chr(172) => 584, chr(173) => 333, chr(174) => 737, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 584, chr(178) => 333, chr(179) => 333, chr(180) => 333, chr(181) => 556, chr(182) => 537, chr(183) => 278, chr(184) => 333, chr(185) => 333, chr(186) => 365, chr(187) => 556, chr(188) => 834, chr(189) => 834, chr(190) => 834, chr(191) => 611, chr(192) => 667, chr(193) => 667, chr(194) => 667, chr(195) => 667, chr(196) => 667, chr(197) => 667,
|
||||||
|
chr(198) => 1000, chr(199) => 722, chr(200) => 667, chr(201) => 667, chr(202) => 667, chr(203) => 667, chr(204) => 278, chr(205) => 278, chr(206) => 278, chr(207) => 278, chr(208) => 722, chr(209) => 722, chr(210) => 778, chr(211) => 778, chr(212) => 778, chr(213) => 778, chr(214) => 778, chr(215) => 584, chr(216) => 778, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 667, chr(222) => 667, chr(223) => 611, chr(224) => 556, chr(225) => 556, chr(226) => 556, chr(227) => 556, chr(228) => 556, chr(229) => 556, chr(230) => 889, chr(231) => 500, chr(232) => 556, chr(233) => 556, chr(234) => 556, chr(235) => 556, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 556, chr(241) => 556,
|
||||||
|
chr(242) => 556, chr(243) => 556, chr(244) => 556, chr(245) => 556, chr(246) => 556, chr(247) => 584, chr(248) => 611, chr(249) => 556, chr(250) => 556, chr(251) => 556, chr(252) => 556, chr(253) => 500, chr(254) => 556, chr(255) => 500);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Symbol';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 250, chr(1) => 250, chr(2) => 250, chr(3) => 250, chr(4) => 250, chr(5) => 250, chr(6) => 250, chr(7) => 250, chr(8) => 250, chr(9) => 250, chr(10) => 250, chr(11) => 250, chr(12) => 250, chr(13) => 250, chr(14) => 250, chr(15) => 250, chr(16) => 250, chr(17) => 250, chr(18) => 250, chr(19) => 250, chr(20) => 250, chr(21) => 250,
|
||||||
|
chr(22) => 250, chr(23) => 250, chr(24) => 250, chr(25) => 250, chr(26) => 250, chr(27) => 250, chr(28) => 250, chr(29) => 250, chr(30) => 250, chr(31) => 250, ' ' => 250, '!' => 333, '"' => 713, '#' => 500, '$' => 549, '%' => 833, '&' => 778, '\'' => 439, '(' => 333, ')' => 333, '*' => 500, '+' => 549,
|
||||||
|
',' => 250, '-' => 549, '.' => 250, '/' => 278, '0' => 500, '1' => 500, '2' => 500, '3' => 500, '4' => 500, '5' => 500, '6' => 500, '7' => 500, '8' => 500, '9' => 500, ':' => 278, ';' => 278, '<' => 549, '=' => 549, '>' => 549, '?' => 444, '@' => 549, 'A' => 722,
|
||||||
|
'B' => 667, 'C' => 722, 'D' => 612, 'E' => 611, 'F' => 763, 'G' => 603, 'H' => 722, 'I' => 333, 'J' => 631, 'K' => 722, 'L' => 686, 'M' => 889, 'N' => 722, 'O' => 722, 'P' => 768, 'Q' => 741, 'R' => 556, 'S' => 592, 'T' => 611, 'U' => 690, 'V' => 439, 'W' => 768,
|
||||||
|
'X' => 645, 'Y' => 795, 'Z' => 611, '[' => 333, '\\' => 863, ']' => 333, '^' => 658, '_' => 500, '`' => 500, 'a' => 631, 'b' => 549, 'c' => 549, 'd' => 494, 'e' => 439, 'f' => 521, 'g' => 411, 'h' => 603, 'i' => 329, 'j' => 603, 'k' => 549, 'l' => 549, 'm' => 576,
|
||||||
|
'n' => 521, 'o' => 549, 'p' => 549, 'q' => 521, 'r' => 549, 's' => 603, 't' => 439, 'u' => 576, 'v' => 713, 'w' => 686, 'x' => 493, 'y' => 686, 'z' => 494, '{' => 480, '|' => 200, '}' => 480, '~' => 549, chr(127) => 0, chr(128) => 0, chr(129) => 0, chr(130) => 0, chr(131) => 0,
|
||||||
|
chr(132) => 0, chr(133) => 0, chr(134) => 0, chr(135) => 0, chr(136) => 0, chr(137) => 0, chr(138) => 0, chr(139) => 0, chr(140) => 0, chr(141) => 0, chr(142) => 0, chr(143) => 0, chr(144) => 0, chr(145) => 0, chr(146) => 0, chr(147) => 0, chr(148) => 0, chr(149) => 0, chr(150) => 0, chr(151) => 0, chr(152) => 0, chr(153) => 0,
|
||||||
|
chr(154) => 0, chr(155) => 0, chr(156) => 0, chr(157) => 0, chr(158) => 0, chr(159) => 0, chr(160) => 750, chr(161) => 620, chr(162) => 247, chr(163) => 549, chr(164) => 167, chr(165) => 713, chr(166) => 500, chr(167) => 753, chr(168) => 753, chr(169) => 753, chr(170) => 753, chr(171) => 1042, chr(172) => 987, chr(173) => 603, chr(174) => 987, chr(175) => 603,
|
||||||
|
chr(176) => 400, chr(177) => 549, chr(178) => 411, chr(179) => 549, chr(180) => 549, chr(181) => 713, chr(182) => 494, chr(183) => 460, chr(184) => 549, chr(185) => 549, chr(186) => 549, chr(187) => 549, chr(188) => 1000, chr(189) => 603, chr(190) => 1000, chr(191) => 658, chr(192) => 823, chr(193) => 686, chr(194) => 795, chr(195) => 987, chr(196) => 768, chr(197) => 768,
|
||||||
|
chr(198) => 823, chr(199) => 768, chr(200) => 768, chr(201) => 713, chr(202) => 713, chr(203) => 713, chr(204) => 713, chr(205) => 713, chr(206) => 713, chr(207) => 713, chr(208) => 768, chr(209) => 713, chr(210) => 790, chr(211) => 790, chr(212) => 890, chr(213) => 823, chr(214) => 549, chr(215) => 250, chr(216) => 713, chr(217) => 603, chr(218) => 603, chr(219) => 1042,
|
||||||
|
chr(220) => 987, chr(221) => 603, chr(222) => 987, chr(223) => 603, chr(224) => 494, chr(225) => 329, chr(226) => 790, chr(227) => 790, chr(228) => 786, chr(229) => 713, chr(230) => 384, chr(231) => 384, chr(232) => 384, chr(233) => 384, chr(234) => 384, chr(235) => 384, chr(236) => 494, chr(237) => 494, chr(238) => 494, chr(239) => 494, chr(240) => 0, chr(241) => 329,
|
||||||
|
chr(242) => 274, chr(243) => 686, chr(244) => 686, chr(245) => 686, chr(246) => 384, chr(247) => 384, chr(248) => 384, chr(249) => 384, chr(250) => 384, chr(251) => 384, chr(252) => 494, chr(253) => 494, chr(254) => 494, chr(255) => 0);
|
||||||
|
$uv = array(32 => 160, 33 => 33, 34 => 8704, 35 => 35, 36 => 8707, 37 => array(37, 2), 39 => 8715, 40 => array(40, 2), 42 => 8727, 43 => array(43, 2), 45 => 8722, 46 => array(46, 18), 64 => 8773, 65 => array(913, 2), 67 => 935, 68 => array(916, 2), 70 => 934, 71 => 915, 72 => 919, 73 => 921, 74 => 977, 75 => array(922, 4), 79 => array(927, 2), 81 => 920, 82 => 929, 83 => array(931, 3), 86 => 962, 87 => 937, 88 => 926, 89 => 936, 90 => 918, 91 => 91, 92 => 8756, 93 => 93, 94 => 8869, 95 => 95, 96 => 63717, 97 => array(945, 2), 99 => 967, 100 => array(948, 2), 102 => 966, 103 => 947, 104 => 951, 105 => 953, 106 => 981, 107 => array(954, 4), 111 => array(959, 2), 113 => 952, 114 => 961, 115 => array(963, 3), 118 => 982, 119 => 969, 120 => 958, 121 => 968, 122 => 950, 123 => array(123, 3), 126 => 8764, 160 => 8364, 161 => 978, 162 => 8242, 163 => 8804, 164 => 8725, 165 => 8734, 166 => 402, 167 => 9827, 168 => 9830, 169 => 9829, 170 => 9824, 171 => 8596, 172 => array(8592, 4), 176 => array(176, 2), 178 => 8243, 179 => 8805, 180 => 215, 181 => 8733, 182 => 8706, 183 => 8226, 184 => 247, 185 => array(8800, 2), 187 => 8776, 188 => 8230, 189 => array(63718, 2), 191 => 8629, 192 => 8501, 193 => 8465, 194 => 8476, 195 => 8472, 196 => 8855, 197 => 8853, 198 => 8709, 199 => array(8745, 2), 201 => 8835, 202 => 8839, 203 => 8836, 204 => 8834, 205 => 8838, 206 => array(8712, 2), 208 => 8736, 209 => 8711, 210 => 63194, 211 => 63193, 212 => 63195, 213 => 8719, 214 => 8730, 215 => 8901, 216 => 172, 217 => array(8743, 2), 219 => 8660, 220 => array(8656, 4), 224 => 9674, 225 => 9001, 226 => array(63720, 3), 229 => 8721, 230 => array(63723, 10), 241 => 9002, 242 => 8747, 243 => 8992, 244 => 63733, 245 => 8993, 246 => array(63734, 9));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Times-Roman';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 250, chr(1) => 250, chr(2) => 250, chr(3) => 250, chr(4) => 250, chr(5) => 250, chr(6) => 250, chr(7) => 250, chr(8) => 250, chr(9) => 250, chr(10) => 250, chr(11) => 250, chr(12) => 250, chr(13) => 250, chr(14) => 250, chr(15) => 250, chr(16) => 250, chr(17) => 250, chr(18) => 250, chr(19) => 250, chr(20) => 250, chr(21) => 250,
|
||||||
|
chr(22) => 250, chr(23) => 250, chr(24) => 250, chr(25) => 250, chr(26) => 250, chr(27) => 250, chr(28) => 250, chr(29) => 250, chr(30) => 250, chr(31) => 250, ' ' => 250, '!' => 333, '"' => 408, '#' => 500, '$' => 500, '%' => 833, '&' => 778, '\'' => 180, '(' => 333, ')' => 333, '*' => 500, '+' => 564,
|
||||||
|
',' => 250, '-' => 333, '.' => 250, '/' => 278, '0' => 500, '1' => 500, '2' => 500, '3' => 500, '4' => 500, '5' => 500, '6' => 500, '7' => 500, '8' => 500, '9' => 500, ':' => 278, ';' => 278, '<' => 564, '=' => 564, '>' => 564, '?' => 444, '@' => 921, 'A' => 722,
|
||||||
|
'B' => 667, 'C' => 667, 'D' => 722, 'E' => 611, 'F' => 556, 'G' => 722, 'H' => 722, 'I' => 333, 'J' => 389, 'K' => 722, 'L' => 611, 'M' => 889, 'N' => 722, 'O' => 722, 'P' => 556, 'Q' => 722, 'R' => 667, 'S' => 556, 'T' => 611, 'U' => 722, 'V' => 722, 'W' => 944,
|
||||||
|
'X' => 722, 'Y' => 722, 'Z' => 611, '[' => 333, '\\' => 278, ']' => 333, '^' => 469, '_' => 500, '`' => 333, 'a' => 444, 'b' => 500, 'c' => 444, 'd' => 500, 'e' => 444, 'f' => 333, 'g' => 500, 'h' => 500, 'i' => 278, 'j' => 278, 'k' => 500, 'l' => 278, 'm' => 778,
|
||||||
|
'n' => 500, 'o' => 500, 'p' => 500, 'q' => 500, 'r' => 333, 's' => 389, 't' => 278, 'u' => 500, 'v' => 500, 'w' => 722, 'x' => 500, 'y' => 500, 'z' => 444, '{' => 480, '|' => 200, '}' => 480, '~' => 541, chr(127) => 350, chr(128) => 500, chr(129) => 350, chr(130) => 333, chr(131) => 500,
|
||||||
|
chr(132) => 444, chr(133) => 1000, chr(134) => 500, chr(135) => 500, chr(136) => 333, chr(137) => 1000, chr(138) => 556, chr(139) => 333, chr(140) => 889, chr(141) => 350, chr(142) => 611, chr(143) => 350, chr(144) => 350, chr(145) => 333, chr(146) => 333, chr(147) => 444, chr(148) => 444, chr(149) => 350, chr(150) => 500, chr(151) => 1000, chr(152) => 333, chr(153) => 980,
|
||||||
|
chr(154) => 389, chr(155) => 333, chr(156) => 722, chr(157) => 350, chr(158) => 444, chr(159) => 722, chr(160) => 250, chr(161) => 333, chr(162) => 500, chr(163) => 500, chr(164) => 500, chr(165) => 500, chr(166) => 200, chr(167) => 500, chr(168) => 333, chr(169) => 760, chr(170) => 276, chr(171) => 500, chr(172) => 564, chr(173) => 333, chr(174) => 760, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 564, chr(178) => 300, chr(179) => 300, chr(180) => 333, chr(181) => 500, chr(182) => 453, chr(183) => 250, chr(184) => 333, chr(185) => 300, chr(186) => 310, chr(187) => 500, chr(188) => 750, chr(189) => 750, chr(190) => 750, chr(191) => 444, chr(192) => 722, chr(193) => 722, chr(194) => 722, chr(195) => 722, chr(196) => 722, chr(197) => 722,
|
||||||
|
chr(198) => 889, chr(199) => 667, chr(200) => 611, chr(201) => 611, chr(202) => 611, chr(203) => 611, chr(204) => 333, chr(205) => 333, chr(206) => 333, chr(207) => 333, chr(208) => 722, chr(209) => 722, chr(210) => 722, chr(211) => 722, chr(212) => 722, chr(213) => 722, chr(214) => 722, chr(215) => 564, chr(216) => 722, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 722, chr(222) => 556, chr(223) => 500, chr(224) => 444, chr(225) => 444, chr(226) => 444, chr(227) => 444, chr(228) => 444, chr(229) => 444, chr(230) => 667, chr(231) => 444, chr(232) => 444, chr(233) => 444, chr(234) => 444, chr(235) => 444, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 500, chr(241) => 500,
|
||||||
|
chr(242) => 500, chr(243) => 500, chr(244) => 500, chr(245) => 500, chr(246) => 500, chr(247) => 564, chr(248) => 500, chr(249) => 500, chr(250) => 500, chr(251) => 500, chr(252) => 500, chr(253) => 500, chr(254) => 500, chr(255) => 500);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Times-Bold';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 250, chr(1) => 250, chr(2) => 250, chr(3) => 250, chr(4) => 250, chr(5) => 250, chr(6) => 250, chr(7) => 250, chr(8) => 250, chr(9) => 250, chr(10) => 250, chr(11) => 250, chr(12) => 250, chr(13) => 250, chr(14) => 250, chr(15) => 250, chr(16) => 250, chr(17) => 250, chr(18) => 250, chr(19) => 250, chr(20) => 250, chr(21) => 250,
|
||||||
|
chr(22) => 250, chr(23) => 250, chr(24) => 250, chr(25) => 250, chr(26) => 250, chr(27) => 250, chr(28) => 250, chr(29) => 250, chr(30) => 250, chr(31) => 250, ' ' => 250, '!' => 333, '"' => 555, '#' => 500, '$' => 500, '%' => 1000, '&' => 833, '\'' => 278, '(' => 333, ')' => 333, '*' => 500, '+' => 570,
|
||||||
|
',' => 250, '-' => 333, '.' => 250, '/' => 278, '0' => 500, '1' => 500, '2' => 500, '3' => 500, '4' => 500, '5' => 500, '6' => 500, '7' => 500, '8' => 500, '9' => 500, ':' => 333, ';' => 333, '<' => 570, '=' => 570, '>' => 570, '?' => 500, '@' => 930, 'A' => 722,
|
||||||
|
'B' => 667, 'C' => 722, 'D' => 722, 'E' => 667, 'F' => 611, 'G' => 778, 'H' => 778, 'I' => 389, 'J' => 500, 'K' => 778, 'L' => 667, 'M' => 944, 'N' => 722, 'O' => 778, 'P' => 611, 'Q' => 778, 'R' => 722, 'S' => 556, 'T' => 667, 'U' => 722, 'V' => 722, 'W' => 1000,
|
||||||
|
'X' => 722, 'Y' => 722, 'Z' => 667, '[' => 333, '\\' => 278, ']' => 333, '^' => 581, '_' => 500, '`' => 333, 'a' => 500, 'b' => 556, 'c' => 444, 'd' => 556, 'e' => 444, 'f' => 333, 'g' => 500, 'h' => 556, 'i' => 278, 'j' => 333, 'k' => 556, 'l' => 278, 'm' => 833,
|
||||||
|
'n' => 556, 'o' => 500, 'p' => 556, 'q' => 556, 'r' => 444, 's' => 389, 't' => 333, 'u' => 556, 'v' => 500, 'w' => 722, 'x' => 500, 'y' => 500, 'z' => 444, '{' => 394, '|' => 220, '}' => 394, '~' => 520, chr(127) => 350, chr(128) => 500, chr(129) => 350, chr(130) => 333, chr(131) => 500,
|
||||||
|
chr(132) => 500, chr(133) => 1000, chr(134) => 500, chr(135) => 500, chr(136) => 333, chr(137) => 1000, chr(138) => 556, chr(139) => 333, chr(140) => 1000, chr(141) => 350, chr(142) => 667, chr(143) => 350, chr(144) => 350, chr(145) => 333, chr(146) => 333, chr(147) => 500, chr(148) => 500, chr(149) => 350, chr(150) => 500, chr(151) => 1000, chr(152) => 333, chr(153) => 1000,
|
||||||
|
chr(154) => 389, chr(155) => 333, chr(156) => 722, chr(157) => 350, chr(158) => 444, chr(159) => 722, chr(160) => 250, chr(161) => 333, chr(162) => 500, chr(163) => 500, chr(164) => 500, chr(165) => 500, chr(166) => 220, chr(167) => 500, chr(168) => 333, chr(169) => 747, chr(170) => 300, chr(171) => 500, chr(172) => 570, chr(173) => 333, chr(174) => 747, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 570, chr(178) => 300, chr(179) => 300, chr(180) => 333, chr(181) => 556, chr(182) => 540, chr(183) => 250, chr(184) => 333, chr(185) => 300, chr(186) => 330, chr(187) => 500, chr(188) => 750, chr(189) => 750, chr(190) => 750, chr(191) => 500, chr(192) => 722, chr(193) => 722, chr(194) => 722, chr(195) => 722, chr(196) => 722, chr(197) => 722,
|
||||||
|
chr(198) => 1000, chr(199) => 722, chr(200) => 667, chr(201) => 667, chr(202) => 667, chr(203) => 667, chr(204) => 389, chr(205) => 389, chr(206) => 389, chr(207) => 389, chr(208) => 722, chr(209) => 722, chr(210) => 778, chr(211) => 778, chr(212) => 778, chr(213) => 778, chr(214) => 778, chr(215) => 570, chr(216) => 778, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 722, chr(222) => 611, chr(223) => 556, chr(224) => 500, chr(225) => 500, chr(226) => 500, chr(227) => 500, chr(228) => 500, chr(229) => 500, chr(230) => 722, chr(231) => 444, chr(232) => 444, chr(233) => 444, chr(234) => 444, chr(235) => 444, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 500, chr(241) => 556,
|
||||||
|
chr(242) => 500, chr(243) => 500, chr(244) => 500, chr(245) => 500, chr(246) => 500, chr(247) => 570, chr(248) => 500, chr(249) => 556, chr(250) => 556, chr(251) => 556, chr(252) => 556, chr(253) => 500, chr(254) => 556, chr(255) => 500);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Times-BoldItalic';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 250, chr(1) => 250, chr(2) => 250, chr(3) => 250, chr(4) => 250, chr(5) => 250, chr(6) => 250, chr(7) => 250, chr(8) => 250, chr(9) => 250, chr(10) => 250, chr(11) => 250, chr(12) => 250, chr(13) => 250, chr(14) => 250, chr(15) => 250, chr(16) => 250, chr(17) => 250, chr(18) => 250, chr(19) => 250, chr(20) => 250, chr(21) => 250,
|
||||||
|
chr(22) => 250, chr(23) => 250, chr(24) => 250, chr(25) => 250, chr(26) => 250, chr(27) => 250, chr(28) => 250, chr(29) => 250, chr(30) => 250, chr(31) => 250, ' ' => 250, '!' => 389, '"' => 555, '#' => 500, '$' => 500, '%' => 833, '&' => 778, '\'' => 278, '(' => 333, ')' => 333, '*' => 500, '+' => 570,
|
||||||
|
',' => 250, '-' => 333, '.' => 250, '/' => 278, '0' => 500, '1' => 500, '2' => 500, '3' => 500, '4' => 500, '5' => 500, '6' => 500, '7' => 500, '8' => 500, '9' => 500, ':' => 333, ';' => 333, '<' => 570, '=' => 570, '>' => 570, '?' => 500, '@' => 832, 'A' => 667,
|
||||||
|
'B' => 667, 'C' => 667, 'D' => 722, 'E' => 667, 'F' => 667, 'G' => 722, 'H' => 778, 'I' => 389, 'J' => 500, 'K' => 667, 'L' => 611, 'M' => 889, 'N' => 722, 'O' => 722, 'P' => 611, 'Q' => 722, 'R' => 667, 'S' => 556, 'T' => 611, 'U' => 722, 'V' => 667, 'W' => 889,
|
||||||
|
'X' => 667, 'Y' => 611, 'Z' => 611, '[' => 333, '\\' => 278, ']' => 333, '^' => 570, '_' => 500, '`' => 333, 'a' => 500, 'b' => 500, 'c' => 444, 'd' => 500, 'e' => 444, 'f' => 333, 'g' => 500, 'h' => 556, 'i' => 278, 'j' => 278, 'k' => 500, 'l' => 278, 'm' => 778,
|
||||||
|
'n' => 556, 'o' => 500, 'p' => 500, 'q' => 500, 'r' => 389, 's' => 389, 't' => 278, 'u' => 556, 'v' => 444, 'w' => 667, 'x' => 500, 'y' => 444, 'z' => 389, '{' => 348, '|' => 220, '}' => 348, '~' => 570, chr(127) => 350, chr(128) => 500, chr(129) => 350, chr(130) => 333, chr(131) => 500,
|
||||||
|
chr(132) => 500, chr(133) => 1000, chr(134) => 500, chr(135) => 500, chr(136) => 333, chr(137) => 1000, chr(138) => 556, chr(139) => 333, chr(140) => 944, chr(141) => 350, chr(142) => 611, chr(143) => 350, chr(144) => 350, chr(145) => 333, chr(146) => 333, chr(147) => 500, chr(148) => 500, chr(149) => 350, chr(150) => 500, chr(151) => 1000, chr(152) => 333, chr(153) => 1000,
|
||||||
|
chr(154) => 389, chr(155) => 333, chr(156) => 722, chr(157) => 350, chr(158) => 389, chr(159) => 611, chr(160) => 250, chr(161) => 389, chr(162) => 500, chr(163) => 500, chr(164) => 500, chr(165) => 500, chr(166) => 220, chr(167) => 500, chr(168) => 333, chr(169) => 747, chr(170) => 266, chr(171) => 500, chr(172) => 606, chr(173) => 333, chr(174) => 747, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 570, chr(178) => 300, chr(179) => 300, chr(180) => 333, chr(181) => 576, chr(182) => 500, chr(183) => 250, chr(184) => 333, chr(185) => 300, chr(186) => 300, chr(187) => 500, chr(188) => 750, chr(189) => 750, chr(190) => 750, chr(191) => 500, chr(192) => 667, chr(193) => 667, chr(194) => 667, chr(195) => 667, chr(196) => 667, chr(197) => 667,
|
||||||
|
chr(198) => 944, chr(199) => 667, chr(200) => 667, chr(201) => 667, chr(202) => 667, chr(203) => 667, chr(204) => 389, chr(205) => 389, chr(206) => 389, chr(207) => 389, chr(208) => 722, chr(209) => 722, chr(210) => 722, chr(211) => 722, chr(212) => 722, chr(213) => 722, chr(214) => 722, chr(215) => 570, chr(216) => 722, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 611, chr(222) => 611, chr(223) => 500, chr(224) => 500, chr(225) => 500, chr(226) => 500, chr(227) => 500, chr(228) => 500, chr(229) => 500, chr(230) => 722, chr(231) => 444, chr(232) => 444, chr(233) => 444, chr(234) => 444, chr(235) => 444, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 500, chr(241) => 556,
|
||||||
|
chr(242) => 500, chr(243) => 500, chr(244) => 500, chr(245) => 500, chr(246) => 500, chr(247) => 570, chr(248) => 500, chr(249) => 556, chr(250) => 556, chr(251) => 556, chr(252) => 556, chr(253) => 444, chr(254) => 500, chr(255) => 444);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'Times-Italic';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 250, chr(1) => 250, chr(2) => 250, chr(3) => 250, chr(4) => 250, chr(5) => 250, chr(6) => 250, chr(7) => 250, chr(8) => 250, chr(9) => 250, chr(10) => 250, chr(11) => 250, chr(12) => 250, chr(13) => 250, chr(14) => 250, chr(15) => 250, chr(16) => 250, chr(17) => 250, chr(18) => 250, chr(19) => 250, chr(20) => 250, chr(21) => 250,
|
||||||
|
chr(22) => 250, chr(23) => 250, chr(24) => 250, chr(25) => 250, chr(26) => 250, chr(27) => 250, chr(28) => 250, chr(29) => 250, chr(30) => 250, chr(31) => 250, ' ' => 250, '!' => 333, '"' => 420, '#' => 500, '$' => 500, '%' => 833, '&' => 778, '\'' => 214, '(' => 333, ')' => 333, '*' => 500, '+' => 675,
|
||||||
|
',' => 250, '-' => 333, '.' => 250, '/' => 278, '0' => 500, '1' => 500, '2' => 500, '3' => 500, '4' => 500, '5' => 500, '6' => 500, '7' => 500, '8' => 500, '9' => 500, ':' => 333, ';' => 333, '<' => 675, '=' => 675, '>' => 675, '?' => 500, '@' => 920, 'A' => 611,
|
||||||
|
'B' => 611, 'C' => 667, 'D' => 722, 'E' => 611, 'F' => 611, 'G' => 722, 'H' => 722, 'I' => 333, 'J' => 444, 'K' => 667, 'L' => 556, 'M' => 833, 'N' => 667, 'O' => 722, 'P' => 611, 'Q' => 722, 'R' => 611, 'S' => 500, 'T' => 556, 'U' => 722, 'V' => 611, 'W' => 833,
|
||||||
|
'X' => 611, 'Y' => 556, 'Z' => 556, '[' => 389, '\\' => 278, ']' => 389, '^' => 422, '_' => 500, '`' => 333, 'a' => 500, 'b' => 500, 'c' => 444, 'd' => 500, 'e' => 444, 'f' => 278, 'g' => 500, 'h' => 500, 'i' => 278, 'j' => 278, 'k' => 444, 'l' => 278, 'm' => 722,
|
||||||
|
'n' => 500, 'o' => 500, 'p' => 500, 'q' => 500, 'r' => 389, 's' => 389, 't' => 278, 'u' => 500, 'v' => 444, 'w' => 667, 'x' => 444, 'y' => 444, 'z' => 389, '{' => 400, '|' => 275, '}' => 400, '~' => 541, chr(127) => 350, chr(128) => 500, chr(129) => 350, chr(130) => 333, chr(131) => 500,
|
||||||
|
chr(132) => 556, chr(133) => 889, chr(134) => 500, chr(135) => 500, chr(136) => 333, chr(137) => 1000, chr(138) => 500, chr(139) => 333, chr(140) => 944, chr(141) => 350, chr(142) => 556, chr(143) => 350, chr(144) => 350, chr(145) => 333, chr(146) => 333, chr(147) => 556, chr(148) => 556, chr(149) => 350, chr(150) => 500, chr(151) => 889, chr(152) => 333, chr(153) => 980,
|
||||||
|
chr(154) => 389, chr(155) => 333, chr(156) => 667, chr(157) => 350, chr(158) => 389, chr(159) => 556, chr(160) => 250, chr(161) => 389, chr(162) => 500, chr(163) => 500, chr(164) => 500, chr(165) => 500, chr(166) => 275, chr(167) => 500, chr(168) => 333, chr(169) => 760, chr(170) => 276, chr(171) => 500, chr(172) => 675, chr(173) => 333, chr(174) => 760, chr(175) => 333,
|
||||||
|
chr(176) => 400, chr(177) => 675, chr(178) => 300, chr(179) => 300, chr(180) => 333, chr(181) => 500, chr(182) => 523, chr(183) => 250, chr(184) => 333, chr(185) => 300, chr(186) => 310, chr(187) => 500, chr(188) => 750, chr(189) => 750, chr(190) => 750, chr(191) => 500, chr(192) => 611, chr(193) => 611, chr(194) => 611, chr(195) => 611, chr(196) => 611, chr(197) => 611,
|
||||||
|
chr(198) => 889, chr(199) => 667, chr(200) => 611, chr(201) => 611, chr(202) => 611, chr(203) => 611, chr(204) => 333, chr(205) => 333, chr(206) => 333, chr(207) => 333, chr(208) => 722, chr(209) => 667, chr(210) => 722, chr(211) => 722, chr(212) => 722, chr(213) => 722, chr(214) => 722, chr(215) => 675, chr(216) => 722, chr(217) => 722, chr(218) => 722, chr(219) => 722,
|
||||||
|
chr(220) => 722, chr(221) => 556, chr(222) => 611, chr(223) => 500, chr(224) => 500, chr(225) => 500, chr(226) => 500, chr(227) => 500, chr(228) => 500, chr(229) => 500, chr(230) => 667, chr(231) => 444, chr(232) => 444, chr(233) => 444, chr(234) => 444, chr(235) => 444, chr(236) => 278, chr(237) => 278, chr(238) => 278, chr(239) => 278, chr(240) => 500, chr(241) => 500,
|
||||||
|
chr(242) => 500, chr(243) => 500, chr(244) => 500, chr(245) => 500, chr(246) => 500, chr(247) => 675, chr(248) => 500, chr(249) => 500, chr(250) => 500, chr(251) => 500, chr(252) => 500, chr(253) => 444, chr(254) => 500, chr(255) => 444);
|
||||||
|
$enc = 'cp1252';
|
||||||
|
$uv = array(0 => array(0, 128), 128 => 8364, 130 => 8218, 131 => 402, 132 => 8222, 133 => 8230, 134 => array(8224, 2), 136 => 710, 137 => 8240, 138 => 352, 139 => 8249, 140 => 338, 142 => 381, 145 => array(8216, 2), 147 => array(8220, 2), 149 => 8226, 150 => array(8211, 2), 152 => 732, 153 => 8482, 154 => 353, 155 => 8250, 156 => 339, 158 => 382, 159 => 376, 160 => array(160, 96));
|
||||||
|
?>
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
$type = 'Core';
|
||||||
|
$name = 'ZapfDingbats';
|
||||||
|
$up = -100;
|
||||||
|
$ut = 50;
|
||||||
|
$cw = array(
|
||||||
|
chr(0) => 0, chr(1) => 0, chr(2) => 0, chr(3) => 0, chr(4) => 0, chr(5) => 0, chr(6) => 0, chr(7) => 0, chr(8) => 0, chr(9) => 0, chr(10) => 0, chr(11) => 0, chr(12) => 0, chr(13) => 0, chr(14) => 0, chr(15) => 0, chr(16) => 0, chr(17) => 0, chr(18) => 0, chr(19) => 0, chr(20) => 0, chr(21) => 0,
|
||||||
|
chr(22) => 0, chr(23) => 0, chr(24) => 0, chr(25) => 0, chr(26) => 0, chr(27) => 0, chr(28) => 0, chr(29) => 0, chr(30) => 0, chr(31) => 0, ' ' => 278, '!' => 974, '"' => 961, '#' => 974, '$' => 980, '%' => 719, '&' => 789, '\'' => 790, '(' => 791, ')' => 690, '*' => 960, '+' => 939,
|
||||||
|
',' => 549, '-' => 855, '.' => 911, '/' => 933, '0' => 911, '1' => 945, '2' => 974, '3' => 755, '4' => 846, '5' => 762, '6' => 761, '7' => 571, '8' => 677, '9' => 763, ':' => 760, ';' => 759, '<' => 754, '=' => 494, '>' => 552, '?' => 537, '@' => 577, 'A' => 692,
|
||||||
|
'B' => 786, 'C' => 788, 'D' => 788, 'E' => 790, 'F' => 793, 'G' => 794, 'H' => 816, 'I' => 823, 'J' => 789, 'K' => 841, 'L' => 823, 'M' => 833, 'N' => 816, 'O' => 831, 'P' => 923, 'Q' => 744, 'R' => 723, 'S' => 749, 'T' => 790, 'U' => 792, 'V' => 695, 'W' => 776,
|
||||||
|
'X' => 768, 'Y' => 792, 'Z' => 759, '[' => 707, '\\' => 708, ']' => 682, '^' => 701, '_' => 826, '`' => 815, 'a' => 789, 'b' => 789, 'c' => 707, 'd' => 687, 'e' => 696, 'f' => 689, 'g' => 786, 'h' => 787, 'i' => 713, 'j' => 791, 'k' => 785, 'l' => 791, 'm' => 873,
|
||||||
|
'n' => 761, 'o' => 762, 'p' => 762, 'q' => 759, 'r' => 759, 's' => 892, 't' => 892, 'u' => 788, 'v' => 784, 'w' => 438, 'x' => 138, 'y' => 277, 'z' => 415, '{' => 392, '|' => 392, '}' => 668, '~' => 668, chr(127) => 0, chr(128) => 390, chr(129) => 390, chr(130) => 317, chr(131) => 317,
|
||||||
|
chr(132) => 276, chr(133) => 276, chr(134) => 509, chr(135) => 509, chr(136) => 410, chr(137) => 410, chr(138) => 234, chr(139) => 234, chr(140) => 334, chr(141) => 334, chr(142) => 0, chr(143) => 0, chr(144) => 0, chr(145) => 0, chr(146) => 0, chr(147) => 0, chr(148) => 0, chr(149) => 0, chr(150) => 0, chr(151) => 0, chr(152) => 0, chr(153) => 0,
|
||||||
|
chr(154) => 0, chr(155) => 0, chr(156) => 0, chr(157) => 0, chr(158) => 0, chr(159) => 0, chr(160) => 0, chr(161) => 732, chr(162) => 544, chr(163) => 544, chr(164) => 910, chr(165) => 667, chr(166) => 760, chr(167) => 760, chr(168) => 776, chr(169) => 595, chr(170) => 694, chr(171) => 626, chr(172) => 788, chr(173) => 788, chr(174) => 788, chr(175) => 788,
|
||||||
|
chr(176) => 788, chr(177) => 788, chr(178) => 788, chr(179) => 788, chr(180) => 788, chr(181) => 788, chr(182) => 788, chr(183) => 788, chr(184) => 788, chr(185) => 788, chr(186) => 788, chr(187) => 788, chr(188) => 788, chr(189) => 788, chr(190) => 788, chr(191) => 788, chr(192) => 788, chr(193) => 788, chr(194) => 788, chr(195) => 788, chr(196) => 788, chr(197) => 788,
|
||||||
|
chr(198) => 788, chr(199) => 788, chr(200) => 788, chr(201) => 788, chr(202) => 788, chr(203) => 788, chr(204) => 788, chr(205) => 788, chr(206) => 788, chr(207) => 788, chr(208) => 788, chr(209) => 788, chr(210) => 788, chr(211) => 788, chr(212) => 894, chr(213) => 838, chr(214) => 1016, chr(215) => 458, chr(216) => 748, chr(217) => 924, chr(218) => 748, chr(219) => 918,
|
||||||
|
chr(220) => 927, chr(221) => 928, chr(222) => 928, chr(223) => 834, chr(224) => 873, chr(225) => 828, chr(226) => 924, chr(227) => 924, chr(228) => 917, chr(229) => 930, chr(230) => 931, chr(231) => 463, chr(232) => 883, chr(233) => 836, chr(234) => 836, chr(235) => 867, chr(236) => 867, chr(237) => 696, chr(238) => 696, chr(239) => 874, chr(240) => 0, chr(241) => 874,
|
||||||
|
chr(242) => 760, chr(243) => 946, chr(244) => 771, chr(245) => 865, chr(246) => 771, chr(247) => 888, chr(248) => 967, chr(249) => 888, chr(250) => 831, chr(251) => 873, chr(252) => 927, chr(253) => 970, chr(254) => 918, chr(255) => 0);
|
||||||
|
$uv = array(32 => 32, 33 => array(9985, 4), 37 => 9742, 38 => array(9990, 4), 42 => 9755, 43 => 9758, 44 => array(9996, 28), 72 => 9733, 73 => array(10025, 35), 108 => 9679, 109 => 10061, 110 => 9632, 111 => array(10063, 4), 115 => 9650, 116 => 9660, 117 => 9670, 118 => 10070, 119 => 9687, 120 => array(10072, 7), 128 => array(10088, 14), 161 => array(10081, 7), 168 => 9827, 169 => 9830, 170 => 9829, 171 => 9824, 172 => array(9312, 10), 182 => array(10102, 31), 213 => 8594, 214 => array(8596, 2), 216 => array(10136, 24), 241 => array(10161, 14));
|
||||||
|
?>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 204 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
@@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is the generator for the wash certificates (Used by the WordPress plugin)
|
||||||
|
* The reason behind this being outside the WordPress plugin is that the PHPExcel library is not compatible with the WordPress plugin, and it is easier to maintain the generator here.
|
||||||
|
*/
|
||||||
|
require_once '../../config.php';
|
||||||
|
global $WORDPRESS_STATIC_TOKEN;
|
||||||
|
// Validate the token was loaded from the config file
|
||||||
|
if (!isset($WORDPRESS_STATIC_TOKEN) || $WORDPRESS_STATIC_TOKEN === '') {
|
||||||
|
echo 'Missing token in config file';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
require 'vendor/autoload.php';
|
||||||
|
require_once 'twc_spreadsheet_class.php';
|
||||||
|
|
||||||
|
// Set CORS headers
|
||||||
|
header("Access-Control-Allow-Origin: *");
|
||||||
|
header("Access-Control-Allow-Methods: GET, POST");
|
||||||
|
header("Access-Control-Allow-Headers: Content-Type");
|
||||||
|
|
||||||
|
// Set the timezone
|
||||||
|
date_default_timezone_set('Europe/Copenhagen');
|
||||||
|
// Set the time format
|
||||||
|
setlocale(LC_TIME, 'da_DK');
|
||||||
|
// Create the output directory if it does not exist
|
||||||
|
if (!file_exists('output/certificates')) {
|
||||||
|
mkdir('output/certificates', 0777, true);
|
||||||
|
}
|
||||||
|
// Create the output/certificates directory if it does not exist
|
||||||
|
if (!file_exists('output/certificates')) {
|
||||||
|
mkdir('output/certificates', 0777, true);
|
||||||
|
}
|
||||||
|
// If the request is from the command line
|
||||||
|
if (php_sapi_name() === 'cli') {
|
||||||
|
// Set the $_GET variable to default values
|
||||||
|
$_GET['secret_token'] = $WORDPRESS_STATIC_TOKEN;
|
||||||
|
$_GET['sealOrPlumber'] = '12345';
|
||||||
|
$_GET['performedBy'] = 'JH';
|
||||||
|
$_GET['bookingId'] = '12345';
|
||||||
|
$_GET['regNumber'] = 'AB12345';
|
||||||
|
$_GET['regNumberTrailer'] = 'AB12345';
|
||||||
|
$_GET['department'] = 'taastrup';
|
||||||
|
}
|
||||||
|
// Require the $_GET variable secret_token to be set
|
||||||
|
if (!isset($_GET['secret_token'])) {
|
||||||
|
echo 'Invalid request';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the secret token is correct
|
||||||
|
if ($_GET['secret_token'] !== $WORDPRESS_STATIC_TOKEN) {
|
||||||
|
echo 'Invalid secret token';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Require the $_GET variables sealOrPlumber, safetySeal, performedBy, and bookingId, regNumber, and regNumberTrailer to be set
|
||||||
|
if (!isset($_GET['sealOrPlumber']) || !isset($_GET['performedBy']) || !isset($_GET['bookingId']) || !isset($_GET['regNumber']) || !isset($_GET['regNumberTrailer']) || !isset($_GET['department'])) {
|
||||||
|
// We are missing some required fields in the query string
|
||||||
|
echo 'Missing required fields';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the certificate already exists in the folder
|
||||||
|
if (file_exists("output/certificates/wash_certificate_" . $_GET['bookingId'] . ".pdf")) {
|
||||||
|
// Return the generated certificate path
|
||||||
|
$generatedCertificatePath = "output/certificates/wash_certificate_" . $_GET['bookingId'] . ".pdf";
|
||||||
|
|
||||||
|
// Return the certificate url
|
||||||
|
echo $generatedCertificatePath;
|
||||||
|
// Exit the script
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Usage example
|
||||||
|
$template = "templates/template2024julv3.xlsx";
|
||||||
|
$generator = new WashCertificateGenerator($template, $_GET['department']);
|
||||||
|
$generator->generateCertificate("output/certificates/wash_certificate_" . $_GET['bookingId'] . ".pdf", $_GET['sealOrPlumber'], $_GET['regNumber'], $_GET['regNumberTrailer'], $_GET['performedBy']);
|
||||||
|
|
||||||
|
// Return the generated certificate path
|
||||||
|
$generatedCertificatePath = "output/certificates/wash_certificate_" . $_GET['bookingId'] . ".pdf";
|
||||||
|
|
||||||
|
// Return the generated certificate path
|
||||||
|
echo $generatedCertificatePath;
|
||||||
|
// Exit the script
|
||||||
|
exit;
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,146 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||||
|
use setasign\Fpdi\Fpdi;
|
||||||
|
|
||||||
|
class WashCertificateGenerator
|
||||||
|
{
|
||||||
|
private string $template;
|
||||||
|
private string $department;
|
||||||
|
private string $color;
|
||||||
|
private string $colorBackground;
|
||||||
|
private array $signature;
|
||||||
|
private array $logo;
|
||||||
|
private Spreadsheet $spreadsheet;
|
||||||
|
private array $washPerformedAt;
|
||||||
|
|
||||||
|
public function __construct(string $template, string $department)
|
||||||
|
{
|
||||||
|
$this->template = $template;
|
||||||
|
$this->department = $department;
|
||||||
|
$this->color = '1488bc'; // Hex color code (Without the #)
|
||||||
|
$this->colorBackground = 'd9d9d9'; // Hex color code (Without the #)
|
||||||
|
$this->washPerformedAt = [
|
||||||
|
'hvidovre' => ['column' => 'A', 'row' => 21],
|
||||||
|
'taastrup' => ['column' => 'B', 'row' => 21],
|
||||||
|
'glostrup' => ['column' => 'C', 'row' => 21],
|
||||||
|
'køge' => ['column' => 'D', 'row' => 21],
|
||||||
|
'roskilde' => ['column' => 'E', 'row' => 21],
|
||||||
|
'aarhusC' => ['column' => 'F', 'row' => 21],
|
||||||
|
];
|
||||||
|
$this->signature = [
|
||||||
|
'path' => 'images/truckwash-underskrift.png',
|
||||||
|
'x' => 0,
|
||||||
|
'y' => 140,
|
||||||
|
'is-centered' => true,
|
||||||
|
'width' => 70,
|
||||||
|
];
|
||||||
|
$this->logo = [
|
||||||
|
'path' => 'images/truckwash-banner-png.png',
|
||||||
|
'x' => 0,
|
||||||
|
'y' => 20,
|
||||||
|
'is-centered' => true,
|
||||||
|
'width' => 80,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateCertificate(string $outputPath, string $sealOrPlumNumber, string $regNumber, string $regNumberTrailer, string $carriedOutBy): void
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'sealOrPlumNumber' => $sealOrPlumNumber,
|
||||||
|
'regNumber' => $regNumber,
|
||||||
|
'regNumberTrailer' => $regNumberTrailer,
|
||||||
|
'carriedOutBy' => $carriedOutBy,
|
||||||
|
];
|
||||||
|
|
||||||
|
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
|
||||||
|
$reader->setReadDataOnly(false);
|
||||||
|
$reader->setIncludeCharts(true);
|
||||||
|
$this->spreadsheet = $reader->load($this->template);
|
||||||
|
$activeWorksheet = $this->spreadsheet->getActiveSheet();
|
||||||
|
$activeWorksheet->setTitle('Wash Certificate');
|
||||||
|
|
||||||
|
$this->setCellValues($activeWorksheet, $data);
|
||||||
|
$this->setCellStyles($activeWorksheet);
|
||||||
|
$this->setPageSetup($activeWorksheet);
|
||||||
|
|
||||||
|
$this->exportToPdf($outputPath);
|
||||||
|
$this->addImagesToPdf($outputPath);
|
||||||
|
|
||||||
|
$this->spreadsheet->disconnectWorksheets();
|
||||||
|
unset($this->spreadsheet);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setCellValues($activeWorksheet, array $data): void
|
||||||
|
{
|
||||||
|
$activeWorksheet->setCellValue('A9', $data['sealOrPlumNumber']);
|
||||||
|
$activeWorksheet->setCellValue('B17', $data['regNumber']);
|
||||||
|
$activeWorksheet->setCellValue('B18', $data['regNumberTrailer']);
|
||||||
|
$activeWorksheet->setCellValue('F18', $data['carriedOutBy']);
|
||||||
|
$activeWorksheet->setCellValue($this->washPerformedAt[$this->department]['column'] . $this->washPerformedAt[$this->department]['row'], 'X');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setCellStyles($activeWorksheet): void
|
||||||
|
{
|
||||||
|
$activeWorksheet->getStyle($this->washPerformedAt[$this->department]['column'] . ($this->washPerformedAt[$this->department]['row'] + 1))->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->color);
|
||||||
|
$activeWorksheet->getStyle('A9')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground);
|
||||||
|
$activeWorksheet->getStyle('B17')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground);
|
||||||
|
$activeWorksheet->getStyle('B18')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground);
|
||||||
|
$activeWorksheet->getStyle('F18')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground);
|
||||||
|
|
||||||
|
foreach ( $this->washPerformedAt as $key => $value ) {
|
||||||
|
if ($key !== $this->department) {
|
||||||
|
$activeWorksheet->getStyle($value['column'] . ($value['row'] + 1))->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the cells 32A:32F has the font size 11
|
||||||
|
$activeWorksheet->getStyle('A32:F32')->getFont()->setSize(11);
|
||||||
|
// Make sure the cells 35A:35F has the font size 11
|
||||||
|
$activeWorksheet->getStyle('A35:F35')->getFont()->setSize(11);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setPageSetup($activeWorksheet): void
|
||||||
|
{
|
||||||
|
$activeWorksheet->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4);
|
||||||
|
$activeWorksheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_PORTRAIT);
|
||||||
|
$activeWorksheet->getPageSetup()->setFitToWidth(1);
|
||||||
|
$activeWorksheet->getPageSetup()->setFitToHeight(0);
|
||||||
|
$activeWorksheet->getPageMargins()->setTop(0.75);
|
||||||
|
$activeWorksheet->getPageMargins()->setRight(0.75);
|
||||||
|
$activeWorksheet->getPageMargins()->setLeft(0.75);
|
||||||
|
$activeWorksheet->getPageMargins()->setBottom(0.75);
|
||||||
|
$activeWorksheet->getPageMargins()->setHeader(0.3);
|
||||||
|
$activeWorksheet->getPageMargins()->setFooter(0.3);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function exportToPdf(string $outputPath): void
|
||||||
|
{
|
||||||
|
$writer = IOFactory::createWriter($this->spreadsheet, 'Mpdf');
|
||||||
|
$writer->setIncludeCharts(false);
|
||||||
|
$writer->setPreCalculateFormulas(true);
|
||||||
|
$writer->save($outputPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function addImagesToPdf(string $outputPath): void
|
||||||
|
{
|
||||||
|
$logo = $this->logo;
|
||||||
|
$signature = $this->signature;
|
||||||
|
// Center the logo and signature
|
||||||
|
$logo['x'] = $logo['is-centered'] ? (210 - $logo['width']) / 2 : $logo['x'];
|
||||||
|
$signature['x'] = $signature['is-centered'] ? (210 - $signature['width']) / 2 : $signature['x'];
|
||||||
|
$pdf = new Fpdi();
|
||||||
|
$pdf->AddPage();
|
||||||
|
$pdf->setSourceFile($outputPath);
|
||||||
|
$tplIdx = $pdf->importPage(1);
|
||||||
|
$pdf->useTemplate($tplIdx, 0, 0, 210);
|
||||||
|
$pdf->Image($logo['path'], $logo['x'], $logo['y'], $logo['width']);
|
||||||
|
$pdf->Image($signature['path'], $signature['x'], $signature['y'], $signature['width']);
|
||||||
|
$pdf->Output($outputPath, 'F');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -110,18 +110,16 @@ class bookings_o extends db
|
|||||||
$this->status = new object_property($this->table, $this->id, 'status', 'string', true);
|
$this->status = new object_property($this->table, $this->id, 'status', 'string', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCustomerBookingsPaginated(int $customer_number, int $page = 1, int $limit = 10, string $order = 'DESC'): array
|
public function getCustomerBookingsPaginated(int $customer_number, int $page = 1, int $limit = 10, array $order = ['id' => 'DESC'], string $search = null, array $filters = null): array
|
||||||
{
|
{
|
||||||
global /** @var response $response */
|
global /** @var response $response */
|
||||||
$db, $response;
|
$db, $response;
|
||||||
$sql = "SELECT * FROM $this->table WHERE customer_number = $customer_number ORDER BY id $order LIMIT $limit OFFSET " . ($page - 1) * $limit;
|
// Add the customer number to the filters
|
||||||
$result = $db->query($sql);
|
$filters['customer_number'] = $customer_number;
|
||||||
$array = $db->fetch_all($result);
|
// List the objects with pagination
|
||||||
// Add the metadata
|
$array = $this->listObjectsWithPagination($page, $limit, $search, $filters, $order);
|
||||||
$sql = "SELECT COUNT(*) as count FROM $this->table WHERE customer_number = $customer_number";
|
// Get the total number of objects
|
||||||
$result = $db->query($sql);
|
$total = $this->getTotalObjects($search, $filters);
|
||||||
$row = $db->fetch_assoc($result);
|
|
||||||
$total = $row['count'];
|
|
||||||
$response->paginate($page, $limit, $total);
|
$response->paginate($page, $limit, $total);
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,18 +180,18 @@ class orders_o extends db
|
|||||||
return new users_o();
|
return new users_o();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCustomerOrdersPaginated(int $customer_number, int $page = 1, int $limit = 10, string $order = 'DESC'): array
|
public function getCustomerOrdersPaginated(int $customer_number, int $page = 1, int $limit = 10, array $order = ['id' => 'DESC'], string $search = null, array $filters = null): array
|
||||||
{
|
{
|
||||||
global /** @var response $response */
|
global /** @var response $response */
|
||||||
$db, $response;
|
$db, $response;
|
||||||
$sql = "SELECT * FROM $this->table WHERE customer_id = $customer_number AND deleted_at IS NULL ORDER BY id $order LIMIT $limit OFFSET " . ($page - 1) * $limit;
|
// Add the customer number to the filters
|
||||||
$result = $db->query($sql);
|
$filters['customer_id'] = $customer_number;
|
||||||
$array = $db->fetch_all($result);
|
|
||||||
// Add the metadata
|
// List the objects with pagination
|
||||||
$sql = "SELECT COUNT(*) as count FROM $this->table WHERE customer_id = $customer_number AND deleted_at IS NULL";
|
$array = $this->listObjectsWithPagination($page, $limit, $search, $filters, $order);
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $db->fetch_assoc($result);
|
// Get the total number of objects
|
||||||
$total = $row['count'];
|
$total = $this->getTotalObjects($search, $filters);
|
||||||
$response->paginate($page, $limit, $total);
|
$response->paginate($page, $limit, $total);
|
||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -459,7 +459,7 @@ class users_o extends db
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Get the record from the database
|
// Get the record from the database
|
||||||
$sql = "SELECT * FROM orders WHERE id = $order_id AND customer_number = " . $this->customer_number->value();
|
$sql = "SELECT * FROM orders WHERE id = $order_id AND customer_id = " . $this->customer_number->value();
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if ($result->num_rows > 0) {
|
if ($result->num_rows > 0) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ class bookingsRoute
|
|||||||
/** All bookings */
|
/** All bookings */
|
||||||
$this->get('/bookings', function () {
|
$this->get('/bookings', function () {
|
||||||
// Require the user to be logged in
|
// Require the user to be logged in
|
||||||
global /** @var response $response */
|
global
|
||||||
|
/** @var response $response */
|
||||||
|
$EMAIL_WASH_CERTIFICATE_TOKEN,
|
||||||
$response;
|
$response;
|
||||||
$this->requirePermission('list_bookings');
|
$this->requirePermission('list_bookings');
|
||||||
// Get the user object
|
// Get the user object
|
||||||
@@ -27,6 +29,10 @@ class bookingsRoute
|
|||||||
if ($user) {
|
if ($user) {
|
||||||
// Log the incident
|
// Log the incident
|
||||||
(new logs_o())->add('bookings', 'global', 1, $user->id, 'LIST_BOOKINGS', 'Successfully listed bookings');
|
(new logs_o())->add('bookings', 'global', 1, $user->id, 'LIST_BOOKINGS', 'Successfully listed bookings');
|
||||||
|
// If the user has the permission to issue wash certificates, add the wash certificate key to the response
|
||||||
|
if ($user->hasPermission('issue_wash_certificates')) {
|
||||||
|
$response->add_meta('wash_certificate_token', $EMAIL_WASH_CERTIFICATE_TOKEN);
|
||||||
|
}
|
||||||
// Return the list of bookings
|
// Return the list of bookings
|
||||||
$response->success(
|
$response->success(
|
||||||
(new bookings_o())->listObjectsWithPaginationIfSet()
|
(new bookings_o())->listObjectsWithPaginationIfSet()
|
||||||
@@ -41,7 +47,8 @@ class bookingsRoute
|
|||||||
/** Own bookings */
|
/** Own bookings */
|
||||||
$this->get('/user/bookings', function () {
|
$this->get('/user/bookings', function () {
|
||||||
// Require the user to be logged in
|
// Require the user to be logged in
|
||||||
global $response;
|
global /** @var response $response */
|
||||||
|
$response;
|
||||||
$this->requirePermission('list_own_bookings');
|
$this->requirePermission('list_own_bookings');
|
||||||
// Get the user object
|
// Get the user object
|
||||||
$user = (new authentication())->get_user();
|
$user = (new authentication())->get_user();
|
||||||
@@ -55,7 +62,10 @@ class bookingsRoute
|
|||||||
$user->customer_number->value(),
|
$user->customer_number->value(),
|
||||||
($this->fromRequest('page') ?? 1),
|
($this->fromRequest('page') ?? 1),
|
||||||
($this->fromRequest('limit') ?? 10),
|
($this->fromRequest('limit') ?? 10),
|
||||||
($this->fromRequest('order') ?? 'DESC')
|
['id' => 'DESC'],
|
||||||
|
$this->fromRequest('search') === null ? '' : $this->fromRequest('search'),
|
||||||
|
$this->fromRequest('filters') === null ? [] :
|
||||||
|
$response->parseFilters($this->fromRequest('filters')) ?? []
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -103,7 +113,7 @@ class bookingsRoute
|
|||||||
(string)$booking['washCertificateEmail'],
|
(string)$booking['washCertificateEmail'],
|
||||||
(string)$booking['date'],
|
(string)$booking['date'],
|
||||||
(string)$booking['department'],
|
(string)$booking['department'],
|
||||||
(bool)$booking['pickup_bool'],
|
(string)$booking['pickup_bool'],
|
||||||
(string)$booking['notes'],
|
(string)$booking['notes'],
|
||||||
(string)$booking['washCertificateStatus'],
|
(string)$booking['washCertificateStatus'],
|
||||||
(string)$booking['washCertificateUrl'],
|
(string)$booking['washCertificateUrl'],
|
||||||
|
|||||||
@@ -29,7 +29,10 @@ class userOrdersRoute
|
|||||||
$user->customer_number->value(),
|
$user->customer_number->value(),
|
||||||
($this->fromRequest('page') ?? 1),
|
($this->fromRequest('page') ?? 1),
|
||||||
($this->fromRequest('limit') ?? 10),
|
($this->fromRequest('limit') ?? 10),
|
||||||
($this->fromRequest('order') ?? 'DESC')
|
['id' => 'DESC'],
|
||||||
|
$this->fromRequest('search') === null ? '' : $this->fromRequest('search'),
|
||||||
|
$this->fromRequest('filters') === null ? [] :
|
||||||
|
$response->parseFilters($this->fromRequest('filters')) ?? []
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -53,6 +56,10 @@ class userOrdersRoute
|
|||||||
if (!isset($data['id'])) {
|
if (!isset($data['id'])) {
|
||||||
$response->error('id parameter is required', 400);
|
$response->error('id parameter is required', 400);
|
||||||
}
|
}
|
||||||
|
// Make sure the user exists
|
||||||
|
if (!$user->exists()) {
|
||||||
|
$response->error('User not found', 400);
|
||||||
|
}
|
||||||
// Make sure the user is allowed to fetch the order
|
// Make sure the user is allowed to fetch the order
|
||||||
if (!$user->hasAccessToOrder($data['id'])) {
|
if (!$user->hasAccessToOrder($data['id'])) {
|
||||||
$response->error('You are not allowed to fetch this order', 400);
|
$response->error('You are not allowed to fetch this order', 400);
|
||||||
|
|||||||
+176
-41
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace traits;
|
namespace traits;
|
||||||
|
|
||||||
|
use classes\db;
|
||||||
use classes\response;
|
use classes\response;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
|
||||||
@@ -68,6 +69,7 @@ trait db_object_t
|
|||||||
$limit = ((int)$response->getRequestParameter('limit')) ?? null; // Get the number of objects per page
|
$limit = ((int)$response->getRequestParameter('limit')) ?? null; // Get the number of objects per page
|
||||||
$search = $response->getRequestParameter('search') ?? null; // Get the search query
|
$search = $response->getRequestParameter('search') ?? null; // Get the search query
|
||||||
$filters = $response->getRequestParameter('filters') ?? null; // Get the filters ( Eg. department_id:1,role_id:2 OR department_id:1 )
|
$filters = $response->getRequestParameter('filters') ?? null; // Get the filters ( Eg. department_id:1,role_id:2 OR department_id:1 )
|
||||||
|
$order = $response->getRequestParameter('order') ?? null; // Get the order ( Eg. name:ASC )
|
||||||
// Make the filters an array
|
// Make the filters an array
|
||||||
if ($filters) {
|
if ($filters) {
|
||||||
$filters = explode(',', $filters);
|
$filters = explode(',', $filters);
|
||||||
@@ -78,8 +80,14 @@ trait db_object_t
|
|||||||
}
|
}
|
||||||
$filters = $temp;
|
$filters = $temp;
|
||||||
}
|
}
|
||||||
|
// Make the order an array
|
||||||
|
if ($order) {
|
||||||
|
$order = explode(':', $order);
|
||||||
|
$order = [$order[0] => $order[1]];
|
||||||
|
}
|
||||||
|
// List the objects with pagination
|
||||||
if ($page && $limit) {
|
if ($page && $limit) {
|
||||||
return $this->listObjectsWithPagination($page, $limit, $search, $filters);
|
return $this->listObjectsWithPagination($page, $limit, $search, $filters, $order);
|
||||||
}
|
}
|
||||||
return $this->listObjects();
|
return $this->listObjects();
|
||||||
}
|
}
|
||||||
@@ -90,57 +98,114 @@ trait db_object_t
|
|||||||
* @param int $limit The number of objects per page
|
* @param int $limit The number of objects per page
|
||||||
* @return array The list of objects in the table
|
* @return array The list of objects in the table
|
||||||
*/
|
*/
|
||||||
public function listObjectsWithPagination(int $page, int $limit, string $search = null, array $filters = null): array
|
public function listObjectsWithPagination(int $page, int $limit, ?string $search = null, ?array $filters = null, ?array $order = null): array
|
||||||
{
|
{
|
||||||
global /** @var response $response */
|
global /** @var response $response */
|
||||||
|
/** @var db $db */
|
||||||
$db, $response;
|
$db, $response;
|
||||||
|
$mysqli = $db->conn;
|
||||||
|
|
||||||
$offset = ($page - 1) * $limit;
|
$offset = ($page - 1) * $limit;
|
||||||
// Get all the fields of the table
|
|
||||||
$sql = "SHOW COLUMNS FROM $this->table";
|
// Fetch table fields
|
||||||
$result = $db->query($sql);
|
$fields = [];
|
||||||
$fields = $db->fetch_all($result);
|
$result = $mysqli->query("SHOW COLUMNS FROM {$this->table}");
|
||||||
$searchfields = [];
|
while ($row = $result->fetch_assoc()) {
|
||||||
foreach ( $fields as $field ) {
|
$fields[] = $row['Field'];
|
||||||
$searchfields[] = $field['Field'];
|
|
||||||
}
|
}
|
||||||
// Search for any similarities to the search query (Not case sensitive)
|
$result->free();
|
||||||
$searchQuery = '';
|
|
||||||
if ($search) {
|
$whereClauses = [];
|
||||||
$searchQuery = 'WHERE ';
|
$params = [];
|
||||||
$search = strtolower($search);
|
|
||||||
$searchQuery .= '(';
|
// Search clause
|
||||||
foreach ( $searchfields as $field ) {
|
if (!empty($search)) {
|
||||||
$searchQuery .= "LOWER($field) LIKE '%$search%' OR ";
|
// Use prepared statements to prevent SQL injection
|
||||||
|
$searchClauses = [];
|
||||||
|
foreach ( $fields as $field ) {
|
||||||
|
$searchClauses[] = "`$field` LIKE ?";
|
||||||
|
$params[] = "%$search%";
|
||||||
}
|
}
|
||||||
$searchQuery = substr($searchQuery, 0, -4);
|
$whereClauses[] = '(' . implode(' OR ', $searchClauses) . ')';
|
||||||
$searchQuery .= ')';
|
|
||||||
}
|
}
|
||||||
// Filter the objects
|
|
||||||
if ($filters) {
|
// Filters clause
|
||||||
if ($searchQuery) {
|
if (!empty($filters)) {
|
||||||
$searchQuery .= ' AND ';
|
|
||||||
} else {
|
|
||||||
$searchQuery = 'WHERE ';
|
|
||||||
}
|
|
||||||
foreach ( $filters as $field => $value ) {
|
foreach ( $filters as $field => $value ) {
|
||||||
$searchQuery .= "$field = $value AND ";
|
if (in_array($field, $fields)) {
|
||||||
|
$whereClauses[] = "`$field` = ?";
|
||||||
|
$params[] = $value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// If the deleted_at column exists, filter out the deleted objects
|
|
||||||
if (in_array('deleted_at', $searchfields)) {
|
|
||||||
$searchQuery .= "deleted_at IS NULL AND ";
|
|
||||||
}
|
|
||||||
$searchQuery = substr($searchQuery, 0, -5);
|
|
||||||
}
|
}
|
||||||
// Get the objects with pagination
|
|
||||||
$sql = "SELECT * FROM $this->table $searchQuery LIMIT $limit OFFSET $offset";
|
// Check for "deleted_at" column
|
||||||
$result = $db->query($sql);
|
if (in_array('deleted_at', $fields)) {
|
||||||
$array = $db->fetch_all($result);
|
$whereClauses[] = "`deleted_at` IS NULL";
|
||||||
$sql = "SELECT COUNT(*) AS count FROM $this->table $searchQuery";
|
}
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $db->fetch_assoc($result);
|
// Combine WHERE clauses
|
||||||
$total = $row['count'];
|
$whereQuery = !empty($whereClauses) ? 'WHERE ' . implode(' AND ', $whereClauses) : '';
|
||||||
|
|
||||||
|
// Order clause
|
||||||
|
$orderQuery = '';
|
||||||
|
if (!empty($order)) {
|
||||||
|
$orderParts = [];
|
||||||
|
foreach ( $order as $field => $direction ) {
|
||||||
|
if (in_array($field, $fields)) {
|
||||||
|
$direction = strtoupper($direction) === 'DESC' ? 'DESC' : 'ASC';
|
||||||
|
$orderParts[] = "`$field` $direction";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$orderQuery = !empty($orderParts) ? 'ORDER BY ' . implode(', ', $orderParts) : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pagination clause
|
||||||
|
$limitQuery = 'LIMIT ? OFFSET ?';
|
||||||
|
$params[] = $limit;
|
||||||
|
$params[] = $offset;
|
||||||
|
|
||||||
|
// Final query
|
||||||
|
$sql = "SELECT * FROM {$this->table} $whereQuery $orderQuery $limitQuery";
|
||||||
|
|
||||||
|
// Prepare and bind
|
||||||
|
$stmt = $mysqli->prepare($sql);
|
||||||
|
if ($stmt === false) {
|
||||||
|
throw new Exception("Failed to prepare statement: " . $mysqli->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dynamically bind parameters
|
||||||
|
$types = str_repeat('s', count($params) - 2) . 'ii'; // 's' for strings, 'i' for limit and offset
|
||||||
|
$stmt->bind_param($types, ...$params);
|
||||||
|
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->get_result();
|
||||||
|
$objects = $result->fetch_all(MYSQLI_ASSOC);
|
||||||
|
$stmt->close();
|
||||||
|
|
||||||
|
// Total count query
|
||||||
|
$countSql = "SELECT COUNT(*) AS count FROM {$this->table} $whereQuery";
|
||||||
|
$countStmt = $mysqli->prepare($countSql);
|
||||||
|
if ($countStmt === false) {
|
||||||
|
throw new Exception("Failed to prepare count statement: " . $mysqli->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reuse parameters (excluding LIMIT and OFFSET)
|
||||||
|
$countParams = array_slice($params, 0, -2);
|
||||||
|
$countTypes = substr($types, 0, count($countParams));
|
||||||
|
if (!empty($countParams)) {
|
||||||
|
$countStmt->bind_param($countTypes, ...$countParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
$countStmt->execute();
|
||||||
|
$countResult = $countStmt->get_result();
|
||||||
|
$total = $countResult->fetch_assoc()['count'];
|
||||||
|
$countStmt->close();
|
||||||
|
|
||||||
|
// Provide pagination metadata
|
||||||
$response->paginate($page, $limit, $total, $search, $filters);
|
$response->paginate($page, $limit, $total, $search, $filters);
|
||||||
return $array;
|
|
||||||
|
return $objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -155,6 +220,76 @@ trait db_object_t
|
|||||||
return $db->fetch_all($result);
|
return $db->fetch_all($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the total number of objects
|
||||||
|
* @param string|null $search The search query
|
||||||
|
* @param array|null $filters The filters ( Eg. department_id:1,role_id:2 OR department_id:1 )
|
||||||
|
* @return int The total number of objects
|
||||||
|
*/
|
||||||
|
public function getTotalObjects(string $search = null, array $filters = null): int
|
||||||
|
{
|
||||||
|
global $db;
|
||||||
|
$mysqli = $db->conn;
|
||||||
|
|
||||||
|
// Fetch table fields
|
||||||
|
$fields = [];
|
||||||
|
$result = $mysqli->query("SHOW COLUMNS FROM {$this->table}");
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
$fields[] = $row['Field'];
|
||||||
|
}
|
||||||
|
$result->free();
|
||||||
|
|
||||||
|
$whereClauses = [];
|
||||||
|
$params = [];
|
||||||
|
|
||||||
|
// Search clause
|
||||||
|
if (!empty($search)) {
|
||||||
|
// Use prepared statements to prevent SQL injection
|
||||||
|
$searchClauses = [];
|
||||||
|
foreach ( $fields as $field ) {
|
||||||
|
$searchClauses[] = "`$field` LIKE ?";
|
||||||
|
$params[] = "%$search%";
|
||||||
|
}
|
||||||
|
$whereClauses[] = '(' . implode(' OR ', $searchClauses) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filters clause
|
||||||
|
if (!empty($filters)) {
|
||||||
|
foreach ( $filters as $field => $value ) {
|
||||||
|
if (in_array($field, $fields)) {
|
||||||
|
$whereClauses[] = "`$field` = ?";
|
||||||
|
$params[] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Combine WHERE clauses
|
||||||
|
$whereQuery = !empty($whereClauses) ? 'WHERE ' . implode(' AND ', $whereClauses) : '';
|
||||||
|
|
||||||
|
// Check for "deleted_at" column
|
||||||
|
if (in_array('deleted_at', $fields)) {
|
||||||
|
$whereClauses[] = "`deleted_at` IS NULL";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Final query
|
||||||
|
$sql = "SELECT COUNT(*) AS count FROM {$this->table} $whereQuery";
|
||||||
|
|
||||||
|
// Prepare and bind
|
||||||
|
$stmt = $mysqli->prepare($sql);
|
||||||
|
if ($stmt === false) {
|
||||||
|
throw new Exception("Failed to prepare statement: " . $mysqli->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dynamically bind parameters
|
||||||
|
$types = str_repeat('s', count($params)); // 's' for strings
|
||||||
|
$stmt->bind_param($types, ...$params);
|
||||||
|
|
||||||
|
$stmt->execute();
|
||||||
|
$result = $stmt->get_result();
|
||||||
|
|
||||||
|
return $result->fetch_assoc()['count'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does this object exist in the database?
|
* Does this object exist in the database?
|
||||||
* @return bool True if the object exists in the database, false otherwise
|
* @return bool True if the object exists in the database, false otherwise
|
||||||
|
|||||||
Reference in New Issue
Block a user