AppAhield=$AppAhield;
}
public function __invoke(\Psr\Container\ContainerInterface $container) : void{
$container->set( 'compile.dist_dir', 'dist');
$container->set( 'compile.dist_backup_dir', 'dist.backup.restore');
$container->set( 'compile.dist_backup_dir_prev', 'dist.backup.restore~');
$container->factory( 'stage.write.configs',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
$cusotm_templates_dir = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR .'custom' . \DIRECTORY_SEPARATOR .'templates'. \DIRECTORY_SEPARATOR;
if(!is_dir($cusotm_templates_dir.'modules' . \DIRECTORY_SEPARATOR)){
mkdir($cusotm_templates_dir.'modules' . \DIRECTORY_SEPARATOR, 0755, true);
}
if(!is_dir($cusotm_templates_dir.'admin' . \DIRECTORY_SEPARATOR)){
mkdir($cusotm_templates_dir.'admin' . \DIRECTORY_SEPARATOR, 0755, true);
}
if(!is_dir($cusotm_templates_dir.'system' . \DIRECTORY_SEPARATOR)){
mkdir($cusotm_templates_dir.'system' . \DIRECTORY_SEPARATOR, 0755, true);
}
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'frdl-extensions'
. \DIRECTORY_SEPARATOR . '*'.\DIRECTORY_SEPARATOR. 'config.xml';
foreach(glob($glob) as $file){
$file2 = str_replace('config.xml', 'config.custom.xml', $file);
$file3 = (file_exists($file2)) ? $file2 : $file;
$f = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ')
.\DIRECTORY_SEPARATOR.'config'.\DIRECTORY_SEPARATOR.'extension-configs'.\DIRECTORY_SEPARATOR.basename(dirname($file)).\DIRECTORY_SEPARATOR.'preferences.json';
$file4 = dirname($f).\DIRECTORY_SEPARATOR.'config.custom.xml';
$file3 = (file_exists($file4)) ? $file4 : $file3;
$WidgetConfig = new \webfan\hps\Widget\Config($file3);
$cnf = [];
$context = \frdl\Context::create($cnf);
$preferences = $WidgetConfig->getPreferences(false);
foreach($preferences as $k => $v){
$context->set($k, $v);
}
$all =json_encode( $context->all(), \JSON_PRETTY_PRINT);
file_put_contents(dirname($file).\DIRECTORY_SEPARATOR.'preferences.json', $all);
if(!is_dir(dirname($f))){
mkdir(dirname($f), 0755, true);
}
file_put_contents($f,$all);
}
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $payload['frdl']->modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.xml';
foreach(glob($glob) as $file){
$file2 = str_replace('config.xml', 'config.custom.xml', $file);
$file3 = (file_exists($file2)) ? $file2 : $file;
$f = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ')
.\DIRECTORY_SEPARATOR.'config'.\DIRECTORY_SEPARATOR.'module-configs'.\DIRECTORY_SEPARATOR.basename(dirname($file)).\DIRECTORY_SEPARATOR.'preferences.json';
$file4 = dirname($f).\DIRECTORY_SEPARATOR.'config.custom.xml';
$file3 = (file_exists($file4)) ? $file4 : $file3;
$WidgetConfig = new \webfan\hps\Widget\Config($file3);
$cnf = [];
$context = \frdl\Context::create($cnf);
$preferences = $WidgetConfig->getPreferences(false);
foreach($preferences as $k => $v){
$context->set($k, $v);
}
$all =json_encode( $context->all(), \JSON_PRETTY_PRINT);
file_put_contents(dirname($file).\DIRECTORY_SEPARATOR.'preferences.json', $all);
if(!is_dir(dirname($f))){
mkdir(dirname($f), 0755, true);
}
file_put_contents($f,$all);
$_d = dirname($file).\DIRECTORY_SEPARATOR.'templates'.\DIRECTORY_SEPARATOR.'custom'.\DIRECTORY_SEPARATOR;
if(!is_dir($_d)){
mkdir($_d, 0755, true);
}
}
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'themes'
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. '*' . \DIRECTORY_SEPARATOR. 'config.xml';
foreach(glob($glob) as $file){
$file2 = str_replace('config.xml', 'config.custom.xml', $file);
$file3 = (file_exists($file2)) ? $file2 : $file;
$f = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ')
.\DIRECTORY_SEPARATOR.'config'.\DIRECTORY_SEPARATOR.'theme-configs'
.\DIRECTORY_SEPARATOR.basename(dirname(dirname($file))).\DIRECTORY_SEPARATOR.basename(dirname($file))
.\DIRECTORY_SEPARATOR.'preferences.json';
$file4 = dirname($f).\DIRECTORY_SEPARATOR.'config.custom.xml';
$file3 = (file_exists($file4)) ? $file4 : $file3;
$WidgetConfig = new \webfan\hps\Widget\Config($file3);
$cnf = [];
$context = \frdl\Context::create($cnf);
$preferences = $WidgetConfig->getPreferences(false);
foreach($preferences as $k => $v){
$context->set($k, $v);
}
$all =json_encode( $context->all(), \JSON_PRETTY_PRINT);
file_put_contents(dirname($file).\DIRECTORY_SEPARATOR.'preferences.json', $all);
if(!is_dir(dirname($f))){
mkdir(dirname($f), 0755, true);
}
file_put_contents($f,$all);
$_d = dirname($file).\DIRECTORY_SEPARATOR.'templates'.\DIRECTORY_SEPARATOR.'custom'.\DIRECTORY_SEPARATOR;
if(!is_dir($_d)){
mkdir($_d, 0755, true);
}
}
$event = new \webfan\hps\Event('generate.write.configs');
$event->setArgument('project_dir', $dir);
$event->setArgument('payload', $payload);
\Webfan\App\EventModule::action('build.config')->emit($event->getName(), $event);
return $payload;
});
});
$container->factory( 'stage.bundlejs:prepare',static function(\UMA\DIC\Container $c) {
return (function($payload){
$c = $payload['container'];
chdir($c->get('compile.deploy_path'));
/*
$f = get('deploy_path').get('dist_dir').'/app/js/index.html';
if(!file_exists($f) ) {
$e = 'ERROR: '.$f. ' does not exist!';
writeln($e);
throw new \Exception($e);
}
writeln(run('cd '.get('deploy_path').' && ' .'yarn'));
*/
/**/
if(is_dir( $c->get('compile.deploy_path'). $c->get('compile.dist_dir'))){
exec('rm -rf '.$c->get('compile.deploy_path'). $c->get('compile.dist_dir').'/'
. " -vvv 2>&1",
$payload['@out'],
$exitcode
);
}
if(is_dir($c->get('compile.deploy_path').'/assets/')){
// writeln(run('cd '.get('deploy_path').' && ' .'rm -rf '.get('deploy_path').'/assets/'));
}
return $payload;
});
});
$container->factory( 'stage.backup:dist',static function(\UMA\DIC\Container $c) {
return (function($payload){
$c = $payload['container'];
chdir($c->get('compile.deploy_path'));
/*
copy -rf ./dist/ ./dist.backup.restore/ || mkdir ./dist/
*/
if(file_exists($c->get('compile.deploy_path').$c->get('compile.dist_backup_dir').$payload['frdl']->jsbase.'index.html') ) {
if(is_dir($c->get('compile.deploy_path').$c->get('compile.dist_backup_dir_prev'))){
exec('rm -r '.$c->get('compile.deploy_path').$c->get('compile.dist_backup_dir_prev').'/'
. " -vvv 2>&1",
$payload['@out'],
$exitcode
);
}
exec('cp -rf '.$c->get('compile.deploy_path').$c->get('compile.dist_backup_dir').'/ '.
$c->get('compile.deploy_path').$c->get('compile.dist_backup_dir_prev')
.'/ || mkdir '.$c->get('compile.deploy_path').$c->get('compile.dist_backup_dir').'/'
. " -vvv 2>&1",
$payload['@out'],
$exitcode
);
}
if(file_exists($c->get('compile.deploy_path'). $c->get('compile.dist_dir').$payload['frdl']->jsbase.'index.html') ) {
if(is_dir($c->get('compile.deploy_path').$c->get('compile.dist_backup_dir'))){
exec('rm -r '.$c->get('compile.deploy_path').$c->get('compile.dist_backup_dir').'/'
. " -vvv 2>&1",
$payload['@out'],
$exitcode
);
}
exec('cp -rf '.$c->get('compile.deploy_path'). $c->get('compile.dist_dir').'/. '.
$c->get('compile.deploy_path').$c->get('compile.dist_backup_dir').'/'
. " -vvv 2>&1",
$payload['@out'],
$exitcode
);
}
return $payload;
});
});
$container->factory( 'stage.bundlejs:action',static function(\UMA\DIC\Container $c) {
return (function($payload){
$c = $payload['container'];
set_time_limit(300);
chdir($c->get('compile.deploy_path'));
$AppShield = $c->get('webfan.app.shield');
$config = $AppShield->config->export();
if(!is_dir($c->get('compile.deploy_path'). $c->get('compile.dist_dir'))){
mkdir($c->get('compile.deploy_path'). $c->get('compile.dist_dir'), 0755, true);
}
exec($config['NODE_PATH'].' '
. dirname($config['FRDLJS_PATH']).'/frdl-bundlejs'
//. .\frdl\webfan\App::God(false)->{'hps.config.value'}('WEBSPACE_ROOT') . 'hello-world/js.frdl.de/bin/frdl'
// getenv('FRDL_PATH')
// .' bundlejs'
.' index.js'
.' '. sprintf('--base %s', $payload['frdl']->ce_baseUrl.ltrim($payload['frdl']->jsbase, '/ '))
.' '. sprintf('--workspace %s', $config['workspace'])
// .' '. sprintf('--dist %s', 'www_root/app/js')
.' '. sprintf('--dist %s', $c->get('compile.deploy_path'). $c->get('compile.dist_dir').rtrim($payload['frdl']->jsbase, '/ '))
.' '. sprintf('--name %s', $payload['frdl']->jsglobal)
.' '. sprintf('--modules %s', $payload['frdl']->modules_dirname)
.' -l'
. " -vvv 2>&1",
// . " 2>&1",
$payload['@out'],
$exitcode
);
// $c->set( 'compile.@out', ['code' => $exitcode, 'out'=>$output]);
// \webfan\hps\patch\WebfanJS::getLibUrl();
$payload['code'] = $exitcode;
// $payload['@out'] += $output;
if(0 !== intval($exitcode)){
return new \Exception(print_r($payload['@out'],true));
}
$payload['@hash'] = $payload['@out'][count($payload['@out'])-1];
// \Webfan::i()->Site->getById($blog['id'], true);
// $js = file_get_contents(\webfan\hps\patch\WebfanJS::getLibUrl());
$g = glob($c->get('compile.deploy_path'). $c->get('compile.dist_dir').$payload['frdl']->jsbase.$payload['frdl']->jsglobal.'~*.'. $payload['@hash'].'.bundle-webpack.js');
//frdlweb~493df0b3.1aec9432eb5260c38c89.bundle-webpack.js
$js = (isset($g[0])) ? file_get_contents($g[0]) : false;
if(!is_dir($payload['frdl']->ce_dir.'cdn/application/webfan/')) {
mkdir($payload['frdl']->ce_dir.'cdn/application/webfan/', 0755, true);
}
if(!is_dir($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ '))) {
mkdir($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ '), 0755, true);
}
if(false!==$js){
file_put_contents($payload['frdl']->ce_dir.'cdn/application/webfan/frdlweb.js', $js);
file_put_contents($c->get('compile.deploy_path'). $c->get('compile.dist_dir').$payload['frdl']->jsbase.'frdlweb.js', $js);
}
$meta = [
'hash' => $payload['@hash'],
'libUrl' => (false===$js || !isset($g[0])) ? false : $payload['frdl']->ce_baseUrl.trim($payload['frdl']->jsbase, '/ ').'/'.basename($g[0]),
];
file_put_contents($c->get('compile.deploy_path'). 'compiled/js.frdl.json', json_encode($meta, \JSON_PRETTY_PRINT));
return $payload;
});
});
$container->factory( 'stage.deploy:frdlweb',static function(\UMA\DIC\Container $c) {
return (function($payload){
$c = $payload['container'];
// chdir($c->get('compile.deploy_path'));
$f = $c->get('compile.deploy_path'). $c->get('compile.dist_dir').''.$payload['frdl']->jsbase.'index.html';
if(!file_exists($f) ) {
$e = 'ERROR: '.$f. ' does not exist!';
$payload['@out'][]=$e;
//return $payload;
return new \Exception($e);
}
/*
copy -rf ./dist/ ./dist.backup.restore/ || mkdir ./dist/
*/
exec('cp -rf '.$c->get('compile.deploy_path'). $c->get('compile.dist_dir').$payload['frdl']->jsbase.'. '
.$payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ').' '
. " -vvv 2>&1",
$payload['@out'],
$exitcode
);
return $payload;
});
});
$container->factory( 'stage.clear:appJs',static function(\UMA\DIC\Container $c) {
return (function($payload){
$c = $payload['container'];
foreach(array_merge(
// glob($c->get('compile.deploy_path')."assets/*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*.*.*.*.*.*"),
glob($payload['frdl']->ce_dir.ltrim($payload['frdl']->jsbase, '/ ')."*.*.*.*.*.*.*.*.*.*.*"))
as $i => $f){
if(
file_exists($f)
&& 'index.html' !== basename($f)
&& !file_exists($c->get('compile.deploy_path'). $c->get('compile.dist_dir').$payload['frdl']->jsbase.basename($f))
&& !file_exists($c->get('compile.deploy_path').$c->get('compile.dist_backup_dir').$payload['frdl']->jsbase.basename($f))
&& !file_exists($c->get('compile.deploy_path').$c->get('compile.dist_backup_dir_prev').$payload['frdl']->jsbase.basename($f))
&& filemtime($f) < time() - 60 * 60){
unlink($f);
}
}
return $payload;
});
});
$container->factory( 'pipeline.bundlejs',static function(\UMA\DIC\Container $c) :PipelineInterface{
$pipelineBuilder = (new PipelineBuilder)
->add(function(string $dir=null, \UMA\DIC\Container $c = null){
$cwd = getcwd();
if(null===$dir){
$dir = getcwd();
}else{
chdir($dir);
}
if(!file_exists('./composer.lock')){
return new \Exception('You have to install the composer dependencies first!');
}
$payload = ['container' => (null===$c) ? \frdl\i::c() : $c,
'@out'=>[],
'cwd'=>$cwd,
'dir' => $dir,
'frdl' => new \webfan\hps\patch\ngScope(json_decode(file_get_contents('frdl.project.json'))),
'composer' => json_decode(file_get_contents('composer.json')),
'errors' => [],
];
$payload['container']->set( 'compile.deploy_path', rtrim($dir, \DIRECTORY_SEPARATOR.'/ ').\DIRECTORY_SEPARATOR);
return $payload;
})
->add($c->get('stage.write.configs'))
->add($c->get( 'stage.backup:dist'))
->add($c->get( 'stage.bundlejs:prepare'))
->add($c->get( 'stage.bundlejs:action'))
->add($c->get( 'stage.deploy:frdlweb'))
->add($c->get( 'stage.clear:appJs'))
// ->add($c->get('stage.compile.frdl-module-scripts'))
->add(function($payload){
chdir($payload['cwd']);
//return $payload['container']->get('compile.@out');
return ['code'=>$payload['code'], 'hash'=> $payload['@hash'], 'out'=>$payload['@out']];
})
;
// Build the pipeline
$pipeline = $pipelineBuilder->build(new InterruptibleProcessor(function($payload){
if($payload instanceof \Exception){
return false;
}
set_time_limit(300);
return true;
}));
return $pipeline;
});
/*
$container->factory( 'stage.autoload', function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
require_once $dir . \DIRECTORY_SEPARATOR. 'vendor' . \DIRECTORY_SEPARATOR .'autoload.php';
return $payload;
});
});
*/
$container->factory( 'stage.autoload',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
//chdir($dir);
$c = $payload['container'];
$AppShield = $c->get('webfan.app.shield');
$AppShield->emitter->emit('project.autoload.force', $dir);
return $payload;
});
});
$container->factory( 'stage.generate.index.web',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$webIndexFile = $payload['frdl']->ce_dir.'index.php';
if(file_exists($webIndexFile)){
$e =
sprintf('One instance of your project is deployed already at `%s`, so you MUST use frdl:deploy command/or the UI-Buttons to `deploy` the project to %s and you green/blue stage!',
$webIndexFile,
$payload['frdl']->ce_dir);
// $payload['errors'][] = $e;
// $payload['@out'][] = $e;
return $payload;
}
$indexFile = rtrim(getcwd(), \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled'. \DIRECTORY_SEPARATOR . 'index.php';
$indexFile01 = rtrim(\webfan\hps\patch\Fs::getRelativePath(realpath($payload['frdl']->ce_dir), dirname($indexFile)), \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'index.php';
$code = <<ce_dir.'index.php', $code);
$code = <<
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
RewriteRule ^.*\\.(restore|backup)\\$ - [F,L,NC]
#ErrorDocument 404 /proxy.404.php
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods: "GET"
Header set Access-Control-Allow-Headers: "X-Requested-With"
#
# Header set Access-Control-Allow-Origin "*"
# Header set Access-Control-Allow-Methods: "GET"
#
#
# Header set Access-Control-Allow-Origin "*"
# Header set Access-Control-Allow-Methods: "GET"
#
#
# Header set Access-Control-Allow-Origin "*"
# Header set Access-Control-Allow-Methods: "GET"
#
# WEEK
Header set Cache-Control "max-age=604800, public"
Header set X-UA-Compatible "IE=edge"
Header set X-UA-Compatible "IE=edge"
ExpiresActive On
ExpiresDefault "access plus 1 week"
ExpiresByType image/jpg "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^.*\\.(jpg|jpeg|png|gif|js|css|swf)\\$ - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
#RewriteRule ^.*\\.(jpg|jpeg|png|gif|js|css|swf)\\$ - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
RewriteRule ^ index.php [L]
PHPCODE;
file_put_contents($payload['frdl']->ce_dir.'.htaccess', $code);
chmod($payload['frdl']->ce_dir.'.htaccess', 0755);
return $payload;
});
});
$container->factory( 'stage.generate.index',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$indexFile02 = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled'. \DIRECTORY_SEPARATOR . 'index.php';
$time = time();
// $modules_dirname = $payload['frdl']->modules_dirname;
/*
require __DIR__ . \\DIRECTORY_SEPARATOR . '..'
. \\DIRECTORY_SEPARATOR .'$modules_dirname'. \\DIRECTORY_SEPARATOR .'frdl.web'.\\DIRECTORY_SEPARATOR .'src'.\\DIRECTORY_SEPARATOR.'classes'.\\DIRECTORY_SEPARATOR.'App.php';
*/
$code = <<handle();
PHPCODE;
if(file_exists($indexFile02))chmod($indexFile02, 0755);
file_put_contents($indexFile02, $code);
if(file_exists($indexFile02))chmod($indexFile02, 0755);
$code = <<Read this documentation]');
}
require __DIR__ . \\DIRECTORY_SEPARATOR .'compiled'. \\DIRECTORY_SEPARATOR . 'index.php';
PHPCODE;
file_put_contents(dirname(dirname($indexFile02)).\DIRECTORY_SEPARATOR.'index.php', $code);
return $payload;
});
});
$container->factory( 'stage.generate.container.build',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$proxiesDir = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled' . \DIRECTORY_SEPARATOR . 'proxies' ;
if(!is_dir($proxiesDir)){
mkdir($proxiesDir, 0755, true);
}
$containerTempFile = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled' . \DIRECTORY_SEPARATOR .'RawCompiledContainer.php';
$containerTempFile_backup = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled' . \DIRECTORY_SEPARATOR .'RawCompiledContainer.backup.php';
$containerFile = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled' . \DIRECTORY_SEPARATOR .'CompiledContainer.php';
$containerFile_backup = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled' . \DIRECTORY_SEPARATOR .'CompiledContainer.backup.php';
$cDir = dirname($containerFile);
foreach(glob($cDir. \DIRECTORY_SEPARATOR."*.*") as $f){
chmod($f, 0755);
}
if(file_exists($containerFile)){
file_put_contents($containerFile_backup, file_get_contents($containerFile));
chmod($containerFile_backup, 0755);
chmod($containerFile, 0755);
unlink($containerFile);
}
// clearstatcache();
if(file_exists($containerTempFile)){
file_put_contents($containerTempFile_backup, file_get_contents($containerTempFile));
chmod($containerTempFile_backup, 0755);
chmod($containerTempFile, 0755);
unlink($containerTempFile);
}
clearstatcache();
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
$extensions_dirname = 'frdl-extensions';
$containerBuilder = new \DI\ContainerBuilder();
/**
string $directory,
string $containerClass = 'CompiledContainer',
string $containerParentClass = CompiledContainer::class
*/
$containerBuilder->enableCompilation(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled', \RawCompiledContainer::class, \DI\CompiledContainer::class);
$containerBuilder->writeProxiesToFile(true, $proxiesDir);
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $extensions_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.core' . \DIRECTORY_SEPARATOR.'*.php';
foreach(glob($glob) as $file){
try{
$containerBuilder->addDefinitions($file);
}catch(\Exception $e){
$payload['errors'][]=$e->getMessage();
}
}
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.core' . \DIRECTORY_SEPARATOR.'*.php';
foreach(glob($glob) as $file){
try{
$containerBuilder->addDefinitions($file);
}catch(\Exception $e){
$payload['errors'][]=$e->getMessage();
}
}
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR
. $modules_dirname . \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config' . \DIRECTORY_SEPARATOR.'*.php';
$glob2 = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR
. 'themes' . \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. '*' . \DIRECTORY_SEPARATOR . 'config' . \DIRECTORY_SEPARATOR.'*.php';
foreach(array_merge(glob($glob), glob($glob2)) as $file){
try{
$containerBuilder->addDefinitions($file);
}catch(\Exception $e){
$payload['errors'][]=$e->getMessage();
}
}
$event = new \webfan\hps\Event('build::before');
$event->setArgument('project_dir', $dir);
$event->setArgument('modules_dirname', $modules_dirname);
$event->setArgumentReference('containerBuilder', $containerBuilder);
\Webfan\App\EventModule::action('compile-container')->emit($event->getName(), $event);
$payload['compiled_container'] = $containerBuilder->build();
$payload['rawContainerFile'] = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled'. \DIRECTORY_SEPARATOR . 'RawCompiledContainer.php';
$payload['containerFile'] = $containerFile;
return $payload;
});
});
$container->factory( 'stage.generate.container.finalize',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$containerFile = $payload['containerFile'];
$RawCompiledContainer = $payload['compiled_container'];
$class = new \Nette\PhpGenerator\ClassType(\CompiledContainer::class);
$class
->setFinal()
->setExtends(\RawCompiledContainer::class)
// ->setType(\compiled\CompiledContainer::class)
;
$file = new \Nette\PhpGenerator\PhpFile;
$file->addComment("This file was auto-generated by frdl/webfan.\nYou should not edit this file manually!"
."\n"
." @time ".time()
."\n"
);
$file->setStrictTypes(); //
$namespace = $file->addNamespace('compiled');
$method = $class->addMethod('getProjectDirectory')
->setBody(<<setStatic();
$modules_dirname = $payload['frdl']->modules_dirname;
$method = $class->addMethod('getModulesDirectory')
->setBody(<<setStatic();
$c = file_get_contents($payload['rawContainerFile']);
$c = str_replace("'".realpath($dir). \DIRECTORY_SEPARATOR . $modules_dirname. \DIRECTORY_SEPARATOR, "\compiled\CompiledContainer::getModulesDirectory().'", $c);
$c = str_replace("'".realpath($dir). \DIRECTORY_SEPARATOR, "\compiled\CompiledContainer::getProjectDirectory().'", $c);
file_put_contents($payload['rawContainerFile'], $c);
$event = new \webfan\hps\Event('build::final');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('classGenerator', $class);
$event->setArgumentReference('container', $payload['compiled_container']);
$event->setArgumentReference('rawContainerFile', $payload['rawContainerFile']);
$event->setArgumentReference('containerFile', $containerFile);
$event->setArgumentReference('file', $file);
$event->setArgumentReference('namespace', $namespace);
\Webfan\App\EventModule::action('compile-container')->emit($event->getName(), $event);
$namespace->add($class);
$code = (new \Nette\PhpGenerator\PsrPrinter)->printFile($file);
file_put_contents($containerFile, $code);
$payload['compiled_container'] = new \compiled\CompiledContainer();
return $payload;
});
});
$container->factory( 'stage.generate.misc-autoloader',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
try{
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
$loader = new \Nette\Loaders\RobotLoader;
// Add directories for RobotLoader to index
// $loader->addDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'vendor-software' . \DIRECTORY_SEPARATOR);
// $loader->addDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'user-modules' . \DIRECTORY_SEPARATOR);
// $loader->addDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'compiled' . \DIRECTORY_SEPARATOR.'classes' . \DIRECTORY_SEPARATOR);
$cachedir = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'cache' . \DIRECTORY_SEPARATOR.'classes' . \DIRECTORY_SEPARATOR;
if(!is_dir($cachedir)){
mkdir($cachedir, 0755, true);
}
chmod($cachedir, 0755);
\webfan\hps\patch\Fs::pruneDir($cachedir, 0, true, true);
// And set caching to the 'temp' directory
$loader->setTempDirectory($cachedir);
/*
$loader->addDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory($cachedir);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'cache' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'vendor' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.$modules_dirname. \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'backup' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'backup.restore' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'themes' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'custom' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'config' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'data' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'dist' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'dist.backup.restore' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'dist.backup.restore~' . \DIRECTORY_SEPARATOR);
// $loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'compiled' . \DIRECTORY_SEPARATOR.'classes' . \DIRECTORY_SEPARATOR);
$loader->excludeDirectory(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'compiled' . \DIRECTORY_SEPARATOR);
*/
foreach([
rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'lib' . \DIRECTORY_SEPARATOR,
// rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'user-modules' . \DIRECTORY_SEPARATOR,
// rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'vendor-software' . \DIRECTORY_SEPARATOR,
rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'3p' . \DIRECTORY_SEPARATOR,
rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'app' . \DIRECTORY_SEPARATOR.'Entities' . \DIRECTORY_SEPARATOR,
rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'app' . \DIRECTORY_SEPARATOR.'Repositories' . \DIRECTORY_SEPARATOR,
// rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'src' . \DIRECTORY_SEPARATOR,
] as $sourceDir){
if(!is_dir($sourceDir)){
mkdir($sourceDir, 0755, true);
}
chmod($sourceDir, 0755);
$loader->addDirectory($sourceDir);
}
$event = new \webfan\hps\Event('generate.autoloader.classmaps');
$event->setArgument('project_dir', $dir);
$event->setArgument('payload', $payload);
$event->setArgumentReference('ClassMapsLoader', $loader);
\Webfan\App\EventModule::action('build.autoloader')->emit($event->getName(), $event);
$loader->refresh() ;
$loader->rebuild() ;
}catch(\Exception $e){
return $e;
}
return $payload;
});
});
$container->factory( 'stage.generate.class.Webfan\App\Shield',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$AppShield = $payload['container']->get('webfan.app.shield');
$stub = $AppShield->getStub();
$class = get_class($AppShield);
$ClassFile = $stub->get_file($stub->document, '$DIR_PSR4/'.str_replace('\\', '/', $class).'.php', 'class '.$class);
$destFile = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR.'lib' . \DIRECTORY_SEPARATOR . str_replace('\\', \DIRECTORY_SEPARATOR, $class).'.php';
if(!is_dir(dirname($destFile))){
mkdir(dirname($destFile), 0755, true);
}
file_put_contents($destFile, $ClassFile->getBody());
return $payload;
});
});
$container->factory( 'stage.generate.class.compiled\project',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$project = json_decode(file_get_contents('frdl.project.json'));
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $payload['frdl']->modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.xml';
$modules = [];
foreach(glob($glob) as $file){
$m = basename(dirname($file));
$modules[$m] = [
'status' => 'unknown',
];
}
$file = new \Nette\PhpGenerator\PhpFile;
$file->addComment("This file was auto-generated by frdl/webfan.\nYou should not edit this file manually!"
."\n"
." @time ".time()
."\n"
);
$file->setStrictTypes(); // adds declare(strict_types=1)
$namespace = $file->addNamespace('compiled');
$class = $namespace->addClass('project');
$class->addComment("Frdlweb project");
$props = [];
foreach($project as $k => $v){
if(is_object($v)){
$v=(array)$v;
}
if(is_array($v)){
foreach($v as $_k => $_v){
if(is_object($_v)){
$v[$_k]=(array)$_v;
}
}
}
$class->addProperty($k, $v)
->setVisibility('private')
;
$props[] = $k;
}
$class->addProperty('dir', realpath($dir))
->setVisibility('private')
;
$props[] = 'dir';
$class->addProperty('modules', $modules)
->setVisibility('private')
;
$props[] = 'modules';
$method = $class->addMethod('__get')
->setBody(<<ce_baseUrl;
}
return (isset(\$this->{\$name})) ? \$this->{\$name} : null;
PHPCODE
)
;
$method->addParameter('name')
->setTypeHint('string')
;
$props[] = 'libUrl';
$props[] = 'baseUrl';
$class->addConstant('PROPERTIES', $props);
$classfile = './compiled'.\DIRECTORY_SEPARATOR.'project.php';
$event = new \webfan\hps\Event('build::project.class');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('class', $class);
$event->setArgument('payload', $payload);
$event->setArgumentReference('PhpFile', $file);
$event->setArgumentReference('namespace', $namespace);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
$code = (new \Nette\PhpGenerator\PsrPrinter)->printFile($file);
$dirToken = realpath($dir);
$tok = "private \$dir = '$dirToken';";
$code = str_replace($tok, "private \$dir = __DIR__ . \DIRECTORY_SEPARATOR .'..'. \DIRECTORY_SEPARATOR;", $code);
file_put_contents($dir.\DIRECTORY_SEPARATOR.'compiled'.\DIRECTORY_SEPARATOR.'project.php', $code);
return $payload;
});
});
$container->factory( 'stage.write.project.json',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$time = time();
$configfile = $dir.\DIRECTORY_SEPARATOR.'frdl.project.json';
$project = json_decode(file_get_contents($configfile));
$project->config->lt->compiled[0] = $time;
$project->config->online = 1;
$project->config->lt->deployed = $time;
$project->hash = sha1(json_encode($project->config, \JSON_PRETTY_PRINT));
$event = new \webfan\hps\Event('build::project.json');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('project', $project);
$event->setArgument('payload', $payload);
$event->setArgumentReference('configfile', $configfile);
\Webfan\App\EventModule::action('build.config')->emit($event->getName(), $event);
file_put_contents($configfile, json_encode($project));
return $payload;
});
});
$container->factory( 'stage.prune.cache.templates',static function(\UMA\DIC\Container $c) {
return (function($payload){
\webfan\hps\patch\Fs::pruneDir($payload['compiled_container']->get('twig.cache.dir'), 0, true);
return $payload;
});
});
$container->factory( 'stage.compile.events',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
// chdir($dir);
$compiledEventsDir = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR .'compiled'. \DIRECTORY_SEPARATOR .'~events'. \DIRECTORY_SEPARATOR;
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
// $containerBuilder->set('routes', []);
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.events' . \DIRECTORY_SEPARATOR.'*.php';
$actions = [];
\webfan\hps\patch\Fs::pruneDir( $compiledEventsDir, 0, true);
foreach(glob($glob) as $file){
$events = require $file;
foreach($events as $event){
if(!isset($event[3])){
$event[3] = null;
}
if(!isset($event[4])){
$event[4] = false;
}
try{
if(!isset($actions[$event[0]])){
$actions[$event[0]] = [];
\Webfan\App\EventModule::unregister($event[0]);
}
// $indexFile01 = rtrim(\webfan\hps\patch\Fs::getRelativePath(realpath($payload['frdl']->ce_dir), dirname($indexFile)), \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'index.php';
if(!isset($event[1], $actions[$event[0]][$event[1]])){
$actions[$event[0]][$event[1]] = [
'file' => \webfan\hps\patch\Fs::getRelativePath($dir, \Webfan\App\EventModule::action($event[0])->filepath()),
'dispatchers' => [],
];
}
if(!isset($actions[$event[0]][$event[1]]['dispatchers'][$file])) {
$actions[$event[0]][$event[1]]['dispatchers'][$file] = 0;
}
$actions[$event[0]][$event[1]]['dispatchers'][$file]++;
\Webfan\App\EventModule::register($event[0], $event[1], $event[2], $event[3], $event[4]);
}catch(\Exception $e){
$payload['errors'][]=$e->getMessage();
}
}
}
$metafile = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'config'
. \DIRECTORY_SEPARATOR . 'meta' . \DIRECTORY_SEPARATOR. 'lists' . \DIRECTORY_SEPARATOR.'compiled-events.json';
if(!is_dir(dirname($metafile))){
mkdir(dirname($metafile), 0755, true);
}
file_put_contents($metafile, json_encode($actions, \JSON_PRETTY_PRINT));
return $payload;
});
});
$container->factory( 'stage.compile.frdl-module-scripts',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
// chdir($dir);
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
// $containerBuilder->set('routes', []);
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.javascripts'. \DIRECTORY_SEPARATOR. 'scripts.js';
$glob2 = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.javascripts'. \DIRECTORY_SEPARATOR. 'scripts.php';
$event = new \webfan\hps\Event('frdl-module-scripts::before');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('container', $payload['compiled_container']);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
// $appJs = '';
// $scriptsJs = '';
$sHeader = file_get_contents( rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'scripts.header.js');
file_put_contents(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'scripts.js', \webfan\hps\patch\Fs::compress($sHeader));
foreach(array_merge(glob($glob), glob($glob2)) as $file){
$moduleDir =dirname( dirname($file));
$WidgetConfig = new \webfan\hps\Widget\Config($moduleDir.\DIRECTORY_SEPARATOR.'config.xml');
// $preferences = $WidgetConfig->getPreferences(false);
$composerJson = json_decode(file_get_contents($moduleDir.\DIRECTORY_SEPARATOR.'composer.json'));
$event = new \webfan\hps\Event('frdl-module-scripts:scripts');
$event->setArgument('name', $composerJson->name);
$event->setArgument('module_dir', $moduleDir);
$event->setArgument('project_dir', $dir);
// $event->setArgumentReference('payload', $payload);
// $event->setArgument('payload', $payload);
// $event->setArgumentReference('WidgetConfig', $WidgetConfig);
$event->setArgument('WidgetConfig', $WidgetConfig);
// $event->setArgument('preferences', $preferences);
$event->setArgument('container', $payload['compiled_container']);
// $event->setArgument('AppShield', $payload['container']->get('webfan.app.shield'));
if('scripts.php' === basename($file)){
$event->setResult(require($file));
}else{
$event->setResult(file_get_contents($file));
}
$event->setArgument('composer', $composerJson);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
file_put_contents(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'scripts.js', \webfan\hps\patch\Fs::compress($event->getResult()), \FILE_APPEND);
//$scriptsJs.=$event->getResult();
}
$sHeader = file_get_contents( rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'app.header.js');
file_put_contents(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'app.js', \webfan\hps\patch\Fs::compress($sHeader));
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.javascripts'. \DIRECTORY_SEPARATOR. 'app.js';
$glob2 = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'config.javascripts'. \DIRECTORY_SEPARATOR. 'app.php';
foreach(array_merge(glob($glob), glob($glob2)) as $file){
$moduleDir =dirname( dirname($file));
$WidgetConfig = new \webfan\hps\Widget\Config($moduleDir.\DIRECTORY_SEPARATOR.'config.xml');
// $preferences = $WidgetConfig->getPreferences(false);
$composerJson = json_decode(file_get_contents($moduleDir.\DIRECTORY_SEPARATOR.'composer.json'));
$event = new \webfan\hps\Event('frdl-module-scripts:app');
$event->setArgument('name', $composerJson->name);
$event->setArgument('module_dir', $moduleDir);
$event->setArgument('project_dir', $dir);
// $event->setArgumentReference('payload', $payload);
// $event->setArgument('payload', $payload);
// $event->setArgumentReference('WidgetConfig', $WidgetConfig);
$event->setArgument('WidgetConfig', $WidgetConfig);
// $event->setArgument('preferences', $preferences);
$event->setArgument('container', $payload['compiled_container']);
// $event->setArgument('AppShield', $payload['container']->get('webfan.app.shield'));
if('app.php' === basename($file)){
$event->setResult(require($file));
}else{
$event->setResult(file_get_contents($file));
}
$event->setArgument('composer', $composerJson);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
file_put_contents(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'app.js',\webfan\hps\patch\Fs::compress( $event->getResult() ), \FILE_APPEND);
//$scriptsJs.=$event->getResult();
}
$sFooter = file_get_contents( rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'app.footer.js');
file_put_contents(rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . 'frdl.web' . \DIRECTORY_SEPARATOR. 'public'. \DIRECTORY_SEPARATOR. 'app.js', \webfan\hps\patch\Fs::compress($sFooter), \FILE_APPEND);
$event = new \webfan\hps\Event('frdl-module-scripts::after');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('container', $payload['compiled_container']);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
return $payload;
});
});
$container->factory( 'stage.compile.frdl-modules',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
// chdir($dir);
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
// $containerBuilder->set('routes', []);
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'composer.json';
$event = new \webfan\hps\Event('frdl-modules::before');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('container', $payload['compiled_container']);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
foreach(glob($glob) as $file){
$moduleDir = dirname($file);
$WidgetConfig = new \webfan\hps\Widget\Config($moduleDir.\DIRECTORY_SEPARATOR.'config.xml');
// $preferences = $WidgetConfig->getPreferences(false);
$composerJson = json_decode(file_get_contents($moduleDir.\DIRECTORY_SEPARATOR.'composer.json'));
$event = new \webfan\hps\Event('frdl-module');
$event->setArgument('name', $composerJson->name);
$event->setArgument('module_dir', $moduleDir);
$event->setArgument('project_dir', $dir);
// $event->setArgumentReference('payload', $payload);
// $event->setArgument('payload', $payload);
// $event->setArgumentReference('WidgetConfig', $WidgetConfig);
$event->setArgument('WidgetConfig', $WidgetConfig);
// $event->setArgument('preferences', $preferences);
$event->setArgument('container', $payload['compiled_container']);
// $event->setArgument('AppShield', $payload['container']->get('webfan.app.shield'));
$event->setArgument('composer', $composerJson);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
}
$event = new \webfan\hps\Event('frdl-modules::after');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('container', $payload['compiled_container']);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
return $payload;
});
});
$container->factory( 'stage.compile.db.modules',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
// chdir($dir);
$modules_dirname = (is_string($payload)) ? 'modules' : $payload['frdl']->modules_dirname;
// $containerBuilder->set('routes', []);
$glob = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . $modules_dirname
. \DIRECTORY_SEPARATOR . '*' . \DIRECTORY_SEPARATOR. 'composer.json';
foreach(glob($glob) as $file){
$moduleDir = dirname($file);
$WidgetConfig = new \webfan\hps\Widget\Config($moduleDir.\DIRECTORY_SEPARATOR.'config.xml');
// $preferences = $WidgetConfig->getPreferences(false);
// $composerJson = json_decode(file_get_contents($moduleDir.\DIRECTORY_SEPARATOR.'composer.json'));
$composerJson = json_decode(file_get_contents($file));
if(!is_object($composerJson) && !is_array($composerJson) ){
throw new \Exception('Error reading '.$file.': \n'.gettype($composerJson));
}
$event = new \webfan\hps\Event('db.module');
$event->setArgument('name', $composerJson->name);
$event->setArgument('module_dir', $moduleDir);
$event->setArgument('project_dir', $dir);
$event->setArgument('WidgetConfig', $WidgetConfig);
$event->setArgument('container', $payload['compiled_container']);
$event->setArgument('composer', $composerJson);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
}
return $payload;
});
});
$container->factory( 'stage.compile.db',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
// chdir($dir);
$event = new \webfan\hps\Event('db');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('container', $payload['compiled_container']);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
return $payload;
});
});
$container->factory( 'stage.compile.after',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = $payload['dir'];
// chdir($dir);
$event = new \webfan\hps\Event('after');
$event->setArgument('project_dir', $dir);
$event->setArgumentReference('container', $payload['compiled_container']);
\Webfan\App\EventModule::action('compile')->emit($event->getName(), $event);
return $payload;
});
});
$container->set( PipelineBuilderInterface::class.'#pipeline.compile',static function(\UMA\DIC\Container $c):PipelineBuilderInterface {
$pipelineBuilder = (new PipelineBuilder)
->add(function(string $dir=null, \UMA\DIC\Container $c = null, $params=null){
$cwd = getcwd();
if(null===$dir){
$dir = getcwd();
}else{
chdir($dir);
}
if(!file_exists('./composer.lock')){
return new \Exception('You have to install the composer dependencies first!');
}
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'cache')){
mkdir($dir.\DIRECTORY_SEPARATOR.'cache', 0755, true);
}
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'cache'.\DIRECTORY_SEPARATOR.'templates')){
mkdir($dir.\DIRECTORY_SEPARATOR.'cache'.\DIRECTORY_SEPARATOR.'templates', 0755, true);
}
/*
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'vendor-software')){
mkdir($dir.\DIRECTORY_SEPARATOR.'vendor-software', 0755, true);
}
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'user-modules')){
mkdir($dir.\DIRECTORY_SEPARATOR.'user-modules', 0755, true);
}
*/
if(is_dir($dir.\DIRECTORY_SEPARATOR.'vendor-software')){
if(0===count(glob($dir.\DIRECTORY_SEPARATOR.'vendor-software'.\DIRECTORY_SEPARATOR."**")) ){
rmdir($dir.\DIRECTORY_SEPARATOR.'vendor-software');
}
}
if(is_dir($dir.\DIRECTORY_SEPARATOR.'user-modules')){
if(0===count(glob($dir.\DIRECTORY_SEPARATOR.'user-modules'.\DIRECTORY_SEPARATOR."**")) ){
rmdir($dir.\DIRECTORY_SEPARATOR.'user-modules');
}
}
$frdl = json_decode(file_get_contents('frdl.project.json'));
$_host = (isset($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'];
$frdl->ce_baseUrl = str_replace('${HOST}', $_host, $frdl->ce_baseUrl);
file_put_contents('frdl.project.json', json_encode($frdl, \JSON_PRETTY_PRINT));
$frdl = json_decode(file_get_contents('frdl.project.json'));
return [
'dir' => $dir,
'params'=>$params,
'cwd'=>$cwd,
'@out'=>[],
'frdl' => json_decode(file_get_contents('frdl.project.json')),
'composer' => json_decode(file_get_contents('composer.json')),
'errors' => [],
'container' => (null===$c) ? \frdl\i::c() : $c,
];
})
->add($c->get('stage.autoload'))
->add($c->get('stage.generate.class.Webfan\App\Shield'))
->add($c->get('stage.compile.events'))
->add($c->get('stage.write.configs'))
->add($c->get('stage.generate.container.build'))
->add($c->get('stage.generate.misc-autoloader'))
->add($c->get('stage.generate.index'))
->add($c->get('stage.write.project.json'))
->add($c->get('stage.generate.class.compiled\project'))
->add($c->get('stage.compile.db'))
->add($c->get('stage.compile.db.modules'))
->add($c->get('stage.compile.frdl-modules'))
->add($c->get('stage.compile.frdl-module-scripts'))
->add($c->get('stage.generate.index.web'))
->add($c->get('stage.generate.container.finalize'))
->add($c->get('stage.compile.after'))
->add($c->get('stage.prune.cache.templates'))
->add(function($payload){
chdir($payload['cwd']);
return $payload;
})
;
return $pipelineBuilder;
});
$container->factory( 'pipeline.compile',static function(\UMA\DIC\Container $c):PipelineInterface {
return $c->get(PipelineBuilderInterface::class.'#pipeline.compile')
->build($c->get(InterruptibleProcessor::class));
});
$container->factory( InterruptibleProcessor::class,static function(\UMA\DIC\Container $c):ProcessorInterface {
return $c->get(InterruptibleProcessor::class.'#level-0');
});
$container->factory( InterruptibleProcessor::class.'#level-0',static function(\UMA\DIC\Container $c):ProcessorInterface {
return new InterruptibleProcessor(function($payload):bool{
if($payload instanceof \Exception){
return false;
}
set_time_limit(300);
return true;
});
});
$container->factory( 'pipeline.compile#level-2',static function(\UMA\DIC\Container $c):PipelineInterface {
throw new \Exception('This will be available in future versions...');
});
$container->factory( 'pipeline.compile#dev-experimental',static function(\UMA\DIC\Container $c):PipelineInterface {
return $c->get(CompilePipelineBuilder::class)
->build($c->get(CompilePipelineProcessor::class));
});
$container->factory( CompilePipelineProcessor::class,static function(\UMA\DIC\Container $c):ProcessorInterface {
return new CompilePipelineProcessor(function($payload):bool{
if($payload instanceof \Exception){
return false;
}
set_time_limit(300);
return true;
});
});
$container->factory( 'stage.generate.index#level-2',static function(\UMA\DIC\Container $c) {
return (function($payload){
$dir = (is_string($payload)) ? $payload : $payload['dir'];
chdir($dir);
$indexFile02 = rtrim($dir, \DIRECTORY_SEPARATOR.'/ ') . \DIRECTORY_SEPARATOR . 'compiled'. \DIRECTORY_SEPARATOR . 'index.php';
$time = time();
// $modules_dirname = $payload['frdl']->modules_dirname;
/*
require __DIR__ . \\DIRECTORY_SEPARATOR . '..'
. \\DIRECTORY_SEPARATOR .'$modules_dirname'. \\DIRECTORY_SEPARATOR .'frdl.web'.\\DIRECTORY_SEPARATOR .'src'.\\DIRECTORY_SEPARATOR.'classes'.\\DIRECTORY_SEPARATOR.'App.php';
*/
$code = <<handle();
PHPCODE;
if(!is_dir(dirname($indexFile02)))mkdir(dirname($indexFile02), 0755, true);
if(file_exists($indexFile02))chmod($indexFile02, 0755);
file_put_contents($indexFile02, $code);
if(file_exists($indexFile02))chmod($indexFile02, 0755);
$code = <<Read this documentation]');
}
require __DIR__ . \\DIRECTORY_SEPARATOR .'compiled'. \\DIRECTORY_SEPARATOR . 'index.php';
PHPCODE;
file_put_contents(dirname(dirname($indexFile02)).\DIRECTORY_SEPARATOR.'index.php', $code);
return $payload;
});
});
$container->factory( CompilePipelineBuilder::class,static function(\UMA\DIC\Container $c):PipelineBuilderInterface {
$pipelineBuilder = (new CompilePipelineBuilder)
->add(function(string $dir=null, \UMA\DIC\Container $c = null, $params=null){
$cwd = getcwd();
if(null===$dir){
$dir = getcwd();
}else{
chdir($dir);
}
if(!file_exists('./composer.lock')){
return new \Exception('You have to install the composer dependencies first!');
}
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'cache')){
mkdir($dir.\DIRECTORY_SEPARATOR.'cache', 0755, true);
}
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'cache'.\DIRECTORY_SEPARATOR.'templates')){
mkdir($dir.\DIRECTORY_SEPARATOR.'cache'.\DIRECTORY_SEPARATOR.'templates', 0755, true);
}
/*
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'vendor-software')){
mkdir($dir.\DIRECTORY_SEPARATOR.'vendor-software', 0755, true);
}
if(!is_dir($dir.\DIRECTORY_SEPARATOR.'user-modules')){
mkdir($dir.\DIRECTORY_SEPARATOR.'user-modules', 0755, true);
}
*/
if(is_dir($dir.\DIRECTORY_SEPARATOR.'vendor-software')){
if(0===count(glob($dir.\DIRECTORY_SEPARATOR.'vendor-software'.\DIRECTORY_SEPARATOR."**")) ){
rmdir($dir.\DIRECTORY_SEPARATOR.'vendor-software');
}
}
if(is_dir($dir.\DIRECTORY_SEPARATOR.'user-modules')){
if(0===count(glob($dir.\DIRECTORY_SEPARATOR.'user-modules'.\DIRECTORY_SEPARATOR."**")) ){
rmdir($dir.\DIRECTORY_SEPARATOR.'user-modules');
}
}
$frdl = json_decode(file_get_contents('frdl.project.json'));
$_host = (isset($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'];
$frdl->ce_baseUrl = str_replace('${HOST}', $_host, $frdl->ce_baseUrl);
$frdl->ce_dir = $dir.\DIRECTORY_SEPARATOR.'web';
if(!is_dir($frdl->ce_dir)){
mkdir($frdl->ce_dir, 0755, true);
}
file_put_contents('frdl.project.json', json_encode($frdl, \JSON_PRETTY_PRINT));
$frdl = json_decode(file_get_contents('frdl.project.json'));
return [
'dir' => $dir,
'params'=>$params,
'cwd'=>$cwd,
'@out'=>[],
'frdl' => $frdl,
'composer' => json_decode(file_get_contents('composer.json')),
'errors' => [],
'container' => (null===$c) ? \frdl\i::c() : $c,
];
})
->add($c->get('stage.autoload'))
->add($c->get('stage.generate.class.Webfan\App\Shield'))
->add($c->get('stage.compile.events'))
->add($c->get('stage.write.configs'))
->add($c->get('stage.generate.container.build'))
->add($c->get('stage.generate.misc-autoloader'))
->add($c->get('stage.generate.index#level-2'))
->add($c->get('stage.write.project.json'))
->add($c->get('stage.generate.class.compiled\project'))
->add($c->get('stage.compile.db'))
->add($c->get('stage.compile.db.modules'))
->add($c->get('stage.compile.frdl-modules'))
->add($c->get('stage.compile.frdl-module-scripts'))
->add($c->get('stage.generate.index.web'))
->add($c->get('stage.generate.container.finalize'))
->add($c->get('stage.compile.after'))
->add($c->get('stage.prune.cache.templates'))
->add(function($payload){
chdir($payload['cwd']);
return $payload;
})
;
return $pipelineBuilder;
});
}
}
__halt_compiler();----SIGNATURE:----O6cJLiHHuttVPqs3fPpRQ4T4sXTAIFSAHi60bLM4xsH2qhPb6jg/VCDzva9E7YSp+KgpjXFq3Hn1cz/DE3aXEJNSyKtHE7q6893GAi2/0TX6PquymuLB1roRlyAbsuIglKmKA6Y92Ko6CBqcBVh5sZHRU11PAF21ERW+4b9J/KSgwp22mLU+0MBnxCTaqhbAdRd/iIsULP1xSn9DYFdjZbC5Uuk1G1pk41BTFL7hIF+MeN9yJB2p78ivx8ttIXfVDkaemd+JJd2BmppBjesOSD7zuJ04aAC1//hVcQQpYsue+u+/ApWrSuGhLiOnxweeKxTcHu93OwD6JEFVeNjguJnNASnl9vPtGjyoX2leAGRskgLXcdVrTo0sEbLzpM7ZfFaGrO+g2LqDVAkIioSdGvwmrWPtbTawgxTfsDo4fbZC/O4Qj2jc6EFraS4hsKeF/Ea242uSSSJMEI4YC60qy+Oxr13bq5LaT9BW85sMSdnJ+yZAiYZgwgN5egv0J9rqW7E39Nn/4UtFXXAOcqjQInEpId85bwkFsQNsZZRFivNVj53xG+W0qbDd2r6dagpgGZ/RXXvqJ8tQ4CBRvHsIzg/ZuyNx+TQD7QJbCJyQZtPy3UxoRo6N1VktflZW6LIspmPSsXCSGg7yDLEjMCtM2N3JgmHIzm8HCLHCIq518Ow=----ATTACHMENT:----NDQ2NzA2OTk2NzIxNTYwMyA4MTUyNTAzMDAxNzQxNTA0IDU3Mjc0ODExOTcwNTI1NzQ=