forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.3 KiB
116 lines
2.3 KiB
1 year ago
|
<?php
|
||
|
|
||
|
/* Autoload através do autoload.json
|
||
|
*
|
||
|
* O método get_NamespaceToPathname fará essa conversão
|
||
|
* depois que o json estiver carregado.
|
||
|
*
|
||
|
* A json precisa manter o padrão
|
||
|
* "before_id": "<Namespace+File>",
|
||
|
* "after_id": "<pathname>"
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
class JsonAutoload {
|
||
|
|
||
|
private $json_file;
|
||
|
private $json_data_dec;
|
||
|
private $replace_namespace;
|
||
|
private $namespace_to_change;
|
||
|
private $amount_replace;
|
||
|
|
||
|
|
||
|
function __construct( ) {
|
||
|
|
||
|
$this->amount_replace = 0;
|
||
|
$this->replace_namespace = array( );
|
||
|
$this->namespace_to_change = array( );
|
||
|
$this->ExistFileJSON( );
|
||
|
$this->ReadJson( );
|
||
|
$this->get_JsonLibrary();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
public function get_NamespaceToPathname( $classname ){
|
||
|
|
||
|
$result = str_replace( $this->namespace_to_change, $this->replace_namespace, $classname );
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
|
||
|
private function obtain_replace_namespace( $lib, $json_replace ){
|
||
|
|
||
|
$amount_replace = count( $json_replace["replace"] );
|
||
|
|
||
|
$odd = ($amount_replace % 2);
|
||
|
if( $odd == 1 ){
|
||
|
$this->ERROR_OBJ("Campo Replace em autoload.json tem quantidade ímpar. Deve ser par em $lib");
|
||
|
}
|
||
|
|
||
|
foreach ($json_replace["replace"] as $key => $value) {
|
||
|
|
||
|
if( str_contains( $key, "before") ){
|
||
|
$this->namespace_to_change[$this->amount_replace] = $value;
|
||
|
}
|
||
|
|
||
|
if( str_contains( $key, "after") ){
|
||
|
$this->replace_namespace[$this->amount_replace] = $value;
|
||
|
}
|
||
|
|
||
|
|
||
|
if(count($this->replace_namespace) == count($this->namespace_to_change)){
|
||
|
++$this->amount_replace;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function get_JsonLibrary( ){
|
||
|
|
||
|
foreach ( $this->json_data_dec as $lib => $value ) {
|
||
|
|
||
|
if(!is_array($value["replace"])){
|
||
|
$this->ERROR_OBJ("Está faltando campo replace em $lib no arquivo {$this->json_file}");
|
||
|
}
|
||
|
|
||
|
$this->obtain_replace_namespace( $lib, $value );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function ExistFileJSON( ){
|
||
|
|
||
|
if( !file_exists( $this->FileName() )){
|
||
|
$this->ERROR_OBJ("Não foi possível encontrar o json para autoload");
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
private function ReadJson( ){
|
||
|
|
||
|
$json_file = file_get_contents( $this->FileName() );
|
||
|
|
||
|
$this->json_data_dec = json_decode( $json_file, true );
|
||
|
|
||
|
if(!$this->json_data_dec){
|
||
|
$this->ERROR_OBJ("não foi possivel carregar {$this->json_file}");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function FileName( ){
|
||
|
|
||
|
$this->json_file = dirname(__FILE__)."/autoload.json";
|
||
|
|
||
|
return $this->json_file;
|
||
|
}
|
||
|
|
||
|
private function ERROR_OBJ( $str ){
|
||
|
echo $str;
|
||
|
die;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|