getDependencies();
return static::$instance;
}
/**
* Recupere le contexte d'execution
*
* @return void
*/
protected function getDependencies()
{
if(true === $this->is_initialized) {
return;
}
global $styles_path;
$this->styles_path = trim($styles_path);
global $pmb_show_rtl;
$this->show_rtl = $pmb_show_rtl;
$this->is_initialized = true;
}
/**
* Lit les fichiers d'un repertoire en fonction de leur extension et les trie par ordre alpha
*
* @param string $dir : repertoire a lire avec / final
* @param string $extension : extension du fichier
*
* @return array|string[] : tableau de fichiers
*/
protected function readAndSortFiles(string $dir, string $extension)
{
$handle = @opendir($dir);
$files = [];
if(!$handle) {
return [];
}
$l = strlen($extension);
if($handle) {
while( false !== ($item = readdir($handle)) ) {
if( !in_array($dir.$item, $this->common_disabled_files) && is_file($dir.$item) && substr($item, -$l) == $extension ) {
$files[] = $dir.$item;
}
}
closedir($handle);
}
sort($files);
return $files;
}
/**
* Retourne les feuilles de style et fichiers js associes a inclure
*
* @param string $style
*
* @return string
*/
public function getStyle(string $style)
{
if( !is_null($this->css_content) ) {
return $this->css_content;
}
$dir = __DIR__.'/../styles';
if($this->styles_path) {
$dir = $this->styles_path;
}
$this->css_content = "";
// Lecture fichier disable dans le repertoire common
if(is_file($dir.'/common/disable') && is_readable($dir.'/common/disable')) {
$s = file_get_contents($dir.'/common/disable');
$t = explode(PHP_EOL, $s);
if(is_array($t)) {
foreach($t as $v) {
if($v) {
$this->common_disabled_files[] = $dir.'/common/'.trim($v);
}
}
}
}
// inclusion des feuilles de style communes
$css_files = static::readAndSortFiles($dir.'/common/', '.css');
foreach($css_files as $css_file){
$time = @filemtime($css_file);
$this->css_content.= PHP_EOL."";
}
// inclusion des fichiers js communs
$js_files = static::readAndSortFiles($dir.'/common/javascript', '.js');
foreach($js_files as $js_file) {
$time = @filemtime($js_file);
$this->css_content.= PHP_EOL."";
}
// inclusion des feuilles de style issues du style demande
$css_files = static::readAndSortFiles($dir.'/'.$style.'/', '.css');
foreach($css_files as $css_file){
$time = @filemtime($css_file);
$this->css_content.= PHP_EOL."";
}
// inclusion des fichiers js issus du style demande
$js_files = static::readAndSortFiles($dir.'/'.$style.'/javascript/', '.js');
foreach($js_files as $js_file) {
$time = @filemtime($js_file);
$this->css_content.= PHP_EOL."";
}
// Inclusion des feuilles de style RTL / LTR
if ($this->show_rtl) {
$css_files = static::readAndSortFiles($dir.'/'.$style.'/rtl', '.css');
foreach($css_files as $css_file){
$time = @filemtime($css_file);
$this->css_content.= PHP_EOL."";
}
}
return $this->css_content;
}
}