diff --git a/README.md b/README.md index 27646da62..2454f5841 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.12.6) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.12.7) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -143,13 +143,13 @@ 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*: 2nd February, 2021 -+ *Version*: 2.12.6 ++ *Last Build*: 21st February, 2021 ++ *Version*: 2.12.7 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **293026** -+ *Field count*: **1611** -+ *File count*: **1934** ++ *Line count*: **292151** ++ *Field count*: **1629** ++ *File count*: **1935** + *Folder count*: **322** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](http://joomlacomponentbuilder.com). diff --git a/admin/README.txt b/admin/README.txt index 27646da62..2454f5841 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -12,7 +12,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.12.6) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.12.7) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -143,13 +143,13 @@ 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*: 2nd February, 2021 -+ *Version*: 2.12.6 ++ *Last Build*: 21st February, 2021 ++ *Version*: 2.12.7 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **293026** -+ *Field count*: **1611** -+ *File count*: **1934** ++ *Line count*: **292151** ++ *Field count*: **1629** ++ *File count*: **1935** + *Folder count*: **322** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](http://joomlacomponentbuilder.com). diff --git a/admin/access.xml b/admin/access.xml index e5398db15..287be5da2 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -107,6 +107,7 @@ + diff --git a/admin/assets/css/compiler.css b/admin/assets/css/compiler.css index 788e45266..125cf0702 100644 --- a/admin/assets/css/compiler.css +++ b/admin/assets/css/compiler.css @@ -10,4 +10,10 @@ /* CSS Document */ - +html, body { + background-color: #fefcfe !important; +} +.jcb-sponsor-banner { + -webkit-box-shadow: 0 0 7px 1px #f0f0f0; + box-shadow: 0 0 7px 1px #f0f0f0; +} diff --git a/admin/assets/images/ajax-loader.gif b/admin/assets/images/ajax-loader.gif deleted file mode 100644 index 2190cf849..000000000 Binary files a/admin/assets/images/ajax-loader.gif and /dev/null differ diff --git a/admin/config.xml b/admin/config.xml index 31a6b5c6e..f677f1778 100644 --- a/admin/config.xml +++ b/admin/config.xml @@ -657,6 +657,24 @@ name="compiler_custom_config" label="COM_COMPONENTBUILDER_CONFIG_COMPILER"> + + + + + + + + - - + + - - + + COM_COMPONENTBUILDER_CONFIG_NO - - + + @@ -757,8 +775,8 @@ - - + + authorise('compiler.compiler_animations', 'com_componentbuilder')) + { + // get the model + $model = $this->getModel('compiler'); + if ($model->getCompilerAnimations($message)) + { + $message = JText::_('COM_COMPONENTBUILDER_BALL_THE_COMPILER_ANIMATIONS_WERE_SUCCESSFULLY_DOWNLOADED_TO_THIS_JOOMLA_INSTALLB'); + $this->setRedirect($redirect_url, $message, 'message'); + return true; + } + } + $this->setRedirect($redirect_url, $message, 'error'); + return false; + } + /** * Run the Compiler * diff --git a/admin/helpers/compiler.php b/admin/helpers/compiler.php index d600bfcc6..e55bc3b1e 100644 --- a/admin/helpers/compiler.php +++ b/admin/helpers/compiler.php @@ -1056,7 +1056,6 @@ class Compiler extends Infusion . '.zip' ); } - // move to sales server host if ($this->componentData->add_sales_server == 1 && $this->dynamicIntegration) diff --git a/admin/helpers/compiler/a_Get.php b/admin/helpers/compiler/a_Get.php index 0535fd10f..0fe7c2a2b 100644 --- a/admin/helpers/compiler/a_Get.php +++ b/admin/helpers/compiler/a_Get.php @@ -5245,6 +5245,8 @@ class Get { $script = $this->setGuiCodePlaceholder($script, $config); } + // add Dynamic HASHING option of a file/string + $script = $this->setDynamicHASHING($script); // add base64 locking option of a string $script = $this->setBase64LOCK($script); // load the script @@ -10337,7 +10339,7 @@ class Get foreach ($paths as $target => $path) { - // we are changing the working directory to the componet path + // we are changing the working directory to the component path chdir($path); foreach ($fileTypes as $type) { @@ -10796,6 +10798,67 @@ class Get } } + /** + * Set a hash of a file and/or string + * + * @param string $string The code string + * + * @return string + * + */ + protected function setDynamicHASHING($script) + { + // check if we should hash a string + if (strpos($script, 'HASHSTRING((((') !== false) + { + // get the strings + $values = ComponentbuilderHelper::getAllBetween( + $script, 'HASHSTRING((((', '))))' + ); + $locker = array(); + // convert them + foreach ($values as $value) + { + $locker['HASHSTRING((((' . $value . '))))'] + = md5($value); + } + + // update the script + return $this->setPlaceholders($script, $locker); + } + // check if we should hash a file + if (strpos($script, 'HASHFILE((((') !== false) + { + // get the strings + $values = ComponentbuilderHelper::getAllBetween( + $script, 'HASHFILE((((', '))))' + ); + $locker = array(); + // convert them + foreach ($values as $path) + { + // we first get the file if it exist + if ($value = ComponentbuilderHelper::getFileContents($path)) + { + // now we hash the file content + $locker['HASHFILE((((' . $path . '))))'] + = md5($value); + } + else + { + // could not retrieve the file so we show error + $locker['HASHFILE((((' . $path . '))))'] + = 'ERROR'; + } + } + + // update the script + return $this->setPlaceholders($script, $locker); + } + + return $script; + } + /** * Lock a string with bsae64 (basic) * diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 5e689d49d..047a7d39c 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -1970,51 +1970,244 @@ abstract class ComponentbuilderHelper } return false; } + /** * The array of dynamic content * * @var array */ protected static $dynamicContent = array( - // The banners by size + // The banners by size (width - height) 'banner' => array( '728-90' => array( - 'Joomla! Volunteers Portal', - 'Joomla! Community Magazine | Because community matters...', - 'tlwebdesign a JCB sponsor | Because community matters...', - 'VDM a JCB sponsor | Because community matters...', - 'Agerix a JCB sponsor | Because community matters...' + array( + 'url' => 'https://cdn.joomla.org/volunteers/joomla-heart-wide.gif', + 'hash' => 'f857e3a38facaeac9eba3cffa912b620', + 'html' => 'Joomla! Volunteers Portal'), + array( + 'url' => 'https://magazine.joomla.org/images/banners/JCM_2010_728x90.png', + 'hash' => '4083c66f996279fd5a76adffc3a7d194', + 'html' => 'Joomla! Community Magazine | Because community matters...'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/banners/tlwebdesign_jcb_sponsor_728_90.png', + 'hash' => 'd19be1f9f5b2049ff901096aafc246be', + 'html' => 'tlwebdesign a JCB sponsor | Because community matters...'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/banners/vdm_jcb_sponsor_728_90.gif', + 'hash' => '84478dfa0cd880395815e0ee026812a4', + 'html' => 'VDM a JCB sponsor | Because community matters...'), + array( + 'url' => 'https://allmycms.com/images/banners/agerix/agerix-loves-jcb-728-90.gif', + 'hash' => 'b24c0726aa809cdcc04bcffe7e1e1529', + 'html' => 'Agerix a JCB sponsor | Because community matters...') ), '160-600' => array( - 'Joomla! Volunteers Portal', - 'Joomla! Community Magazine | Because community matters...' + array( + 'url' => 'https://cdn.joomla.org/volunteers/joomla-heart-tall.gif', + 'hash' => '9a75e4929b86c318128b53cf78251678', + 'html' => 'Joomla! Volunteers Portal'), + array( + 'url' => 'https://magazine.joomla.org/images/banners/JCM_2010_120x600.png', + 'hash' => '5389cf3be8569cb3f6793e8bd4013d19', + 'html' => 'Joomla! Community Magazine | Because community matters...') ) ), - // The build-gif by size + // The build-gif by size (width - height) 'builder-gif' => array( - '707-400' => array( - '' + // original gif ;) + '480-272' => array( + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/original.gif', + 'hash' => '676e37a949add8f4573381195cd1061c', + 'html' => '' + ) + ), + // new gif artwork since 2021 + '480-540' => array( + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/1.gif', + 'hash' => 'ce6e36456fa794ba95d981547b2f54f8', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/2.gif', + 'hash' => '0a54dbc393359747e33db90cabb1e2d7', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/3.gif', + 'hash' => '4e5498713ff69a64a0a79dbf620372a3', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/4.gif', + 'hash' => '3554ffab2a6df95a116fd9f0db63925c', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/5.gif', + 'hash' => '08f0cdf188593eca65c6dafd7af27ef9', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/6.gif', + 'hash' => '103b46a7ac3fcb974e25d06f417a4e87', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/7.gif', + 'hash' => 'ffa8547099b7286f89ab7ff5a140dd90', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/8.gif', + 'hash' => '316df780f9e4ce81200a65d3c4303c41', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/9.gif', + 'hash' => '9ab6ba78b6e63a285fdef2ff5e447c93', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/10.gif', + 'hash' => 'cd9abaa1cb95f51a70916da6b70614f2', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/11.gif', + 'hash' => 'cfe53095b5249618e2348223b89262b9', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/12.gif', + 'hash' => '15a6690647d5160d67c80ce4dd1f5602', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/13.gif', + 'hash' => '2f77562e92c8a3b7c47664c98f551fe8', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/14.gif', + 'hash' => '46db15517ef5bd063be85134e1cc575d', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/15.gif', + 'hash' => 'e6c96eff157ea648ceb1583f2cc22544', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/16.gif', + 'hash' => '76010b7d1f99952eb9645df660467ae8', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/17.gif', + 'hash' => '021219ddd72d8fcfc7f80bd4a874d651', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/18.gif', + 'hash' => '383af3179d4ae27301c1292e630d7155', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/19.gif', + 'hash' => '8537e6d7be93447241b521f851e8a61d', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/20.gif', + 'hash' => '10d96f70e3d43086a925b00a7dc0022e', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/21.gif', + 'hash' => '161de9865b171b44039353b8d50491d3', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/22.gif', + 'hash' => '6a2354e43eb97d278d74bb2c12890988', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/23.gif', + 'hash' => '2cb6e2f9562a8dc8eef6d5d8d1a84f5e', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/24.gif', + 'hash' => '745b3fb5e16515689132432bf02ab1b4', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
') ) ) ); /** - * get the dynamic content + * get the dynamic content array size * - * @param string $type The type of content - * @param string $size The size of the content + * @param string $type The type of content + * @param string $size The size of the content * - * @return string on success + * @return int on success number of items in array type,size * */ - public static function getDynamicContent($type, $size, $default = '') + public static function getDynamicContentSize($type, $size) { - if (isset(self::$dynamicContent[$type]) && isset(self::$dynamicContent[$type][$size]) && ($nr = self::checkArray(self::$dynamicContent[$type][$size]))) + if (isset(self::$dynamicContent[$type]) && isset(self::$dynamicContent[$type][$size]) + && ($nr = self::checkArray(self::$dynamicContent[$type][$size]))) { - // get the random item number - $get = (int) rand(0, --$nr); - // return found content - return self::$dynamicContent[$type][$size][$get]; + return $nr; + } + return 0; + } + + /** + * get the dynamic content + * + * @param string $type The type of content + * @param string $size The size of the content + * @param mix $default The default to return + * @param int $try Retry tracker (when bigger then array size it stops) + * @param mix $getter The specific getter number (not zero based) + * + * @return string on success html string + * + */ + public static function getDynamicContent($type, $size, $default = '', $try = 1, $getter = null) + { + if (($nr = self::getDynamicContentSize($type, $size)) !== 0) + { + // use specific getter + if ($getter) + { + $get = --$getter; + } + // get the random getter number + elseif ($nr > 1) + { + $get = (int) rand(0, --$nr); + } + else + { + $get = 0; + } + // get the current target if found + if (isset(self::$dynamicContent[$type][$size][$get])) + { + $target = self::$dynamicContent[$type][$size][$get]; + // set file name + $file_name = basename($target['url']); + // set the local path (in admin area so when the component uninstall these images get removed as well) + $path = JPATH_ROOT . "/administrator/components/com_componentbuilder/assets/images/$type/$file_name"; + // check if file exist or if it changed + if (($image_data = self::getFileContents($path, false)) === false || + md5($image_data) !== $target['hash']) + { + // since the file does not exist or has changed (so we have a new hash) + // therefore we download it to validate + if (($image_data = self::getFileContents($target['url'], false)) !== false && + md5($image_data) === $target['hash']) + { + // create the JCB type path if it does not exist + if (!JFolder::exists(JPATH_ROOT . "/administrator/components/com_componentbuilder/assets/images/$type")) + { + JFolder::create(JPATH_ROOT . "/administrator/components/com_componentbuilder/assets/images/$type"); + } + // only set the image if the data match the hash + self::writeFile($path, $image_data); + } + // we retry array size times (unless specific getter is used) + elseif ($try <= $nr && !$getter) + { + // the first time around failed so we try again (the size of the array times) + return self::getDynamicContent($type, $size, $default, ++$try); + } + } + // return found content + return str_replace('[[[ROOT-URL]]]', JURI::root(), $target['html']); + } } return $default; } diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 487f132dc..922588a31 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -1324,6 +1324,7 @@ COM_COMPONENTBUILDER_BACKUP_LOCAL_DATA_FIRST="Backup Local Data First" COM_COMPONENTBUILDER_BACKUP_WAS_DONE_SUCCESSFULLY="Backup was done successfully" COM_COMPONENTBUILDER_BACK_TO_LIBRARIES="Back to Libraries" COM_COMPONENTBUILDER_BADMIN_FIELDS_RELATIONSB_IDS_MISMATCH_IN_BFIELDSB_AND_WAS_NOT_UPDATED_IN_THE_CUSTOM_CODE="Admin fields relations id:%s mismatch in field:%s, and was not updated in the custom code." +COM_COMPONENTBUILDER_BALL_THE_COMPILER_ANIMATIONS_WERE_SUCCESSFULLY_DOWNLOADED_TO_THIS_JOOMLA_INSTALLB="All the compiler animations were successfully downloaded to this Joomla Install!" COM_COMPONENTBUILDER_BASIC_TUTORIAL_ON_GIT_BSB="Basic Tutorial on git: %s" COM_COMPONENTBUILDER_BBEST_TO_NOT_CONTINUEBBR_WE_COULD_NOT_LOAD_THE_CHECKSUM_FOR_THIS_PACKAGE_AND_SO_NO_VALIDATION_WAS_POSSIBLE_THIS_MAY_BE_DUE_TO_YOUR_NETWORK_OR_A_CHANGE_TO_THAT_PACKAGE_NAME="Best to not continue!
We could not load the checksum for this package, and so no validation was possible. This may be due to your network, or a change to that package name." COM_COMPONENTBUILDER_BBEST_TO_NOT_CONTINUEBBR_YOU_CAN_REFRESH_AND_TRY_AGAINBR_BUT_NOTE_THAT_THIS_PACKAGE_BFAILEDB_CHECKSUM_VALIDATION_THIS_COULD_BE_A_SERIOUS_SECURITY_BREACH_DO_NOT_CONTINUE="Best to not continue!
You can Refresh and try again.
But note that this package FAILED checksum validation, this could be a serious security breach! DO NOT CONTINUE!!!" @@ -1650,8 +1651,11 @@ COM_COMPONENTBUILDER_COMPANY_S="Company: %s" COM_COMPONENTBUILDER_COMPILER="Compiler" COM_COMPONENTBUILDER_COMPILER_ACCESS="Compiler Access" COM_COMPONENTBUILDER_COMPILER_ACCESS_DESC="Allows the users in this group to access compiler." +COM_COMPONENTBUILDER_COMPILER_ANIMATIONS="Compiler Animations" COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS="Compiler Clear tmp Button Access" COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS_DESC="Allows the users in this group to access the clear tmp button." +COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS="Compiler Compiler Animations Button Access" +COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS_DESC="Allows the users in this group to access the compiler animations button." COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST="Compiler Dashboard List" COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of Compiler" COM_COMPONENTBUILDER_COMPILER_DESC="The compiler" @@ -3234,6 +3238,8 @@ COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_DESC="Set the basic local key here." COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_LABEL="Basic Key" COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_NOTE_DESC="When using the basic encryption please use set a 32 character passphrase.
Never change this passphrase once it is set! DATA WILL GET CORRUPTED IF YOU DO!" COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_NOTE_LABEL="Basic Encryption" +COM_COMPONENTBUILDER_CONFIG_BUILDER_GIF_SIZE_DESCRIPTION="Select the artwork you would like to show during compilation of your projects in the compiler area." +COM_COMPONENTBUILDER_CONFIG_BUILDER_GIF_SIZE_LABEL="Compiler Artwork Options" COM_COMPONENTBUILDER_CONFIG_CHECK_TIMER_DESC="Set the intervals for the auto checkin fuction of tables that checks out the items to an user." COM_COMPONENTBUILDER_CONFIG_CHECK_TIMER_LABEL="Check in timer" COM_COMPONENTBUILDER_CONFIG_CHECK_TIMER_OPTION_FIVE="Once a week" @@ -3487,6 +3493,7 @@ COM_COMPONENTBUILDER_CONFIG_OFF="Off" COM_COMPONENTBUILDER_CONFIG_ON="On" COM_COMPONENTBUILDER_CONFIG_ONLY_BOOLEAN="Only Boolean" COM_COMPONENTBUILDER_CONFIG_ONLY_EXTRA="Only Extra" +COM_COMPONENTBUILDER_CONFIG_ORIGINAL_VDM="Original (VDM)" COM_COMPONENTBUILDER_CONFIG_PACKAGE_NAME_PLAEHOLDERS_DESCRIPTION="[YEAR] [MONTH] [DAY] [HOUR] [MINUTE]" COM_COMPONENTBUILDER_CONFIG_PACKAGE_NAME_PLAEHOLDERS_LABEL="Package Name Placeholders" COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_DESCRIPTION="Select percentage any language should be translated before the system should add the language to the component during compilation." @@ -3536,6 +3543,7 @@ COM_COMPONENTBUILDER_CONFIG_STORAGE_TIME_TO_LIVE_LABEL="Update Cycle" COM_COMPONENTBUILDER_CONFIG_STRING_MANIPULATION="String Manipulation" COM_COMPONENTBUILDER_CONFIG_SUBFORM_LAYOUTS_DESCRIPTION="Select the sub-form layouts you would like to use." COM_COMPONENTBUILDER_CONFIG_SUBFORM_LAYOUTS_LABEL="Sub-form Layouts" +COM_COMPONENTBUILDER_CONFIG_THREED_PARTICLE_EXPLORATIONS="3D Particle Explorations" COM_COMPONENTBUILDER_CONFIG_TLS="TLS" COM_COMPONENTBUILDER_CONFIG_TRUE="True" COM_COMPONENTBUILDER_CONFIG_TYPE_NAME_BUILDER_DESCRIPTION="The default option only uses alphabetical characters and converts all numbers in field names to the English equivalent like 1 becomes one.
Alphanumeric+dot keeps the numbers unconverted unless it is at the beginning of the field name, and allows for a dot (.) to be used in the type name for namespacing." @@ -3846,8 +3854,11 @@ COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NEW_TAB="New Tab" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NEW_TAB_TWO="New Tab 2" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NEXT="Next" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NO="No" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_ADD_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>" -COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_ADD_LANGUAGE_STRING_LABEL="Add Language String" +COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_ADD_PHP_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>
+<?= JText::sprintf('Hello %s', $this->user->name) ?>
+Just get UPPERCASE language string:
+<?= JustTEXT::_('Text') ?>" +COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_ADD_PHP_LANGUAGE_STRING_LABEL="Add PHP Language String" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_LIBRARIES_SELECTION_DESCRIPTION="All libraries you select will dynamically be added to the header of the page according to the settings of the selected library. Each library will also get its respective buttons added to the component global options if it has any set. Please take a look at the libraries for more details." COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_LIBRARIES_SELECTION_LABEL="Select libraries you would like to use in your code" COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_NOTE_LINKED_TO_NOTICE_DESCRIPTION="
Searching the database.
" @@ -5532,6 +5543,7 @@ COM_COMPONENTBUILDER_INACTIVE="Inactive" COM_COMPONENTBUILDER_IN_SYNC="In Sync" COM_COMPONENTBUILDER_ISOLATE="Isolate" COM_COMPONENTBUILDER_ISSUE="issue" +COM_COMPONENTBUILDER_IS_BEING_COMPILED="is being compiled" COM_COMPONENTBUILDER_IS_NOT_ONLY_FOUR_LISTRADIOCHECKBOXES="Is Not (only 4 list/radio/checkboxes)" COM_COMPONENTBUILDER_IS_ONLY_FOUR_LISTRADIOCHECKBOXES="Is (only 4 list/radio/checkboxes)" COM_COMPONENTBUILDER_IWEBSITEI_BSB="Website: %s" @@ -6327,8 +6339,11 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_NAME_MESSAGE="Error! Please add name here." COM_COMPONENTBUILDER_JOOMLA_MODULE_NEW="A New Joomla Module" COM_COMPONENTBUILDER_JOOMLA_MODULE_NO="No" COM_COMPONENTBUILDER_JOOMLA_MODULE_NONE="None" -COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_ADD_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>" -COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_ADD_LANGUAGE_STRING_LABEL="Add Language String" +COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_ADD_PHP_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>
+<?= JText::sprintf('Hello %s', $this->user->name) ?>
+Just get UPPERCASE language string:
+<?= JustTEXT::_('Text') ?>" +COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_ADD_PHP_LANGUAGE_STRING_LABEL="Add PHP Language String" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LIBRARIES_OPTIONS_DESCRIPTION="

All libraries added to modules are added to the component media folder for now

So over here you are able to manually add HTML code to your model default tmpl.

" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LIBRARIES_OPTIONS_LABEL="Libraries Options" @@ -7170,8 +7185,11 @@ COM_COMPONENTBUILDER_LAYOUT_NAME_LABEL="Name" COM_COMPONENTBUILDER_LAYOUT_NAME_MESSAGE="Error! Please add name here." COM_COMPONENTBUILDER_LAYOUT_NEW="A New Layout" COM_COMPONENTBUILDER_LAYOUT_NO="No" -COM_COMPONENTBUILDER_LAYOUT_NOTE_ADD_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>" -COM_COMPONENTBUILDER_LAYOUT_NOTE_ADD_LANGUAGE_STRING_LABEL="Add Language String" +COM_COMPONENTBUILDER_LAYOUT_NOTE_ADD_PHP_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>
+<?= JText::sprintf('Hello %s', $this->user->name) ?>
+Just get UPPERCASE language string:
+<?= JustTEXT::_('Text') ?>" +COM_COMPONENTBUILDER_LAYOUT_NOTE_ADD_PHP_LANGUAGE_STRING_LABEL="Add PHP Language String" COM_COMPONENTBUILDER_LAYOUT_NOTE_LIBRARIES_SELECTION_DESCRIPTION="All libraries you select will dynamically be added to the header of the page according to the settings of the selected library. Each library will also get its respective buttons added to the component global options if it has any set. Please take a look at the libraries for more details." COM_COMPONENTBUILDER_LAYOUT_NOTE_LIBRARIES_SELECTION_LABEL="Select libraries you would like to use in your code" COM_COMPONENTBUILDER_LAYOUT_NOTE_SNIPPET_USAGE_LABEL="Snippet Usage" @@ -7779,7 +7797,7 @@ COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_LATTER="Please check again latter." COM_COMPONENTBUILDER_PLEASE_NOTE_THAT_THIS_PACKAGE_BHAS_NOB_CHECKSUM_VALIDATION="Please note that this package has no checksum validation!" COM_COMPONENTBUILDER_PLEASE_SELECT_A_COMPONENT_THAT_YOU_WOULD_LIKE_TO_COMPILE="Please select a component that you would like to compile." COM_COMPONENTBUILDER_PLEASE_TRY_AGAIN_LATER="Please try again later" -COM_COMPONENTBUILDER_PLEASE_WAIT_CLEARING_THE_TMP_FOLDER="Please wait! Clearing the tmp folder" +COM_COMPONENTBUILDER_PLEASE_WAIT="Please wait!" COM_COMPONENTBUILDER_PLEASE_WAIT_LOADING="Please wait, loading" COM_COMPONENTBUILDER_PLUGIN="Plugin" COM_COMPONENTBUILDER_PLUGINS="Plugins" @@ -7796,6 +7814,7 @@ COM_COMPONENTBUILDER_READY_TO_COMPILE_A_COMPONENT="Ready to compile a component" COM_COMPONENTBUILDER_REFRESH="Refresh" COM_COMPONENTBUILDER_RELEASED_THIS="released this" COM_COMPONENTBUILDER_REMOVE="Remove" +COM_COMPONENTBUILDER_REMOVING_ALL_ZIP_PACKAGES_FROM_THE_TEMPORARY_FOLDER_OF_THE_JOOMLA_INSTALL="Removing all zip packages from the temporary folder of the Joomla install" COM_COMPONENTBUILDER_RENAME="Rename" COM_COMPONENTBUILDER_REPORT_AN_ISSUE_BSB="Report an issue: %s" COM_COMPONENTBUILDER_REQUIRES_THE_VALUE_ENTERED_BE_ONE_OF_THE_OPTIONS_IN_AN_ELEMENT_OF_TYPEQUOTLISTQUOT_THAT_IS_THAT_THE_ELEMENT_IS_A_SELECT_LIST="Requires the value entered be one of the options in an element of type="list": that is, that the element is a select list." @@ -8260,8 +8279,11 @@ COM_COMPONENTBUILDER_SITE_VIEW_NEW_TAB_TWO="New Tab 2" COM_COMPONENTBUILDER_SITE_VIEW_NEXT="Next" COM_COMPONENTBUILDER_SITE_VIEW_NO="No" COM_COMPONENTBUILDER_SITE_VIEW_NONE="None" -COM_COMPONENTBUILDER_SITE_VIEW_NOTE_ADD_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>" -COM_COMPONENTBUILDER_SITE_VIEW_NOTE_ADD_LANGUAGE_STRING_LABEL="Add Language String" +COM_COMPONENTBUILDER_SITE_VIEW_NOTE_ADD_PHP_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>
+<?= JText::sprintf('Hello %s', $this->user->name) ?>
+Just get UPPERCASE language string:
+<?= JustTEXT::_('Text') ?>" +COM_COMPONENTBUILDER_SITE_VIEW_NOTE_ADD_PHP_LANGUAGE_STRING_LABEL="Add PHP Language String" COM_COMPONENTBUILDER_SITE_VIEW_NOTE_CUSTOM_TOOLBAR_PLACEHOLDER_DESCRIPTION="Use this placeholder in the body [[[SITE_TOOLBAR]]] to add the custom position of the toolbar." COM_COMPONENTBUILDER_SITE_VIEW_NOTE_LIBRARIES_SELECTION_DESCRIPTION="All libraries you select will dynamically be added to the header of the page according to the settings of the selected library. Each library will also get its respective buttons added to the component global options if it has any set. Please take a look at the libraries for more details." COM_COMPONENTBUILDER_SITE_VIEW_NOTE_LIBRARIES_SELECTION_LABEL="Select libraries you would like to use in your code" @@ -8634,7 +8656,8 @@ COM_COMPONENTBUILDER_SZIP_COULD_NOT_BE_INSTALLED="%s.zip could not be installed! COM_COMPONENTBUILDER_SZIP_WAS_REMOVED_THE_FROM_TMP_FOLDER_DURING_INSTALLATION="%s.zip was removed the from tmp folder during installation!" COM_COMPONENTBUILDER_S_BEING_IMPORTED="%s Being Imported" COM_COMPONENTBUILDER_S_NOT_LINKED="%s Not Linked" -COM_COMPONENTBUILDER_S_PLEASE_WAIT_THE_COMPONENT_IS_BEING_COMPILED="%s, please wait! The component is being compiled" +COM_COMPONENTBUILDER_S_PLEASE_WAIT="%s, please wait!" +COM_COMPONENTBUILDER_S_S_NUMBER_BSB_COULD_NOT_BE_DOWNLOADED_SUCCESSFULLY_TO_THIS_JOOMLA_INSTALL="%s (%s) number %s could not be downloaded successfully to this Joomla Install!" COM_COMPONENTBUILDER_TAB="Tab" COM_COMPONENTBUILDER_TABLE_BSB_NOT_FOUND_IN_THE_LOCAL_DATABASE_SO_ITS_VALUES_COULD_NOT_BE_IMPORTED_PLEASE_UPDATE_YOUR_JCB_INSTALL_AND_TRY_AGAIN="Table %s not found in the local database so its values could not be imported, please update your JCB install and try again." COM_COMPONENTBUILDER_TARGET_BEHAVIOUR="Target Behaviour" @@ -8729,8 +8752,11 @@ COM_COMPONENTBUILDER_TEMPLATE_NAME_LABEL="Name" COM_COMPONENTBUILDER_TEMPLATE_NAME_MESSAGE="Error! Please add name here." COM_COMPONENTBUILDER_TEMPLATE_NEW="A New Template" COM_COMPONENTBUILDER_TEMPLATE_NO="No" -COM_COMPONENTBUILDER_TEMPLATE_NOTE_ADD_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>" -COM_COMPONENTBUILDER_TEMPLATE_NOTE_ADD_LANGUAGE_STRING_LABEL="Add Language String" +COM_COMPONENTBUILDER_TEMPLATE_NOTE_ADD_PHP_LANGUAGE_STRING_DESCRIPTION="<?= JText::_('Text') ?>
+<?= JText::sprintf('Hello %s', $this->user->name) ?>
+Just get UPPERCASE language string:
+<?= JustTEXT::_('Text') ?>" +COM_COMPONENTBUILDER_TEMPLATE_NOTE_ADD_PHP_LANGUAGE_STRING_LABEL="Add PHP Language String" COM_COMPONENTBUILDER_TEMPLATE_NOTE_LIBRARIES_SELECTION_DESCRIPTION="All libraries you select will dynamically be added to the header of the page according to the settings of the selected library. Each library will also get its respective buttons added to the component global options if it has any set. Please take a look at the libraries for more details." COM_COMPONENTBUILDER_TEMPLATE_NOTE_LIBRARIES_SELECTION_LABEL="Select libraries you would like to use in your code" COM_COMPONENTBUILDER_TEMPLATE_NOTE_SNIPPET_USAGE_LABEL="Snippet Usage" @@ -8780,6 +8806,7 @@ COM_COMPONENTBUILDER_THE_BSB_LIBRARYCLASS_IS_NOT_AVAILABLE_THIS_LIBRARYCLASS_SHO COM_COMPONENTBUILDER_THE_BSB_LIBRARY_CAN_NOT_BE_DELETED_OR_THINGS_WILL_BREAK="The %s library can not be deleted, or things will break." COM_COMPONENTBUILDER_THE_BSHOW_IN_ALL_LIST_VIEWSB_OPTION_WILL_ADD_THIS_FIELD_TO_ALL_LIST_VIEWS_ADMIN_AMP_LINKED="The Show in All List Views option will Add this field to all list views, admin & linked." COM_COMPONENTBUILDER_THE_BSINGLE_FILTERB_SELECTION_OPTION_ALLOWS_THE_USER_TO_SELECT_JUST_ONE_VALUE_IN_THIS_FILTERFIELD="The single filter selection option allows the user to select just one value in this filter/field." +COM_COMPONENTBUILDER_THE_COMPONENT="The Component" COM_COMPONENTBUILDER_THE_COMPONENT_ADMIN_VIEWS="The component admin views" COM_COMPONENTBUILDER_THE_COMPONENT_CONFIG="The component config" COM_COMPONENTBUILDER_THE_COMPONENT_CUSTOM_ADMIN_MENUS="The component custom admin menus" @@ -8821,6 +8848,7 @@ COM_COMPONENTBUILDER_THE_URL_S_SET_TO_RETRIEVE_THE_PACKAGES_DOES_NOT_EXIST="The COM_COMPONENTBUILDER_THE_URL_S_SET_TO_RETRIEVE_THE_PACKAGES_DOES_NOT_RETURN_ANY_DATA="The url (%s) set to retrieve the packages does not return any data!" COM_COMPONENTBUILDER_THE_WIKI_IS_LOADING="The wiki is loading" COM_COMPONENTBUILDER_THIS_BSB_IS_NOT_LINKED_TO_ANY_OTHER_AREAS_OF_JCB_AT_THIS_TIME="This %s is not linked to any other areas of JCB at this time!" +COM_COMPONENTBUILDER_THIS_MAY_TAKE_A_WHILE_DEPENDING_ON_THE_SIZE_OF_YOUR_PROJECT="This may take a while depending on the size of your project." COM_COMPONENTBUILDER_THIS_PACKAGE_BPASSEDB_THE_CHECKSUM_VALIDATIONBR_BR_SMALLMANUALLY_ALSO_VALIDATE_THAT_THE_CORRECT_CHECKSUM_WAS_USEDSMALLBR_THIS_CHECKSUM_BSB_MUST_BE_THE_SAME_AS_THE_ONE_FOUND_A_S_SA="This package PASSED the checksum validation!

Manually also validate that the correct checksum was used.
This checksum: %s must be the same as the one found @ " COM_COMPONENTBUILDER_THIS_PACKAGE_HAS_NO_KEY="This package has no key." COM_COMPONENTBUILDER_TITLE="Title" @@ -9011,6 +9039,7 @@ COM_COMPONENTBUILDER_WEBSITE_S="Website: %s" COM_COMPONENTBUILDER_WE_DID_NOT_CHECK_THE_SNIPPET_IT_SELF_TO_SEE_IF_IT_CHANGED_WE_ONLY_WORK_ON_DATES="We did not check the snippet it self, to see if it changed. We only work on dates." COM_COMPONENTBUILDER_WE_FAILED_TO_MOVE_BSB="We failed to move %s!" COM_COMPONENTBUILDER_WE_SUCCESSFULLY_MOVED_BSB="We successfully moved %s!" +COM_COMPONENTBUILDER_WHILE_WE_DOWNLOAD_ALL_TWENTY_SIX_COMPILER_GIF_ANIMATIONS_RANDOMLY_USED_IN_THE_COMPILER_GUI_DURING_COMPILATION="While we download all 26 compiler GIF animations randomly used in the compiler GUI during compilation" COM_COMPONENTBUILDER_YES="Yes" COM_COMPONENTBUILDER_YOUR_DATA_IS_ENCRYPTED_WITH_A_AES_ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_ENCRYPTION_USING_THE_ABOVE_THIRTY_TWO_CHARACTER_KEYBR_WITHOUT_THIS_KEY_IT_WILL_TAKE_THE_CURRENT_TECHNOLOGY_WITH_A_BRUTE_FORCE_ATTACK_METHOD_MORE_THEN_A_HREFHTTPRANDOMIZECOMHOWLONGTOHACKPASS_TARGET_BLANK_TITLEHOW_LONG_TO_HACK_PASSSEVEN_HUNDRED_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZEROA_YEARS_TO_CRACK_THEORETICALLY="Your data is encrypted with a AES 128 bit encryption using the above 32 character key.
Without this key it will take the current technology with a brute force attack method more then
700 000 000 000 000 000 000 000 000 000 000 years to crack theoretically." COM_COMPONENTBUILDER_YOUR_DATA_IS_ENCRYPTED_WITH_A_AES_ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_ENCRYPTION_USING_THE_ABOVE_THIRTY_TWO_CHARACTER_KEY_WITHOUT_THIS_KEY_IT_WILL_TAKE_THE_CURRENT_TECHNOLOGY_WITH_A_BRUTE_FORCE_ATTACK_METHOD_MORE_THEN_A_HREFHTTPRANDOMIZECOMHOWLONGTOHACKPASS_TARGET_BLANK_TITLEHOW_LONG_TO_HACK_PASSSEVEN_HUNDRED_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZEROA_YEARS_TO_CRACK_THEORETICALLY_UNLESS_THEY_HAVE_THIS_KEY_ABOVE_SO_DO_KEEP_IT_SAFE="Your data is encrypted with a AES 128 bit encryption using the above 32 character key. Without this key it will take the current technology with a brute force attack method more then 700 000 000 000 000 000 000 000 000 000 000 years to crack theoretically. Unless they have this key above, so do keep it safe." @@ -9019,6 +9048,7 @@ COM_COMPONENTBUILDER_YOU_ARE_CURRENTLY_VIEWING_THE_TRASH_AREA_AND_YOU_DONT_HAVE_ COM_COMPONENTBUILDER_YOU_CAN_NOW_SELECT_THE_COMPONENT_BZIPB_PACKAGE_YOU_WOULD_LIKE_TO_IMPORTBR_SMALLPLEASE_NOTE_THAT_SMART_COMPONENT_IMPORT_ONLY_WORKS_WITH_THE_FOLLOWING_FORMAT_BZIPBSMALL="You can now select the component zip package you would like to import.
Please note that smart component import only works with the following format: (.zip)" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_ACCESS_THE_SERVER_DETAILS_BS_DENIEDB_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_INFO="You do not have permission to access the server details (%s - denied), please contact your system administrator for more info." COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_CLONE_A_COMPONENT_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_HELP="You do not have permission to clone a component, please contact your system administrator for more help." +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_DOWNLOAD_THE_COMPILER_ANIMATIONS="You do not have permission to download the compiler animations!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_IMPORT_A_COMPONENT_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_HELP="You do not have permission to import a component, please contact your system administrator for more help." COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THESE_EXTENSIONS="You do not have permission to install these extensions!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_COMPONENT="You do not have permission to install the component!" diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini index e978432da..bc6fe0238 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini @@ -183,6 +183,8 @@ COM_COMPONENTBUILDER_COMPILER_ACCESS="Compiler Access" COM_COMPONENTBUILDER_COMPILER_ACCESS_DESC="Allows the users in this group to access compiler." COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS="Compiler Clear tmp Button Access" COM_COMPONENTBUILDER_COMPILER_CLEAR_TMP_BUTTON_ACCESS_DESC="Allows the users in this group to access the clear tmp button." +COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS="Compiler Compiler Animations Button Access" +COM_COMPONENTBUILDER_COMPILER_COMPILER_ANIMATIONS_BUTTON_ACCESS_DESC="Allows the users in this group to access the compiler animations button." COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST="Compiler Dashboard List" COM_COMPONENTBUILDER_COMPILER_DASHBOARD_LIST_DESC="Allows the users in this group to dashboard list of Compiler" COM_COMPONENTBUILDER_COMPILER_RUN_EXPANSION_BUTTON_ACCESS="Compiler Run Expansion Button Access" diff --git a/admin/layouts/custom_admin_view/details_left.php b/admin/layouts/custom_admin_view/details_left.php index dac8a799f..43b067ea4 100644 --- a/admin/layouts/custom_admin_view/details_left.php +++ b/admin/layouts/custom_admin_view/details_left.php @@ -31,7 +31,7 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/jcbnoticeboardpro.php b/admin/layouts/jcbnoticeboardpro.php new file mode 100644 index 000000000..cbd179baf --- /dev/null +++ b/admin/layouts/jcbnoticeboardpro.php @@ -0,0 +1,22 @@ + + * @github Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access to this file +defined('JPATH_BASE') or die('Restricted access'); + + + +?> +
+ +
.
+ +
diff --git a/admin/layouts/jcbnoticeboardtabs.php b/admin/layouts/jcbnoticeboardtabs.php index c6ef46064..89df0ef83 100644 --- a/admin/layouts/jcbnoticeboardtabs.php +++ b/admin/layouts/jcbnoticeboardtabs.php @@ -15,23 +15,15 @@ defined('JPATH_BASE') or die('Restricted access'); ?> -
- 'vdm-noticeboard')); ?> - -
- -
.
- -
+
+ $displayData['active'] . '-noticeboard')) ?> + +
- - -
- -
.
- -
-
- - + + + +
+ +
diff --git a/admin/layouts/jcbnoticeboardvdm.php b/admin/layouts/jcbnoticeboardvdm.php new file mode 100644 index 000000000..6fac707f4 --- /dev/null +++ b/admin/layouts/jcbnoticeboardvdm.php @@ -0,0 +1,22 @@ + + * @github Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// No direct access to this file +defined('JPATH_BASE') or die('Restricted access'); + + + +?> +
+ +
.
+ +
diff --git a/admin/layouts/joomla_module/html_left.php b/admin/layouts/joomla_module/html_left.php index 2d19b5f80..f4645f89e 100644 --- a/admin/layouts/joomla_module/html_left.php +++ b/admin/layouts/joomla_module/html_left.php @@ -30,7 +30,7 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'description', 'libraries', 'note_libraries_options', - 'note_add_language_string' + 'note_add_php_language_string' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/layout/details_left.php b/admin/layouts/layout/details_left.php index d2c223596..36e279e85 100644 --- a/admin/layouts/layout/details_left.php +++ b/admin/layouts/layout/details_left.php @@ -31,7 +31,7 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/site_view/details_left.php b/admin/layouts/site_view/details_left.php index dac8a799f..43b067ea4 100644 --- a/admin/layouts/site_view/details_left.php +++ b/admin/layouts/site_view/details_left.php @@ -31,7 +31,7 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/layouts/template/details_left.php b/admin/layouts/template/details_left.php index d2c223596..36e279e85 100644 --- a/admin/layouts/template/details_left.php +++ b/admin/layouts/template/details_left.php @@ -31,7 +31,7 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ); $hiddenFields = $displayData->get('hidden_fields') ?: array(); diff --git a/admin/models/compiler.php b/admin/models/compiler.php index c2ead97c4..75e025c42 100644 --- a/admin/models/compiler.php +++ b/admin/models/compiler.php @@ -156,6 +156,51 @@ class ComponentbuilderModelCompiler extends JModelList return $db->loadObjectList(); } + public function getCompilerAnimations(&$errorMessage) + { + // convert error message to array + $errorMessage = array(); + $searchArray = array( + // add banners (width - height) + 'banner' => array( + '728-90', + '160-600' + ), + // The build-gif by size (width - height) + 'builder-gif' => array( + '480-540' + ) + ); + // start search, and get + foreach ($searchArray as $type => $sizes) + { + // per size + foreach ($sizes as $size) + { + // get size + if (($set_size = ComponentbuilderHelper::getDynamicContentSize($type, $size)) !== 0) + { + // we loop over all type size artwork + for ($target = 1; $target <= $set_size; $target++) + { + if (!ComponentbuilderHelper::getDynamicContent($type, $size, false, 0, $target)) + { + $errorMessage[] = JText::sprintf('COM_COMPONENTBUILDER_S_S_NUMBER_BSB_COULD_NOT_BE_DOWNLOADED_SUCCESSFULLY_TO_THIS_JOOMLA_INSTALL', $type, $size, $target); + } + } + } + } + } + // check if we had any errors + if (ComponentbuilderHelper::checkArray($errorMessage)) + { + // flatten the error message array + $errorMessage = implode('
', $errorMessage); + return false; + } + return true; + } + public function builder($version, $id, $backup, $repo, $addPlaceholders, $debugLinenr, $minify) { $set['version'] = $version; diff --git a/admin/models/componentbuilder.php b/admin/models/componentbuilder.php index 4d87dd2b2..4ad5dad23 100644 --- a/admin/models/componentbuilder.php +++ b/admin/models/componentbuilder.php @@ -560,7 +560,7 @@ class ComponentbuilderModelComponentbuilder extends JModelList var getUrl = "index.php?option=com_componentbuilder&task=ajax.isRead&format=json&raw=true"; } if(token.length > 0 && notice.length){ - var request = "token="+token+"¬ice="+notice; + var request = token+"=1¬ice="+notice; } return jQuery.ajax({ type: "POST", diff --git a/admin/models/custom_admin_view.php b/admin/models/custom_admin_view.php index 194743393..1f6396611 100644 --- a/admin/models/custom_admin_view.php +++ b/admin/models/custom_admin_view.php @@ -34,7 +34,7 @@ class ComponentbuilderModelCustom_admin_view extends JModelAdmin 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ), 'right' => array( 'icon', diff --git a/admin/models/forms/custom_admin_view.xml b/admin/models/forms/custom_admin_view.xml index afa495784..2f3056036 100644 --- a/admin/models/forms/custom_admin_view.xml +++ b/admin/models/forms/custom_admin_view.xml @@ -150,8 +150,8 @@ required="true" button="true" /> - - + + - - + + - - + + - - + + - - + + array( 'snippet', diff --git a/admin/models/layout.php b/admin/models/layout.php index 61903c762..e285cedee 100644 --- a/admin/models/layout.php +++ b/admin/models/layout.php @@ -34,7 +34,7 @@ class ComponentbuilderModelLayout extends JModelAdmin 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ), 'right' => array( 'snippet', diff --git a/admin/models/site_view.php b/admin/models/site_view.php index f84cb3d02..0d40f7a74 100644 --- a/admin/models/site_view.php +++ b/admin/models/site_view.php @@ -34,7 +34,7 @@ class ComponentbuilderModelSite_view extends JModelAdmin 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ), 'right' => array( 'snippet', diff --git a/admin/models/template.php b/admin/models/template.php index f9d914f18..e627787a0 100644 --- a/admin/models/template.php +++ b/admin/models/template.php @@ -34,7 +34,7 @@ class ComponentbuilderModelTemplate extends JModelAdmin 'description', 'note_libraries_selection', 'libraries', - 'note_add_language_string' + 'note_add_php_language_string' ), 'right' => array( 'snippet', diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 0bea7645b..bc3fad8ca 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -2299,7 +2299,7 @@ INSERT INTO `#__componentbuilder_admin_fields_conditions` (`id`, `addconditions` -- INSERT INTO `#__componentbuilder_component_admin_views` (`id`, `addadmin_views`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`) VALUES -(27, '{\"addadmin_views0\":{\"adminview\":\"109\",\"icomoon\":\"eye-open\",\"mainmenu\":\"1\",\"dashboard_add\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"joomla_fields\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"edit_create_site_view\":\"1\",\"order\":\"1\"}}', 25, 1, '2017-10-28 03:56:26', '2018-08-22 19:18:19', 6, '', ''); +(27, '{\"addadmin_views0\":{\"adminview\":\"109\",\"icomoon\":\"eye-open\",\"mainmenu\":\"1\",\"dashboard_add\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"joomla_fields\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"port\":\"1\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"1\"}}', 25, 1, '2017-10-28 03:56:26', '2021-02-08 10:32:04', 7, '', ''); -- -- Dumping data for table `#__componentbuilder_component_site_views` diff --git a/admin/views/compiler/tmpl/default.php b/admin/views/compiler/tmpl/default.php index 02639164c..9dbaa950c 100644 --- a/admin/views/compiler/tmpl/default.php +++ b/admin/views/compiler/tmpl/default.php @@ -21,6 +21,9 @@ JHtml::_('behavior.keepalive'); $this->app->input->set('hidemainmenu', false); $selectNotice = '

' . JText::_('COM_COMPONENTBUILDER_HI') . ' ' . $this->user->name . '

'; $selectNotice .= '

' . JText::_('COM_COMPONENTBUILDER_PLEASE_SELECT_A_COMPONENT_THAT_YOU_WOULD_LIKE_TO_COMPILE') . '

'; + +// set the noticeboard options +$noticeboardOptions = array('vdm', 'pro'); ?> canDo->get('compiler.access')): ?>
@@ -50,10 +53,26 @@ Joomla.submitbutton = function(task, key) form.submit(); // some ui movements if (task == 'compiler.compiler'){ - jQuery('#compiler').show(); + // get the component name + let component_name = jQuery("#component option:selected").text(); + // set the component name + jQuery(".component-name").text(component_name); + // wait a little since to much is happening... + setTimeout(function() { + jQuery('#compiler').show(); + jQuery('#compiling').css('display', 'block'); + // wait a little since to much is happening... + setTimeout(function() { + jQuery('#compiler-spinner').show(); + jQuery('#compiler-notice').show(); + }, 100); + }, 100); } else if (task == 'compiler.clearTmp'){ - jQuery('#loading').css('display', 'block'); jQuery('#clear').show(); + jQuery('#loading').css('display', 'block'); + } else if (task == 'compiler.getCompilerAnimations'){ + jQuery('#get-compiler-animations').show(); + jQuery('#loading').css('display', 'block'); } else { jQuery('#loading').css('display', 'block'); } @@ -81,6 +100,20 @@ jQuery('
') .css("filter", "alpha(opacity = 80)") .css("display", "none") .appendTo(outerDiv); +// for the compiler +var outerDiv = jQuery('body'); +jQuery('
') + .css("background", "rgba(16, 164, 230, .4)") + .css("top", outerDiv.position().top - jQuery(window).scrollTop()) + .css("left", outerDiv.position().left - jQuery(window).scrollLeft()) + .css("width", outerDiv.width()) + .css("height", outerDiv.height()) + .css("position", "fixed") + .css("opacity", "0.40") + .css("-ms-filter", "progid:DXImageTransform.Microsoft.Alpha(Opacity = 40)") + .css("filter", "alpha(opacity = 40)") + .css("display", "none") + .appendTo(outerDiv); }); sidebar)): ?> @@ -93,15 +126,15 @@ jQuery('
')
-

+

-
+
form): ?> form as $field): ?>
-
label;?>
-
input;?>
+
label ?>
+
input ?>
@@ -109,36 +142,50 @@ jQuery('
')
-
- +
+ 'noticeboard' , 'active' => $noticeboardOptions[array_rand($noticeboardOptions)])) ?>
+
@@ -467,6 +468,7 @@ function getJCBpackageInfo_server(url){ } + var noticeboard = "https://www.vdm.io/componentbuilder-noticeboard-md"; jQuery(document).ready(function () { jQuery.get(noticeboard) @@ -489,20 +491,20 @@ jQuery(document).ready(function () { }); // to check is READ/NEW function getIS(type,notice){ - if (type == 1) { - var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.isNew&format=json"); + if(type == 1){ + var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.isNew&format=json&raw=true"); } else if (type == 2) { - var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.isRead&format=json"); + var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.isRead&format=json&raw=true"); } if(token.length > 0 && notice.length){ - var request = "token="+token+"¬ice="+notice; + var request = token+"=1¬ice="+notice; } return jQuery.ajax({ type: "POST", url: getUrl, - dataType: "jsonp", + dataType: "json", data: request, - jsonp: "callback" + jsonp: false }); } diff --git a/componentbuilder.xml b/componentbuilder.xml index f4140ab27..aef74da7d 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 2nd February, 2021 + 21st February, 2021 Llewellyn van der Merwe llewellyn@joomlacomponentbuilder.com http://www.joomlacomponentbuilder.com Copyright (C) 2015 Vast Development Method. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt - 2.12.6 + 2.12.7 Component Builder (v.2.12.6) +

Component Builder (v.2.12.7)

The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time. diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index bcb188351..15d95647f 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -1024,10 +1024,10 @@ Builds Complex Joomla Components com_componentbuilder component - 2.12.6 + 2.12.7 http://www.joomlacomponentbuilder.com - https://github.com/vdm-io/Joomla-Component-Builder/releases/download/v2.12.6/JCB_v2.12.6.zip + https://github.com/vdm-io/Joomla-Component-Builder/releases/download/v2.12.7/JCB_v2.12.7.zip stable diff --git a/script.php b/script.php index c18c09ed3..afe381f90 100644 --- a/script.php +++ b/script.php @@ -6612,7 +6612,7 @@ class com_componentbuilderInstallerScript $query = $db->getQuery(true); // Field to update. $fields = array( - $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@joomlacomponentbuilder.com","subform_layouts":"default","editor":"none","manage_jcb_package_directories":"2","set_browser_storage":"1","storage_time_to_live":"global","add_menu_prefix":"1","menu_prefix":"»","minify":"0","language":"en-GB","percentagelanguageadd":"50","export_language_strings":"1","assets_table_fix":"1","compiler_field_builder_type":"2","field_name_builder":"1","type_name_builder":"1","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'), + $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"llewellyn@joomlacomponentbuilder.com","subform_layouts":"default","editor":"none","manage_jcb_package_directories":"2","set_browser_storage":"1","storage_time_to_live":"global","builder_gif_size":"480-272","add_menu_prefix":"1","menu_prefix":"»","minify":"0","language":"en-GB","percentagelanguageadd":"50","export_language_strings":"1","assets_table_fix":"1","compiler_field_builder_type":"2","field_name_builder":"1","type_name_builder":"1","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","uikit_load":"1","uikit_min":"","uikit_style":""}'), ); // Condition. $conditions = array( @@ -6629,7 +6629,7 @@ class com_componentbuilderInstallerScript { $rule_length = $db->loadResult(); // Check the size of the rules column - if ($rule_length <= 94240) + if ($rule_length <= 94400) { // Fix the assets table rules column size $fix_rules_size = "ALTER TABLE `#__assets` CHANGE `rules` `rules` MEDIUMTEXT NOT NULL COMMENT 'JSON encoded access control. Enlarged to MEDIUMTEXT by JCB';"; @@ -9250,7 +9250,7 @@ class com_componentbuilderInstallerScript echo ' -

Upgrade to Version 2.12.6 Was Successful! Let us know if anything is not working as expected.

'; +

Upgrade to Version 2.12.7 Was Successful! Let us know if anything is not working as expected.

'; // Set db if not set already. if (!isset($db)) diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index 898810c59..ee9c3e309 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -1967,51 +1967,244 @@ abstract class ComponentbuilderHelper } return false; } + /** * The array of dynamic content * * @var array */ protected static $dynamicContent = array( - // The banners by size + // The banners by size (width - height) 'banner' => array( '728-90' => array( - 'Joomla! Volunteers Portal', - 'Joomla! Community Magazine | Because community matters...', - 'tlwebdesign a JCB sponsor | Because community matters...', - 'VDM a JCB sponsor | Because community matters...', - 'Agerix a JCB sponsor | Because community matters...' + array( + 'url' => 'https://cdn.joomla.org/volunteers/joomla-heart-wide.gif', + 'hash' => 'f857e3a38facaeac9eba3cffa912b620', + 'html' => 'Joomla! Volunteers Portal'), + array( + 'url' => 'https://magazine.joomla.org/images/banners/JCM_2010_728x90.png', + 'hash' => '4083c66f996279fd5a76adffc3a7d194', + 'html' => 'Joomla! Community Magazine | Because community matters...'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/banners/tlwebdesign_jcb_sponsor_728_90.png', + 'hash' => 'd19be1f9f5b2049ff901096aafc246be', + 'html' => 'tlwebdesign a JCB sponsor | Because community matters...'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/banners/vdm_jcb_sponsor_728_90.gif', + 'hash' => '84478dfa0cd880395815e0ee026812a4', + 'html' => 'VDM a JCB sponsor | Because community matters...'), + array( + 'url' => 'https://allmycms.com/images/banners/agerix/agerix-loves-jcb-728-90.gif', + 'hash' => 'b24c0726aa809cdcc04bcffe7e1e1529', + 'html' => 'Agerix a JCB sponsor | Because community matters...') ), '160-600' => array( - 'Joomla! Volunteers Portal', - 'Joomla! Community Magazine | Because community matters...' + array( + 'url' => 'https://cdn.joomla.org/volunteers/joomla-heart-tall.gif', + 'hash' => '9a75e4929b86c318128b53cf78251678', + 'html' => 'Joomla! Volunteers Portal'), + array( + 'url' => 'https://magazine.joomla.org/images/banners/JCM_2010_120x600.png', + 'hash' => '5389cf3be8569cb3f6793e8bd4013d19', + 'html' => 'Joomla! Community Magazine | Because community matters...') ) ), - // The build-gif by size + // The build-gif by size (width - height) 'builder-gif' => array( - '707-400' => array( - '' + // original gif ;) + '480-272' => array( + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/original.gif', + 'hash' => '676e37a949add8f4573381195cd1061c', + 'html' => '' + ) + ), + // new gif artwork since 2021 + '480-540' => array( + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/1.gif', + 'hash' => 'ce6e36456fa794ba95d981547b2f54f8', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/2.gif', + 'hash' => '0a54dbc393359747e33db90cabb1e2d7', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/3.gif', + 'hash' => '4e5498713ff69a64a0a79dbf620372a3', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/4.gif', + 'hash' => '3554ffab2a6df95a116fd9f0db63925c', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/5.gif', + 'hash' => '08f0cdf188593eca65c6dafd7af27ef9', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/6.gif', + 'hash' => '103b46a7ac3fcb974e25d06f417a4e87', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/7.gif', + 'hash' => 'ffa8547099b7286f89ab7ff5a140dd90', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/8.gif', + 'hash' => '316df780f9e4ce81200a65d3c4303c41', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/9.gif', + 'hash' => '9ab6ba78b6e63a285fdef2ff5e447c93', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/10.gif', + 'hash' => 'cd9abaa1cb95f51a70916da6b70614f2', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/11.gif', + 'hash' => 'cfe53095b5249618e2348223b89262b9', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/12.gif', + 'hash' => '15a6690647d5160d67c80ce4dd1f5602', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/13.gif', + 'hash' => '2f77562e92c8a3b7c47664c98f551fe8', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/14.gif', + 'hash' => '46db15517ef5bd063be85134e1cc575d', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/15.gif', + 'hash' => 'e6c96eff157ea648ceb1583f2cc22544', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/16.gif', + 'hash' => '76010b7d1f99952eb9645df660467ae8', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/17.gif', + 'hash' => '021219ddd72d8fcfc7f80bd4a874d651', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/18.gif', + 'hash' => '383af3179d4ae27301c1292e630d7155', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/19.gif', + 'hash' => '8537e6d7be93447241b521f851e8a61d', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/20.gif', + 'hash' => '10d96f70e3d43086a925b00a7dc0022e', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/21.gif', + 'hash' => '161de9865b171b44039353b8d50491d3', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/22.gif', + 'hash' => '6a2354e43eb97d278d74bb2c12890988', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/23.gif', + 'hash' => '2cb6e2f9562a8dc8eef6d5d8d1a84f5e', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
'), + array( + 'url' => 'https://www.joomlacomponentbuilder.com/images/builder/24.gif', + 'hash' => '745b3fb5e16515689132432bf02ab1b4', + 'html' => '
Animation produced with 3D Particle Explorations by Jack Rugile.
') ) ) ); /** - * get the dynamic content + * get the dynamic content array size * - * @param string $type The type of content - * @param string $size The size of the content + * @param string $type The type of content + * @param string $size The size of the content * - * @return string on success + * @return int on success number of items in array type,size * */ - public static function getDynamicContent($type, $size, $default = '') + public static function getDynamicContentSize($type, $size) { - if (isset(self::$dynamicContent[$type]) && isset(self::$dynamicContent[$type][$size]) && ($nr = self::checkArray(self::$dynamicContent[$type][$size]))) + if (isset(self::$dynamicContent[$type]) && isset(self::$dynamicContent[$type][$size]) + && ($nr = self::checkArray(self::$dynamicContent[$type][$size]))) { - // get the random item number - $get = (int) rand(0, --$nr); - // return found content - return self::$dynamicContent[$type][$size][$get]; + return $nr; + } + return 0; + } + + /** + * get the dynamic content + * + * @param string $type The type of content + * @param string $size The size of the content + * @param mix $default The default to return + * @param int $try Retry tracker (when bigger then array size it stops) + * @param mix $getter The specific getter number (not zero based) + * + * @return string on success html string + * + */ + public static function getDynamicContent($type, $size, $default = '', $try = 1, $getter = null) + { + if (($nr = self::getDynamicContentSize($type, $size)) !== 0) + { + // use specific getter + if ($getter) + { + $get = --$getter; + } + // get the random getter number + elseif ($nr > 1) + { + $get = (int) rand(0, --$nr); + } + else + { + $get = 0; + } + // get the current target if found + if (isset(self::$dynamicContent[$type][$size][$get])) + { + $target = self::$dynamicContent[$type][$size][$get]; + // set file name + $file_name = basename($target['url']); + // set the local path (in admin area so when the component uninstall these images get removed as well) + $path = JPATH_ROOT . "/administrator/components/com_componentbuilder/assets/images/$type/$file_name"; + // check if file exist or if it changed + if (($image_data = self::getFileContents($path, false)) === false || + md5($image_data) !== $target['hash']) + { + // since the file does not exist or has changed (so we have a new hash) + // therefore we download it to validate + if (($image_data = self::getFileContents($target['url'], false)) !== false && + md5($image_data) === $target['hash']) + { + // create the JCB type path if it does not exist + if (!JFolder::exists(JPATH_ROOT . "/administrator/components/com_componentbuilder/assets/images/$type")) + { + JFolder::create(JPATH_ROOT . "/administrator/components/com_componentbuilder/assets/images/$type"); + } + // only set the image if the data match the hash + self::writeFile($path, $image_data); + } + // we retry array size times (unless specific getter is used) + elseif ($try <= $nr && !$getter) + { + // the first time around failed so we try again (the size of the array times) + return self::getDynamicContent($type, $size, $default, ++$try); + } + } + // return found content + return str_replace('[[[ROOT-URL]]]', JURI::root(), $target['html']); + } } return $default; }