";
+ // 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] . "" . $ename . ">";
}
- // 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] . "" . $ename . ">";
}
}
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 .= 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, 2019Llewellyn van der Merwellewellyn@joomlacomponentbuilder.comhttp://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);