diff --git a/src/gammaphp b/src/gammaphp new file mode 100755 index 0000000..afac432 --- /dev/null +++ b/src/gammaphp @@ -0,0 +1,192 @@ +#!/usr/bin/env php + $a){ + if(preg_match( '@\-\-(.+)=(.+)@' , $a, $m)) + $opts[$m[1]] = $m[2]; + elseif(preg_match( '@\-\-(.+)@' , $a, $m)) + $opts[$m[1]] = true; + elseif(preg_match( '@\-(.+)=(.+)@', $a, $m)) + $opts[$m[1]] = $m[2]; + elseif(preg_match( '@\-(.+)@' , $a, $m)) + $opts[$m[1]] = true; + else + $opts[$k] = $a; + } + return $opts; +} +$opt = []; +$opt =get_opts(); +$sitedir=$opt["source"]??($opt["s"]??getcwd()); +$sitedir = str_starts_with($sitedir, "/")?$sitedir:getcwd()."/".$sitedir; +if (isset($argv[1])) { + switch ($argv[1]) { + case "new": + newsite(); + break; + case "help": + help(); + break; + default: + break; + } +} +function newsite() +{ + global $sitedir; + chdir($sitedir); + $template_url = "https://github.com/GZod01/template_gammaphp.git"; + exec("git clone $template_url -o template_gammaphp"); + exec("mv template_gammaphp/* ./"); + exec("rm -f -r template_gammaphp"); + $files = glob(str_replace(['[', ']', "\f[", "\f]"], ["\f[", "\f]", '[[]', '[]]'], ($sitedir)) . '*'); + foreach ($files as $f) { + if (!is_dir($f . "/")) { + file_put_contents($f,str_replace("{{{{SITEPATH}}}}",$sitedir,file_get_contents($f))); + } + } + die(0); +} +function help() +{ + global $sitedir; + echo $sitedir; + die(); + +} + + +$required_files_or_dir = [ + "content", "config.gzodp", "templates", +]; +$endmessage = "Aucun site trouvé, veuillez utiliser la commande gammaphp new pour créer un nouveau site ou réparer le site si vous êtes sur qu'un site est existant dans le dossier $sitedir.\n +Entrez gammaphp help pour des infos sur cette commande."; +foreach ($required_files_or_dir as $f) { + if (!file_exists($sitedir . "/" . $f)) { + echo ($endmessage); + die(255); + } +} +die($sitedir); +include $sitedir . "/config.gzodp"; +$reallybasepath = site("contentpath"); +$publishpath = site("publishpath"); +deleteDir($publishpath); +mkdir($publishpath); +createFiles($reallybasepath); +function deleteDir($dir) +{ + $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS); + $files = new RecursiveIteratorIterator($it, + RecursiveIteratorIterator::CHILD_FIRST); + foreach ($files as $file) { + if ($file->isDir()) { + rmdir($file->getRealPath()); + } else { + unlink($file->getRealPath()); + } + } + rmdir($dir); +} +function getYaml($filecontent) +{ + $parser = new Mni\FrontYAML\Parser(); + + $document = $parser->parse($filecontent); + + $yaml = $document->getYAML(); + // Trouver la fin du Front Matter YAML + $endOfFrontMatter = (strlen($filecontent) > 4 and strpos($filecontent, "---", 4) !== false) ? (strpos($filecontent, '---', 4) + 3) : 0; + + // Retirer le Front Matter YAML du contenu Markdown + $WithoutFrontMatter = substr($filecontent, $endOfFrontMatter); + + // Supprimer les espaces vides et retours à la ligne supplémentaires au début du contenu + $WithoutFrontMatter = ltrim($WithoutFrontMatter); + return [$yaml, $WithoutFrontMatter]; +} +function getFiles($dir) +{ + return glob(str_replace(['[', ']', "\f[", "\f]"], ["\f[", "\f]", '[[]', '[]]'], ($dir)) . '*'); +} +function stripPathStart($path) +{ + global $reallybasepath; + if (strpos($path, $reallybasepath) === 0) { + return substr($path, strlen($reallybasepath)); + } +} + +function createPage($path) +{ + global $publishpath; + $endpath = stripPathStart($path); + $filecontent = file_get_contents($path); + $getyaml = getYaml($filecontent); + $yaml = $getyaml[0]; + $content = $getyaml[1]; + if (isset($yaml["static"]) and $yaml["static"] === true) { + file_put_contents($publishpath . $endpath, $content); + return false; + } + $title = isset($yaml["title"]) ? $yaml["title"] : site("title"); + $secur = isset($yaml["secur"]) ? $yaml["secur"] : false; + $templatepath = site("templatepath"); + $head = file_get_contents($templatepath . "head.gzodp"); + $formattedhead = str_replace("{{{title}}}", $title, $head); + $header = file_get_contents($templatepath . "header.gzodp"); + $footer = file_get_contents($templatepath . "footer.gzodp"); + $pagetemplate = file_get_contents($templatepath . "page.gzodp"); + $sitedir = site('basedir'); + $includesession = isset($yaml["custom_include_session"]) ? $yaml["custom_include_session"] : "include '$sitedir/public/auth_session.gzodp';"; + $session = $secur === true ? $includesession : ""; + $nssession = ($secur === false) ? "session_start();" : ""; + $nssession = (isset($yaml["phpstatic"]) and $yaml["phpstatic"] == true) ? "" : $nssession; + $phpstart = str_replace(["#{{{session}}}", "#{{{notsecursession}}}"], [$session, $nssession], file_get_contents($templatepath . "phpstart.gzodp")); + $phpend = file_get_contents($templatepath . "phpend.gzodp"); + $pageformatted = str_replace(["{{{head}}}", "{{{header}}}", "{{{footer}}}", "{{{content}}}", "{{{phpstart}}}", "{{{phpend}}}"], [$formattedhead, $header, $footer, $content, $phpstart, $phpend], $pagetemplate); + file_put_contents($publishpath . $endpath, $pageformatted); + if (isset($yaml["dobble"])) { + file_put_contents($publishpath . $yaml["dobble"], $content); + } + return true; +} +function createFile($path) +{ + global $publishpath; + $endpath = stripPathStart($path); + $pageformatted = file_get_contents($path); + file_put_contents($publishpath . $endpath, $pageformatted); +} + +function createFiles($basepath, $staticmode = false) +{ + global $publishpath; + $files = getFiles($basepath); + $sitemapstart = ' + '; + $sitemapend = ''; + $sitemap = ""; + foreach ($files as $f) { + echo $f . "\n"; + echo is_dir($f) ? "true" : "false"; + echo "\n"; + if (is_dir($f . "/")) { + mkdir($publishpath . stripPathStart($f)); + createFiles($f . "/"); + } else { + $sitemap .= "" . htmlspecialchars(site('baseurl')) . htmlspecialchars(stripPathStart($f)) . ""; + $pathinfo = pathinfo($f); + $ext = $pathinfo["extension"]; + if ($ext === "gzodp" and !$staticmode) { + createPage($f); + } else { + createFile($f); + } + } + } + $finalsitemap = $sitemapstart . $sitemap . $sitemapend; + file_put_contents($publishpath . "sitemap.xml", $finalsitemap); +} +