Compare commits

...

21 Commits

Author SHA1 Message Date
e037d29935 version upgrade 2017-07-03 01:41:25 +01:00
b60803ef7b added timeago lib to repo for jQuery, and added dates to issue and release info on dash 2017-06-29 23:23:06 +01:00
aceda7bae2 Fixed a bug with the automated update sql that ensured that the sql for new fields gets added. 2017-06-29 22:03:53 +01:00
111aa4a3de donation info updated 2017-06-28 21:02:04 +01:00
9742991690 improved the dashboard of JCB to include releases and better item display of each issue and release 2017-06-28 11:05:31 +01:00
2c1903508c added the subform and custom and other fields to the demo 2017-06-18 11:47:10 +01:00
384c403ae4 Add new release with subform field now also available 2017-06-18 08:38:12 +01:00
6e0bcc0ae2 Resolves gh-96 by adding the feature to auto create the update SQL. Also fixes gh-100 Field Length Issue. 2017-06-16 13:38:06 +01:00
3ad9ae8b8f resolves gh-91 to insure that int and floats are not set as strings in SQL defaults 2017-06-05 21:18:32 +01:00
Dev
5e36ede2ac fixed gh-85 to insure parameter 2 is an array 2017-05-28 23:44:15 +02:00
cb355feaf4 fixed import of components selection 2017-05-20 09:36:26 +02:00
9b1f111251 fix gh-78 to ensure the field options get loaded in the repeatable conditions 2017-05-08 11:09:24 +03:00
4cead46ac4 Fixed gh-75 to insure the column names are loaded as before. Fix gh-76 by adding more checks to insure that the correct date is used in the getLastModifiedDate method. 2017-05-04 23:34:28 +01:00
25c632065a updated the readme 2017-04-26 17:30:09 +01:00
ea1edebc05 Resolves gh-71 bug, so that admin views that has no fields are still accessible. Fixed gh-72 to insure all components on Joomla version 3.7.0 works and looks correctly. Please just recompile your components for Joomla v3.7.0 2017-04-26 09:56:17 +01:00
498c75dfcf Next stable release with improvments and fixes 2017-04-08 22:58:53 +01:00
f39a877db2 fixed double // in file path when exporting a component and its images 2017-04-08 21:52:51 +01:00
7afbb131ce fixes gh-68 where the wrong name is used in searching for the alias, it must be the table name, and this is not always the same as the view. 2017-04-08 19:52:09 +01:00
6bba258fec Improved the import feature to insure that we don't have language conflicts with multiple strings for one language. 2017-04-08 14:44:41 +01:00
1cf259a54d Resolves gh-60 with complete implementation of the language manager/translator feature. Added a purge function the clear unused language strings from the database and unlike them from the related component during compilation. 2017-04-07 21:33:35 +01:00
d113d7b91b Added the new language feature to the export and import of Components, so that their related translations can also be linked to the exported package. 2017-04-06 22:40:22 +01:00
374 changed files with 3422 additions and 1941 deletions

View File

@ -1,4 +1,4 @@
# Component Builder (2.4.2)
# Component Builder (2.4.8)
This is a [Joomla 3.x](http://www.joomla.org/) component.
@ -8,7 +8,7 @@ The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanc
Whether you're a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe 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.4.2) 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.4.8) with **ALL** its features and **ALL** concepts totally open-source and free!
Once installed upgrades are quick and easy via the default Joomla upgrade area.
@ -75,12 +75,14 @@ Once installed upgrades are quick and easy via the default Joomla upgrade area.
# Get Access to Video Tutorials
> **You can purchase more demo content for Component Builder including access to training & help video tutorials:**
> **You can purchase more [demo content](http://vdm.bz/jcb-packages) for Component Builder including access to training & help video tutorials:**
+ Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component)
+ Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component)
+ Help View Integration*
+ Training & Help Videos* tutorials in the component included.
+ *Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demo.zip) _(free)_
+ *Advance Demo Component* get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demoAdvanced.zip) _([buy key](http://vdm.bz/get-advance-demo-key))_
+ *Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_sermondistributor.zip) _([buy key](http://vdm.bz/get-sermon-distributor-key))_
+ *Location Data* see the build on [github](https://github.com/vdm-io/Joomla-Location-Data) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_locationData.zip) _([buy key](http://vdm.bz/get-location-data-key))_
+ *Help View Integration*
+ *Training & Help Videos* tutorials in the component included.
[**GET ACCESS NOW!**](http://vdm.bz/component-builder)
@ -105,12 +107,12 @@ Component Builder is mapped as a component in itself on my local development env
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Component Builder](http://vdm.bz/component-builder)
+ *First Build*: 30th April, 2015
+ *Last Build*: 6th April, 2017
+ *Version*: 2.4.2
+ *Last Build*: 3rd July, 2017
+ *Version*: 2.4.8
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
+ *Line count*: **105639**
+ *File count*: **639**
+ *Line count*: **106184**
+ *File count*: **647**
+ *Folder count*: **115**
> This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder).
@ -119,5 +121,6 @@ Component Builder is mapped as a component in itself on my local development env
## Donations
Come on buy me a coffee :)
* PayPal: pay@vdm.io
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
* PayPal: [paypal.me/payvdm](https://www.paypal.me/payvdm)
* Bitcoin: 1N45VjnZSNmDK64xRrQYGRRi56rgpnze3s
* Ethereum: 0x243392daa3c9c8bc841fcacf7c7f72541cb16823

View File

@ -1,4 +1,4 @@
# Component Builder (2.4.2)
# Component Builder (2.4.8)
This is a [Joomla 3.x](http://www.joomla.org/) component.
@ -8,7 +8,7 @@ The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanc
Whether you're a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe 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.4.2) 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.4.8) with **ALL** its features and **ALL** concepts totally open-source and free!
Once installed upgrades are quick and easy via the default Joomla upgrade area.
@ -75,12 +75,14 @@ Once installed upgrades are quick and easy via the default Joomla upgrade area.
# Get Access to Video Tutorials
> **You can purchase more demo content for Component Builder including access to training & help video tutorials:**
> **You can purchase more [demo content](http://vdm.bz/jcb-packages) for Component Builder including access to training & help video tutorials:**
+ Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component)
+ Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component)
+ Help View Integration*
+ Training & Help Videos* tutorials in the component included.
+ *Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demo.zip) _(free)_
+ *Advance Demo Component* get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_demoAdvanced.zip) _([buy key](http://vdm.bz/get-advance-demo-key))_
+ *Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_sermondistributor.zip) _([buy key](http://vdm.bz/get-sermon-distributor-key))_
+ *Location Data* see the build on [github](https://github.com/vdm-io/Joomla-Location-Data) or get the [JCB Package](https://github.com/vdm-io/JCB-Packages/raw/master/JCB_locationData.zip) _([buy key](http://vdm.bz/get-location-data-key))_
+ *Help View Integration*
+ *Training & Help Videos* tutorials in the component included.
[**GET ACCESS NOW!**](http://vdm.bz/component-builder)
@ -105,12 +107,12 @@ Component Builder is mapped as a component in itself on my local development env
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Component Builder](http://vdm.bz/component-builder)
+ *First Build*: 30th April, 2015
+ *Last Build*: 6th April, 2017
+ *Version*: 2.4.2
+ *Last Build*: 3rd July, 2017
+ *Version*: 2.4.8
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
+ *Line count*: **105639**
+ *File count*: **639**
+ *Line count*: **106184**
+ *File count*: **647**
+ *Folder count*: **115**
> This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder).
@ -119,5 +121,6 @@ Component Builder is mapped as a component in itself on my local development env
## Donations
Come on buy me a coffee :)
* PayPal: pay@vdm.io
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
* PayPal: [paypal.me/payvdm](https://www.paypal.me/payvdm)
* Bitcoin: 1N45VjnZSNmDK64xRrQYGRRi56rgpnze3s
* Ethereum: 0x243392daa3c9c8bc841fcacf7c7f72541cb16823

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage admin.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 109 of this MVC
@build 31st March, 2017
@version @update number 111 of this MVC
@build 7th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage admin_view.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 109 of this MVC
@build 31st March, 2017
@version @update number 111 of this MVC
@build 7th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage admin_views.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 47 of this MVC
@build 21st March, 2017
@version @update number 49 of this MVC
@build 31st May, 2017
@created 1st February, 2017
@package Component Builder
@subpackage compiler.css

View File

@ -10,7 +10,7 @@
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 82 of this MVC
@build 3rd April, 2017
@build 26th April, 2017
@created 11th October, 2016
@package Component Builder
@subpackage custom_code.css

View File

@ -10,7 +10,7 @@
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 82 of this MVC
@build 3rd April, 2017
@build 26th April, 2017
@created 11th October, 2016
@package Component Builder
@subpackage custom_codes.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage dashboard.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 81 of this MVC
@build 15th January, 2017
@version @update number 84 of this MVC
@build 4th May, 2017
@created 21st May, 2015
@package Component Builder
@subpackage dynamic_get.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 81 of this MVC
@build 15th January, 2017
@version @update number 84 of this MVC
@build 4th May, 2017
@created 21st May, 2015
@package Component Builder
@subpackage dynamic_gets.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 3rd February, 2017
@version @update number 38 of this MVC
@build 28th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage field.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 3rd February, 2017
@version @update number 38 of this MVC
@build 28th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fields.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 12 of this MVC
@build 20th October, 2016
@version @update number 13 of this MVC
@build 13th June, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fieldtype.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 12 of this MVC
@build 20th October, 2016
@version @update number 13 of this MVC
@build 13th June, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fieldtypes.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 318 of this MVC
@build 5th April, 2017
@version @update number 338 of this MVC
@build 28th June, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_component.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 318 of this MVC
@build 5th April, 2017
@version @update number 338 of this MVC
@build 28th June, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_components.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 5th April, 2017
@version @update number 39 of this MVC
@build 7th April, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translation.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 5th April, 2017
@version @update number 39 of this MVC
@build 7th April, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translations.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 67 of this MVC
@build 1st April, 2017
@version @update number 77 of this MVC
@build 30th May, 2017
@created 18th May, 2015
@package Component Builder
@subpackage layout.css

View File

@ -9,8 +9,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 67 of this MVC
@build 1st April, 2017
@version @update number 77 of this MVC
@build 30th May, 2017
@created 18th May, 2015
@package Component Builder
@subpackage layouts.css

View File

@ -52,7 +52,10 @@ class ###Component###View###Component### extends JViewLegacy
// Assign data to the view
$this->icons = $this->get('Icons');
$this->contributors = ###Component###Helper::getContributors();###DASH_GET_CUSTOM_DATA###
// get the manifest details of the component
$this->manifest = ###Component###Helper::manifest();
// Set the toolbar
$this->addToolBar();
@ -87,15 +90,19 @@ class ###Component###View###Component### extends JViewLegacy
/**
* Method to set up the document properties
*
*
* @return void
*/
protected function setDocument()
{
$document = JFactory::getDocument();
// add dashboard style sheets
$document->addStyleSheet(JURI::root() . "administrator/components/com_###component###/assets/css/dashboard.css");
// set page title
$document->setTitle(JText::_('COM_###COMPONENT###_DASHBOARD'));
// add manifest to page JavaScript
$document->addScriptDeclaration("var manifest = jQuery.parseJSON('" . json_encode($this->manifest) . "');", "text/javascript");
}
}

View File

@ -706,7 +706,8 @@ abstract class ###Component###Helper
// If you don't need to handle multi-byte characters
// you can use preg_replace rather than mb_ereg_replace
// Thanks @Łukasz Rysiak!
$string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
// $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
$string = preg_replace("([^\w\s\d\-_\(\)])", '', $string);
// http://stackoverflow.com/a/2021729/1429677
return preg_replace('/\s+/', ' ', $string);
}

View File

@ -698,7 +698,8 @@ abstract class ###Component###Helper
// If you don't need to handle multi-byte characters
// you can use preg_replace rather than mb_ereg_replace
// Thanks @Łukasz Rysiak!
$string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
// $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
$string = preg_replace("([^\w\s\d\-_\(\)])", '', $string);
// http://stackoverflow.com/a/2021729/1429677
return preg_replace('/\s+/', ' ', $string);
}

View File

@ -29,30 +29,27 @@ defined('_JEXEC') or die('Restricted access');
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
$manifest = ###Component###Helper::manifest();
JHtml::_('bootstrap.loadCss');
?>
<img alt="<?php echo JText::_('COM_###COMPONENT###'); ?>" src="components/com_###component###/assets/images/component-300.###COMP_IMAGE_TYPE###">
<ul class="list-striped">
<li><b><?php echo JText::_('COM_###COMPONENT###_VERSION'); ?>:</b> <?php echo $manifest->version; ?></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_DATE'); ?>:</b> <?php echo $manifest->creationDate; ?></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_AUTHOR'); ?>:</b> <a href="mailto:<?php echo $manifest->authorEmail; ?>"><?php echo $manifest->author; ?></a></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_WEBSITE'); ?>:</b> <a href="<?php echo $manifest->authorUrl; ?>" target="_blank"><?php echo $manifest->authorUrl; ?></a></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_LICENSE'); ?>:</b> <?php echo $manifest->license; ?></li>
<li><b><?php echo $manifest->copyright; ?></b></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_VERSION'); ?>:</b> <?php echo $this->manifest->version; ?>&nbsp;&nbsp;<span class="update-notice"></span></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_DATE'); ?>:</b> <?php echo $this->manifest->creationDate; ?></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_AUTHOR'); ?>:</b> <a href="mailto:<?php echo $this->manifest->authorEmail; ?>"><?php echo $this->manifest->author; ?></a></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_WEBSITE'); ?>:</b> <a href="<?php echo $this->manifest->authorUrl; ?>" target="_blank"><?php echo $this->manifest->authorUrl; ?></a></li>
<li><b><?php echo JText::_('COM_###COMPONENT###_LICENSE'); ?>:</b> <?php echo $this->manifest->license; ?></li>
<li><b><?php echo $this->manifest->copyright; ?></b></li>
</ul>
<div class="clearfix"></div>
<?php if(###Component###Helper::checkArray($this->contributors)): ?>
<?php if(count($this->contributors) > 1): ?>
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTORS'); ?></h3>
<?php else: ?>
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTOR'); ?></h3>
<?php endif; ?>
<ul class="list-striped">
<?php foreach($this->contributors as $contributor): ?>
<li><b><?php echo $contributor['title']; ?>:</b> <?php echo $contributor['name']; ?></li>
<?php endforeach; ?>
</ul>
<div class="clearfix"></div>
<?php if(count($this->contributors) > 1): ?>
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTORS'); ?></h3>
<?php else: ?>
<h3><?php echo JText::_('COM_###COMPONENT###_CONTRIBUTOR'); ?></h3>
<?php endif; ?>
<ul class="list-striped">
<?php foreach($this->contributors as $contributor): ?>
<li><b><?php echo $contributor['title']; ?>:</b> <?php echo $contributor['name']; ?></li>
<?php endforeach; ?>
</ul>
<div class="clearfix"></div>
<?php endif; ?>

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage componentbuilder.php

View File

@ -344,47 +344,6 @@
validated="url"
message="Error! Please add link here."
hint="COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_LINK_HINT"
/>
<!-- Export_buy_query Field. Type: Text. (joomla) -->
<field
type="text"
name="export_buy_query"
label="COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_QUERY_LABEL"
size="40"
maxlength="150"
description="COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_QUERY_DESCRIPTION"
class="text_area"
filter="STRING"
message="Error! Please email address here."
hint="COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_QUERY_HINT"
/>
<!-- Export_package_link Field. Type: Url. (joomla) -->
<field
type="url"
name="export_package_link"
label="COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_LINK_LABEL"
size="60"
maxlength="150"
description="COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_LINK_DESCRIPTION"
class="text_area"
required="false"
filter="url"
validated="url"
message="Error! Please add link here."
hint="COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_LINK_HINT"
/>
<!-- Export_package_query Field. Type: Text. (joomla) -->
<field
type="text"
name="export_package_query"
label="COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_QUERY_LABEL"
size="40"
maxlength="150"
description="COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_QUERY_DESCRIPTION"
class="text_area"
filter="STRING"
message="Error! Please email address here."
hint="COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_QUERY_HINT"
/>
</fieldset>
<fieldset

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage controller.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 109 of this MVC
@build 31st March, 2017
@version @update number 111 of this MVC
@build 7th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage admin_view.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 109 of this MVC
@build 31st March, 2017
@version @update number 111 of this MVC
@build 7th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage admin_views.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage ajax.json.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 47 of this MVC
@build 21st March, 2017
@version @update number 49 of this MVC
@build 31st May, 2017
@created 1st February, 2017
@package Component Builder
@subpackage compiler.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage componentbuilder.php

View File

@ -11,7 +11,7 @@
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 82 of this MVC
@build 3rd April, 2017
@build 26th April, 2017
@created 11th October, 2016
@package Component Builder
@subpackage custom_code.php

View File

@ -11,7 +11,7 @@
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 82 of this MVC
@build 3rd April, 2017
@build 26th April, 2017
@created 11th October, 2016
@package Component Builder
@subpackage custom_codes.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 81 of this MVC
@build 15th January, 2017
@version @update number 84 of this MVC
@build 4th May, 2017
@created 21st May, 2015
@package Component Builder
@subpackage dynamic_get.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 81 of this MVC
@build 15th January, 2017
@version @update number 84 of this MVC
@build 4th May, 2017
@created 21st May, 2015
@package Component Builder
@subpackage dynamic_gets.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 3rd February, 2017
@version @update number 38 of this MVC
@build 28th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage field.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 3rd February, 2017
@version @update number 38 of this MVC
@build 28th May, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fields.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 12 of this MVC
@build 20th October, 2016
@version @update number 13 of this MVC
@build 13th June, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fieldtype.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 12 of this MVC
@build 20th October, 2016
@version @update number 13 of this MVC
@build 13th June, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fieldtypes.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage help.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage import.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage import_joomla_components.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 318 of this MVC
@build 5th April, 2017
@version @update number 338 of this MVC
@build 28th June, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_component.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 318 of this MVC
@build 5th April, 2017
@version @update number 338 of this MVC
@build 28th June, 2017
@created 6th May, 2015
@package Component Builder
@subpackage joomla_components.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 5th April, 2017
@version @update number 39 of this MVC
@build 7th April, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translation.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 37 of this MVC
@build 5th April, 2017
@version @update number 39 of this MVC
@build 7th April, 2017
@created 3rd April, 2017
@package Component Builder
@subpackage language_translations.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 67 of this MVC
@build 1st April, 2017
@version @update number 77 of this MVC
@build 30th May, 2017
@created 18th May, 2015
@package Component Builder
@subpackage layout.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version @update number 67 of this MVC
@build 1st April, 2017
@version @update number 77 of this MVC
@build 30th May, 2017
@created 18th May, 2015
@package Component Builder
@subpackage layouts.php

232
admin/custom/timeago.js Normal file
View File

@ -0,0 +1,232 @@
/**
* Timeago is a jQuery plugin that makes it easy to support automatically
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
*
* @name timeago
* @version 1.5.4
* @requires jQuery v1.2.3+
* @author Ryan McGeary
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
*
* For usage and examples, visit:
* http://timeago.yarp.com/
*
* Copyright (c) 2008-2017, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else if (typeof module === 'object' && typeof module.exports === 'object') {
factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
$.timeago = function(timestamp) {
if (timestamp instanceof Date) {
return inWords(timestamp);
} else if (typeof timestamp === "string") {
return inWords($.timeago.parse(timestamp));
} else if (typeof timestamp === "number") {
return inWords(new Date(timestamp));
} else {
return inWords($.timeago.datetime(timestamp));
}
};
var $t = $.timeago;
$.extend($.timeago, {
settings: {
refreshMillis: 60000,
allowPast: true,
allowFuture: false,
localeTitle: false,
cutoff: 0,
autoDispose: true,
strings: {
prefixAgo: null,
prefixFromNow: null,
suffixAgo: "ago",
suffixFromNow: "from now",
inPast: 'any moment now',
seconds: "less than a minute",
minute: "about a minute",
minutes: "%d minutes",
hour: "about an hour",
hours: "about %d hours",
day: "a day",
days: "%d days",
month: "about a month",
months: "%d months",
year: "about a year",
years: "%d years",
wordSeparator: " ",
numbers: []
}
},
inWords: function(distanceMillis) {
if (!this.settings.allowPast && ! this.settings.allowFuture) {
throw 'timeago allowPast and allowFuture settings can not both be set to false.';
}
var $l = this.settings.strings;
var prefix = $l.prefixAgo;
var suffix = $l.suffixAgo;
if (this.settings.allowFuture) {
if (distanceMillis < 0) {
prefix = $l.prefixFromNow;
suffix = $l.suffixFromNow;
}
}
if (!this.settings.allowPast && distanceMillis >= 0) {
return this.settings.strings.inPast;
}
var seconds = Math.abs(distanceMillis) / 1000;
var minutes = seconds / 60;
var hours = minutes / 60;
var days = hours / 24;
var years = days / 365;
function substitute(stringOrFunction, number) {
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
var value = ($l.numbers && $l.numbers[number]) || number;
return string.replace(/%d/i, value);
}
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
seconds < 90 && substitute($l.minute, 1) ||
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
minutes < 90 && substitute($l.hour, 1) ||
hours < 24 && substitute($l.hours, Math.round(hours)) ||
hours < 42 && substitute($l.day, 1) ||
days < 30 && substitute($l.days, Math.round(days)) ||
days < 45 && substitute($l.month, 1) ||
days < 365 && substitute($l.months, Math.round(days / 30)) ||
years < 1.5 && substitute($l.year, 1) ||
substitute($l.years, Math.round(years));
var separator = $l.wordSeparator || "";
if ($l.wordSeparator === undefined) { separator = " "; }
return $.trim([prefix, words, suffix].join(separator));
},
parse: function(iso8601) {
var s = $.trim(iso8601);
s = s.replace(/\.\d+/,""); // remove milliseconds
s = s.replace(/-/,"/").replace(/-/,"/");
s = s.replace(/T/," ").replace(/Z/," UTC");
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
return new Date(s);
},
datetime: function(elem) {
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
return $t.parse(iso8601);
},
isTime: function(elem) {
// jQuery's `is()` doesn't play well with HTML5 in IE
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
}
});
// functions that can be called via $(el).timeago('action')
// init is default when no action is given
// functions are called with context of a single element
var functions = {
init: function() {
functions.dispose.call(this);
var refresh_el = $.proxy(refresh, this);
refresh_el();
var $s = $t.settings;
if ($s.refreshMillis > 0) {
this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
}
},
update: function(timestamp) {
var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);
$(this).data('timeago', { datetime: date });
if ($t.settings.localeTitle) {
$(this).attr("title", date.toLocaleString());
}
refresh.apply(this);
},
updateFromDOM: function() {
$(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
refresh.apply(this);
},
dispose: function () {
if (this._timeagoInterval) {
window.clearInterval(this._timeagoInterval);
this._timeagoInterval = null;
}
}
};
$.fn.timeago = function(action, options) {
var fn = action ? functions[action] : functions.init;
if (!fn) {
throw new Error("Unknown function name '"+ action +"' for timeago");
}
// each over objects here and call the requested function
this.each(function() {
fn.call(this, options);
});
return this;
};
function refresh() {
var $s = $t.settings;
//check if it's still visible
if ($s.autoDispose && !$.contains(document.documentElement,this)) {
//stop if it has been removed
$(this).timeago("dispose");
return this;
}
var data = prepareData(this);
if (!isNaN(data.datetime)) {
if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
$(this).text(inWords(data.datetime));
} else {
if ($(this).attr('title').length > 0) {
$(this).text($(this).attr('title'));
}
}
}
return this;
}
function prepareData(element) {
element = $(element);
if (!element.data("timeago")) {
element.data("timeago", { datetime: $t.datetime(element) });
var text = $.trim(element.text());
if ($t.settings.localeTitle) {
element.attr("title", element.data('timeago').datetime.toLocaleString());
} else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
element.attr("title", text);
}
}
return element.data("timeago");
}
function inWords(date) {
return $t.inWords(distance(date));
}
function distance(date) {
return (new Date().getTime() - date.getTime());
}
// fix for IE6 suckage
document.createElement("abbr");
document.createElement("time");
}));

View File

@ -476,7 +476,20 @@ class Get
* @var array
*/
public $siteFields = array();
/**
* The add SQL
*
* @var array
*/
public $addSQL = array();
/**
* The update SQL
*
* @var array
*/
public $updateSQL = array();
/***
* Constructor
@ -518,6 +531,27 @@ class Get
}
// get the component data
$this->componentData = $this->getComponentData();
// make sure we have a version
if (strpos($this->componentData->component_version, '.') === FALSE)
{
$this->componentData->component_version = '1.0.0';
}
// update the version
if (!isset($this->componentData->old_component_version)
&& (ComponentbuilderHelper::checkArray($this->addSQL) || ComponentbuilderHelper::checkArray($this->updateSQL)))
{
// set the new version
$version = (array) explode('.', $this->componentData->component_version);
// get last key
end($version);
$key = key($version);
// just increment the last
$version[$key]++;
// set the old version
$this->componentData->old_component_version = $this->componentData->component_version;
// set the new version, and set update switch
$this->componentData->component_version = implode('.', $version);
}
// set the percentage when a language can be added
$this->percentageLanguageAdd = (int) $this->params->get('percentagelanguageadd', 50);
@ -591,6 +625,7 @@ class Get
}
unset($component->addfolders);
}
// ser the addfiles data
$addfiles = json_decode($component->addfiles,true);
if (ComponentbuilderHelper::checkArray($addfiles))
@ -657,6 +692,7 @@ class Get
// set the admin_view data
$admin_views = json_decode($component->addadmin_views,true);
if (ComponentbuilderHelper::checkArray($admin_views))
{
foreach ($admin_views as $option => $values)
@ -830,6 +866,25 @@ class Get
$component->version_update[$nr][$option] = $value;
}
}
}
// build update SQL
if ($old_component = $this->getHistoryWatch('joomla_component', $this->componentID))
{
// add new views if found
if (isset($old_component->addadmin_views) && ComponentbuilderHelper::checkJson($old_component->addadmin_views))
{
$this->setUpdateSQL(json_decode($old_component->addadmin_views, true), $admin_views, 'adminview');
}
// check if a new version was manualy set
$old_component_version = preg_replace('/[^0-9.]+/', '', $old_component->component_version);
if ($old_component_version != $this->component_version)
{
// yes, this is a new version, this mean there may be manual sql and must be checked and updated
$component->old_component_version = $old_component_version;
}
// clear this data
unset($old_component);
}
// add_css
@ -1106,6 +1161,22 @@ class Get
unset($view->addlinked_views);
$tables = json_decode($view->addtables,true);
unset($view->addtables);
// build update SQL
if ($old_view = $this->getHistoryWatch('admin_view', $id))
{
// add new fields were added
if (isset($old_view->addfields) && ComponentbuilderHelper::checkJson($old_view->addfields))
{
$this->setUpdateSQL(json_decode($old_view->addfields, true), $fields, 'field', $name_single);
}
// check if the view name changed
if (ComponentbuilderHelper::checkString($old_view->name_single))
{
$this->setUpdateSQL(ComponentbuilderHelper::safeString($old_view->name_single), $name_single, 'table_name', $name_single);
}
// clear this data
unset($old_view);
}
// sort the values
if (ComponentbuilderHelper::checkArray($tables))
{
@ -1430,6 +1501,7 @@ class Get
unset($view->sql);
}
}
// store this view to class object
$this->_adminViewData[$id] = $view;
}
// return the found view data
@ -1689,6 +1761,9 @@ class Get
$this->basicEncryption = true;
}
// get the last used version
$field->history = $this->getHistoryWatch('field', $id);
$this->_fieldData[$id] = $field;
}
else
@ -2151,6 +2226,210 @@ class Get
return false;
}
/**
* check if an update SQL is needed
*
* @param mix $old The old values
* @param mix $new The new values
* @param string $type The type of values
* @param int $key The id/key where values changed
*
* @return void
*
*/
protected function setUpdateSQL($old, $new, $type, $key = null)
{
// check if there were new items added
if (isset($new[$type]) && ComponentbuilderHelper::checkArray($new[$type])
&& isset($old[$type]) && ComponentbuilderHelper::checkArray($old[$type]))
{
foreach ($new[$type] as $item)
{
if (!in_array($item, $old[$type]))
{
// we have a new item, lets add to SQL
if (!isset($this->addSQL[$type]) || !ComponentbuilderHelper::checkArray($this->addSQL[$type]))
{
$this->addSQL[$type] = array();
}
// add key if found
if ($key)
{
if (!isset($this->addSQL[$type][$key]) || !ComponentbuilderHelper::checkArray($this->addSQL[$type][$key]))
{
$this->addSQL[$type][$key] = array();
}
$this->addSQL[$type][$key][] = (int) $item;
}
else
{
// convert adminview id to name
if ('adminview' === $type)
{
$this->addSQL[$type][] = ComponentbuilderHelper::safeString($this->getAdminViewData($item)->name_single);
}
else
{
$this->addSQL[$type][] = (int) item;
}
}
}
}
}
elseif ($key && ComponentbuilderHelper::checkString($new)
&& ComponentbuilderHelper::checkString($old)
&& $new !== $old)
{
// the string changed, lets add to SQL update
if (!isset($this->updateSQL[$type]) || !ComponentbuilderHelper::checkArray($this->updateSQL[$type]))
{
$this->updateSQL[$type] = array();
}
// set at key
$this->updateSQL[$type][$key] = array('old' => $old, 'new' => $new);
}
}
/**
* Get Item History values
*
* @param string $type The type of item
* @param int $id The item ID
*
* @return oject The history
*
*/
protected function getHistoryWatch($type, $id)
{
// quick class object to store old history object
$this->tmpHistory = null;
// Create a new query object.
$query = $this->db->getQuery(true);
$query->select('h.*');
$query->from('#__ucm_history AS h');
$query->where($this->db->quoteName('h.ucm_item_id') . ' = '. (int) $id);
// Join over the content type for the type id
$query->join('LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id');
$query->where('ct.type_alias = ' . $this->db->quote('com_componentbuilder.'.$type));
$query->order('h.save_date DESC');
$this->db->setQuery($query, 0, 1);
$this->db->execute();
if ($this->db->getNumRows())
{
// new version of this item found
// so we need to mark it as the last compiled version
$newActive = $this->db->loadObject();
// set the new version watch
$this->setHistoryWatch($newActive, 1);
}
// Get last compiled verion
$query = $this->db->getQuery(true);
$query->select('h.*');
$query->from('#__ucm_history AS h');
$query->where($this->db->quoteName('h.ucm_item_id') . ' = ' . (int) $id);
$query->where('h.keep_forever = 1');
$query->where('h.version_note LIKE ' . $this->db->quote('%component%'));
// make sure it does not return the active version
if (isset($newActive) && isset($newActive->version_id))
{
$query->where('h.version_id != ' . (int) $newActive->version_id);
}
// Join over the content type for the type id
$query->join('LEFT', '#__content_types AS ct ON ct.type_id = h.ucm_type_id');
$query->where('ct.type_alias = ' . $this->db->quote('com_componentbuilder.'.$type));
$query->order('h.save_date DESC');
$this->db->setQuery($query);
$this->db->execute();
if ($this->db->getNumRows())
{
// the old active version was found
// so we may need to do an SQL update
// and unmark the old compiled version
$oldActives = $this->db->loadObjectList();
foreach ($oldActives as $oldActive)
{
// remove old version watch
$this->setHistoryWatch($oldActive, 0);
}
}
// return the last used history record or null.
return $this->tmpHistory;
}
/**
* Set Item History Watch
*
* @param Object $object The history object
* @param int $action The action to take
* 0 = remove watch
* 1 = add watch
* @param string $type The type of item
*
* @return bool
*
*/
protected function setHistoryWatch($object, $action)
{
// check the note
if (ComponentbuilderHelper::checkJson($object->version_note))
{
$version_note = json_decode($object->version_note, true);
}
else
{
$version_note = array('component' => array());
}
// set watch
switch ($action)
{
case 0:
// remove watch
if(isset($version_note['component']) && ($key = array_search($this->componentID, $version_note['component'])) !== false)
{
// last version that was used to build/compile
$this->tmpHistory = json_decode($object->version_data);
// remove it from this component
unset($version_note['component'][$key]);
}
else
{
// since it was not found, no need to update anything
return true;
}
break;
case 1:
// add watch
if (!in_array($this->componentID, $version_note['component']))
{
$version_note['component'][] = $this->componentID;
}
else
{
// since it is there already, no need to update anything
return true;
}
break;
}
// check if we need to still keep this locked
if (isset($version_note['component']) && ComponentbuilderHelper::checkArray($version_note['component']))
{
// insure component ids are only added once per item
$version_note['component'] = array_unique($version_note['component']);
// we may change this, little risky (but since JCB does not have history notes it should be okay for now)
$object->version_note = json_encode($version_note);
$object->keep_forever = '1';
}
else
{
$object->version_note = '';
$object->keep_forever = '0';
}
// run the update
return $this->db->updateObject('#__ucm_history', $object, 'version_id');
}
/**
* Set Template and Layout Data
*
@ -2947,7 +3226,7 @@ class Get
}
else
{
if (!$keyPlaceholder = array_search($item['id'], $this->functionNameMemory))
if (($keyPlaceholder = array_search($item['id'], $this->functionNameMemory)) === false)
{
$keyPlaceholder = $item['id'];
}
@ -3032,9 +3311,8 @@ class Get
$query->from($this->db->quoteName('#__componentbuilder_language_translation','a'));
if (ComponentbuilderHelper::checkArray($values))
{
$query->select($this->db->quoteName(array('a.id','a.translation','a.entranslation','a.components')));
$query->select($this->db->quoteName(array('a.id','a.translation','a.entranslation','a.components','a.published')));
$query->where($this->db->quoteName('a.entranslation') . ' IN (' . implode(',',array_map(function($a){ return $this->db->quote($a); }, $values)) . ')');
$query->where($this->db->quoteName('a.published') . ' >= 1');
$this->db->setQuery($query);
$this->db->execute();
if ($this->db->getNumRows())
@ -3052,7 +3330,7 @@ class Get
* @return void
*
*/
public function setLangPlaceholders(&$strings)
public function setLangPlaceholders($strings)
{
$counterInsert = 0;
$counterUpdate = 0;
@ -3111,9 +3389,14 @@ class Get
if (ComponentbuilderHelper::checkJson($this->multiLangString[$string]['components']))
{
$components = (array) json_decode($this->multiLangString[$string]['components'], true);
// check if we should add the component ID
if (in_array($this->componentID, $components))
{
continue;
// only skip the update if the string is published and has the component ID
if ($this->multiLangString[$string]['published'] == 1)
{
continue;
}
}
else
{
@ -3125,12 +3408,7 @@ class Get
$components = array($this->componentID);
}
// start the bucket for this lang
$this->existingLangStrings[$counterUpdate] = array();
$this->existingLangStrings[$counterUpdate]['id'] = (int) $id;
$this->existingLangStrings[$counterUpdate]['conditions'] = array();
$this->existingLangStrings[$counterUpdate]['conditions'][] = $this->db->quoteName('id') . ' = ' . $this->db->quote($id);
$this->existingLangStrings[$counterUpdate]['fields'] = array();
$this->existingLangStrings[$counterUpdate]['fields'][] = $this->db->quoteName('components') . ' = ' . $this->db->quote(json_encode($components));
$this->setUpdateExistingLangStrings($id, $components, 1, $today, $counterUpdate);
$counterUpdate++;
@ -3238,6 +3516,129 @@ class Get
// clear the values array
$this->existingLangStrings = array();
}
}
/**
* Remove exiting language translation stings
*
* @param int $id To string ID to remove
*
* @return void
*
*/
protected function removeExitingLangString($id)
{
// Create a new query object.
$query = $this->db->getQuery(true);
// delete all custom keys for user 1001.
$conditions = array(
$this->db->quoteName('id') . ' = ' . (int) $id
);
$query->delete($this->db->quoteName('#__componentbuilder_language_translation'));
$query->where($conditions);
$this->db->setQuery($query);
$this->db->execute();
}
/**
* Function to purge the unused languge strings
*
* @param string $values the active strings
*
* @return void
*
*/
public function purgeLanuageStrings($values)
{
// Create a new query object.
$query = $this->db->getQuery(true);
$query->from($this->db->quoteName('#__componentbuilder_language_translation','a'));
$query->select($this->db->quoteName(array('a.id','a.translation','a.components')));
// get all string that are not linked to this component
$query->where($this->db->quoteName('a.entranslation') . ' NOT IN (' . implode(',',array_map(function($a){ return $this->db->quote($a); }, $values)) . ')');
$query->where($this->db->quoteName('a.published') . ' = 1');
$this->db->setQuery($query);
$this->db->execute();
if ($this->db->getNumRows())
{
$counterUpdate = 0;
$otherStrings = $this->db->loadAssocList();
$today = JFactory::getDate()->toSql();
foreach ($otherStrings as $item)
{
if (ComponentbuilderHelper::checkJson($item['components']))
{
$components = (array) json_decode($item['components'], true);
// if component is not found ignore this string, and do nothing
if (($key = array_search($this->componentID, $components)) !== false)
{
// first remove the component from the string
unset($components[$key]);
// check if there are more components
if (ComponentbuilderHelper::checkArray($components))
{
// just update the string to unlink the current component
$this->setUpdateExistingLangStrings($item['id'], $components, 1, $today, $counterUpdate);
$counterUpdate++;
// load to db
$this->setExistingLangStrings(50);
}
// check if this string has been worked on
elseif (ComponentbuilderHelper::checkJson($item['translation']))
{
$translation = json_decode($item['translation'], true);
if (ComponentbuilderHelper::checkArray($translation) && ComponentbuilderHelper::checkArray($translation['translation']))
{
// only archive the item and update the string to unlink the current component
$this->setUpdateExistingLangStrings($item['id'], $components, 2, $today, $counterUpdate);
$counterUpdate++;
// load to db
$this->setExistingLangStrings(50);
}
else
{
// remove the string since no translation found and not linked to any other component
$this->removeExitingLangString($item['id']);
}
}
else
{
// remove the string since no translation found and not linked to any other component
$this->removeExitingLangString($item['id']);
}
}
}
}
// load to db
$this->setExistingLangStrings();
}
}
/**
* just to add lang string to the existing Lang Strings array
*
* @return void
*
*/
protected function setUpdateExistingLangStrings($id, $components, $published, $today, $counterUpdate)
{
// start the bucket for this lang
$this->existingLangStrings[$counterUpdate] = array();
$this->existingLangStrings[$counterUpdate]['id'] = (int) $id;
$this->existingLangStrings[$counterUpdate]['conditions'] = array();
$this->existingLangStrings[$counterUpdate]['conditions'][] = $this->db->quoteName('id') . ' = ' . $this->db->quote($id);
$this->existingLangStrings[$counterUpdate]['fields'] = array();
$this->existingLangStrings[$counterUpdate]['fields'][] = $this->db->quoteName('components') . ' = ' . $this->db->quote(json_encode($components));
$this->existingLangStrings[$counterUpdate]['fields'][] = $this->db->quoteName('published') . ' = ' . $this->db->quote($published);
$this->existingLangStrings[$counterUpdate]['fields'][] = $this->db->quoteName('modified') . ' = ' . $this->db->quote($today);
$this->existingLangStrings[$counterUpdate]['fields'][] = $this->db->quoteName('modified_by') . ' = ' . $this->db->quote((int) $this->user->id);
}
/**

View File

@ -721,16 +721,19 @@ class Structure extends Get
*/
public function getLastModifiedDate($view)
{
if (isset($view['settings']->modified) && ComponentbuilderHelper::checkString($view['settings']->modified))
// first set the main date
if (isset($view['settings']->modified)
&& ComponentbuilderHelper::checkString($view['settings']->modified)
&& '0000-00-00 00:00:00' !== $view['settings']->modified)
{
// first set the main date
$date = strtotime($view['settings']->modified);
}
else
{
// first set the main date
// use todays date
$date = strtotime("now");
}
// search for the last modified date
if (isset($view['adminview']))
{
$id = $view['adminview'].'admin';
@ -741,7 +744,9 @@ class Structure extends Get
{
foreach ($view['settings']->fields as $field)
{
if (isset($field['settings']) && ComponentbuilderHelper::checkObject($field['settings']) && isset($field['settings']->modified))
if (isset($field['settings']) && ComponentbuilderHelper::checkObject($field['settings'])
&& isset($field['settings']->modified) && ComponentbuilderHelper::checkString($field['settings']->modified)
&& '0000-00-00 00:00:00' !== $field['settings']->modified)
{
$anotherDate = strtotime($field['settings']->modified);
if ($anotherDate > $date)
@ -759,7 +764,9 @@ class Structure extends Get
// now check if value has been set
if (!isset($this->lastModifiedDate[$id]))
{
if (isset($view['settings']->main_get->modified))
if (isset($view['settings']->main_get->modified)
&& ComponentbuilderHelper::checkString($view['settings']->main_get->modified)
&& '0000-00-00 00:00:00' !== $view['settings']->main_get->modified)
{
$anotherDate = strtotime($view['settings']->main_get->modified);
if ($anotherDate > $date)
@ -775,7 +782,9 @@ class Structure extends Get
// now check if value has been set
if (!isset($this->lastModifiedDate[$id]))
{
if (isset($view['settings']->main_get->modified))
if (isset($view['settings']->main_get->modified)
&& ComponentbuilderHelper::checkString($view['settings']->main_get->modified)
&& '0000-00-00 00:00:00' !== $view['settings']->main_get->modified)
{
$anotherDate = strtotime($view['settings']->main_get->modified);
if ($anotherDate > $date)

View File

@ -229,6 +229,13 @@ class Fields extends Structure
*/
public $jsonStringBuilder = array();
/**
* Json String Builder for return values to array
*
* @var array
*/
public $jsonItemBuilderArray = array();
/**
* Json Item Builder
*
@ -761,8 +768,8 @@ class Fields extends Structure
}
elseif ($this->defaultField($typeName, 'special'))
{
// set the repeatable field
if ($typeName === 'repeatable')
// set the repeatable field or subform field
if ($typeName === 'repeatable' || $typeName === 'subform')
{
if ($build)
{
@ -1026,6 +1033,93 @@ class Fields extends Structure
$fieldSet .= PHP_EOL."\t\t\t</fields>";
$fieldSet .= PHP_EOL."\t\t</field>";
}
// set the subform fields (it is a repeatable without the modal)
elseif ($typeName === 'subform')
{
// now add to the field set
$fieldSet .= PHP_EOL."\t\t<!--" . $this->setLine(__LINE__) . " " . ComponentbuilderHelper::safeString($name, 'F') . " Field. Type: " . ComponentbuilderHelper::safeString($typeName, 'F') . ". (joomla) -->";
$fieldSet .= PHP_EOL."\t\t<field";
$fieldsSet = array();
foreach ($fieldAttributes as $property => $value)
{
if ($property != 'fields')
{
$fieldSet .= PHP_EOL."\t\t\t" . $property . '="' . $value . '"';
}
}
$fieldSet .= ">";
$fieldSet .= PHP_EOL."\t\t\t" . '<form hidden="true" name="list_' . $fieldAttributes['name'] . '_modal" repeat="true">';
if (strpos($fieldAttributes['fields'], ',') !== false)
{
// mulitpal fields
$fieldsSets = (array) explode(',', $fieldAttributes['fields']);
}
elseif (is_numeric($fieldAttributes['fields']))
{
// single field
$fieldsSets[] = (int) $fieldAttributes['fields'];
}
// only continue if we have a field set
if (ComponentbuilderHelper::checkArray($fieldsSets))
{
foreach ($fieldsSets as $fieldId)
{
// get the field data
$fieldData = array();
$fieldData['settings'] = $this->getFieldData($fieldId, $viewName);
if (ComponentbuilderHelper::checkObject($fieldData['settings']))
{
$r_name = ComponentbuilderHelper::safeString($fieldData['settings']->name);
$r_typeName = ComponentbuilderHelper::safeString($fieldData['settings']->type_name);
$r_multiple = false;
$r_langLabel = '';
// add the tabs needed
$taber = "\t\t";
// get field values
$r_fieldValues = $this->setFieldAttributes($fieldData, $view, $r_name, $r_typeName, $r_multiple, $r_langLabel, $langView, $spacerCounter, $listViewName, $viewName, $placeholders, true);
// check if values were set
if (ComponentbuilderHelper::checkArray($r_fieldValues))
{
//reset options array
$r_optionArray = array();
if ($this->defaultField($r_typeName, 'option'))
{
// now add to the field set
$fieldSet .= $this->setField('option', $taber, $r_fieldValues, $r_name, $r_typeName, $langView, $viewName, $listViewName, $placeholders, $r_optionArray);
}
elseif ($this->defaultField($r_typeName, 'plain'))
{
// now add to the field set
$fieldSet .= $this->setField('plain', $taber, $r_fieldValues, $r_name, $r_typeName, $langView, $viewName, $listViewName, $placeholders, $r_optionArray);
}
elseif (ComponentbuilderHelper::checkArray($r_fieldValues['custom']))
{
// add to custom
$custom = $r_fieldValues['custom'];
unset($r_fieldValues['custom']);
// now add to the field set
$fieldSet .= $this->setField('custom', $taber, $r_fieldValues, $r_name, $r_typeName, $langView, $viewName, $listViewName, $placeholders, $r_optionArray);
// set lang (just incase)
$r_listLangName = $langView . '_' . ComponentbuilderHelper::safeString($r_name, 'U');
// add to lang array
$this->langContent[$this->lang][$r_listLangName] = ComponentbuilderHelper::safeString($r_name, 'W');
// if label was set use instead
if (ComponentbuilderHelper::checkString($r_langLabel))
{
$r_listLangName = $r_langLabel;
}
// set the custom array
$data = array('type' => $r_typeName, 'code' => $r_name, 'lang' => $r_listLangName, 'custom' => $custom);
// set the custom field file
$this->setCustomFieldTypeFile($data, $listViewName, $viewName);
}
}
}
}
}
$fieldSet .= PHP_EOL."\t\t\t</form>";
$fieldSet .= PHP_EOL."\t\t</field>";
}
}
elseif ($setType === 'custom')
{
@ -1670,6 +1764,8 @@ class Fields extends Structure
{
$this->queryBuilder[$viewName][$name]['default'] = 'EMPTY';
}
// to identify the field
$this->queryBuilder[$viewName][$name]['ID'] = $field['settings']->id;
$this->queryBuilder[$viewName][$name]['null_switch'] = $field['settings']->null_switch;
// set index types
if ($field['settings']->indexes == 1 && !in_array($field['settings']->datatype, $textKeys))
@ -1727,7 +1823,7 @@ class Fields extends Structure
}
}
// build the list values
if ($field['list'] == 1 && $typeName != 'repeatable')
if ($field['list'] == 1 && $typeName != 'repeatable' && $typeName != 'subform')
{
// load to list builder
$this->listBuilder[$listViewName][] = array(
@ -1763,7 +1859,7 @@ class Fields extends Structure
$this->intFieldsBuilder[$viewName] .= ',"' . $name . '"';
}
// set all dynamic field of this view
if ($typeName != 'category' && $typeName != 'repeatable' && !in_array($name, $this->defaultFields))
if ($typeName != 'category' && $typeName != 'repeatable' && $typeName != 'subform' && !in_array($name, $this->defaultFields))
{
if (!isset($this->dynamicfieldsBuilder[$viewName]))
{
@ -1788,7 +1884,7 @@ class Fields extends Structure
}
}
// set the custom builder
if (ComponentbuilderHelper::checkArray($custom) && $typeName != 'category' && $typeName != 'repeatable')
if (ComponentbuilderHelper::checkArray($custom) && $typeName != 'category' && $typeName != 'repeatable' && $typeName != 'subform')
{
$this->customBuilder[$listViewName][] = array('type' => $typeName, 'code' => $name, 'lang' => $listLangName, 'custom' => $custom, 'method' => $field['settings']->store);
// set the custom fields needed in content type data
@ -1834,7 +1930,7 @@ class Fields extends Structure
$this->checkboxBuilder[$viewName][] = $name;
}
// setup checkboxes and other json items for this view
if (($typeName === 'checkboxes' || $multiple || $field['settings']->store != 0) && $typeName != 'tag')
if (($typeName === 'subform' || $typeName === 'checkboxes' || $multiple || $field['settings']->store != 0) && $typeName != 'tag')
{
switch ($field['settings']->store)
{
@ -1876,7 +1972,7 @@ class Fields extends Structure
}
// load the json list display fix
if ($field['list'] == 1 && $typeName != 'repeatable')
if ($field['list'] == 1 && $typeName != 'repeatable' && $typeName != 'subform')
{
if (ComponentbuilderHelper::checkArray($options))
{
@ -1887,6 +1983,12 @@ class Fields extends Structure
$this->getItemsMethodListStringFixBuilder[$viewName][] = array('name' => $name, 'type' => $typeName, 'translation' => false, 'custom' => $custom, 'method' => $field['settings']->store);
}
}
// if subform the values must revert to array
if ('subform' === $typeName)
{
$this->jsonItemBuilderArray[$viewName][] = $name;
}
}
// build the data for the export & import methods $typeName === 'repeatable' ||
if (($typeName === 'checkboxes' || $multiple || $field['settings']->store != 0) && !ComponentbuilderHelper::checkArray($options))
@ -1897,12 +1999,12 @@ class Fields extends Structure
// check if field should be added to uikit
$this->buildSiteFieldData($viewName, $name, 'uikit', $typeName);
// load the selection translation fix
if (ComponentbuilderHelper::checkArray($options) && $field['list'] == 1 && $typeName != 'repeatable')
if (ComponentbuilderHelper::checkArray($options) && $field['list'] == 1 && $typeName != 'repeatable' && $typeName != 'subform')
{
$this->selectionTranslationFixBuilder[$listViewName][$name] = $options;
}
// build the sort values
if ($field['sort'] == 1 && $field['list'] == 1 && (!$multiple && $typeName != 'checkbox' && $typeName != 'checkboxes' && $typeName != 'repeatable'))
if ($field['sort'] == 1 && $field['list'] == 1 && (!$multiple && $typeName != 'checkbox' && $typeName != 'checkboxes' && $typeName != 'repeatable' && $typeName != 'subform'))
{
$this->sortBuilder[$listViewName][] = array('type' => $typeName, 'code' => $name, 'lang' => $listLangName, 'custom' => $custom, 'options' => $options);
}
@ -1912,7 +2014,7 @@ class Fields extends Structure
$this->searchBuilder[$listViewName][] = array('type' => $typeName, 'code' => $name, 'custom' => $custom, 'list' => $field['list']);
}
// build the filter values
if ($field['filter'] == 1 && $field['list'] == 1 && (!$multiple && $typeName != 'checkbox' && $typeName != 'checkboxes' && $typeName != 'repeatable'))
if ($field['filter'] == 1 && $field['list'] == 1 && (!$multiple && $typeName != 'checkbox' && $typeName != 'checkboxes' && $typeName != 'repeatable' && $typeName != 'subform'))
{
$this->filterBuilder[$listViewName][] = array('type' => $typeName, 'code' => $name, 'lang' => $listLangName, 'database' => $viewName, 'function' => ComponentbuilderHelper::safeString($name, 'F'), 'custom' => $custom, 'options' => $options);
}
@ -2069,7 +2171,7 @@ class Fields extends Structure
'chromestyle', 'contenttype', 'databaseconnection', 'editors', 'email', 'file',
'filelist', 'folderlist', 'groupedlist', 'hidden', 'file', 'headertag', 'helpsite',
'imagelist', 'integer', 'language', 'list', 'media', 'menu', 'note', 'number', 'password',
'plugins', 'radio', 'repeatable', 'range', 'rules', 'sessionhandler', 'spacer', 'sql', 'tag',
'plugins', 'radio', 'repeatable', 'range', 'rules', 'subform', 'sessionhandler', 'spacer', 'sql', 'tag',
'tel', 'menuitem', 'meter', 'modulelayout', 'moduleorder', 'moduleposition', 'moduletag',
'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup'
),
@ -2090,7 +2192,7 @@ class Fields extends Structure
),
'special' => array(
'contentlanguage', 'groupedlist', 'moduleposition', 'plugin',
'repeatable', 'templatestyle'
'repeatable', 'templatestyle', 'subform'
)
);

View File

@ -33,6 +33,7 @@ class Interpretation extends Fields
{
public $theContributors = '';
public $uninstallBuilder = array();
public $updateSQLBuilder = array();
public $listColnrBuilder = array();
public $permissionBuilder = array();
public $permissionDashboard = array();
@ -522,8 +523,7 @@ class Interpretation extends Fields
public function setVersionController()
{
$updateServer = '';
if (ComponentbuilderHelper::checkArray($this->componentData->version_update))
if (ComponentbuilderHelper::checkArray($this->componentData->version_update) || ComponentbuilderHelper::checkArray($this->updateSQLBuilder))
{
$updateXML = array();
// add the update server
@ -531,52 +531,34 @@ class Interpretation extends Fields
{
$updateXML[] = '<updates>';
}
// add the update sql
$addSQL = true;
foreach ($this->componentData->version_update as $update)
// add the dynamic sql switch
$addDynamicSQL = true;
$addActive = true;
if (ComponentbuilderHelper::checkArray($this->componentData->version_update))
{
// ensure version naming is correct
$update['version'] = preg_replace('/[^0-9.]+/', '', $update['version']);
// check if the sql should be added
if ($update['version'] == $this->componentData->component_version)
foreach ($this->componentData->version_update as $nr => &$update)
{
$addSQL = false;
}
// setup import files
if ($addSQL)
{
$name = ComponentbuilderHelper::safeString($update['version']);
$target = array('admin' => $name);
$this->buildDynamique($target,'sql_update',$update['version']);
$this->fileContentDynamic[$name.'_'.$update['version']]['###UPDATE_VERSION_MYSQL###'] = $update['mysql'];
}
// add the update server
if ($this->componentData->add_update_server && $this->componentData->update_server_target != 3)
{
// build update xml
$updateXML[] = "\t<update>";
$updateXML[] = "\t\t<name>".$this->fileContentStatic['###Component_name###']."</name>";
$updateXML[] = "\t\t<description>".$this->fileContentStatic['###SHORT_DESCRIPTION###']."</description>";
$updateXML[] = "\t\t<element>com_".$this->fileContentStatic['###component###']."</element>";
$updateXML[] = "\t\t<type>component</type>";
$updateXML[] = "\t\t<version>".$update['version']."</version>";
$updateXML[] = "\t\t".'<infourl title="'.$this->fileContentStatic['###Component_name###'].'!">'.$this->fileContentStatic['###AUTHORWEBSITE###'].'</infourl>';
$updateXML[] = "\t\t<downloads>";
if (!isset($update['url']))
$this->setUpdateXMLSQL($update, $updateXML, $addDynamicSQL);
if ($update['version'] == $this->componentData->component_version)
{
$update['url'] = 'http://domain.com/demo.xml';
$addActive = false;
}
$updateXML[] = "\t\t\t".'<downloadurl type="full" format="zip">'.$update['url'].'</downloadurl>';
$updateXML[] = "\t\t</downloads>";
$updateXML[] = "\t\t<tags>";
$updateXML[] = "\t\t\t<tag>stable</tag>";
$updateXML[] = "\t\t</tags>";
$updateXML[] = "\t\t<maintainer>".$this->fileContentStatic['###AUTHOR###']."</maintainer>";
$updateXML[] = "\t\t<maintainerurl>".$this->fileContentStatic['###AUTHORWEBSITE###']."</maintainerurl>";
$updateXML[] = "\t\t".'<targetplatform name="joomla" version="3.*"/>';
$updateXML[] = "\t</update>";
}
}
// add the dynamic sql if not already added
if ($addDynamicSQL && ComponentbuilderHelper::checkArray($this->updateSQLBuilder))
{
// add the dynamic sql
$this->setDynamicUpdateXMLSQL($updateXML);
}
// add the new active version if needed
if ($addActive && ComponentbuilderHelper::checkArray($this->updateSQLBuilder))
{
// add the dynamic sql
$this->setDynamicUpdateXMLSQL($updateXML, $addActive);
}
// add the update server file
if ($this->componentData->add_update_server && $this->componentData->update_server_target != 3)
{
@ -604,6 +586,141 @@ class Interpretation extends Fields
}
// add update server details to component XML file
$this->fileContentStatic['###UPDATESERVER###'] = $updateServer;
// ensure to update Component version data
if (ComponentbuilderHelper::checkArray($this->updateSQLBuilder))
{
$buket = array();
$buket['version'] = array();
$buket['mysql'] = array();
$buket['url'] = array();
foreach ($this->componentData->version_update as $values)
{
foreach ($values as $key => $value)
{
$buket[$key][] = $value;
}
}
$new = array();
$new['id'] = (int) $this->componentID;
$new['component_version'] = $this->componentData->component_version;
$new['version_update'] = json_encode($buket);
// update the component with the new dynamic SQL
$model = ComponentbuilderHelper::getModel('joomla_component');
$model->save($new); // <-- to insure the history is also updated
// reset the watch here
$this->getHistoryWatch('joomla_component', $this->componentID);
}
}
public function setDynamicUpdateXMLSQL(&$updateXML, $current_version = false)
{
// start building the update
$update_ = array();
if ($current_version)
{
// setup new version
$update_['version'] = $this->componentData->component_version;
// setup SQL
$update_['mysql'] = '';
// setup URL
$update_['url'] = 'http://domain.com/demo.zip';
}
else
{
// setup new version
$update_['version'] = $this->componentData->old_component_version;
// setup SQL
$update_['mysql'] = trim(implode(PHP_EOL.PHP_EOL, $this->updateSQLBuilder));
// setup URL
if (isset($this->lastupdateURL))
{
$paceholders = array(
$this->componentData->component_version => $this->componentData->old_component_version,
str_replace('.','-', $this->componentData->component_version) => str_replace('.','-', $this->componentData->old_component_version),
str_replace('.','_', $this->componentData->component_version) => str_replace('.','_', $this->componentData->old_component_version),
str_replace('.','', $this->componentData->component_version) => str_replace('.','', $this->componentData->old_component_version)
);
$update_['url'] = $this->setPlaceholders($this->lastupdateURL, $paceholders);
}
else
{
// setup URL
$update_['url'] = 'http://domain.com/demo.zip';
}
}
// stop it from being added double
$addDynamicSQL = false;
$this->componentData->version_update[] = $update_;
// add dynamic SQL
$this->setUpdateXMLSQL($update_, $updateXML, $addDynamicSQL);
}
public function setUpdateXMLSQL(&$update, &$updateXML, &$addDynamicSQL)
{
// ensure version naming is correct
$update['version'] = preg_replace('/[^0-9.]+/', '', $update['version']);
// setup SQL
if (ComponentbuilderHelper::checkString($update['mysql']))
{
$update['mysql'] = $this->setPlaceholders($update['mysql'], $this->placeholders);
}
// add dynamic SQL
$force = false;
if ($addDynamicSQL && ComponentbuilderHelper::checkArray($this->updateSQLBuilder)
&& (isset($this->componentData->old_component_version) && $this->componentData->old_component_version == $update['version']))
{
$searchMySQL = preg_replace('/\s+/', '', $update['mysql']);
// add the updates to the SQL only if not found
foreach ($this->updateSQLBuilder as $search => $query)
{
if (strpos($searchMySQL, $search) === FALSE)
{
$update['mysql'] .= PHP_EOL.PHP_EOL.$query;
}
}
// make sure no unneeded white space is added
$update['mysql'] = trim($update['mysql']);
// update has been added
$addDynamicSQL = false;
}
// setup import files
if ($update['version'] != $this->componentData->component_version)
{
$name = ComponentbuilderHelper::safeString($update['version']);
$target = array('admin' => $name);
$this->buildDynamique($target,'sql_update',$update['version']);
$this->fileContentDynamic[$name.'_'.$update['version']]['###UPDATE_VERSION_MYSQL###'] = $update['mysql'];
}
elseif (isset($update['url']) && ComponentbuilderHelper::checkString($update['url']))
{
$this->lastupdateURL = $update['url'];
}
// add the update server
if ($this->componentData->add_update_server && $this->componentData->update_server_target != 3)
{
// build update xml
$updateXML[] = "\t<update>";
$updateXML[] = "\t\t<name>".$this->fileContentStatic['###Component_name###']."</name>";
$updateXML[] = "\t\t<description>".$this->fileContentStatic['###SHORT_DESCRIPTION###']."</description>";
$updateXML[] = "\t\t<element>com_".$this->fileContentStatic['###component###']."</element>";
$updateXML[] = "\t\t<type>component</type>";
$updateXML[] = "\t\t<version>".$update['version']."</version>";
$updateXML[] = "\t\t".'<infourl title="'.$this->fileContentStatic['###Component_name###'].'!">'.$this->fileContentStatic['###AUTHORWEBSITE###'].'</infourl>';
$updateXML[] = "\t\t<downloads>";
if (!isset($update['url']) || !ComponentbuilderHelper::checkString($update['url']))
{
$update['url'] = 'http://domain.com/demo.zip';
}
$updateXML[] = "\t\t\t".'<downloadurl type="full" format="zip">'.$update['url'].'</downloadurl>';
$updateXML[] = "\t\t</downloads>";
$updateXML[] = "\t\t<tags>";
$updateXML[] = "\t\t\t<tag>stable</tag>";
$updateXML[] = "\t\t</tags>";
$updateXML[] = "\t\t<maintainer>".$this->fileContentStatic['###AUTHOR###']."</maintainer>";
$updateXML[] = "\t\t<maintainerurl>".$this->fileContentStatic['###AUTHORWEBSITE###']."</maintainerurl>";
$updateXML[] = "\t\t".'<targetplatform name="joomla" version="3.*"/>';
$updateXML[] = "\t</update>";
}
}
public function noHelp()
@ -1609,7 +1726,7 @@ class Interpretation extends Fields
$value = " ".$whe['value_key']."');";
}
elseif (strpos($whe['value_key'],'$this->') !== false)
elseif (strpos($whe['value_key'],'$') !== false)
{
if ($whe['operator'] === 'IN' || $whe['operator'] === 'NOT IN')
{
@ -1622,21 +1739,29 @@ class Interpretation extends Fields
}
elseif (strpos($whe['value_key'],'.') !== false)
{
$value = " ".$whe['value_key']."');";
if (strpos($whe['value_key'],"'") !== false)
{
$value = " ' . \$db->quote(".$whe['value_key']."));";
}
else
{
$value = " ".$whe['value_key']."');";
}
}
// only load if there is a value
if (ComponentbuilderHelper::checkString($value))
{
$tabe = '';
if ($as === 'a')
{
$tabe = $tab;
}
// set the string
if ($whe['operator'] === 'IN' || $whe['operator'] === 'NOT IN')
{
$tabe = '';
if ($as === 'a')
{
$tabe = $tab;
}
$string = "if (isset(" . $whe['value_key']. ") && ".$this->fileContentStatic['###Component###']."Helper::checkArray(" . $whe['value_key']. "))";
$string .= PHP_EOL."\t".$tabe."\t{";
$string .= PHP_EOL."\t".$tabe."\t\t\//".$this->setLine(__LINE__)." Get where ".$whe['table_key']." is " . $whe['value_key'];
$string .= PHP_EOL."\t".$tabe."\t\t\$query->where('".$whe['table_key']." ".$whe['operator'].$value;
$string .= PHP_EOL."\t".$tabe."\t}";
$string .= PHP_EOL."\t".$tabe."\telse";
@ -1647,7 +1772,8 @@ class Interpretation extends Fields
}
else
{
$string = "\$query->where('".$whe['table_key']." ".$whe['operator'].$value;
$string = "//".$this->setLine(__LINE__)." Get where ".$whe['table_key']." is " . $whe['value_key'];
$string .= PHP_EOL."\t".$tabe."\t\$query->where('".$whe['table_key']." ".$whe['operator'].$value;
}
// sort where
if ($as === 'a' || (isset($this->siteMainGet[$this->target][$code][$as]) && ComponentbuilderHelper::checkString($this->siteMainGet[$this->target][$code][$as])))
@ -3456,10 +3582,16 @@ class Interpretation extends Fields
$makeArray = '';
foreach ($this->jsonStringBuilder[$view] as $jsonString)
{
$script .= PHP_EOL.PHP_EOL."\t\t\tif (!empty(\$item->".$jsonString."))";
$script .= PHP_EOL.PHP_EOL."\t\t\tif (!empty(\$item->".$jsonString."))";
$script .= PHP_EOL."\t\t\t{";
$script .= PHP_EOL."\t\t\t\t//".$this->setLine(__LINE__)." JSON Decode ".$jsonString.".";
if (strpos($jsonString, 'group') !== false)
if (isset($this->jsonItemBuilderArray[$view])
&& ComponentbuilderHelper::checkArray($this->jsonStringBuilderArray[$view])
&& in_array($jsonString, $this->jsonItemBuilderArray[$view]))
{
$makeArray = ',true';
}
elseif (strpos($jsonString, 'group') !== false)
{
$makeArray = ',true';
}
@ -4117,6 +4249,7 @@ class Interpretation extends Fields
public function routerParseSwitch(&$view, $viewArray = null, $aliasView = true, $idView = true)
{
$isCategory = '';
$viewTable = false;
if ($viewArray && ComponentbuilderHelper::checkArray($viewArray))
{
if (isset($viewArray['settings']->main_get->db_table_main) && $viewArray['settings']->main_get->db_table_main === 'categories')
@ -4128,29 +4261,25 @@ class Interpretation extends Fields
// $idView = false; // TODO we will keep an eye on this....
// $aliasView = false;
// }
// elseif (isset($viewArray['settings']->main_get->main_get) && ComponentbuilderHelper::checkArray($viewArray['settings']->main_get->main_get))
// {
// $aliasView = false;
// foreach ($viewArray['settings']->main_get->main_get as $get)
// {
// if ($get['as'] === 'a')
// {
// if (isset($get['selection']) && ComponentbuilderHelper::checkArray($get['selection'])
// && isset($get['selection']['select_gets'])
// && ComponentbuilderHelper::checkArray($get['selection']['select_gets']))
// {
// foreach ($get['selection']['select_gets'] as $checkAlias)
// {
// if ($checkAlias === "'a.alias'")
// {
// $aliasView = true;
// }
// }
// }
//
// }
// }
// }
elseif (isset($viewArray['settings']->main_get->main_get) && ComponentbuilderHelper::checkArray($viewArray['settings']->main_get->main_get))
{
foreach ($viewArray['settings']->main_get->main_get as $get)
{
if ($get['as'] === 'a')
{
if (isset($get['selection']) && ComponentbuilderHelper::checkArray($get['selection'])
&& isset($get['selection']['select_gets'])
&& ComponentbuilderHelper::checkArray($get['selection']['select_gets']))
{
if (isset($get['selection']['table']))
{
$viewTable = str_replace('#__'.$this->fileContentStatic['###component###'].'_', '', $get['selection']['table']);
}
}
}
}
}
}
// add if tags is added, also for all front item views
if ($aliasView)
@ -4166,7 +4295,15 @@ class Interpretation extends Fields
$routerSwitch[] = "\t\t\t\t}";
$routerSwitch[] = "\t\t\t\telseif (\$segments[\$count-1])";
$routerSwitch[] = "\t\t\t\t{";
$routerSwitch[] = "\t\t\t\t\t\$id = \$this->getVar('".$view."', \$segments[\$count-1], 'alias', 'id'".$isCategory.");";
// we need to get from the table of this views main get the alias so we need the table name
if ($viewTable)
{
$routerSwitch[] = "\t\t\t\t\t\$id = \$this->getVar('".$viewTable."', \$segments[\$count-1], 'alias', 'id'".$isCategory.");";
}
else
{
$routerSwitch[] = "\t\t\t\t\t\$id = \$this->getVar('".$view."', \$segments[\$count-1], 'alias', 'id'".$isCategory.");";
}
$routerSwitch[] = "\t\t\t\t\tif(\$id)";
$routerSwitch[] = "\t\t\t\t\t{";
$routerSwitch[] = "\t\t\t\t\t\t\$vars['id'] = \$id;";
@ -4823,15 +4960,24 @@ class Interpretation extends Fields
// build the uninstall array
$this->uninstallBuilder[] = "DROP TABLE IF EXISTS `#__".$component."_".$view."`;";
// setup the tables
$db .= "CREATE TABLE IF NOT EXISTS `#__".$component."_".$view."` (";
// setup the table DB string
$db_ = '';
$db_ .= "CREATE TABLE IF NOT EXISTS `#__".$component."_".$view."` (";
// check if the table name has changed
if (isset($this->updateSQL['table_name']) && isset($this->updateSQL['table_name'][$view]))
{
$old_table_name = $this->updateSQL['table_name'][$view]['old'];
$this->updateSQLBuilder["RENAMETABLE`#__".$component."_".$old_table_name."`"]
= "RENAME TABLE `#__".$component."_".$old_table_name."` to `#__".$component."_".$view."`;";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['id']))
{
$db .= PHP_EOL."\t`id` INT(11) NOT NULL AUTO_INCREMENT,";
$db_ .= PHP_EOL."\t`id` INT(11) NOT NULL AUTO_INCREMENT,";
}
$db .= PHP_EOL."\t`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',";
$db_ .= PHP_EOL."\t`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',";
ksort($fields);
$last_name = 'asset_id';
foreach ($fields as $field => $data)
{
// set default
@ -4850,7 +4996,14 @@ class Interpretation extends Fields
}
elseif ($default == 0 || $default)
{
$default = $data['null_switch']." DEFAULT '".$default."'";
if (is_numeric($default))
{
$default = $data['null_switch']." DEFAULT ".$default;
}
else
{
$default = $data['null_switch']." DEFAULT '".$default."'";
}
}
elseif ($data['null_switch'] === 'NULL')
{
@ -4871,116 +5024,142 @@ class Interpretation extends Fields
$lenght = '('.$data['lenght'].')';
}
// set the field to db
$db .= PHP_EOL."\t`".$field."` ".$data['type'].$lenght." ".$default.",";
$db_ .= PHP_EOL."\t`".$field."` ".$data['type'].$lenght." ".$default.",";
// check if this a new field that should be added via SQL update
if (isset($this->addSQL['field']) && isset($this->addSQL['field'][$view])
&& ComponentbuilderHelper::checkArray($this->addSQL['field'][$view])
&& in_array($data['ID'], $this->addSQL['field'][$view]))
{
$this->updateSQLBuilder["ALTERTABLE`#__".$component."_".$view."`ADD`".$field."`"]
= "ALTER TABLE `#__".$component."_".$view."` ADD `".$field."` ".$data['type'].$lenght." ".$default." AFTER `".$last_name."`;";
}
// check if the field has changed name and/or data type and lenght
elseif (0)
{
// hmmm tough one
}
// be sure to track the last name used :)
$last_name = $field;
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['params']))
{
$db .= PHP_EOL."\t`params` text NOT NULL DEFAULT '',";
$db_ .= PHP_EOL."\t`params` text NOT NULL DEFAULT '',";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['published']))
{
$db .= PHP_EOL."\t`published` TINYINT(3) NOT NULL DEFAULT 1,";
$db_ .= PHP_EOL."\t`published` TINYINT(3) NOT NULL DEFAULT 1,";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['created_by']))
{
$db .= PHP_EOL."\t`created_by` INT(10) unsigned NOT NULL DEFAULT 0,";
$db_ .= PHP_EOL."\t`created_by` INT(10) unsigned NOT NULL DEFAULT 0,";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['modified_by']))
{
$db .= PHP_EOL."\t`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,";
$db_ .= PHP_EOL."\t`modified_by` INT(10) unsigned NOT NULL DEFAULT 0,";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['created']))
{
$db .= PHP_EOL."\t`created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
$db_ .= PHP_EOL."\t`created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['modified']))
{
$db .= PHP_EOL."\t`modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
$db_ .= PHP_EOL."\t`modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['checked_out']))
{
$db .= PHP_EOL."\t`checked_out` int(11) unsigned NOT NULL DEFAULT 0,";
$db_ .= PHP_EOL."\t`checked_out` int(11) unsigned NOT NULL DEFAULT 0,";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['checked_out_time']))
{
$db .= PHP_EOL."\t`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
$db_ .= PHP_EOL."\t`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['version']))
{
$db .= PHP_EOL."\t`version` INT(10) unsigned NOT NULL DEFAULT 1,";
$db_ .= PHP_EOL."\t`version` INT(10) unsigned NOT NULL DEFAULT 1,";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['hits']))
{
$db .= PHP_EOL."\t`hits` INT(10) unsigned NOT NULL DEFAULT 0,";
$db_ .= PHP_EOL."\t`hits` INT(10) unsigned NOT NULL DEFAULT 0,";
}
// check if view has access
if (isset($this->accessBuilder[$view]) && ComponentbuilderHelper::checkString($this->accessBuilder[$view]))
{
$db .= PHP_EOL."\t`access` INT(10) unsigned NOT NULL DEFAULT 0,";
$db_ .= PHP_EOL."\t`access` INT(10) unsigned NOT NULL DEFAULT 0,";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['ordering']))
{
$db .= PHP_EOL."\t`ordering` INT(11) NOT NULL DEFAULT 0,";
$db_ .= PHP_EOL."\t`ordering` INT(11) NOT NULL DEFAULT 0,";
}
// check if metadata is added to this view
if (isset($this->metadataBuilder[$view]) && ComponentbuilderHelper::checkString($this->metadataBuilder[$view]))
{
$db .= PHP_EOL."\t`metakey` TEXT NOT NULL DEFAULT '',";
$db .= PHP_EOL."\t`metadesc` TEXT NOT NULL DEFAULT '',";
$db .= PHP_EOL."\t`metadata` TEXT NOT NULL DEFAULT '',";
$db_ .= PHP_EOL."\t`metakey` TEXT NOT NULL DEFAULT '',";
$db_ .= PHP_EOL."\t`metadesc` TEXT NOT NULL DEFAULT '',";
$db_ .= PHP_EOL."\t`metadata` TEXT NOT NULL DEFAULT '',";
}
$db .= PHP_EOL."\tPRIMARY KEY (`id`)";
$db_ .= PHP_EOL."\tPRIMARY KEY (`id`)";
if (isset($this->dbUniqueKeys[$view]) && ComponentbuilderHelper::checkArray($this->dbUniqueKeys[$view]))
{
foreach ($this->dbUniqueKeys[$view] as $nr => $key)
{
$db .= ",".PHP_EOL."\tUNIQUE KEY `idx_".$key."` (`".$key."`)";
$db_ .= ",".PHP_EOL."\tUNIQUE KEY `idx_".$key."` (`".$key."`)";
}
}
// check if view has access
if (isset($this->accessBuilder[$view]) && ComponentbuilderHelper::checkString($this->accessBuilder[$view]))
{
$db .= ",".PHP_EOL."\tKEY `idx_access` (`access`)";
$db_ .= ",".PHP_EOL."\tKEY `idx_access` (`access`)";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['checked_out']))
{
$db .= ",".PHP_EOL."\tKEY `idx_checkout` (`checked_out`)";
$db_ .= ",".PHP_EOL."\tKEY `idx_checkout` (`checked_out`)";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['created_by']))
{
$db .= ",".PHP_EOL."\tKEY `idx_createdby` (`created_by`)";
$db_ .= ",".PHP_EOL."\tKEY `idx_createdby` (`created_by`)";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['modified_by']))
{
$db .= ",".PHP_EOL."\tKEY `idx_modifiedby` (`modified_by`)";
$db_ .= ",".PHP_EOL."\tKEY `idx_modifiedby` (`modified_by`)";
}
// check if default field was over written
if (!isset($this->fieldsNames[$view]['published']))
{
$db .= ",".PHP_EOL."\tKEY `idx_state` (`published`)";
$db_ .= ",".PHP_EOL."\tKEY `idx_state` (`published`)";
}
if (isset($this->dbKeys[$view]) && ComponentbuilderHelper::checkArray($this->dbKeys[$view]))
{
foreach ($this->dbKeys[$view] as $nr => $key)
{
$db .= ",".PHP_EOL."\tKEY `idx_".$key."` (`".$key."`)";
$db_ .= ",".PHP_EOL."\tKEY `idx_".$key."` (`".$key."`)";
}
}
$db .= PHP_EOL.") ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;".PHP_EOL.PHP_EOL;
$db_ .= PHP_EOL.") ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;";
// check if this is a new table that should be added via update SQL
if (isset($this->addSQL['adminview']) && ComponentbuilderHelper::checkArray($this->addSQL['adminview'])
&& in_array($view, $this->addSQL['adminview']))
{
// build the update array
$this->updateSQLBuilder["CREATETABLEIFNOTEXISTS`#__".$component."_".$view."`"] = $db_;
}
// add to main DB string
$db .= $db_.PHP_EOL.PHP_EOL;
}
// add custom sql dump to the file
if (isset($this->customScriptBuilder['sql']) && ComponentbuilderHelper::checkArray($this->customScriptBuilder['sql']))
@ -4988,7 +5167,7 @@ class Interpretation extends Fields
foreach ($this->customScriptBuilder['sql'] as $for => $customSql)
{
$placeholders = array('[[[component]]]' => $component, '[[[view]]]' => $for);
$db .= PHP_EOL.PHP_EOL.$this->setPlaceholders($customSql, $placeholders);
$db .= $this->setPlaceholders($customSql, $placeholders).PHP_EOL.PHP_EOL;
}
}
@ -5127,7 +5306,7 @@ class Interpretation extends Fields
// check if the both array is set
if (isset($this->langContent['both']) && ComponentbuilderHelper::checkArray($this->langContent['both']))
{
foreach ($this->langContent[$this->lang] as $keylang => $langval)
foreach ($this->langContent['both'] as $keylang => $langval)
{
$this->langContent['site'][$keylang] = $langval;
}
@ -5729,8 +5908,7 @@ class Interpretation extends Fields
$linkedViewId = '';
if (ComponentbuilderHelper::checkArray($linkedTab))
{
$linkedViewId = array_search($tabNr,$linkedTab);
if ($linkedViewId)
if (($linkedViewId = array_search($tabNr, $linkedTab)) !== false)
{
// don't build
$buildLayout = false;
@ -5866,10 +6044,14 @@ class Interpretation extends Fields
$span = '';
if ($mainwidth != 12)
{
$span = ' span'.$mainwidth;
$span = 'span'.$mainwidth;
}
// start building body
$body = '<div class="form-horizontal'.$span.'">';
$body = PHP_EOL.'<div class="form-horizontal">';
if (ComponentbuilderHelper::checkString($span))
{
$body .= PHP_EOL."\t".'<div class="'.$span.'">';
}
// now build the template
foreach ($bucket as $tabCodeName => $posions)
{
@ -5925,7 +6107,7 @@ class Interpretation extends Fields
if(isset($linkedViewIdentifier) && ComponentbuilderHelper::checkArray($linkedViewIdentifier) && in_array($tabCodeName,$linkedViewIdentifier))
{
// get view name
$linkedViewId = array_search($tabCodeName,$linkedViewIdentifier);
$linkedViewId = array_search($tabCodeName, $linkedViewIdentifier);
$linkedViewData = $this->getAdminViewData($linkedViewId);
$linkedCodeName = ComponentbuilderHelper::safeString($linkedViewData->name_single);
// setup correct core target
@ -6157,6 +6339,7 @@ class Interpretation extends Fields
$body .= PHP_EOL."\t\t".'<input type="hidden" name="task" value="'.$viewName_single.'.edit" />';
$body .= PHP_EOL."\t\t<?php echo JHtml::_('form.token'); ?>";
$body .= PHP_EOL."\t</div>";
$body .= PHP_EOL."\t</div>";
$body .= PHP_EOL."</div>";
// check if left has been set
if (strlen($leftside) > 0 )
@ -6796,8 +6979,8 @@ class Interpretation extends Fields
* @param $parentKey
* @param $parent_key
* @param $globalKey
* @return string
*/
* @return string
*/
public function setListQueryLinked($viewName_single, $viewName_list, $functionName, $key, $_key, $parentKey, $parent_key, $globalKey)
{
// check if this view has category added
@ -6900,7 +7083,7 @@ class Interpretation extends Fields
$query .= PHP_EOL."\t\t\t\t\tif (isset(\$item->".$field.") && ".$this->fileContentStatic['###Component###']."Helper::checkJson(\$item->".$field."))";
$query .= PHP_EOL."\t\t\t\t\t{";
$query .= PHP_EOL."\t\t\t\t\t\t\$tmpArray = json_decode(\$item->".$field.",true);";
$query .= PHP_EOL."\t\t\t\t\t\tif (!in_array(\$this->".$globalKey.", \$tmpArray['".$target."']))";
$query .= PHP_EOL."\t\t\t\t\t\tif (!isset(\$tmpArray['".$target."']) || !".$this->fileContentStatic['###Component###']."Helper::checkArray(\$tmpArray['".$target."']) || !in_array(\$this->".$globalKey.", \$tmpArray['".$target."']))";
$query .= PHP_EOL."\t\t\t\t\t\t{";
$query .= PHP_EOL."\t\t\t\t\t\t\tunset(\$items[\$nr]);";
$query .= PHP_EOL."\t\t\t\t\t\t\tcontinue;";
@ -11245,7 +11428,7 @@ class Interpretation extends Fields
$builder[$data['name']][$data['header']] = $this->setPlaceholders($data['html'], $this->placeholders);
}
// since we have custom tabs we must load the tab structure around the cpanel
$display[] = '<div id="j-main-container" class="span12">';
$display[] = '<div id="j-main-container">';
$display[] = "\t".'<div class="form-horizontal">';
$display[] = "\t<?php echo JHtml::_('bootstrap.startTabSet', 'cpanel_tab', array('active' => 'cpanel')); ?>";
$display[] = PHP_EOL."\t\t<?php echo JHtml::_('bootstrap.addTab', 'cpanel_tab', 'cpanel', JText::_('cPanel', true)); ?>";

View File

@ -192,8 +192,6 @@ class Infusion extends Interpretation
$this->fileContentStatic['###HELP###'] = $this->noHelp();
// ###HELP_SITE###
$this->fileContentStatic['###HELP_SITE###'] = $this->noHelp();
// ###UPDATE_VERSION_MYSQL###
$this->setVersionController();
// build route parse switch
$this->fileContentStatic['###ROUTER_PARSE_SWITCH###'] = '';
@ -760,6 +758,9 @@ class Infusion extends Interpretation
// ###UNINSTALL###
$this->fileContentStatic['###UNINSTALL###'] = $this->setUninstall();
// ###UPDATE_VERSION_MYSQL###
$this->setVersionController();
// ###DASHBOARDICONS###
$this->fileContentDynamic[$this->fileContentStatic['###component###']]['###DASHBOARDICONS###'] = $this->setDashboardIcons();
@ -1100,6 +1101,8 @@ class Infusion extends Interpretation
$this->multiLangString = $this->getMultiLangStrings($values);
// update insert the current lang in to DB
$this->setLangPlaceholders($values);
// remove old unused language strings
$this->purgeLanuageStrings($values);
// path to INI file
$getPAth = $this->templatePath . '/en-GB.com_admin.ini';
// now we insert the values into the files

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage componentbuilder.php
@ -2219,7 +2219,8 @@ abstract class ComponentbuilderHelper
// If you don't need to handle multi-byte characters
// you can use preg_replace rather than mb_ereg_replace
// Thanks @Łukasz Rysiak!
$string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
// $string = mb_ereg_replace("([^\w\s\d\-_\(\)])", '', $string);
$string = preg_replace("([^\w\s\d\-_\(\)])", '', $string);
// http://stackoverflow.com/a/2021729/1429677
return preg_replace('/\s+/', ' ', $string);
}

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage headercheck.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage batch_.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage indenter.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage js.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage minify.php

View File

@ -794,12 +794,9 @@ COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_LABEL="Custom Folder Path"
COM_COMPONENTBUILDER_CONFIG_DONT_LOAD="Not"
COM_COMPONENTBUILDER_CONFIG_ENCRYPTION_DESC="The encription key for the field encryption is set here."
COM_COMPONENTBUILDER_CONFIG_ENCRYPTION_LABEL="Encryption Settings"
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_LINK_DESCRIPTION="Enter link where you JCB package keys can be bought"
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_LINK_DESCRIPTION="Enter link where your JCB package key can be bought."
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_LINK_HINT="http://www.example.com/buy-keys"
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_LINK_LABEL="Buy Link<br /><small>(to get key)</small>"
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_QUERY_DESCRIPTION="Enter query string to use in building the buy url [http://www.example.com/buy-keys&package=JCB_demo]"
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_QUERY_HINT="&package="
COM_COMPONENTBUILDER_CONFIG_EXPORT_BUY_QUERY_LABEL="Buy Query string"
COM_COMPONENTBUILDER_CONFIG_EXPORT_COMPANY_DESCRIPTION="Enter Company Name Here"
COM_COMPONENTBUILDER_CONFIG_EXPORT_COMPANY_HINT="Company Name Here"
COM_COMPONENTBUILDER_CONFIG_EXPORT_COMPANY_LABEL="Company Name"
@ -815,12 +812,6 @@ COM_COMPONENTBUILDER_CONFIG_EXPORT_LICENSE_LABEL="License"
COM_COMPONENTBUILDER_CONFIG_EXPORT_OWNER_DESCRIPTION="The Owner's Name &amp; Surname."
COM_COMPONENTBUILDER_CONFIG_EXPORT_OWNER_HINT="Owner Name &amp; Surname Here"
COM_COMPONENTBUILDER_CONFIG_EXPORT_OWNER_LABEL="Owner"
COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_LINK_DESCRIPTION="Enter link where you latest JCB package can be found"
COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_LINK_HINT="http://www.example.com/buy-package"
COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_LINK_LABEL="Package Link<br /><small>(to get updated package)</small>"
COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_QUERY_DESCRIPTION="Enter query string to use in building the package url [http://www.example.com/buy-package&package=JCB_demo]"
COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_QUERY_HINT="&package="
COM_COMPONENTBUILDER_CONFIG_EXPORT_PACKAGE_QUERY_LABEL="Package Query string"
COM_COMPONENTBUILDER_CONFIG_EXPORT_WEBSITE_DESCRIPTION="Enter website address"
COM_COMPONENTBUILDER_CONFIG_EXPORT_WEBSITE_HINT="http://www.example.com"
COM_COMPONENTBUILDER_CONFIG_EXPORT_WEBSITE_LABEL="Website"
@ -1340,7 +1331,7 @@ COM_COMPONENTBUILDER_CUSTOM_CODE_MODIFIED_DATE_LABEL="Modified Date"
COM_COMPONENTBUILDER_CUSTOM_CODE_NEW="A New Custom Code"
COM_COMPONENTBUILDER_CUSTOM_CODE_NOTE_JCB_PLACEHOLDER_DESCRIPTION="<span id='jcb-placeholder'><code>[save to see placeholder]</code></span><br />You can also pass values to this code like this: <span id='jcb-placeholder-arg'><code>[save to see placeholder trick]</code></span> <br />Those values will be replace placeholders called args. These placeholders are zero based and should look like this: [[[arg0]]], [[[arge1]]] ... as many as you like. If you use 5 args in your code, you must always pass 5 values, since they are zero based your fifth arg will look like this [[[arg4]]]<br />Please note that you can not use this placeholder in other custom code views, but in all other custom code areas in JCB found in other views like the admin, site and custom admin views.<br />Another important note, all code with args will not be reversed updated from the changes in the editor out side of JCB at this time, since that will remove all the arg placeholders this means you will only be able to update the code here in the JCB UI. <br />This note will change once we have resolved these limitations."
COM_COMPONENTBUILDER_CUSTOM_CODE_NOTE_JCB_PLACEHOLDER_LABEL="You can use this code in any JCB code area, simply add this PlaceHolder."
COM_COMPONENTBUILDER_CUSTOM_CODE_NOTE_PLACEHOLDERS_EXPLAINED_DESCRIPTION="<div class='span6'>
COM_COMPONENTBUILDER_CUSTOM_CODE_NOTE_PLACEHOLDERS_EXPLAINED_DESCRIPTION="<div class='form-horizontal'><div class='span6'>
<h1>Understand how the placeholders work in (IDE)</h1>
<div id='phpjs-comment-info'>
<h2>Comment Type PHP/JS</h2>
@ -1442,7 +1433,7 @@ COM_COMPONENTBUILDER_CUSTOM_CODE_NOTE_PLACEHOLDERS_EXPLAINED_DESCRIPTION="<div c
<div id='loading-usedin' style='display: none;'><h2>Scanning Database<span class='loading-dots'>..</span></h2></div>
<div id='note-usedin-found' style='display: none;'><small>You can edit the above areas where this code is used.</small></div>
<div id='note-usedin-not' style='display: none;'><small>This code is not used in any area of the JCB custom code blocks at this time.</small></div>
</div>"
</div></div>"
COM_COMPONENTBUILDER_CUSTOM_CODE_NOTE_PLACEHOLDERS_EXPLAINED_LABEL="Information Area."
COM_COMPONENTBUILDER_CUSTOM_CODE_NOT_REQUIRED="Not Required"
COM_COMPONENTBUILDER_CUSTOM_CODE_ORDERING_LABEL="Ordering"
@ -1504,6 +1495,7 @@ COM_COMPONENTBUILDER_DASHBOARD_TEMPLATE_ADD="Add&nbsp;Template<br /><br />"
COM_COMPONENTBUILDER_DATE="Date"
COM_COMPONENTBUILDER_DEBUG_LINE_NUMBERS="Debug (line numbers)"
COM_COMPONENTBUILDER_DOES_THIS_PACKAGE_REQUIRE_A_KEY_TO_INSTALL="Does this package require a key to install"
COM_COMPONENTBUILDER_DOWNLOAD="download"
COM_COMPONENTBUILDER_DYNAMIC_GET="Dynamic Get"
COM_COMPONENTBUILDER_DYNAMIC_GETS="Dynamic Gets"
COM_COMPONENTBUILDER_DYNAMIC_GETS_ACCESS="Dynamic Gets Access"
@ -2118,6 +2110,7 @@ COM_COMPONENTBUILDER_FIELD_XML_LABEL="XML field definition (Please set the field
COM_COMPONENTBUILDER_FIELD_YES="Yes"
COM_COMPONENTBUILDER_FIELD_ZERO="0"
COM_COMPONENTBUILDER_FORCE_LOCAL_UPDATE="Force Local Update"
COM_COMPONENTBUILDER_GET_THE_KEY_FROM_BSB_FOR_A_CLASSBTN_BTNPRIMARY_HREFS_TARGET_BLANK_TITLEGET_A_KEY_FROM_SSA="Get the key from <b>%s</b> for <a class="btn btn-primary" href="%s" target="_blank" title="get a key from %s">%s</a>"
COM_COMPONENTBUILDER_GLOBAL="Global"
COM_COMPONENTBUILDER_GREAT_THIS_FUNCTION_NAME_WILL_WORK="Great, this function name will work!"
COM_COMPONENTBUILDER_HELP_DOCUMENT="Help Document"
@ -2283,6 +2276,7 @@ COM_COMPONENTBUILDER_IMPORT_TITLE="Data Importer"
COM_COMPONENTBUILDER_IMPORT_UNABLE_TO_FIND_IMPORT_PACKAGE="Package to import not found."
COM_COMPONENTBUILDER_IMPORT_UPDATE_DATA="Import Data"
COM_COMPONENTBUILDER_IMPORT_UPLOAD_BOTTON="Upload File"
COM_COMPONENTBUILDER_ISSUE="issue"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT="Joomla Component"
COM_COMPONENTBUILDER_JOOMLA_COMPONENTS="Joomla Components"
COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_ACCESS="Joomla Components Access"
@ -2564,12 +2558,20 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXIT="Exit"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPAND="Expand"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPAND_TWO="Expand 2"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPIRED="Expired"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK="Export Buy Link"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_DESCRIPTION="Enter link where your JCB package key can be bought."
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_HINT="http://www.example.com/buy-keys"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_BUY_LINK_LABEL="Buy Link<br /><small>(to get key)</small>"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_COMPONENTS_BUTTON_ACCESS="Joomla Component Export Components Button Access"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_COMPONENTS_BUTTON_ACCESS_DESC=" Allows the users in this group to access the export components button."
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY="Export Key"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY_DESCRIPTION="The key used to lock the data during export."
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY_HINT="Export Key Here"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_KEY_LABEL="Export Key<br /><small>(encrypted field)</small>"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_PACKAGE_LINK="Export Package Link"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_PACKAGE_LINK_DESCRIPTION="Enter link where you latest JCB package can be found"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_PACKAGE_LINK_HINT="http://www.example.com/buy-package"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EXPORT_PACKAGE_LINK_LABEL="Package Link<br /><small>(to get updated package)</small>"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EYE_CLOSE="Eye Close"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_EYE_OPEN="Eye Open"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_FEATURED="Featured"
@ -2636,6 +2638,8 @@ COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_COMPONENTS_BUTTON_ACCESS="Joomla Co
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_IMPORT_COMPONENTS_BUTTON_ACCESS_DESC=" Allows the users in this group to access the import components button."
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_INFO="Info"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_INFO_CIRCLE="Info Circle"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_JCB_EXPORT_PACKAGE_NOTE_DESCRIPTION="The settings below are used when you export this component as a JCB Package, for more info on how this works please review the following tutorial (<a href='https://youtu.be/lkE0ZiSWufg' target='_blank'>https://youtu.be/lkE0ZiSWufg</a>)."
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_JCB_EXPORT_PACKAGE_NOTE_LABEL="JCB Package Export Settings"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_JOOMLA="Joomla"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_KEY="Key"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_LAMP="Lamp"
@ -2764,8 +2768,9 @@ Project duration: **###projectWeekTime### weeks** or **###projectMonthTime### mo
## Donations<br />
<br />
If you want to support this project, please consider donating:<br />
* PayPal: pay@vdm.io<br />
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
* PayPal: [paypal.me/payvdm](https://www.paypal.me/payvdm)<br />
* Bitcoin: 1N45VjnZSNmDK64xRrQYGRRi56rgpnze3s<br />
* Ethereum: 0x243392daa3c9c8bc841fcacf7c7f72541cb16823
</code></div>"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_NOTE_README_LABEL="Demo README (with all place-holders)"
COM_COMPONENTBUILDER_JOOMLA_COMPONENT_NOTE_UPDATE_SERVER_NOTE_FTP_DESCRIPTION="Add your FTP signature in the given field and during compilation the file will be moved to the FTP folder. You still need to point the above <b>update server</b> url to the xml file on your FTP server for it to work correctly.<br /><b>Here are the details of the signature:</b><br />&nbsp;&nbsp;&nbsp;string $host = '127.0.0.1'<br />&nbsp;&nbsp;&nbsp;string $port = '21'<br />&nbsp;&nbsp;&nbsp;array $options = array()<br />&nbsp;&nbsp;&nbsp;string $user = null<br />&nbsp;&nbsp;&nbsp;string $pass = null<br />&nbsp;&nbsp;&nbsp;OPTIONS = Array with any of these options:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=>[FTP_AUTOASCII|FTP_ASCII|FTP_BINARY]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout=>(int)<br /><b>Here is an example signature:</b><br /><code>host=HOSTNAME&port=PORT_INT&options[type]=FTP_BINARY&options[timeout]=15&username=user@name.com&password=password</code>"
@ -3155,6 +3160,8 @@ COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_VERSION_DESC="A count of the number of
COM_COMPONENTBUILDER_LANGUAGE_TRANSLATION_VERSION_LABEL="Revision"
COM_COMPONENTBUILDER_LANGUAGE_VERSION_DESC="A count of the number of times this Language has been revised."
COM_COMPONENTBUILDER_LANGUAGE_VERSION_LABEL="Revision"
COM_COMPONENTBUILDER_LAST_FEW_RELEASES_FROM_GITHUB_IS_LOADING="Last few releases from Github is loading"
COM_COMPONENTBUILDER_LATEST_RELEASE="Latest Release"
COM_COMPONENTBUILDER_LAYOUT="Layout"
COM_COMPONENTBUILDER_LAYOUTS="Layouts"
COM_COMPONENTBUILDER_LAYOUTS_ACCESS="Layouts Access"
@ -3266,7 +3273,12 @@ COM_COMPONENTBUILDER_NO="No"
COM_COMPONENTBUILDER_NOTRANSLATION="no-translation"
COM_COMPONENTBUILDER_NO_ACCESS_GRANTED="No Access Granted!"
COM_COMPONENTBUILDER_NO_COMPONENTS_WERE_SELECTED_PLEASE_MAKE_A_SELECTION_AND_TRY_AGAIN="No components were selected, please make a selection and try again!"
COM_COMPONENTBUILDER_OPENED_BY="opened by"
COM_COMPONENTBUILDER_ON_GITHUB="on Github"
COM_COMPONENTBUILDER_OPEN="Open"
COM_COMPONENTBUILDER_OPENED="opened"
COM_COMPONENTBUILDER_OPENED_THIS="opened this"
COM_COMPONENTBUILDER_OPEN_ON_GITHUB="Open on Github"
COM_COMPONENTBUILDER_OUT_OF_DATE="Out of date"
COM_COMPONENTBUILDER_PACKAGE_OWNER_DETAILS="Package Owner Details"
COM_COMPONENTBUILDER_PACKAGE_OWNER_DETAILS_NOT_FOUND="Package owner details not found!"
COM_COMPONENTBUILDER_PACKAGE_OWNER_NOT_SET="Package Owner Not Set"
@ -3277,6 +3289,7 @@ COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_LATTER="Please check again latter."
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_WAIT_CLEARING_THE_TMP_FOLDER="Please wait! Clearing the tmp folder"
COM_COMPONENTBUILDER_READY_TO_COMPILE_A_COMPONENT="Ready to compile a component"
COM_COMPONENTBUILDER_RELEASED_THIS="released this"
COM_COMPONENTBUILDER_RESPOND_TO_THIS_ISSUE_ON_GITHUB="Respond to this issue on Github"
COM_COMPONENTBUILDER_REVIEW_THIS_ISSUE_ON_GITHUB="Review this issue on Github"
COM_COMPONENTBUILDER_SAVE_SUCCESS="Great! Item successfully saved."
@ -3950,14 +3963,18 @@ COM_COMPONENTBUILDER_THE_PACKAGE_KEY_IS_CODESCODE="The package key is: <code>%s<
COM_COMPONENTBUILDER_THE_README_IS_LOADING="The readme is loading"
COM_COMPONENTBUILDER_THE_WIKI_IS_LOADING="The wiki is loading"
COM_COMPONENTBUILDER_THIS_PACKAGE_HAS_NO_KEY="This package has no key."
COM_COMPONENTBUILDER_TOTAL_DOWNLOADS="total downloads"
COM_COMPONENTBUILDER_TO_CHANGE_THE_PACKAGE_OWNER_DEFAULTS_OPEN_THE_BJCB_GLOBAL_OPTIONSB_GO_TO_THE_BCOMPANYB_TAB_AND_ADD_THE_CORRECT_COMPANY_DETAILS_THERE="To change the package owner defaults. Open the <b>JCB Global Options</b>, go to the <b>Company</b> tab and add the correct company details there."
COM_COMPONENTBUILDER_TRANSLATION="Translation"
COM_COMPONENTBUILDER_UP_TO_DATE="Up to date"
COM_COMPONENTBUILDER_USED_IN="used in"
COM_COMPONENTBUILDER_USE_BATCH="Use Batch"
COM_COMPONENTBUILDER_USE_BATCH_DESC=" Allows users in this group to use batch copy/update method."
COM_COMPONENTBUILDER_USE_KEY="Use Key"
COM_COMPONENTBUILDER_VDM_NOTICE_BOARD="VDM Notice Board"
COM_COMPONENTBUILDER_VERSION="Version"
COM_COMPONENTBUILDER_VIEW_MORE_ISSUES_ON_GITHUB="View more issues on Github"
COM_COMPONENTBUILDER_VIEW_MORE_RELEASES_ON_GITHUB="View more releases on Github"
COM_COMPONENTBUILDER_WEBSITE="Website"
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.<br />Without this key it will take the current technology with a brute force attack method more then <a href="http://random-ize.com/how-long-to-hack-pass/" target="_blank" title="How long to hack pass">700 000 000 000 000 000 000 000 000 000 000</a> years to crack theoretically."

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage css_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage custom_buttons_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage custom_buttons_left.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage custom_import_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage fields_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage javascript_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage linked_components_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage mysql_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage mysql_left.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage php_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage publishing.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage publlshing.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage settings_above.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage settings_left.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage settings_right.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage settings_under.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage batchselection.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage custom_buttons_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage custom_buttons_left.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage custom_script_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_above.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_left.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_right.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_rightside.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_under.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage linked_components_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage publishing.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage publlshing.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_above.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_fullwidth.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_left.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_right.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage details_under.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage publishing.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage publlshing.php

View File

@ -10,8 +10,8 @@
|_|
/-------------------------------------------------------------------------------------------------------------------------------/
@version 2.4.2
@build 6th April, 2017
@version 2.4.8
@build 3rd July, 2017
@created 30th April, 2015
@package Component Builder
@subpackage abacus_fullwidth.php

Some files were not shown because too many files have changed in this diff Show More