Release of v5.1.1-rc1
Move all banners to GitHub. Adds library phpspreadsheet to JCB. Adds import item example to demo component. Updates the Superpower class with the GetRemote class in the plugin. Ensures the super power autoloader triggers the correct repositories. Adds the ModalSelect fieldtype to Joomla Component Builder - J5. Adds the Data Import Function to the Demo Component. Adds new country related tables and fields to the Demo Component. Resolves the Database Updating issue in the compiler. #1212,#1209. Adds the Component Commands Plugin to the CLI for Import of spreadsheet data-sets. Add edit and create options to the ModalSelect Field (in Joomla 5). Add all needed Powers to the release package, to speed-up the build of the demo component. Refactor initialization flow to accommodate future scalability and integration with all designated areas. Refactor the Creator Builders class. Refactor the FieldString and FieldXML classes. Add JCB new package engine. Enhance operator support in dynamic get system. Relates to issue #1226. Fixes issue with loading the Component Builder Wiki. Adds advanced version update notice to the Component Builder Dashboard. Completely refactors the class that builds the Component Dashboard. #1134. Fix the FieldXML interface mismatch. #1228. Adds Initialize, Reset, and Push functionality to the Repository entities. Completely refactors the SQL tweaks and SQL dump classes. Fix bug in the filter of Languages by linked entities. #1230.
This commit is contained in:
26 files changed
+795
-980
No files matched your search
@@ -420,7 +420,7 @@ abstract class ComponentbuilderEmail
|
||||
'<title>' . htmlspecialchars($subject) . '</title>',
|
||||
'<style type="text/css">',
|
||||
'#outlook a {padding:0;} .ExternalClass {width:100%;} .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height:100%;}',
|
||||
'p {margin: 0; padding: 0; font-size: 0px; line-height: 0px;}',
|
||||
// 'p {margin: 0; padding: 0; font-size: 0px; line-height: 0px;}',
|
||||
'table, table td {border-collapse: collapse;}',
|
||||
'img {display:block; outline:none; text-decoration:none; -ms-interpolation-mode:bicubic;}',
|
||||
'a img {border:none;} a {text-decoration:none; color:#000001;} a.phone {pointer-events:auto; cursor:default; color:#000001 !important;}',
|
||||
@@ -456,7 +456,7 @@ abstract class ComponentbuilderEmail
|
||||
'<title>' . htmlspecialchars($subject) . '</title>',
|
||||
'<style type="text/css">',
|
||||
'#outlook a {padding:0;} .ExternalClass {width:100%;} .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height:100%;}',
|
||||
'p {margin: 0; padding: 0; font-size: 0px; line-height: 0px;}',
|
||||
// 'p {margin: 0; padding: 0; font-size: 0px; line-height: 0px;}',
|
||||
'table, table td {border-collapse: collapse;}',
|
||||
'img {display:block; outline:none; text-decoration:none; -ms-interpolation-mode:bicubic;}',
|
||||
'a img {border:none;} a {text-decoration:none; color:#000001;} a.phone {pointer-events:auto; cursor:default; color:#000001 !important;}',
|
||||
|
||||
@@ -38,14 +38,15 @@ use Joomla\Archive\Archive;
|
||||
use Joomla\Filesystem\Folder;
|
||||
use Joomla\Filesystem\Path;
|
||||
use VDM\Joomla\Openai\Factory as OpenaiFactory;
|
||||
use VDM\Joomla\Utilities\GuidHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper as UtilitiesStringHelper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
use VDM\Joomla\Data\Factory as DataFactory;
|
||||
use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper;
|
||||
use VDM\Joomla\Utilities\FileHelper;
|
||||
use VDM\Joomla\Utilities\GuidHelper;
|
||||
use VDM\Joomla\Utilities\JsonHelper;
|
||||
use VDM\Joomla\Utilities\StringHelper as UtilitiesStringHelper;
|
||||
use VDM\Joomla\Utilities\ObjectHelper;
|
||||
use VDM\Joomla\Utilities\FileHelper;
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
use VDM\Joomla\Utilities\GetHelper;
|
||||
use VDM\Joomla\Utilities\SessionHelper;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Utilities\FieldHelper;
|
||||
use VDM\Joomla\Componentbuilder\Compiler\Factory as CompilerFactory;
|
||||
@@ -103,12 +104,12 @@ abstract class ComponentbuilderHelper
|
||||
/**
|
||||
* Locked Libraries (we can not have these change)
|
||||
**/
|
||||
public static $libraryNames = array(1 => 'No Library', 2 => 'Bootstrap v4', 3 => 'Uikit v3', 4 => 'Uikit v2', 5 => 'FooTable v2', 6 => 'FooTable v3');
|
||||
public static $libraryNames = [1 => 'No Library', 2 => 'Bootstrap v4', 3 => 'Uikit v3', 4 => 'Uikit v2', 5 => 'FooTable v2', 6 => 'FooTable v3'];
|
||||
|
||||
/**
|
||||
* Array of php fields Allowed (16)
|
||||
**/
|
||||
public static $phpFieldArray = array('', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'x', 'HEADER');
|
||||
public static $phpFieldArray = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'x', 'HEADER'];
|
||||
|
||||
/**
|
||||
* The global params
|
||||
@@ -130,30 +131,6 @@ abstract class ComponentbuilderHelper
|
||||
**/
|
||||
protected static $exPowers= array();
|
||||
|
||||
/**
|
||||
* The snippet paths
|
||||
**/
|
||||
public static $snippetPath = 'https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder-Snippets/master/';
|
||||
public static $snippetsPath = 'https://api.github.com/repos/vdm-io/Joomla-Component-Builder-Snippets/git/trees/master';
|
||||
|
||||
/**
|
||||
* The VDM packages paths
|
||||
**/
|
||||
public static $vdmGithubPackageUrl = "https://github.com/vdm-io/JCB-Packages/raw/master/";
|
||||
public static $vdmGithubPackagesUrl = "https://api.github.com/repos/vdm-io/JCB-Packages/git/trees/master";
|
||||
|
||||
/**
|
||||
* The JCB packages paths
|
||||
**/
|
||||
public static $jcbGithubPackageUrl = "https://github.com/vdm-io/JCB-Community-Packages/raw/master/";
|
||||
public static $jcbGithubPackagesUrl = "https://api.github.com/repos/vdm-io/JCB-Community-Packages/git/trees/master";
|
||||
|
||||
/**
|
||||
* The bolerplate paths
|
||||
**/
|
||||
public static $bolerplatePath = 'https://raw.githubusercontent.com/vdm-io/boilerplate/jcb/';
|
||||
public static $bolerplateAPI = 'https://api.github.com/repos/vdm-io/boilerplate/git/trees/jcb';
|
||||
|
||||
/**
|
||||
* The array of constant paths
|
||||
*
|
||||
@@ -206,527 +183,37 @@ abstract class ComponentbuilderHelper
|
||||
);
|
||||
|
||||
/**
|
||||
* get the class method or property
|
||||
* Retrieves an associative array of published language tags as headers.
|
||||
*
|
||||
* @input mixed The method/property ID|GUID
|
||||
* @input string The target type
|
||||
* The returned array is used to build header labels for language translations.
|
||||
* Includes a default 'source' => 'source' entry.
|
||||
*
|
||||
* @returns string on success
|
||||
* @since 3.0.0
|
||||
* @return array<string, string> Associative array of language headers
|
||||
* @since 5.1.1
|
||||
*/
|
||||
public static function getClassCode($target, string $type): ?string
|
||||
public static function getLanguageTranslationsHeaders(): array
|
||||
{
|
||||
if ('property' === $type || 'method' === $type)
|
||||
{
|
||||
if (GuidHelper::valid($target))
|
||||
{
|
||||
$key = 'guid';
|
||||
}
|
||||
elseif (is_numeric($target))
|
||||
{
|
||||
$key = 'id';
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
$values = DataFactory::_('Load')->values(
|
||||
['langtag'], ['language'], ['published' => 1], ['name' => 'ASC']
|
||||
);
|
||||
|
||||
// Get a db connection.
|
||||
$db = Factory::getDbo();
|
||||
// Get user object
|
||||
$user = Factory::getUser();
|
||||
// Create a new query object.
|
||||
$query = $db->getQuery(true);
|
||||
// get method
|
||||
if ('method' === $type)
|
||||
{
|
||||
$query->select($db->quoteName(['a.comment','a.name','a.visibility','a.arguments','a.code']));
|
||||
}
|
||||
// get property
|
||||
elseif ('property' === $type)
|
||||
{
|
||||
$query->select($db->quoteName(['a.comment','a.name','a.visibility','a.default']));
|
||||
}
|
||||
$query->from($db->quoteName('#__componentbuilder_class_' . $type, 'a'));
|
||||
$query->where($db->quoteName('a.' . $key) . ' = ' . $db->quote($target));
|
||||
// Implement View Level Access
|
||||
if (!$user->authorise('core.options', 'com_componentbuilder'))
|
||||
{
|
||||
$columns = $db->getTableColumns('#__componentbuilder_class_' . $type);
|
||||
if(isset($columns['access']))
|
||||
{
|
||||
$groups = implode(',', $user->getAuthorisedViewLevels());
|
||||
$query->where('a.access IN (' . $groups . ')');
|
||||
}
|
||||
}
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
// get the code
|
||||
$code = $db->loadObject();
|
||||
// combine method values
|
||||
$combinded = [];
|
||||
// add comment if set
|
||||
if (UtilitiesStringHelper::check($code->comment))
|
||||
{
|
||||
$comment = array_map('trim', (array) explode(PHP_EOL, base64_decode($code->comment)));
|
||||
$combinded[] = "\t" . implode(PHP_EOL . "\t ", $comment);
|
||||
}
|
||||
// build method
|
||||
if ('method' === $type)
|
||||
{
|
||||
// set the method signature
|
||||
if (UtilitiesStringHelper::check($code->arguments))
|
||||
{
|
||||
$combinded[] = "\t" . $code->visibility . ' function ' . $code->name . '(' . base64_decode($code->arguments) . ')';
|
||||
}
|
||||
else
|
||||
{
|
||||
$combinded[] = "\t" . $code->visibility . ' function ' . $code->name . '()';
|
||||
}
|
||||
// set the method code
|
||||
$combinded[] = "\t" . "{";
|
||||
// add code if set
|
||||
if (UtilitiesStringHelper::check(trim($code->code)))
|
||||
{
|
||||
$combinded[] = base64_decode($code->code);
|
||||
}
|
||||
else
|
||||
{
|
||||
$combinded[] = "\t\t// add your code here";
|
||||
}
|
||||
$combinded[] = "\t" . "}";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (UtilitiesStringHelper::check($code->default))
|
||||
{
|
||||
$code->default = base64_decode($code->default);
|
||||
if (is_int($code->default))
|
||||
{
|
||||
// set the class property
|
||||
$combinded[] = "\t" . $code->visibility . ' $' . $code->name . ' = ' . (int) $code->default . ';';
|
||||
}
|
||||
elseif (is_float($code->default))
|
||||
{
|
||||
// set the class property
|
||||
$combinded[] = "\t" . $code->visibility . ' $' . $code->name . ' = ' . (float) $code->default . ';';
|
||||
}
|
||||
elseif (('false' === $code->default || 'true' === $code->default)
|
||||
|| (UtilitiesStringHelper::check($code->default) && (strpos($code->default, 'array(') !== false || strpos($code->default, '"') !== false)))
|
||||
{
|
||||
// set the class property
|
||||
$combinded[] = "\t" . $code->visibility . ' $' . $code->name . ' = ' . $code->default . ';';
|
||||
}
|
||||
elseif (UtilitiesStringHelper::check($code->default) && strpos($code->default, '"') === false)
|
||||
{
|
||||
// set the class property
|
||||
$combinded[] = "\t" . $code->visibility . ' $' . $code->name . ' = "' . $code->default . '";';
|
||||
}
|
||||
else
|
||||
{
|
||||
// set the class property
|
||||
$combinded[] = "\t" . $code->visibility . ' $' . $code->name . ';';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// set the class property
|
||||
$combinded[] = "\t" . $code->visibility . ' $' . $code->name . ';';
|
||||
}
|
||||
}
|
||||
// return the code
|
||||
return implode(PHP_EOL, $combinded);
|
||||
}
|
||||
if (empty($values))
|
||||
{
|
||||
// return default array
|
||||
return ['source' => 'source', 'af-ZA' => 'af-ZA', 'nl-NL' => 'nl-NL', 'fr-FR' => 'fr-FR', 'de-DE' => 'de-DE', 'pt-PT' => 'pt-PT', 'ru-RU' => 'ru-RU'];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract Boilerplate Class Extends
|
||||
*
|
||||
* @input string The class as a string
|
||||
* @input string The type of class/extension
|
||||
*
|
||||
* @returns string on success
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public static function extractBoilerplateClassExtends(&$class, $type)
|
||||
{
|
||||
if (($strings = GetHelper::allBetween($class, 'class ', '}')) !== false && UtilitiesArrayHelper::check($strings))
|
||||
{
|
||||
foreach ($strings as $string)
|
||||
{
|
||||
if (($extends = GetHelper::between($string, 'extends ', '{')) !== false && UtilitiesStringHelper::check($extends))
|
||||
{
|
||||
return trim($extends);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
$headers = ['source' => 'source'];
|
||||
|
||||
/**
|
||||
* extract Boilerplate Class Header
|
||||
*
|
||||
* @input string The class as a string
|
||||
* @input string The class being extended
|
||||
* @input string The type of class/extension
|
||||
*
|
||||
* @returns string on success
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public static function extractBoilerplateClassHeader(&$class, $extends, $type)
|
||||
{
|
||||
if (($string = GetHelper::between($class, "defined('_JEXEC')", 'extends ' . $extends)) !== false && UtilitiesStringHelper::check($string))
|
||||
foreach ($values as $value)
|
||||
{
|
||||
$headArray = explode(PHP_EOL, $string);
|
||||
if (UtilitiesArrayHelper::check($headArray) && count($headArray) > 3)
|
||||
if (is_string($value) && trim($value) !== '')
|
||||
{
|
||||
// remove first since it still has the [or die;] string in it
|
||||
array_shift($headArray);
|
||||
// remove the last since it has the class declaration
|
||||
array_pop($headArray);
|
||||
// at this point we have the class comment still in as part of the header, lets remove that
|
||||
$last = count($headArray);
|
||||
while ($last > 0)
|
||||
{
|
||||
$last--;
|
||||
if (isset($headArray[$last]) && strpos($headArray[$last], '*') !== false)
|
||||
{
|
||||
unset($headArray[$last]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// moment the comment stops, we break out
|
||||
$last = 0;
|
||||
}
|
||||
}
|
||||
// make sure we only return if we have values
|
||||
if (UtilitiesArrayHelper::check($headArray))
|
||||
{
|
||||
return implode(PHP_EOL, $headArray);
|
||||
}
|
||||
$headers[$value] = $value;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract Boilerplate Class Comment
|
||||
*
|
||||
* @input string The class as a string
|
||||
* @input string The class being extended
|
||||
* @input string The type of class/extension
|
||||
*
|
||||
* @returns string on success
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public static function extractBoilerplateClassComment(&$class, $extends, $type)
|
||||
{
|
||||
if (($string = GetHelper::between($class, "defined('_JEXEC')", 'extends ' . $extends)) !== false && UtilitiesStringHelper::check($string))
|
||||
{
|
||||
$headArray = explode(PHP_EOL, $string);
|
||||
if (UtilitiesArrayHelper::check($headArray) && count($headArray) > 3)
|
||||
{
|
||||
$comment = array();
|
||||
// remove the last since it has the class declaration
|
||||
array_pop($headArray);
|
||||
// at this point we have the class comment still in as part of the header, lets remove that
|
||||
$last = count($headArray);
|
||||
while ($last > 0)
|
||||
{
|
||||
$last--;
|
||||
if (isset($headArray[$last]) && strpos($headArray[$last], '*') !== false)
|
||||
{
|
||||
$comment[$last] = $headArray[$last];
|
||||
}
|
||||
else
|
||||
{
|
||||
// moment the comment stops, we break out
|
||||
$last = 0;
|
||||
}
|
||||
}
|
||||
// make sure we only return if we have values
|
||||
if (UtilitiesArrayHelper::check($comment))
|
||||
{
|
||||
// set the correct order
|
||||
ksort($comment);
|
||||
$replace = array('Foo' => '[[[Plugin_name]]]', '[PACKAGE_NAME]' => '[[[Plugin]]]', '1.0.0' => '[[[plugin.version]]]', '1.0' => '[[[plugin.version]]]');
|
||||
// now update with JCB placeholders
|
||||
return str_replace(array_keys($replace), array_values($replace), implode(PHP_EOL, $comment));
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract Boilerplate Class Properties & Methods
|
||||
*
|
||||
* @input string The class as a string
|
||||
* @input string The class being extended
|
||||
* @input string The type of class/extension
|
||||
* @input int The plugin groups
|
||||
*
|
||||
* @returns string on success
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public static function extractBoilerplateClassPropertiesMethods(&$class, $extends, $type, $plugin_group = null)
|
||||
{
|
||||
$bucket = array('property' => array(), 'method' => array());
|
||||
// get the class code, and remove the head
|
||||
$codeArrayTmp = explode('extends ' . $extends, $class);
|
||||
// make sure we have the correct result
|
||||
if (UtilitiesArrayHelper::check($codeArrayTmp) && count($codeArrayTmp) == 2)
|
||||
{
|
||||
// the triggers
|
||||
$triggers = array('public' => 1, 'protected' => 2, 'private' => 3);
|
||||
$codeArray = explode(PHP_EOL, $codeArrayTmp[1]);
|
||||
unset($codeArrayTmp);
|
||||
// clean the code
|
||||
self::cleanBoilerplateCode($codeArray);
|
||||
// temp bucket
|
||||
$name = null;
|
||||
$arg = null;
|
||||
$target = null;
|
||||
$visibility = null;
|
||||
$tmp = array();
|
||||
$comment = array();
|
||||
// load method
|
||||
$loadCode = function (&$bucket, &$target, &$name, &$arg, &$visibility, &$tmp, &$comment) use($type, $plugin_group){
|
||||
$_tmp = array(
|
||||
'name' => $name,
|
||||
'visibility' => $visibility,
|
||||
'extension_type' => $type
|
||||
);
|
||||
// build filter
|
||||
$filters = array('extension_type' => $type);
|
||||
// add more data based on target
|
||||
if ('method' === $target && UtilitiesArrayHelper::check($tmp))
|
||||
{
|
||||
// clean the code
|
||||
self::cleanBoilerplateCode($tmp);
|
||||
// only load if there are values
|
||||
if (UtilitiesArrayHelper::check($tmp, true))
|
||||
{
|
||||
$_tmp['code'] = implode(PHP_EOL, $tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
$_tmp['code'] = '';
|
||||
}
|
||||
// load arguments only if set
|
||||
if (UtilitiesStringHelper::check($arg))
|
||||
{
|
||||
$_tmp['arguments'] = $arg;
|
||||
}
|
||||
}
|
||||
elseif ('property' === $target)
|
||||
{
|
||||
// load default only if set
|
||||
if (UtilitiesStringHelper::check($arg))
|
||||
{
|
||||
$_tmp['default'] = $arg;
|
||||
}
|
||||
}
|
||||
// load comment only if set
|
||||
if (UtilitiesArrayHelper::check($comment, true))
|
||||
{
|
||||
$_tmp['comment'] = implode(PHP_EOL, $comment);
|
||||
}
|
||||
// load the group target
|
||||
if ($plugin_group)
|
||||
{
|
||||
$_tmp['joomla_plugin_group'] = $plugin_group;
|
||||
$filters['joomla_plugin_group'] = $plugin_group;
|
||||
}
|
||||
// load the local values
|
||||
if (($locals = self::getLocalBoilerplate($name, $target, $type, $filters)) !== false)
|
||||
{
|
||||
foreach ($locals as $key => $value)
|
||||
{
|
||||
$_tmp[$key] = $value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$_tmp['id'] = 0;
|
||||
$_tmp['published'] = 1;
|
||||
$_tmp['version'] = 1;
|
||||
}
|
||||
// store the data based on target
|
||||
$bucket[$target][] = $_tmp;
|
||||
};
|
||||
// now we start loading
|
||||
foreach($codeArray as $line)
|
||||
{
|
||||
if ($visibility && $target && $name && strpos($line, '/**') !== false)
|
||||
{
|
||||
$loadCode($bucket, $target, $name, $arg, $visibility, $tmp, $comment);
|
||||
// reset loop buckets
|
||||
$name = null;
|
||||
$arg = null;
|
||||
$target = null;
|
||||
$visibility = null;
|
||||
$tmp = array();
|
||||
$comment = array();
|
||||
}
|
||||
// load the comment before method/property
|
||||
if (!$visibility && !$target && !$name && strpos($line, '*') !== false)
|
||||
{
|
||||
$comment[] = rtrim($line);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!$visibility && !$target && !$name)
|
||||
{
|
||||
// get the line values
|
||||
$lineArray = array_values(array_map('trim', preg_split('/\s+/', trim($line))));
|
||||
// check if we are at the main line
|
||||
if (isset($lineArray[0]) && isset($triggers[$lineArray[0]]))
|
||||
{
|
||||
$visibility = $lineArray[0];
|
||||
if (strpos($line, 'function') !== false)
|
||||
{
|
||||
$target = 'method';
|
||||
// get the name
|
||||
$name = trim(GetHelper::between($line, 'function ', '('));
|
||||
// get the arguments
|
||||
$arg = trim(GetHelper::between($line, ' ' . $name . '(', ')'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$target = 'property';
|
||||
if (strpos($line, '=') !== false)
|
||||
{
|
||||
// get the name
|
||||
$name = trim(GetHelper::between($line, '$', '='));
|
||||
// get the default
|
||||
$arg = trim(GetHelper::between($line, '=', ';'));
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the name
|
||||
$name = trim(GetHelper::between($line, '$', ';'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$tmp[] = rtrim($line);
|
||||
}
|
||||
}
|
||||
}
|
||||
// check if a last method is still around
|
||||
if ($visibility && $target && $name)
|
||||
{
|
||||
$loadCode($bucket, $target, $name, $arg, $visibility, $tmp, $comment);
|
||||
// reset loop buckets
|
||||
$name = null;
|
||||
$arg = null;
|
||||
$target = null;
|
||||
$visibility = null;
|
||||
$tmp = array();
|
||||
$comment = array();
|
||||
}
|
||||
return $bucket;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected static function getLocalBoilerplate($name, $table, $extension_type, $filters = array())
|
||||
{
|
||||
if ('property' === $table || 'method' === $table)
|
||||
{
|
||||
// Get a db connection.
|
||||
$db = Factory::getDbo();
|
||||
// Create a new query object.
|
||||
$query = $db->getQuery(true);
|
||||
// get method
|
||||
$query->select($db->quoteName(array('a.id','a.published','a.version')));
|
||||
$query->from($db->quoteName('#__componentbuilder_class_' . $table,'a'));
|
||||
$query->where($db->quoteName('a.name') . ' = ' . $db->quote($name));
|
||||
$query->where($db->quoteName('a.extension_type') . ' = ' . $db->quote($extension_type));
|
||||
// add more filters
|
||||
if (UtilitiesArrayHelper::check($filters))
|
||||
{
|
||||
foreach($filters as $where => $value)
|
||||
{
|
||||
if (is_numeric($value))
|
||||
{
|
||||
$query->where($db->quoteName('a.' . $where) . ' = ' . $value);
|
||||
}
|
||||
else
|
||||
{
|
||||
$query->where($db->quoteName('a.' . $where) . ' = ' . $db->quote($value));
|
||||
}
|
||||
}
|
||||
}
|
||||
$db->setQuery($query);
|
||||
$db->execute();
|
||||
if ($db->getNumRows())
|
||||
{
|
||||
// get the code
|
||||
return $db->loadAssoc();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected static function cleanBoilerplateCode(&$code)
|
||||
{
|
||||
// remove the first lines until a { is found
|
||||
$key = 0;
|
||||
$found = false;
|
||||
while (!$found)
|
||||
{
|
||||
if (isset($code[$key]))
|
||||
{
|
||||
if (strpos($code[$key], '{') !== false)
|
||||
{
|
||||
unset($code[$key]);
|
||||
// only remove the first } found
|
||||
$found = true;
|
||||
}
|
||||
// remove empty lines
|
||||
elseif (!UtilitiesStringHelper::check(trim($code[$key])))
|
||||
{
|
||||
unset($code[$key]);
|
||||
}
|
||||
}
|
||||
// check next line
|
||||
$key++;
|
||||
// stop loop at line 30 (really this should never happen)
|
||||
if ($key > 30)
|
||||
{
|
||||
$found = true;
|
||||
}
|
||||
}
|
||||
// reset all keys
|
||||
$code = array_values($code);
|
||||
// remove last lines until }
|
||||
$last = count($code);
|
||||
while ($last > 0)
|
||||
{
|
||||
$last--;
|
||||
if (isset($code[$last]))
|
||||
{
|
||||
if (strpos($code[$last], '}') !== false)
|
||||
{
|
||||
unset($code[$last]);
|
||||
// only remove the first } found
|
||||
$last = 0;
|
||||
}
|
||||
// remove empty lines
|
||||
elseif (!UtilitiesStringHelper::check(trim($code[$last])))
|
||||
{
|
||||
unset($code[$last]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $headers;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -797,81 +284,6 @@ abstract class ComponentbuilderHelper
|
||||
return is_array($items) ? $items : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the snippet contributor details
|
||||
*
|
||||
* @param string $filename The file name
|
||||
* @param string $type The type of file
|
||||
*
|
||||
* @return array On success the contributor details
|
||||
* @since 3.0.0
|
||||
*/
|
||||
public static function getContributorDetails(string $filename, string $type = 'snippet'): ?array
|
||||
{
|
||||
// start loading the contributor details
|
||||
$contributor = [];
|
||||
|
||||
// get the path & content
|
||||
switch ($type)
|
||||
{
|
||||
case 'snippet':
|
||||
$path = self::$snippetPath.$filename;
|
||||
// get the file if available
|
||||
$content = FileHelper::getContent($path);
|
||||
if (JsonHelper::check($content))
|
||||
{
|
||||
$content = json_decode($content, true);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// only allow types that are being targeted
|
||||
return null;
|
||||
break;
|
||||
}
|
||||
|
||||
// see if we have content and all needed details
|
||||
if (isset($content) && UtilitiesArrayHelper::check($content)
|
||||
&& isset($content['contributor_company'])
|
||||
&& isset($content['contributor_name'])
|
||||
&& isset($content['contributor_email'])
|
||||
&& isset($content['contributor_website']))
|
||||
{
|
||||
// got the details from file
|
||||
return [
|
||||
'contributor_company' => $content['contributor_company'] ,
|
||||
'contributor_name' => $content['contributor_name'],
|
||||
'contributor_email' => $content['contributor_email'],
|
||||
'contributor_website' => $content['contributor_website'],
|
||||
'origin' => 'file'
|
||||
];
|
||||
}
|
||||
|
||||
// get the global settings
|
||||
if (!ObjectHelper::check(self::$params))
|
||||
{
|
||||
self::$params = ComponentHelper::getParams('com_componentbuilder');
|
||||
}
|
||||
|
||||
// get the global company details
|
||||
if (!UtilitiesArrayHelper::check(self::$localCompany))
|
||||
{
|
||||
// Set the person sharing information (default VDM ;)
|
||||
self::$localCompany['company'] = self::$params->get('export_company', 'Vast Development Method');
|
||||
self::$localCompany['owner'] = self::$params->get('export_owner', 'Llewellyn van der Merwe');
|
||||
self::$localCompany['email'] = self::$params->get('export_email', 'joomla@vdm.io');
|
||||
self::$localCompany['website'] = self::$params->get('export_website', 'https://www.vdm.io/');
|
||||
}
|
||||
|
||||
// default global
|
||||
return [
|
||||
'contributor_company' => self::$localCompany['company'],
|
||||
'contributor_name' => self::$localCompany['owner'],
|
||||
'contributor_email' => self::$localCompany['email'],
|
||||
'contributor_website' => self::$localCompany['website'],
|
||||
'origin' => 'global'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the library files
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user