Update website

This commit is contained in:
Guilhem Lavaux 2025-03-24 09:27:39 +01:00
parent a0b0d3dae7
commit ae7ef6ad45
3151 changed files with 566766 additions and 48 deletions

View file

@ -0,0 +1,75 @@
<?php
declare(strict_types = 1);
namespace Williamdes\MariaDBMySQLKBS;
use \stdClass;
use \JsonSerializable;
class KBDocumentation extends stdClass implements JsonSerializable
{
/**
* The URL
*
* @var string
*/
private $url;
/**
* The anchor
*
* @var string
*/
private $anchor = null;
/**
* Create a KBEntry object
*
* @param string $url The url
* @param string|null $anchor The anchor
*/
public function __construct(string $url, ?string $anchor = null)
{
$this->url = $url;
if ($anchor !== null) {
$this->anchor = $anchor;
}
}
/**
* Get the url
*
* @return string
*/
public function getUrl(): string
{
return $this->url;
}
/**
* Get the anchor
*
* @return string|null
*/
public function getAnchor(): ?string
{
return $this->anchor;
}
/**
* Used for json_encode function
* This can seem useless, do not remove it.
*
* @return array<string,string>
*/
public function jsonSerialize(): array
{
$outObj = array();
$outObj['url'] = $this->url;
if ($this->anchor !== null) {
$outObj['anchor'] = $this->anchor;
}
return $outObj;
}
}

View file

@ -0,0 +1,151 @@
<?php
declare(strict_types = 1);
namespace Williamdes\MariaDBMySQLKBS;
use \stdClass;
use \JsonSerializable;
class KBEntry extends stdClass implements JsonSerializable
{
/**
* The name of the variable
*
* @var string
*/
private $name;
/**
* Type of variable
*
* @var string
*/
private $type = null;
/**
* Is dynamic ?
*
* @var bool
*/
private $dynamic = null;
/**
* Documentations
*
* @var KBDocumentation[]
*/
private $docs = null;
/**
* Create a KBEntry object
*
* @param string $name The name of the variable
* @param string|null $type Type of variable
* @param bool|null $dynamic Is dynamic ?
*/
public function __construct(string $name, ?string $type, ?bool $dynamic)
{
$this->name = $name;
if ($type !== null) {
$this->type = $type;
}
if ($dynamic !== null) {
$this->dynamic = $dynamic;
}
}
/**
* Get the variable name
*
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* Is the variable dynamic
*
* @return bool|null
*/
public function isDynamic(): ?bool
{
return $this->dynamic;
}
/**
* Get the variable type
*
* @return string|null
*/
public function getType(): ?string
{
return $this->type;
}
/**
* Variable has documentations
*
* @return bool
*/
public function hasDocumentations(): bool
{
if ($this->docs === null) {
return false;
} else {
return count($this->docs) > 0;
}
}
/**
* Get all documentations
*
* @return KBDocumentation[]
*/
public function getDocumentations(): array
{
return $this->docs;
}
/**
* Add documentation link
*
* @param string $url The URL
* @param string|null $anchor The anchor
* @return KBDocumentation
*/
public function addDocumentation(string $url, ?string $anchor = null ): KBDocumentation
{
$this->url = $url;
if ($this->docs === null) {
$this->docs = array();
}
$kbd = new KBDocumentation($url, $anchor);
$this->docs[] = $kbd;
return $kbd;
}
/**
* Used for json_encode function
* This can seem useless, do not remove it.
*
* @return array<string,KBDocumentation[]|bool|string>
*/
public function jsonSerialize(): array
{
$outObj = array();
$outObj['name'] = $this->name;
if ($this->type !== null) {
$outObj['type'] = $this->type;
}
if ($this->dynamic !== null) {
$outObj['dynamic'] = $this->dynamic;
}
if ($this->docs !== null) {
$outObj['docs'] = $this->docs;
}
return $outObj;
}
}

View file

@ -0,0 +1,12 @@
<?php
declare(strict_types = 1);
namespace Williamdes\MariaDBMySQLKBS;
use \Exception;
/**
* KBException class
*/
class KBException extends Exception
{
}

View file

@ -0,0 +1,173 @@
<?php
declare(strict_types = 1);
namespace Williamdes\MariaDBMySQLKBS;
use \stdClass;
class Search
{
/**
* Loaded data
*
* @var mixed
*/
public static $data;
/**
* Data is loaded
*
* @var bool
*/
public static $loaded = false;
public const ANY = -1;
public const MYSQL = 1;
public const MARIADB = 2;
public const DS = DIRECTORY_SEPARATOR;
/**
* The directory where the data is located
*
* @var string
*/
public static $DATA_DIR = __DIR__ . self::DS . ".." . self::DS . "dist" . self::DS;
/**
* Load data from disk
*
* @return void
* @throws KBException
*/
public static function loadData(): void
{
if (Search::$loaded === false) {
$filePath = Search::$DATA_DIR."merged-ultraslim.json";
$contents = @file_get_contents($filePath);
if ($contents === false) {
throw new KBException("$filePath does not exist !");
}
Search::$data = json_decode($contents);
Search::$loaded = true;
}
}
/**
* Load test data
*
* @param SlimData $slimData The SlimData object
* @return void
*/
public static function loadTestData(SlimData $slimData): void
{
Search::$data = json_decode((string) json_encode($slimData));
Search::$loaded = true;
}
/**
* get the first link to doc available
*
* @param string $name Name of variable
* @param int $type (optional) Type of link Search::MYSQL/Search::MARIADB/Search::ANY
* @return string
* @throws KBException
*/
public static function getByName(string $name, int $type = Search::ANY): string
{
self::loadData();
$kbEntries = self::getVariable($name);
if (isset($kbEntries->a)) {
foreach ($kbEntries->a as $kbEntry) {
if ($type === Search::ANY) {
return Search::$data->urls[$kbEntry->u]."#".$kbEntry->a;
} elseif ($type === Search::MYSQL) {
if ($kbEntry->t === Search::MYSQL) {
return Search::$data->urls[$kbEntry->u]."#".$kbEntry->a;
}
} elseif ($type === Search::MARIADB) {
if ($kbEntry->t === Search::MARIADB) {
return Search::$data->urls[$kbEntry->u]."#".$kbEntry->a;
}
}
}
}
throw new KBException("$name does not exist for this type of documentation !");
}
/**
* Get a variable
*
* @param string $name Name of variable
* @return stdClass
* @throws KBException
*/
public static function getVariable(string $name): stdClass
{
self::loadData();
if (isset(Search::$data->vars->{$name})) {
return Search::$data->vars->{$name};
} else {
throw new KBException("$name does not exist !");
}
}
/**
* get the type of the variable
*
* @param string $name Name of variable
* @return string
* @throws KBException
*/
public static function getVariableType(string $name): string
{
self::loadData();
$kbEntry = self::getVariable($name);
if (isset($kbEntry->t)) {
return Search::$data->varTypes->{$kbEntry->t};
} else {
throw new KBException("$name does have a known type !");
}
}
/**
* Return the list of static variables
*
* @return array<int,string>
*/
public static function getStaticVariables(): array
{
return self::getVariablesWithDynamic(false);
}
/**
* Return the list of dynamic variables
*
* @return array<int,string>
*/
public static function getDynamicVariables(): array
{
return self::getVariablesWithDynamic(true);
}
/**
* Return the list of variables having dynamic = $dynamic
*
* @param bool $dynamic dynamic=true/dynamic=false
* @return array<int,string>
*/
public static function getVariablesWithDynamic(bool $dynamic): array
{
self::loadData();
$staticVars = array();
foreach (Search::$data->vars as $name => $var) {
if (isset($var->d)) {
if ($var->d === $dynamic) {
$staticVars[] = $name;
}
}
}
return $staticVars;
}
}

View file

@ -0,0 +1,162 @@
<?php
declare(strict_types = 1);
namespace Williamdes\MariaDBMySQLKBS;
use \stdClass;
use \JsonSerializable;
class SlimData extends stdClass implements JsonSerializable
{
/**
* Variables
*
* @var KBEntry[]
*/
private $vars = array();
/**
* File revision
*
* @var float
*/
private $version = 1;
/**
* Urls
*
* @var string[]
*/
private $urls = array();
/**
* Types of documentation
*
* @var array<string,int>
*/
private $types = array("MYSQL" => 1, "MARIADB" => 2);
/**
* Types of variables
*
* @var array<string,int>
*/
private $varTypes = array(
"string" => 1,
"boolean" => 2,
"integer" => 3,
"numeric" => 4,
"enumeration" => 5,
"set" => 6,
"directory name" => 7,
"file name" => 8,
"byte" => 9
);
/**
* Create a slimData object
*
* @param float|null $version The version
* @param array<string,int>|null $types The types of documentations
* @param array<string,int>|null $varTypes The types of variables
*/
public function __construct(
?float $version = null,
?array $types = null,
?array $varTypes = null
) {
if ($version !== null) {
$this->version = $version;
}
if ($types !== null) {
$this->types = $types;
}
if ($varTypes !== null) {
$this->varTypes = $varTypes;
}
}
/**
* Add a variable
*
* @param string $name The name
* @param string|null $type The type
* @param bool|null $dynamic Is dynamic
* @return KBEntry The newly created KBEntry
*/
public function addVariable(string $name, ?string $type, ?bool $dynamic): KBEntry
{
$kbe = new KBEntry($name, $type, $dynamic);
$this->vars[] = $kbe;
return $kbe;
}
/**
* Used for json_encode function
* This can seem useless, do not remove it.
*
* @return array<string,array|float|stdClass>
*/
public function jsonSerialize(): array
{
$outObj = array();
if (count($this->vars) > 0) {
$vars = new stdClass();
foreach ($this->vars as $var) {
$variable = new stdClass();
$variable->d = $var->isDynamic();
if ($variable->d === null) {
unset($variable->d);
}
if ($var->getType() !== null) {
if (isset($this->varTypes[$var->getType()]) === false) {
$this->varTypes[$var->getType()] = count($this->varTypes) + 1;
}
$variable->t = $this->varTypes[$var->getType()];
}
if ($var->hasDocumentations()) {
$variable->a = array();
foreach ($var->getDocumentations() as $kbd) {
$entry = new stdClass();
$entry->a = $kbd->getAnchor();
if ($entry->a === null) {
unset($entry->a);
}
if (preg_match("!^(https|http)://mariadb.com!", $kbd->getUrl())) {
$entry->t = $this->types["MARIADB"];
} elseif (preg_match("!^(https|http)://dev.mysql.com!", $kbd->getUrl())) {
$entry->t = $this->types["MYSQL"];
}
if (isset($entry->t)) {// If has no valid type, skip.
//Do not allow other urls.
$keyIndex = array_search($kbd->getUrl(), $this->urls);
if ($keyIndex === false) {
$this->urls[] = $kbd->getUrl();
}
$keyIndex = array_search($kbd->getUrl(), $this->urls);
$entry->u = $keyIndex;
$variable->a[] = $entry;
}
}
}
$vars->{$var->getName()} = $variable;
}
$outObj['vars'] = $vars;
}
$outObj['version'] = $this->version;
if (count($this->vars) > 0) {
$outObj['types'] = array_flip($this->types);
$outObj['varTypes'] = array_flip($this->varTypes);
$outObj['urls'] = $this->urls;
}
return $outObj;
}
}