/**
  * Prints a pane from this page
  * @param string $paneId
  */
 public function printPane($paneId)
 {
     // If we are going to show an export
     if (ModulaiseController::$buildMode == SHOW_EXPORT) {
         switch ($paneId) {
             case PANE_JS_HEAD:
                 echo ModulaiseUtils::getJsImportStatement(FOLDER_COMPILED . "/js/" . FILENAME_JSHEAD_COMPILED);
                 return true;
             case PANE_JS_FOOT:
                 echo ModulaiseUtils::getJsImportStatement(FOLDER_COMPILED . "/js/" . FILENAME_JSFOOT_COMPILED);
                 return true;
             case PANE_CSS:
                 echo ModulaiseUtils::getCssImportStatement(FOLDER_COMPILED . "/css/" . FILENAME_CSS_COMPILED);
                 return true;
             default:
                 return $this->paneContent->printPane($paneId);
                 return true;
         }
     }
     return $this->paneContent->printPane($paneId);
 }
 /**
  * Prints ant properties
  */
 public static function getAntProperties()
 {
     // read all module templates
     $allModuleTemplates = ModulaiseUtils::getDirectoryAsArray(ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . PATH_BOILERPLATES_MODULES);
     echo "# List all moduletemplates from boilerplates/modules folder\n";
     $firstLoop = true;
     // loop all modules files
     foreach ($allModuleTemplates as $templateName) {
         if ($firstLoop) {
             echo "ALL_MODULE_TEMPLATES_DEFAULT=" . $templateName . "\n";
             echo "ALL_MODULE_TEMPLATES=";
             $firstLoop = false;
         } else {
             echo ",";
         }
         echo $templateName;
     }
     // read all page templates
     $allPageTemplates = ModulaiseUtils::getDirectoryAsArray(ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . PATH_BOILERPLATES_PAGES);
     echo "\n\n# List all pagetemplates from boilerplates/pages folder\n";
     $firstLoop = true;
     // loop all modules files
     foreach ($allPageTemplates as $templateName) {
         if ($firstLoop) {
             echo "ALL_PAGE_TEMPLATES_DEFAULT=" . $templateName . "\n";
             echo "ALL_PAGE_TEMPLATES=";
             $firstLoop = false;
         } else {
             echo ",";
         }
         echo $templateName;
     }
     // read all project templates
     $allBoilerPlates = ModulaiseUtils::getDirectoryAsArray(ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . PATH_BOILERPLATES_PROJECTS);
     echo "\n\n# List all boilerplates from boilerplates/projects folder\n";
     $firstLoop = true;
     // loop all modules files
     foreach ($allBoilerPlates as $boilerPlate) {
         if ($firstLoop) {
             echo "ALL_BOILERPLATES_DEFAULT=" . $boilerPlate . "\n";
             echo "ALL_BOILERPLATES=";
             $firstLoop = false;
         } else {
             echo ",";
         }
         echo $boilerPlate;
     }
     // read all build packages
     $allBuildPackages = ModulaiseUtils::getDirectoryAsArray(ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . PATH_BUILDS);
     // flip, we want latest builds first
     $allBuildPackages = array_reverse($allBuildPackages, true);
     echo "\n\n# List all buildPackages from build folder\n";
     $firstLoop = true;
     $i = 0;
     // loop all modules files
     foreach ($allBuildPackages as $buildTag) {
         $i++;
         if ($i < 20 && ModulaiseUtils::EndsWith($buildTag, ".zip")) {
             if ($firstLoop) {
                 echo "ALL_BUILDPACKAGES_DEFAULT=" . substr($buildTag, 0, -4) . "\n";
                 echo "ALL_BUILDPACKAGES=";
                 $firstLoop = false;
             } else {
                 echo ",";
             }
             echo substr($buildTag, 0, -4);
         }
     }
     // read all deploy destinations
     $allDeployDestinations = ModulaiseUtils::getDirectoryAsArray(ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . PATH_TO_DEPLOY_TARGETS, ONLY_DIRECTORIES);
     echo "\n\n# List all deploy destinations from config-project folder\n";
     $firstLoop = true;
     // loop all modules files
     foreach ($allDeployDestinations as $destination) {
         if ($firstLoop) {
             echo "ALL_DEPLOY_DESTINATIONS_DEFAULT=" . $destination . "\n";
             echo "ALL_DEPLOY_DESTINATIONS=";
             $firstLoop = false;
         } else {
             echo ",";
         }
         echo $destination;
     }
 }
 /**
  * Prints a comment
  */
 public static function printComment($comment)
 {
     ModulaiseUtils::printComment($comment);
 }
 /**
  * Adds a css snippet for export purposes
  */
 public function addExportCssSnippet($moduleId, $paneId, $priorityId, $snippetPath)
 {
     $debug = false;
     $priorityId = intval($priorityId);
     $fileName = ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ModulaiseController::$PATH_MODULES . DIRECTORY_SEPARATOR . $moduleId . DIRECTORY_SEPARATOR . $snippetPath;
     if ($debug) {
         ModulaiseController::printComment("\n\n" . get_class() . "->addFileSnippet(): " . $moduleId . ", " . $paneId . ", " . $priorityId . ", " . $snippetPath . "\n\n");
     }
     // check if the file to include exists:
     if (isset($fileName) && is_file($fileName)) {
         // extract variables from the global scope:
         extract($GLOBALS, EXTR_REFS);
         ob_start();
         include $fileName;
         $snippet = ob_get_clean();
     } else {
         ob_clean();
         return false;
     }
     // If there is a media type { } around the snippet this function extracts it
     $snippet = ModulaiseUtils::extractCss($snippet);
     // add to content
     if (!$this->addContent($paneId, $priorityId, $snippet)) {
         ModulaiseController::printComment("\n\nERROR:\n" . get_class() . "->addFileSnippet(): " . $paneId . ", " . $priorityId . ", " . $snippetPath . "\n\n");
         die;
     }
     return true;
 }
 public static function getPages()
 {
     // Get all pages
     $returnArray = array();
     $pageDirectory = ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . PATH_PAGES;
     $allPages = ModulaiseUtils::getDirectoryAsArray($pageDirectory);
     foreach ($allPages as $file) {
         if (ModulaiseUtils::EndsWith($file, ".php")) {
             $pageName = substr($file, 0, -4);
             $currentLink = PATH_PAGES . "/" . substr($file, 0, -4) . ".php";
             $cacheLink = PATH_PAGES . "/" . substr($file, 0, -4) . ".php?writeCachedHtml=true";
             $exportLink = PATH_PAGES_COMPILED . "/" . substr($file, 0, -4) . ".html";
             array_push($returnArray, new ModulaiseIndexPageElement($pageName, $currentLink, $exportLink, $cacheLink));
         }
     }
     return $returnArray;
 }
 /**
  * Concatinates CSS and JavaScript
  */
 public static function buildCompiled()
 {
     echo "\nConcatinating CSS and JavaScript\n--------------------------------------------------------------------------------\n";
     // set the PageController buildMode value to BUILD_EXPORT
     ModulaiseController::$buildMode = BUILD_EXPORT;
     // Reset global modules
     ModulaiseController::initialize();
     // Create a page containing all modules and then in turn print js_head, js_foot and css
     ModulaiseController::createPage("EXPORT", "EXPORT");
     // add all global modules to global modules array
     $allModuleNames = ModulaiseUtils::getDirectoryAsArray(ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ModulaiseController::$PATH_MODULES, ONLY_DIRECTORIES);
     // build a list with all non-global modules
     foreach ($allModuleNames as $moduleId) {
         echo "Compiling module        : " . $moduleId . "\n";
         if (substr($moduleId, 0, 1) != "0") {
             ModulaiseController::addModule("EXPORT", $moduleId);
         }
     }
     $buildTagComment = "/*\n\nBuildtag: " . ModulaiseController::$buildTag . "\n\n*/\n\n";
     // Write PANE_JS_HEAD
     // the file to write
     $writeFile = ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ModulaiseController::$PATH_MODULES . DIRECTORY_SEPARATOR . FOLDER_COMPILED . DIRECTORY_SEPARATOR . "js" . DIRECTORY_SEPARATOR . "js_head.concatinated.js";
     echo "Writing file            : " . $writeFile . "\n";
     // capture output start
     $captureOutput = new ModulaiseCaptureOutput();
     $captureOutput->start();
     echo $buildTagComment;
     if (ModulaiseController::paneHasContent(PANE_JS_HEAD)) {
         // render the pane
         ModulaiseController::printPane(PANE_JS_HEAD);
     }
     // capture output end
     $output = $captureOutput->end();
     // write the output to file
     ModulaiseUtils::writeFile($writeFile, $output);
     // Write PANE_JS_FOOT
     // the file to write
     $writeFile = ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ModulaiseController::$PATH_MODULES . DIRECTORY_SEPARATOR . FOLDER_COMPILED . DIRECTORY_SEPARATOR . "js" . DIRECTORY_SEPARATOR . "js_foot.concatinated.js";
     echo "Writing file            : " . $writeFile . "\n";
     // capture output start
     $captureOutput = new ModulaiseCaptureOutput();
     $captureOutput->start();
     echo $buildTagComment;
     if (ModulaiseController::paneHasContent(PANE_JS_FOOT)) {
         // render the pane
         ModulaiseController::printPane(PANE_JS_FOOT);
     }
     // capture output end
     $output = $captureOutput->end();
     // write the output to file
     ModulaiseUtils::writeFile($writeFile, $output);
     // Write each and every PANE_CSS
     // Prepare an empty array to hold the css
     $concatinated_css = array();
     $debug = false;
     // get the pane names
     $paneNames = ModulaiseController::getPaneNames();
     foreach ($paneNames as $name) {
         if ($debug === true) {
             echo "paneName=" . $name . "\n";
         }
         $pos = strpos($name, PANE_CSS);
         if (!($pos === false)) {
             $nameArrays = explode("--", $name);
             // leading zero
             $nameArrays[1] = $nameArrays[1] < 10 ? "0" . $nameArrays[1] : $nameArrays[1];
             // the file to write
             $writeFile = ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ModulaiseController::$PATH_MODULES . DIRECTORY_SEPARATOR . FOLDER_COMPILED . DIRECTORY_SEPARATOR . "css" . DIRECTORY_SEPARATOR . $nameArrays[1] . DELIMITER . $nameArrays[2] . ".concatinated.css";
             echo "Writing file            : " . $writeFile . "\n";
             // capture output start
             $captureOutput = new ModulaiseCaptureOutput();
             $captureOutput->start();
             echo $buildTagComment;
             if (ModulaiseController::paneHasContent($name)) {
                 // render the pane
                 ModulaiseController::printPane($name);
             }
             // capture output end
             $output = $captureOutput->end();
             // write the output to file
             ModulaiseUtils::writeFile($writeFile, $output);
             // Remove comments and blank lines from output
             $output = preg_replace('!/\\*.*?\\*/!s', '', $output);
             //$output = preg_replace('/\n\s*\n/', '', $output);
             //$output = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "", $output);
             $output = trim($output);
             if ($debug === true) {
                 echo "output=\"" . $output . "\"\n";
             }
             // if there is something to add
             if ($output != "") {
                 // also add the snippet to the concatinated array
                 $concatinated_css[$nameArrays[1] . "--" . $nameArrays[2]][] = $output;
             }
         }
     }
     // Write everything as one big pane
     // the file to write
     $writeFile = ModulaiseController::$DIR_DOCUMENT_ROOT . DIRECTORY_SEPARATOR . ModulaiseController::$PATH_MODULES . DIRECTORY_SEPARATOR . FOLDER_COMPILED . DIRECTORY_SEPARATOR . "css" . DIRECTORY_SEPARATOR . "css.concatinated.css";
     echo "Writing file            : " . $writeFile . "\n";
     // capture output start
     $captureOutput = new ModulaiseCaptureOutput();
     $captureOutput->start();
     echo $buildTagComment;
     // now use the concatinated_css array to concatinate everything into its right place
     foreach ($concatinated_css as $css_name => $contentsArray) {
         $nameArrays = explode("--", $css_name);
         $mediaType = ModulaiseUtils::getMediaType($nameArrays[1]);
         if ($mediaType != "@media all") {
             echo "/*!NEWLINE*/" . $mediaType . " {";
         } else {
             echo "/*!NEWLINE*/";
         }
         foreach ($contentsArray as $key => $content) {
             echo $content . "\n";
         }
         if ($mediaType != "@media all") {
             echo "}";
         }
         echo "/*!NEWLINE*/";
     }
     // render the pane
     //print_r($concatinated_css);
     // capture output end
     $output = $captureOutput->end();
     // write the output to file
     ModulaiseUtils::writeFile($writeFile, $output);
     if ($debug) {
         // write an extra output file
         ModulaiseUtils::writeFile($writeFile . ".text", $output);
     }
 }