From 7d2cc2c9f0b897ef1aac386eff89d37572a1165a Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Mon, 5 Aug 2019 00:38:53 +0200 Subject: [PATCH] Adding the the new plugin builder to the compiler. gh-436 --- README.md | 8 +- admin/README.txt | 8 +- admin/helpers/compiler.php | 20 ++ admin/helpers/compiler/a_Get.php | 162 ++++++++- admin/helpers/compiler/b_Structure.php | 328 +++++++++++++++--- admin/helpers/compiler/e_Interpretation.php | 207 ++++++++++- admin/helpers/compiler/f_Infusion.php | 23 +- admin/helpers/componentbuilder.php | 22 +- .../en-GB/en-GB.com_componentbuilder.ini | 8 +- componentbuilder.xml | 2 +- site/helpers/componentbuilder.php | 22 +- 11 files changed, 730 insertions(+), 80 deletions(-) diff --git a/README.md b/README.md index 86f0fde77..06bd9dc85 100644 --- a/README.md +++ b/README.md @@ -146,14 +146,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 29th July, 2019 ++ *Last Build*: 4th August, 2019 + *Version*: 2.9.35 + *Copyright*: Copyright (C) 2015 - 2019 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **242165** ++ *Line count*: **242379** + *Field count*: **1302** -+ *File count*: **1562** -+ *Folder count*: **237** ++ *File count*: **1566** ++ *Folder count*: **240** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](http://joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) diff --git a/admin/README.txt b/admin/README.txt index 86f0fde77..06bd9dc85 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -146,14 +146,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) + *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 29th July, 2019 ++ *Last Build*: 4th August, 2019 + *Version*: 2.9.35 + *Copyright*: Copyright (C) 2015 - 2019 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **242165** ++ *Line count*: **242379** + *Field count*: **1302** -+ *File count*: **1562** -+ *Folder count*: **237** ++ *File count*: **1566** ++ *Folder count*: **240** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](http://joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com) diff --git a/admin/helpers/compiler.php b/admin/helpers/compiler.php index 695c72aaa..875c48061 100644 --- a/admin/helpers/compiler.php +++ b/admin/helpers/compiler.php @@ -240,6 +240,26 @@ class Compiler extends Infusion } // free up some memory unset($this->newFiles['dynamic']); + // do plugins if found + if (ComponentbuilderHelper::checkArray($this->componentData->joomla_plugins)) + { + foreach ($this->componentData->joomla_plugins as $plugin) + { + if (ComponentbuilderHelper::checkObject($plugin) && isset($this->newFiles[$plugin->key]) && ComponentbuilderHelper::checkArray($this->newFiles[$plugin->key])) + { + foreach ($this->newFiles[$plugin->key] as $plugin_file) + { + if (JFile::exists($plugin_file['path'])) + { + $this->setFileContent($plugin_file['name'], $plugin_file['path'], $bom, $plugin->key); + } + } + // free up some memory + unset($this->newFiles[$plugin->key]); + unset($this->fileContentDynamic[$plugin->key]); + } + } + } return true; } return false; diff --git a/admin/helpers/compiler/a_Get.php b/admin/helpers/compiler/a_Get.php index ee2ab9e7c..396501f33 100644 --- a/admin/helpers/compiler/a_Get.php +++ b/admin/helpers/compiler/a_Get.php @@ -1598,7 +1598,7 @@ class Get array( 'table' => 'component_dashboard', 'field' => 'php_dashboard_methods', - 'id' => (int) $this->component_dashboard_id, + 'id' => (int) $component->component_dashboard_id, 'type' => 'php') ); } @@ -1650,9 +1650,9 @@ class Get $component->addjoomla_plugins = (isset($component->addjoomla_plugins) && ComponentbuilderHelper::checkJson($component->addjoomla_plugins)) ? json_decode($component->addjoomla_plugins, true) : null; if (ComponentbuilderHelper::checkArray($component->addjoomla_plugins)) { - $component->joomla_plugins = array_map(function($array) + $component->joomla_plugins = array_map(function($array) use(&$component) { - return $this->getPlugins($array['plugin']); + return $this->getPlugins($array['plugin'], $component); }, array_values($component->addjoomla_plugins)); } else @@ -3355,12 +3355,14 @@ class Get $results = $this->db->loadObjectList(); $typeArray = array(1 => 'LEFT', 2 => 'LEFT OUTER', 3 => 'INNER', 4 => 'RIGHT', 5 => 'RIGHT OUTER'); $operatorArray = array(1 => '=', 2 => '!=', 3 => '<>', 4 => '>', 5 => '<', 6 => '>=', 7 => '<=', 8 => '!<', 9 => '!>', 10 => 'IN', 11 => 'NOT IN'); - $guiMapper = array( 'table' => 'dynamic_get', 'id' => (int) $result->id, 'type' => 'php'); + $guiMapper = array( 'table' => 'dynamic_get', 'type' => 'php'); foreach ($results as $_nr => &$result) { + // set GUI mapper id + $guiMapper['id'] = (int) $result->id; // add calculations if set if ($result->addcalculation == 1 && ComponentbuilderHelper::checkString($result->php_calculation)) - { + { // set GUI mapper field $guiMapper['field'] = 'php_calculation'; $result->php_calculation = $this->setGuiCodePlaceholder( @@ -6154,7 +6156,7 @@ class Get * @return void * */ - public function getPlugins($id) + protected function getPlugins($id, &$component) { // Create a new query object. $query = $this->db->getQuery(true); @@ -6202,15 +6204,57 @@ class Get $_backup_target = $this->target; $_backup_lang = $this->lang; $_backup_langPrefix = $this->langPrefix; - $this->target = 'plugin'.$id; - $this->lang = 'plugin'.$id; - $this->langPrefix = 'PLUGIN_PREFIX___'; + // set some keys + $plugin->target_type = 'P|uG!n'; + $plugin->key = $plugin->id . '_' . $plugin->target_type; + // update to point to plugin + $this->target = $plugin->key; + $this->lang = $plugin->key; + // set version + $plugin->version = '1.0.' . (int) $plugin->version; // (TODO) add versioning to plugin // set GUI mapper $guiMapper = array( 'table' => 'joomla_plugin', 'id' => (int) $id, 'type' => 'php'); // update the name if it has dynamic values $plugin->name = $this->setPlaceholders($this->setDynamicValues($plugin->name), $this->placeholders); - // prepare plugin placeholders (TODO) - + // set official name + $plugin->official_name = $plugin->name . ' ' . $plugin->group; + // set langPrefix + $this->langPrefix = 'PLG_' . strtoupper($plugin->group) . '_' . strtoupper($plugin->name); + // set lang prefix + $plugin->lang_prefix = $this->langPrefix; + // set plugin class name + $plugin->class_name = 'Plg' . ucfirst($plugin->group) . ucfirst($plugin->name); + // set plugin install class name + $plugin->installer_class_name = 'plg' . ucfirst($plugin->group) . ucfirst($plugin->name) . 'InstallerScript'; + // set plugin folder name + $plugin->folder_name = 'plg_' . strtolower($plugin->group) . '_' . strtolower($plugin->name); + // set plugin file name + $plugin->file_name = strtolower($plugin->name); + // set official_name lang strings + $this->setLangContent($plugin->key, $this->langPrefix, $plugin->official_name); + // set description (TODO) add description field to plugin + if (!isset($plugin->description) || !ComponentbuilderHelper::checkString($plugin->description)) + { + $plugin->description = ''; + } + else + { + $this->setLangContent($plugin->key, $plugin->lang_prefix . '_DESCRIPTION', $plugin->description); + $plugin->description = '

' . $plugin->description . '

'; + } + $plugin->xml_description = "

" . $plugin->official_name . " (v." . $plugin->version . ")

" . $plugin->description . "

Created by " . trim(JFilterOutput::cleanText($component->author)) . "
Development started " . JFactory::getDate($plugin->created)->format("jS F, Y") . "

"; + // set xml discription + $this->setLangContent($plugin->key, $plugin->lang_prefix . '_XML_DESCRIPTION', $plugin->xml_description); + // update the readme if set + if ($plugin->addreadme == 1 && !empty($plugin->readme)) + { + $plugin->readme = $this->setPlaceholders($this->setDynamicValues(base64_decode($plugin->readme)), $this->placeholders); + } + else + { + $plugin->addreadme = 0; + unset($plugin->readme); + } // open some base64 strings if (!empty($plugin->main_class_code)) { @@ -6306,15 +6350,111 @@ class Get } unset($plugin->{'add' . $addTarget}); } + // add PHP in plugin install + $plugin->add_install_script = false; + $addScriptMethods = array('php_preflight', 'php_postflight', 'php_method'); + $addScriptTypes = array('install', 'update', 'uninstall'); + foreach ($addScriptMethods as $scriptMethod) + { + foreach ($addScriptTypes as $scriptType) + { + if (isset($plugin->{'add_' . $scriptMethod . '_' . $scriptType}) && $plugin->{'add_' . $scriptMethod . '_' . $scriptType} == 1 && ComponentbuilderHelper::checkString($plugin->{$scriptMethod . '_' . $scriptType})) + { + // set GUI mapper field + $guiMapper['field'] = $scriptMethod . '_' . $scriptType; + $plugin->{$scriptMethod . '_' . $scriptType} = $this->setGuiCodePlaceholder( + $this->setPlaceholders($this->setDynamicValues(base64_decode($plugin->{$scriptMethod . '_' . $scriptType})), $this->placeholders), + $guiMapper + ); + $plugin->add_install_script = true; + } + else + { + unset($plugin->{$scriptMethod . '_' . $scriptType}); + $plugin->{'add_' . $scriptMethod . '_' . $scriptType} = 0; + } + } + } + // add_sql + if ($plugin->add_sql == 1 && ComponentbuilderHelper::checkString($plugin->sql)) + { + $plugin->sql = $this->setPlaceholders($this->setDynamicValues(base64_decode($plugin->sql)), $this->placeholders); + } + else + { + unset($plugin->sql); + $plugin->add_sql = 0; + } + // add_sql_uninstall + if ($plugin->add_sql_uninstall == 1 && ComponentbuilderHelper::checkString($plugin->sql_uninstall)) + { + $plugin->sql_uninstall = $this->setPlaceholders($this->setDynamicValues(base64_decode($plugin->sql_uninstall)), $this->placeholders); + } + else + { + unset($plugin->sql_uninstall); + $plugin->add_sql_uninstall = 0; + } + // update the URL of the update_server if set + if ($plugin->add_update_server == 1 && ComponentbuilderHelper::checkString($plugin->update_server_url)) + { + $plugin->update_server_url = $this->setPlaceholders($this->setDynamicValues($plugin->update_server_url), $this->placeholders); + } + // add the update/sales server FTP details if that is the expected protocol + $serverArray = array('update_server', 'sales_server'); + foreach ($serverArray as $server) + { + if ($plugin->{'add_' . $server} == 1 && is_numeric($plugin->{$server}) && $plugin->{$server} > 0) + { + // get the server protocol + $plugin->{$server . '_protocol'} = ComponentbuilderHelper::getVar('server', (int) $plugin->{$server}, 'id', 'protocol'); + } + else + { + $plugin->{$server} = 0; + // only change this for sales server (update server can be added loacaly to the zip file) + if ('sales_server' === $server) + { + $plugin->{'add_' . $server} = 0; + } + $plugin->{$server . '_protocol'} = 0; + } + } // rest globals $this->target = $_backup_target; $this->lang = $_backup_lang; $this->langPrefix = $_backup_langPrefix; + return $plugin; } return false; } + /** + * get the plugin xml template + * + * @return string + * + */ + public function getPluginXMLTemplate(&$plugin) + { + $xml = ''; + $xml .= PHP_EOL . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $plugin->lang_prefix . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $this->hhh . 'BUILDDATE' . $this->hhh . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $this->hhh . 'AUTHOR' . $this->hhh . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $this->hhh . 'AUTHOREMAIL' . $this->hhh . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $this->hhh . 'AUTHORWEBSITE' . $this->hhh . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $this->hhh . 'COPYRIGHT' . $this->hhh . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $this->hhh . 'LICENSE' . $this->hhh . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $plugin->version . ''; + $xml .= PHP_EOL . $this->_t(1) . '' . $plugin->lang_prefix . '_XML_DESCRIPTION'; + $xml .= $this->hhh . 'MAINXML' . $this->hhh; + $xml .= PHP_EOL . ''; + + return $xml; + } + /** * check if we already have these ids in local memory * diff --git a/admin/helpers/compiler/b_Structure.php b/admin/helpers/compiler/b_Structure.php index d8ef5e2ef..4c9e155e8 100644 --- a/admin/helpers/compiler/b_Structure.php +++ b/admin/helpers/compiler/b_Structure.php @@ -277,6 +277,13 @@ class Structure extends Get */ public $componentPath; + /** + * The Dynamic paths + * + * @var array + */ + public $dynamicPaths = array(); + /** * The not new static items * @@ -356,7 +363,6 @@ class Structure extends Get $this->componentSalesName = 'com_' . $this->componentData->sales_name . '__J' . $this->joomlaVersion; $this->componentBackupName = 'com_' . $this->componentData->sales_name . '_v' . str_replace('.', '_', $this->componentData->component_version) . '__J' . $this->joomlaVersion; $this->componentFolderName = 'com_' . $this->componentData->name_code . '_v' . str_replace('.', '_', $this->componentData->component_version) . '__J' . $this->joomlaVersion; - // set component folder path $this->componentPath = $this->compilerPath . '/' . $this->componentFolderName; // set the template path for custom @@ -364,7 +370,9 @@ class Structure extends Get // make sure there is no old build $this->removeFolder($this->componentPath); // load the libraries files/folders and url's - $this->setLibaries(); + $this->setLibraries(); + // load the plugin files/folders and url's + $this->setPlugins(); // set the Joomla Version Data $this->joomlaVersionData = $this->setJoomlaVersionData(); // Trigger Event: jcb_ce_onAfterSetJoomlaVersionData @@ -408,18 +416,198 @@ class Structure extends Get return ''; } + /** + * Build the Plugins files, folders, url's and config + * + * @return void + * + */ + private function setPlugins() + { + if (ComponentbuilderHelper::checkArray($this->componentData->joomla_plugins)) + { + // Trigger Event: jcb_ce_onBeforeSetPlugins + $this->triggerEvent('jcb_ce_onBeforeSetPlugins', array(&$this->componentContext, &$this->componentData->joomla_plugins)); + foreach ($this->componentData->joomla_plugins as $plugin) + { + if (ComponentbuilderHelper::checkObject($plugin) && isset($plugin->folder_name) && ComponentbuilderHelper::checkString($plugin->folder_name)) + { + // plugin path + $plugin->folder_path = $this->compilerPath . '/' . $plugin->folder_name; + // set the plugin paths + $this->dynamicPaths[$plugin->key] = $plugin->folder_path; + // make sure there is no old build + $this->removeFolder($plugin->folder_path); + // creat the main component folder + if (!JFolder::exists($plugin->folder_path)) + { + JFolder::create($plugin->folder_path); + // count the folder created + $this->folderCount++; + $this->indexHTML($plugin->folder_name, $this->compilerPath); + } + // set main class file + $fileDetails = array('path' => $plugin->folder_path . '/' . $plugin->file_name . '.php', 'name' => $plugin->file_name . '.php', 'zip' => $plugin->file_name . '.php'); + $this->writeFile($fileDetails['path'], 'hhh . 'BOM' . $this->hhh . PHP_EOL . $this->hhh . 'MAINCLASS' . $this->hhh); + $this->newFiles[$plugin->key][] = $fileDetails; + // count the file created + $this->fileCount++; + // set main xml file + $fileDetails = array('path' => $plugin->folder_path . '/' . $plugin->file_name . '.xml', 'name' => $plugin->file_name . '.xml', 'zip' => $plugin->file_name . '.xml'); + $this->writeFile($fileDetails['path'], $this->getPluginXMLTemplate($plugin)); + $this->newFiles[$plugin->key][] = $fileDetails; + // count the file created + $this->fileCount++; + // set install script if needed + if ($plugin->add_install_script) + { + $fileDetails = array('path' => $plugin->folder_path . '/script.php', 'name' => 'script.php', 'zip' => 'script.php'); + $this->writeFile($fileDetails['path'], 'hhh . 'BOM' . $this->hhh . PHP_EOL . $this->hhh . 'INSTALLCLASS' . $this->hhh); + $this->newFiles[$plugin->key][] = $fileDetails; + // count the file created + $this->fileCount++; + } + // set readme if found + if ($plugin->addreadme) + { + $fileDetails = array('path' => $plugin->folder_path . '/README.md', 'name' => 'README.md', 'zip' => 'README.md'); + $this->writeFile($fileDetails['path'], $plugin->readme); + $this->newFiles[$plugin->key][] = $fileDetails; + // count the file created + $this->fileCount++; + } + // set SQL stuff if needed + if ($plugin->add_sql || $plugin->add_sql_uninstall) + { + // create SQL folder + if (!JFolder::exists($plugin->folder_path . '/sql')) + { + JFolder::create($plugin->folder_path . '/sql'); + // count the folder created + $this->folderCount++; + $this->indexHTML($plugin->folder_name . '/sql', $this->compilerPath); + } + // create mysql folder + if (!JFolder::exists($plugin->folder_path . '/sql/mysql')) + { + JFolder::create($plugin->folder_path . '/sql/mysql'); + // count the folder created + $this->folderCount++; + $this->indexHTML($plugin->folder_name . '/sql/mysql', $this->compilerPath); + } + // now set the install file + if ($plugin->add_sql) + { + $this->writeFile($plugin->folder_path . '/sql/mysql/install.sql', $plugin->sql); + // count the file created + $this->fileCount++; + } + // now set the uninstall file + if ($plugin->add_sql_uninstall) + { + $this->writeFile($plugin->folder_path . '/sql/mysql/uninstall.sql', $plugin->sql_uninstall); + // count the file created + $this->fileCount++; + } + } + // creat the language folder + if (!JFolder::exists($plugin->folder_path . '/language')) + { + JFolder::create($plugin->folder_path . '/language'); + // count the folder created + $this->folderCount++; + // also the lang tag + if (!JFolder::exists($plugin->folder_path . '/language/' . $this->langTag)) + { + JFolder::create($plugin->folder_path . '/language/' . $this->langTag); + // count the folder created + $this->folderCount++; + } + } + // check if this lib has files + if (isset($plugin->files) && ComponentbuilderHelper::checkArray($plugin->files)) + { + // add to component files + foreach ($plugin->files as $file) + { + // set the path finder + $file['target_type'] = $plugin->target_type; + $file['target_id'] = $plugin->id; + $this->componentData->files[] = $file; + } + } + // check if this lib has folders + if (isset($plugin->folders) && ComponentbuilderHelper::checkArray($plugin->folders)) + { + // add to component folders + foreach ($plugin->folders as $folder) + { + // set the path finder + $folder['target_type'] = $plugin->target_type; + $folder['target_id'] = $plugin->id; + $this->componentData->folders[] = $folder; + } + } + // check if this plugin has urls + if (isset($plugin->urls) && ComponentbuilderHelper::checkArray($plugin->urls)) + { + // add to component urls + foreach ($plugin->urls as $n => &$url) + { + // should we add the local folder + if (isset($url['type']) && $url['type'] > 1 && isset($url['url']) && ComponentbuilderHelper::checkString($url['url'])) + { + // set file name + $fileName = basename($url['url']); + // get the file contents + $data = ComponentbuilderHelper::getFileContents($url['url']); + // build sub path + if (strpos($fileName, '.js') !== false) + { + $path = '/js'; + } + elseif (strpos($fileName, '.css') !== false) + { + $path = '/css'; + } + else + { + $path = ''; + } + // create sub media path if not set + if (!JFolder::exists($plugin->folder_path .$path)) + { + JFolder::create($plugin->folder_path . $path); + // count the folder created + $this->folderCount++; + $this->indexHTML($plugin->folder_name . $path, $this->compilerPath); + } + // set the path to plugin file + $url['path'] = $plugin->folder_path . $path . '/' . $fileName; // we need this for later + // write data to path + $this->writeFile($url['path'], $data); + // count the file created + $this->fileCount++; + } + } + } + } + } + } + } + /** * Build the Libraries files, folders, url's and config * * @return void * */ - private function setLibaries() + private function setLibraries() { if (ComponentbuilderHelper::checkArray($this->libraries)) { - // Trigger Event: jcb_ce_onBeforeSetLibaries - $this->triggerEvent('jcb_ce_onBeforeSetLibaries', array(&$this->componentContext, &$this->libraries)); + // Trigger Event: jcb_ce_onBeforeSetLibraries + $this->triggerEvent('jcb_ce_onBeforeSetLibraries', array(&$this->componentContext, &$this->libraries)); // creat the main component folder if (!JFolder::exists($this->componentPath)) { @@ -519,7 +707,7 @@ class Structure extends Get // only add if local if ($addLocalFolder) { - // add folder to ml of media folders + // add folder to xml of media folders $this->fileContentStatic[$this->hhh . 'EXSTRA_MEDIA_FOLDERS' . $this->hhh] .= PHP_EOL . $this->_t(2) . "" . $libFolder . ""; } } @@ -828,9 +1016,19 @@ class Structure extends Get { continue; } - // set destination path - $zipPath = str_replace('c0mp0n3nt/', '', $details->path); - $path = str_replace('c0mp0n3nt/', $this->componentPath . '/', $details->path); + // check if we have a target value set + if (isset($details->_target)) + { + // set destination path + $zipPath = str_replace($details->_target['type'] . '/', '', $details->path); + $path = str_replace($details->_target['type'] . '/', $this->dynamicPaths[$details->_target['key']] . '/', $details->path); + } + else + { + // set destination path + $zipPath = str_replace('c0mp0n3nt/', '', $details->path); + $path = str_replace('c0mp0n3nt/', $this->componentPath . '/', $details->path); + } // set the template folder path $templatePath = (isset($details->custom) && $details->custom) ? (($details->custom !== 'full') ? $this->templatePathCustom . '/' : '') : $this->templatePath . '/'; // set the final paths @@ -862,7 +1060,14 @@ class Structure extends Get // store the new files if (!in_array($ftem, $this->notNew)) { - $this->newFiles['static'][] = array('path' => $packageFullPath, 'name' => $new, 'zip' => $zipFullPath); + if (isset($details->_target)) + { + $this->newFiles[$details->_target['key']][] = array('path' => $packageFullPath, 'name' => $new, 'zip' => $zipFullPath); + } + else + { + $this->newFiles['static'][] = array('path' => $packageFullPath, 'name' => $new, 'zip' => $zipFullPath); + } } // ensure we update this file if needed if (isset($this->updateFileContent[$ftem]) && $this->updateFileContent[$ftem]) @@ -889,40 +1094,44 @@ class Structure extends Get $this->folderCount++; } } - // check if we should add the dynamic folder moving script to the installer script - $checker = array_values((array) explode('/', $zipFullPath)); - // TODO <-- this may not be the best way, will keep an eye on this. - // We basicly only want to check if a folder is added that is not in the stdFolders array - if (isset($checker[0]) && ComponentbuilderHelper::checkString($checker[0]) && !in_array($checker[0], $this->stdFolders)) + // only add if no target found + if (!isset($details->_target)) { // check if we should add the dynamic folder moving script to the installer script - if (!$this->setMoveFolders) + $checker = array_values((array) explode('/', $zipFullPath)); + // TODO <-- this may not be the best way, will keep an eye on this. + // We basicly only want to check if a folder is added that is not in the stdFolders array + if (isset($checker[0]) && ComponentbuilderHelper::checkString($checker[0]) && !in_array($checker[0], $this->stdFolders)) { - // add the setDynamicF0ld3rs() method to the install scipt.php file - $this->setMoveFolders = true; - // set message that this was done (will still add a tutorial link later) - $this->app->enqueueMessage(JText::_('

Dynamic folder/s were detected.

'), 'Notice'); - $this->app->enqueueMessage(JText::sprintf('A method (setDynamicF0ld3rs) was added to the install script.php of this package to insure that the folder/s are copied into the correct place when this componet is installed!'), 'Notice'); + // check if we should add the dynamic folder moving script to the installer script + if (!$this->setMoveFolders) + { + // add the setDynamicF0ld3rs() method to the install scipt.php file + $this->setMoveFolders = true; + // set message that this was done (will still add a tutorial link later) + $this->app->enqueueMessage(JText::_('

Dynamic folder/s were detected.

'), 'Notice'); + $this->app->enqueueMessage(JText::sprintf('A method (setDynamicF0ld3rs) was added to the install script.php of this package to insure that the folder/s are copied into the correct place when this componet is installed!'), 'Notice'); + } } - } - elseif (count($checker) == 2 && ComponentbuilderHelper::checkString($checker[0]) && in_array($checker[0], $this->stdFolders)) - { - // set the target - $eNAME = 'FILES'; - $ename = 'filename'; - if ($details->type === 'folder') + elseif (count($checker) == 2 && ComponentbuilderHelper::checkString($checker[0]) && in_array($checker[0], $this->stdFolders)) { - $eNAME = 'FOLDERS'; - $ename = 'folder'; + // set the target + $eNAME = 'FILES'; + $ename = 'filename'; + if ($details->type === 'folder') + { + $eNAME = 'FOLDERS'; + $ename = 'folder'; + } + // set the tab + $eTab = $this->_t(2); + if ('admin' === $checker[0]) + { + $eTab = $this->_t(3); + } + // set the xml file + $this->fileContentStatic[$this->hhh . 'EXSTRA_' . ComponentbuilderHelper::safeString($checker[0], 'U') . '_' . $eNAME . $this->hhh] .= PHP_EOL . $eTab . "<" . $ename . ">" . $checker[1] . ""; } - // set the tab - $eTab = $this->_t(2); - if ('admin' === $checker[0]) - { - $eTab = $this->_t(3); - } - // set the xml file - $this->fileContentStatic[$this->hhh . 'EXSTRA_' . ComponentbuilderHelper::safeString($checker[0], 'U') . '_' . $eNAME . $this->hhh] .= PHP_EOL . $eTab . "<" . $ename . ">" . $checker[1] . ""; } } return true; @@ -1297,6 +1506,12 @@ class Structure extends Get $pointer_tracker = 'h'; foreach ($this->componentData->folders as $custom) { + // check type of target type + $_target_type = 'c0mp0n3nt'; + if (isset($custom['target_type'])) + { + $_target_type = $custom['target_type']; + } // for good practice ComponentbuilderHelper::fixPath($custom, array('path', 'folder', 'folderpath')); // fix custom path @@ -1353,11 +1568,16 @@ class Structure extends Get // set new folder to object $versionData->move->static->{$key_pointer} = new stdClass(); $versionData->move->static->{$key_pointer}->naam = str_replace('//','/', $custom['folder']); - $versionData->move->static->{$key_pointer}->path = 'c0mp0n3nt/' . $custom['path']; + $versionData->move->static->{$key_pointer}->path = $_target_type. '/' . $custom['path']; $versionData->move->static->{$key_pointer}->rename = $rename; $versionData->move->static->{$key_pointer}->newName = $newname; $versionData->move->static->{$key_pointer}->type = 'folder'; $versionData->move->static->{$key_pointer}->custom = $customPath; + // set the target if type and id is found + if (isset($custom['target_id']) && isset($custom['target_type'])) + { + $versionData->move->static->{$key_pointer}->_target = array('key' => $custom['target_id'] . '_' . $custom['target_type'], 'type' => $custom['target_type']); + } } unset($this->componentData->folders); unset($custom); @@ -1384,6 +1604,12 @@ class Structure extends Get $pointer_tracker = 'h'; foreach ($this->componentData->files as $custom) { + // check type of target type + $_target_type = 'c0mp0n3nt'; + if (isset($custom['target_type'])) + { + $_target_type = $custom['target_type']; + } // for good practice ComponentbuilderHelper::fixPath($custom, array('path', 'file', 'filepath')); // by default custom path is true @@ -1402,7 +1628,7 @@ class Structure extends Get // triget fullpath $customPath = 'full'; } - // make we have not duplicates + // make sure we have not duplicates $key_pointer = ComponentbuilderHelper::safeString($custom['file']) . '_g' . $pointer_tracker; $pointer_tracker++; // set new file to object @@ -1416,7 +1642,7 @@ class Structure extends Get { $pathInfo['dirname'] = trim($pathInfo['dirname'], '/'); // set the info - $versionData->move->static->{$key_pointer}->path = 'c0mp0n3nt/' . $pathInfo['dirname']; + $versionData->move->static->{$key_pointer}->path = $_target_type . '/' . $pathInfo['dirname']; $versionData->move->static->{$key_pointer}->rename = 'new'; $versionData->move->static->{$key_pointer}->newName = $pathInfo['basename']; } @@ -1427,7 +1653,7 @@ class Structure extends Get // get file array $fileArray = (array) explode('/', $custom['file']); // set the info - $versionData->move->static->{$key_pointer}->path = 'c0mp0n3nt/' . $custom['path']; + $versionData->move->static->{$key_pointer}->path = $_target_type . '/' . $custom['path']; $versionData->move->static->{$key_pointer}->rename = 'new'; $versionData->move->static->{$key_pointer}->newName = end($fileArray); } @@ -1436,11 +1662,16 @@ class Structure extends Get // fix custom path $custom['path'] = ltrim($custom['path'], '/'); // set the info - $versionData->move->static->{$key_pointer}->path = 'c0mp0n3nt/' . $custom['path']; + $versionData->move->static->{$key_pointer}->path = $_target_type . '/' . $custom['path']; $versionData->move->static->{$key_pointer}->rename = false; } $versionData->move->static->{$key_pointer}->type = 'file'; $versionData->move->static->{$key_pointer}->custom = $customPath; + // set the target if type and id is found + if (isset($custom['target_id']) && isset($custom['target_type'])) + { + $versionData->move->static->{$key_pointer}->_target = array('key' => $custom['target_id'] . '_' . $custom['target_type'], 'type' => $custom['target_type']); + } // check if file should be updated if (!isset($custom['notnew']) || $custom['notnew'] == 0 || $custom['notnew'] != 1) { @@ -1466,17 +1697,22 @@ class Structure extends Get * @return void * */ - private function indexHTML($path) + private function indexHTML($path, $root = 'component') { + if ('component' === $root) + { + $root = $this->componentPath; + } + // use path if exist if (strlen($path) > 0) { - JFile::copy($this->templatePath . '/index.html', $this->componentPath . '/' . $path . '/index.html'); + JFile::copy($this->templatePath . '/index.html', $root . '/' . $path . '/index.html'); // count the file created $this->fileCount++; } else { - JFile::copy($this->templatePath . '/index.html', $this->componentPath . '/index.html'); + JFile::copy($this->templatePath . '/index.html', $root . '/index.html'); // count the file created $this->fileCount++; } diff --git a/admin/helpers/compiler/e_Interpretation.php b/admin/helpers/compiler/e_Interpretation.php index 1db371306..b0d7de3ba 100644 --- a/admin/helpers/compiler/e_Interpretation.php +++ b/admin/helpers/compiler/e_Interpretation.php @@ -14040,7 +14040,7 @@ class Interpretation extends Fields if (isset($newxmlField->fieldXML)) { $xmlField = dom_import_simplexml($newxmlField->fieldXML); - $xmlField = PHP_EOL . $this->_t(1) . "' . PHP_EOL . $this->_t(1) . $this->xmlPrettyPrint($xmlField, 'field'); + $xmlField = PHP_EOL . $this->_t(1) . "' . PHP_EOL . $this->_t(1) . $this->xmlPrettyPrint($xmlField, 'field'); } } // make sure the xml is set and a string @@ -16293,4 +16293,209 @@ function vdm_dkim() { return $matches[1]; } + public function getPluginMainClass(&$plugin) + { + return + PHP_EOL . $plugin->head . PHP_EOL . + $plugin->comment . PHP_EOL . 'class ' . + $plugin->class_name . ' extends ' . + $plugin->extends . PHP_EOL . '{' . PHP_EOL . + $plugin->main_class_code . PHP_EOL . + "}" . PHP_EOL; + } + + public function getPluginMainXML(&$plugin) + { + // tweak system to set stuff to the plugin domain + $_backup_target = $this->target; + $_backup_lang = $this->lang; + $_backup_langPrefix = $this->langPrefix; + $this->target = $plugin->key; + $this->lang = $plugin->key; + $this->langPrefix = $plugin->lang_prefix; + $view = ''; + $viewType = 0; + // set the custom table key + $dbkey = 'yy'; + // build the xml + $xml = ''; + // build the config fields + $config_field = ''; + foreach ($plugin->config_fields as $field) + { + // check the field builder type + if ($this->fieldBuilderType == 1) + { + // string manipulation + $xmlField = $this->setDynamicField($field, $view, $viewType, $plugin->lang_prefix, $plugin->key, $plugin->key, $this->globalPlaceholders, $dbkey, false); + } + else + { + // simpleXMLElement class + $newxmlField = $this->setDynamicField($field, $view, $viewType, $plugin->lang_prefix, $plugin->key, $plugin->key, $this->globalPlaceholders, $dbkey, false); + if (isset($newxmlField->fieldXML)) + { + $xmlField = dom_import_simplexml($newxmlField->fieldXML); + $xmlField = PHP_EOL . $this->_t(2) . "' . PHP_EOL . $this->_t(1) . $this->xmlPrettyPrint($xmlField, 'field'); + } + } + // make sure the xml is set and a string + if (isset($xmlField) && ComponentbuilderHelper::checkString($xmlField)) + { + $config_field .= $xmlField; + } + } + // switch to add the xml + $addLang = false; + // now build the language files + if (isset($this->langContent[$plugin->key])) + { + $lang = array_map(function ($langstring, $placeholder) + { + return $placeholder . '="' . $langstring . '"'; + }, $this->langContent[$plugin->key], array_keys($this->langContent[$plugin->key])); + // add to language file + $this->writeFile($plugin->folder_path . '/language/' . $this->langTag . '/' . $this->langTag . '.plg_' . strtolower($plugin->group) . '_' . strtolower($plugin->name) . '.ini', implode(PHP_EOL, $lang)); + $this->writeFile($plugin->folder_path . '/language/' . $this->langTag . '/' . $this->langTag . '.plg_' . strtolower($plugin->group) . '_' . strtolower($plugin->name) . '.sys.ini', implode(PHP_EOL, $lang)); + // set the line counter + $this->lineCount = $this->lineCount + count((array) $lang); + unset($lang); + // trigger the xml + $addLang = true; + } + // get all files and folders in plugin folder + $files = JFolder::files($plugin->folder_path); + $folders = JFolder::folders($plugin->folder_path); + // the files/folders to ignore + $ignore = array('sql', 'language', 'script.php', $plugin->file_name . '.xml', $plugin->file_name . '.php'); + // should the scriptfile be added + if ($plugin->add_install_script) + { + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . 'script.php'; + } + // should the sql install be added + if ($plugin->add_sql) + { + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(2) . ''; + $xml .= PHP_EOL . $this->_t(3) . 'sql/mysql/install.sql'; + $xml .= PHP_EOL . $this->_t(2) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + } + // should the sql uninstall be added + if ($plugin->add_sql_uninstall) + { + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(2) . ''; + $xml .= PHP_EOL . $this->_t(3) . 'sql/mysql/uninstall.sql'; + $xml .= PHP_EOL . $this->_t(2) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + } + // should the language xml be added + if ($addLang) + { + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(2) . '' . $this->langTag . '/' . $this->langTag . '.plg_' . strtolower($plugin->group) . '_' . strtolower($plugin->name) . '.ini'; + $xml .= PHP_EOL . $this->_t(2) . '' . $this->langTag . '/' . $this->langTag . '.plg_' . strtolower($plugin->group) . '_' . strtolower($plugin->name) . '.sys.ini'; + $xml .= PHP_EOL . $this->_t(1) . ''; + } + // add the plugin files + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(2) . '' . $plugin->file_name . '.php'; + // add other files found + if (ComponentbuilderHelper::checkArray($files)) + { + foreach ($files as $file) + { + // only add what is not ignored + if (!in_array($file, $ignore)) + { + $xml .= PHP_EOL . $this->_t(2) . '' . $file . ''; + } + } + } + // add language folder + if ($addLang) + { + $xml .= PHP_EOL . $this->_t(2) . 'language'; + } + // add sql folder + if ($plugin->add_sql || $plugin->add_sql_uninstall) + { + $xml .= PHP_EOL . $this->_t(2) . 'sql'; + } + // add other files found + if (ComponentbuilderHelper::checkArray($folders)) + { + foreach ($folders as $folder) + { + // only add what is not ignored + if (!in_array($folder, $ignore)) + { + $xml .= PHP_EOL . $this->_t(2) . '' . $folder . ''; + } + } + } + $xml .= PHP_EOL . $this->_t(1) . ''; + // now add the Config Params if needed + if (ComponentbuilderHelper::checkString($config_field)) + { + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . '
'; + $xml .= $config_field; + $xml .= PHP_EOL . $this->_t(1) . '
'; + $xml .= PHP_EOL . $this->_t(1) . '
'; + $xml .= PHP_EOL . $this->_t(1) . '
'; + } + // set update server if found + if ($plugin->add_update_server) + { + $xml .= PHP_EOL . PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + $xml .= PHP_EOL . $this->_t(2) . '' . $plugin->update_server_url . ''; + $xml .= PHP_EOL . $this->_t(1) . ''; + } + // rest globals + $this->target = $_backup_target; + $this->lang = $_backup_lang; + $this->langPrefix = $_backup_langPrefix; + + return $xml; + } + + public function getPluginInstallClass(&$plugin) + { + // yes we are adding it + $script = PHP_EOL . '/**'; + $script .= PHP_EOL . ' * ' . $plugin->name . ' script file.'; + $script .= PHP_EOL . ' *'; + $script .= PHP_EOL . ' * @package ' . $plugin->class_name; + $script .= PHP_EOL . ' */'; + $script .= PHP_EOL . 'class ' . $plugin->installer_class_name; + $script .= PHP_EOL . '{'; + // add PHP in plugin install + $addScriptMethods = array('php_preflight', 'php_postflight', 'php_method'); + $addScriptTypes = array('install', 'update', 'uninstall'); + foreach ($addScriptMethods as $scriptMethod) + { + foreach ($addScriptTypes as $scriptType) + { + if (isset($plugin->{'add_' . $scriptMethod . '_' . $scriptType}) && $plugin->{'add_' . $scriptMethod . '_' . $scriptType} == 1 && ComponentbuilderHelper::checkString($plugin->{$scriptMethod . '_' . $scriptType})) + { + // (TODO) must still finish + $script .= PHP_EOL . '//' . $this->setLine(__LINE__) . ' This part of the new plugin area is not ready yet, soon!'; + } + } + } + $script .= PHP_EOL . '}' . PHP_EOL; + return $script; + } + } diff --git a/admin/helpers/compiler/f_Infusion.php b/admin/helpers/compiler/f_Infusion.php index 61e1c5041..e7f5aa4ca 100644 --- a/admin/helpers/compiler/f_Infusion.php +++ b/admin/helpers/compiler/f_Infusion.php @@ -1033,7 +1033,28 @@ class Infusion extends Interpretation } // Trigger Event: jcb_ce_onAfterBuildFilesContent - $this->triggerEvent('jcb_ce_onAfterBuildFilesContent', array(&$this->componentContext, &$this->componentData, &$this->fileContentStatic, &$this->fileContentDynamic, &$this->placeholders, &$this->hhh)); + $this->triggerEvent('jcb_ce_onAfterBuildFilesContent', array(&$this->componentContext, &$this->componentData, &$this->fileContentStatic, &$this->fileContentDynamic, &$this->placeholders, &$this->hhh));// Trigger Event: jcb_ce_onBeforeSetPlugins + + // infuze plugin data if set + if (ComponentbuilderHelper::checkArray($this->componentData->joomla_plugins)) + { + foreach ($this->componentData->joomla_plugins as $plugin) + { + if (ComponentbuilderHelper::checkObject($plugin)) + { + // MAINCLASS + $this->fileContentDynamic[$plugin->key][$this->hhh . 'MAINCLASS' . $this->hhh] = $this->getPluginMainClass($plugin); + // only add install script if needed + if ($plugin->add_install_script) + { + // INSTALLCLASS + $this->fileContentDynamic[$plugin->key][$this->hhh . 'INSTALLCLASS' . $this->hhh] = $this->getPluginInstallClass($plugin); + } + // MAINXML + $this->fileContentDynamic[$plugin->key][$this->hhh . 'MAINXML' . $this->hhh] = $this->getPluginMainXML($plugin); + } + } + } return true; } diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index d7463fbfa..cff883ed2 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -1081,7 +1081,7 @@ abstract class ComponentbuilderHelper * @return void * */ - public static function getAllFilePaths($folder, $fileTypes = array('\.php', '\.js', '\.css', '\.less')) + public static function getAllFilePaths($folder, $fileTypes = array('\.php', '\.js', '\.css', '\.less'), $recurse = true, $full = true) { if (JFolder::exists($folder)) { @@ -1089,11 +1089,25 @@ abstract class ComponentbuilderHelper $joomla = getcwd(); // we are changing the working directory to the componet path chdir($folder); - // get the files - foreach ($fileTypes as $type) + // make sure we have file type filter + if (self::checkArray($fileTypes)) + { + // get the files + foreach ($fileTypes as $type) + { + // get a list of files in the current directory tree + $files[] = JFolder::files('.', $type, $recurse, $full); + } + } + elseif (self::checkString($fileTypes)) { // get a list of files in the current directory tree - $files[] = JFolder::files('.', $type, true, true); + $files[] = JFolder::files('.', $fileTypes, $recurse, $full); + } + else + { + // get a list of files in the current directory tree + $files[] = JFolder::files('.', '.', $recurse, $full); } // change back to Joomla working directory chdir($joomla); diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index b73c16147..a07f56a6d 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -6098,8 +6098,8 @@ COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_SAVE_WARNING="Alias alread COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_STATUS="Status" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_TYPE_DESCRIPTION="way url is used" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_TYPE_LABEL="Type" -COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_URL_DESCRIPTION="Enter URL to library file." -COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_URL_HINT="http://www.example.com/lib.js" +COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_URL_DESCRIPTION="Enter URL to file." +COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_URL_HINT="http://www.example.com/file.js" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_URL_LABEL="URL" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_URL_MESSAGE="Error! Please add url here." COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_VERSION_DESC="A count of the number of times this Joomla Plugin Files, Folders & URLs has been revised." @@ -6846,8 +6846,8 @@ COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_SAVE_WARNING="Alias already exis COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_STATUS="Status" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_TYPE_DESCRIPTION="way url is used" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_TYPE_LABEL="Type" -COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_URL_DESCRIPTION="Enter URL to library file." -COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_URL_HINT="http://www.example.com/lib.js" +COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_URL_DESCRIPTION="Enter URL to file." +COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_URL_HINT="http://www.example.com/file.js" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_URL_LABEL="URL" COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_URL_MESSAGE="Error! Please add url here." COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_VERSION_DESC="A count of the number of times this Library Files, Folders & URLs has been revised." diff --git a/componentbuilder.xml b/componentbuilder.xml index 4906838a1..8625d3649 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,7 +1,7 @@ COM_COMPONENTBUILDER - 29th July, 2019 + 4th August, 2019 Llewellyn van der Merwe llewellyn@joomlacomponentbuilder.com http://www.joomlacomponentbuilder.com diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index a1e5e28b5..99f6666b1 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -1081,7 +1081,7 @@ abstract class ComponentbuilderHelper * @return void * */ - public static function getAllFilePaths($folder, $fileTypes = array('\.php', '\.js', '\.css', '\.less')) + public static function getAllFilePaths($folder, $fileTypes = array('\.php', '\.js', '\.css', '\.less'), $recurse = true, $full = true) { if (JFolder::exists($folder)) { @@ -1089,11 +1089,25 @@ abstract class ComponentbuilderHelper $joomla = getcwd(); // we are changing the working directory to the componet path chdir($folder); - // get the files - foreach ($fileTypes as $type) + // make sure we have file type filter + if (self::checkArray($fileTypes)) + { + // get the files + foreach ($fileTypes as $type) + { + // get a list of files in the current directory tree + $files[] = JFolder::files('.', $type, $recurse, $full); + } + } + elseif (self::checkString($fileTypes)) { // get a list of files in the current directory tree - $files[] = JFolder::files('.', $type, true, true); + $files[] = JFolder::files('.', $fileTypes, $recurse, $full); + } + else + { + // get a list of files in the current directory tree + $files[] = JFolder::files('.', '.', $recurse, $full); } // change back to Joomla working directory chdir($joomla);