From f3f91f492f0cd58b66a530d6e2b7a5a8863cbff9 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 3 Apr 2017 11:58:41 +0100 Subject: [PATCH] added the UI for the new Language Manager gh-60 --- README.md | 14 +- admin/README.txt | 14 +- admin/access.xml | 43 + admin/assets/css/admin.css | 4 +- admin/assets/css/dashboard.css | 4 +- admin/assets/css/help_document.css | 2 +- admin/assets/css/help_documents.css | 2 +- admin/assets/css/language.css | 27 + admin/assets/css/language_placeholder.css | 27 + admin/assets/css/language_placeholders.css | 27 + admin/assets/css/languages.css | 27 + .../images/icons/language_placeholder_add.png | Bin 0 -> 43823 bytes .../images/icons/language_placeholders.png | Bin 0 -> 35804 bytes admin/componentbuilder.php | 4 +- admin/controller.php | 6 +- admin/controllers/ajax.json.php | 4 +- admin/controllers/componentbuilder.php | 4 +- admin/controllers/help.php | 4 +- admin/controllers/help_document.php | 2 +- admin/controllers/help_documents.php | 2 +- admin/controllers/import.php | 4 +- .../controllers/import_joomla_components.php | 4 +- admin/controllers/language.php | 326 +++++++ admin/controllers/language_placeholder.php | 326 +++++++ admin/controllers/language_placeholders.php | 120 +++ admin/controllers/languages.php | 111 +++ admin/helpers/componentbuilder.php | 12 +- admin/helpers/headercheck.php | 4 +- admin/helpers/html/batch_.php | 4 +- admin/helpers/indenter.php | 4 +- admin/helpers/js.php | 4 +- admin/helpers/minify.php | 4 +- .../en-GB/en-GB.com_componentbuilder.ini | 159 ++++ .../en-GB/en-GB.com_componentbuilder.sys.ini | 1 + admin/layouts/admin_view/css_fullwidth.php | 4 +- .../admin_view/custom_buttons_fullwidth.php | 4 +- .../admin_view/custom_buttons_left.php | 4 +- .../admin_view/custom_import_fullwidth.php | 4 +- admin/layouts/admin_view/fields_fullwidth.php | 4 +- .../admin_view/javascript_fullwidth.php | 4 +- .../linked_components_fullwidth.php | 4 +- admin/layouts/admin_view/mysql_fullwidth.php | 4 +- admin/layouts/admin_view/mysql_left.php | 4 +- admin/layouts/admin_view/php_fullwidth.php | 4 +- admin/layouts/admin_view/publishing.php | 4 +- admin/layouts/admin_view/publlshing.php | 4 +- admin/layouts/admin_view/settings_above.php | 4 +- admin/layouts/admin_view/settings_left.php | 4 +- admin/layouts/admin_view/settings_right.php | 4 +- admin/layouts/admin_view/settings_under.php | 4 +- admin/layouts/batchselection.php | 4 +- .../custom_buttons_fullwidth.php | 4 +- .../custom_admin_view/custom_buttons_left.php | 4 +- .../custom_script_fullwidth.php | 4 +- .../custom_admin_view/details_above.php | 4 +- .../custom_admin_view/details_fullwidth.php | 4 +- .../custom_admin_view/details_left.php | 4 +- .../custom_admin_view/details_right.php | 4 +- .../custom_admin_view/details_rightside.php | 4 +- .../custom_admin_view/details_under.php | 4 +- .../linked_components_fullwidth.php | 4 +- .../layouts/custom_admin_view/publishing.php | 4 +- .../layouts/custom_admin_view/publlshing.php | 4 +- admin/layouts/custom_code/details_above.php | 4 +- .../layouts/custom_code/details_fullwidth.php | 4 +- admin/layouts/custom_code/details_left.php | 4 +- admin/layouts/custom_code/details_right.php | 4 +- admin/layouts/custom_code/details_under.php | 4 +- admin/layouts/custom_code/publishing.php | 4 +- admin/layouts/custom_code/publlshing.php | 4 +- .../layouts/dynamic_get/abacus_fullwidth.php | 4 +- admin/layouts/dynamic_get/abacus_left.php | 4 +- .../dynamic_get/custom_script_fullwidth.php | 4 +- admin/layouts/dynamic_get/gettable_above.php | 4 +- .../dynamic_get/gettable_fullwidth.php | 4 +- admin/layouts/dynamic_get/gettable_left.php | 4 +- admin/layouts/dynamic_get/gettable_right.php | 4 +- admin/layouts/dynamic_get/gettable_under.php | 4 +- admin/layouts/dynamic_get/publishing.php | 4 +- admin/layouts/dynamic_get/publlshing.php | 4 +- admin/layouts/field/details_fullwidth.php | 4 +- admin/layouts/field/details_left.php | 4 +- admin/layouts/field/details_right.php | 4 +- admin/layouts/field/details_under.php | 4 +- .../field/linked_admin_views_fullwidth.php | 4 +- admin/layouts/field/publishing.php | 4 +- admin/layouts/field/publlshing.php | 4 +- admin/layouts/field/scripts_left.php | 4 +- admin/layouts/field/scripts_right.php | 4 +- admin/layouts/fieldtype/details_left.php | 4 +- admin/layouts/fieldtype/details_right.php | 4 +- admin/layouts/fieldtype/fields_fullwidth.php | 4 +- admin/layouts/fieldtype/publishing.php | 4 +- admin/layouts/fieldtype/publlshing.php | 4 +- admin/layouts/help_document/details_above.php | 4 +- .../help_document/details_fullwidth.php | 4 +- admin/layouts/help_document/details_left.php | 4 +- admin/layouts/help_document/details_right.php | 4 +- admin/layouts/help_document/details_under.php | 4 +- admin/layouts/help_document/publishing.php | 4 +- admin/layouts/help_document/publlshing.php | 4 +- .../admin_views_fullwidth.php | 4 +- .../custom_admin_views_fullwidth.php | 4 +- .../joomla_component/details_above.php | 4 +- .../layouts/joomla_component/details_left.php | 4 +- .../joomla_component/details_right.php | 4 +- .../joomla_component/details_under.php | 4 +- .../dynamic_build_beta_fullwidth.php | 4 +- .../dynamic_integration_fullwidth.php | 4 +- .../libs_helpers_fullwidth.php | 4 +- .../joomla_component/mysql_fullwidth.php | 4 +- .../joomla_component/php_fullwidth.php | 4 +- admin/layouts/joomla_component/publishing.php | 4 +- admin/layouts/joomla_component/publlshing.php | 4 +- .../layouts/joomla_component/readme_left.php | 4 +- .../layouts/joomla_component/readme_right.php | 4 +- .../joomla_component/settings_left.php | 4 +- .../joomla_component/settings_right.php | 4 +- .../joomla_component/site_views_fullwidth.php | 4 +- admin/layouts/language/details_left.php | 54 ++ admin/layouts/language/details_right.php | 54 ++ admin/layouts/language/index.html | 1 + admin/layouts/language/publishing.php | 58 ++ admin/layouts/language/publlshing.php | 60 ++ .../language_placeholder/details_above.php | 41 + .../details_fullwidth.php | 49 + admin/layouts/language_placeholder/index.html | 1 + .../language_placeholder/publishing.php | 58 ++ .../language_placeholder/publlshing.php | 60 ++ .../layout/custom_script_fullwidth.php | 4 +- admin/layouts/layout/details_fullwidth.php | 4 +- admin/layouts/layout/details_left.php | 4 +- admin/layouts/layout/details_right.php | 4 +- admin/layouts/layout/details_rightside.php | 4 +- admin/layouts/layout/details_under.php | 4 +- admin/layouts/layout/publishing.php | 4 +- admin/layouts/layout/publlshing.php | 4 +- .../site_view/custom_buttons_fullwidth.php | 4 +- .../layouts/site_view/custom_buttons_left.php | 4 +- .../site_view/custom_buttons_right.php | 4 +- admin/layouts/site_view/details_above.php | 4 +- admin/layouts/site_view/details_fullwidth.php | 4 +- admin/layouts/site_view/details_left.php | 4 +- admin/layouts/site_view/details_right.php | 4 +- admin/layouts/site_view/details_rightside.php | 4 +- admin/layouts/site_view/details_under.php | 4 +- .../site_view/javascript_css_fullwidth.php | 4 +- .../site_view/linked_components_fullwidth.php | 4 +- admin/layouts/site_view/php_fullwidth.php | 4 +- admin/layouts/site_view/publishing.php | 4 +- admin/layouts/site_view/publlshing.php | 4 +- admin/layouts/snippet/details_above.php | 4 +- admin/layouts/snippet/details_left.php | 4 +- admin/layouts/snippet/details_right.php | 4 +- admin/layouts/snippet/publishing.php | 4 +- admin/layouts/snippet/publlshing.php | 4 +- .../template/custom_script_fullwidth.php | 4 +- admin/layouts/template/details_fullwidth.php | 4 +- admin/layouts/template/details_left.php | 4 +- admin/layouts/template/details_right.php | 4 +- admin/layouts/template/details_rightside.php | 4 +- admin/layouts/template/details_under.php | 4 +- admin/layouts/template/publishing.php | 4 +- admin/layouts/template/publlshing.php | 4 +- admin/models/ajax.php | 4 +- admin/models/componentbuilder.php | 16 +- admin/models/fields/adminviewfolderlist.php | 4 +- admin/models/fields/adminviews.php | 4 +- admin/models/fields/articles.php | 4 +- admin/models/fields/component.php | 4 +- admin/models/fields/components.php | 170 ++++ admin/models/fields/customadminviews.php | 4 +- admin/models/fields/customfilelist.php | 4 +- admin/models/fields/customfolderlist.php | 4 +- admin/models/fields/customgets.php | 4 +- admin/models/fields/dbtables.php | 4 +- admin/models/fields/dynamicget.php | 4 +- admin/models/fields/dynamicgets.php | 4 +- admin/models/fields/fields.php | 4 +- admin/models/fields/fieldsmulti.php | 4 +- admin/models/fields/fieldtypes.php | 4 +- admin/models/fields/maingets.php | 4 +- admin/models/fields/siteviewfolderlist.php | 4 +- admin/models/fields/siteviews.php | 4 +- admin/models/fields/snippets.php | 4 +- admin/models/forms/help_document.js | 2 +- admin/models/forms/language.js | 25 + admin/models/forms/language.xml | 145 +++ admin/models/forms/language_placeholder.js | 25 + admin/models/forms/language_placeholder.xml | 183 ++++ admin/models/help_document.php | 2 +- admin/models/help_documents.php | 2 +- admin/models/import.php | 4 +- admin/models/import_joomla_components.php | 4 +- admin/models/language.php | 859 +++++++++++++++++ admin/models/language_placeholder.php | 871 ++++++++++++++++++ admin/models/language_placeholders.php | 376 ++++++++ admin/models/languages.php | 375 ++++++++ admin/sql/install.mysql.utf8.sql | 52 ++ admin/sql/uninstall.mysql.utf8.sql | 2 + admin/sql/updates/mysql/2.4.1.sql | 51 + admin/tables/help_document.php | 2 +- admin/tables/language.php | 351 +++++++ admin/tables/language_placeholder.php | 351 +++++++ admin/views/componentbuilder/tmpl/default.php | 4 +- ...sed_issues_the_closed_issues_on_github.php | 4 +- .../componentbuilder/tmpl/default_main.php | 4 +- ..._open_issues_the_open_issues_on_github.php | 4 +- .../tmpl/default_readme_information.php | 4 +- ...t_vast_development_method_notice_board.php | 4 +- .../componentbuilder/tmpl/default_vdm.php | 4 +- admin/views/componentbuilder/view.html.php | 4 +- admin/views/help_document/submitbutton.js | 2 +- admin/views/help_document/tmpl/edit.php | 2 +- admin/views/help_document/view.html.php | 2 +- admin/views/help_documents/tmpl/default.php | 2 +- .../tmpl/default_batch_body.php | 2 +- .../tmpl/default_batch_footer.php | 2 +- .../help_documents/tmpl/default_body.php | 2 +- .../help_documents/tmpl/default_foot.php | 2 +- .../help_documents/tmpl/default_head.php | 2 +- .../help_documents/tmpl/default_toolbar.php | 2 +- admin/views/help_documents/view.html.php | 2 +- admin/views/import/tmpl/default.php | 4 +- admin/views/import/view.html.php | 4 +- .../import_joomla_components/tmpl/default.php | 4 +- .../import_joomla_components/view.html.php | 4 +- admin/views/language/submitbutton.js | 49 + admin/views/language/tmpl/edit.php | 115 +++ admin/views/language/tmpl/index.html | 1 + admin/views/language/view.html.php | 200 ++++ .../language_placeholder/submitbutton.js | 49 + .../views/language_placeholder/tmpl/edit.php | 115 +++ .../language_placeholder/tmpl/index.html | 1 + .../views/language_placeholder/view.html.php | 200 ++++ admin/views/language_placeholders/index.html | 1 + .../language_placeholders/tmpl/default.php | 99 ++ .../tmpl/default_batch_body.php | 32 + .../tmpl/default_batch_footer.php | 37 + .../tmpl/default_body.php | 111 +++ .../tmpl/default_foot.php | 32 + .../tmpl/default_head.php | 64 ++ .../tmpl/default_toolbar.php | 59 ++ .../language_placeholders/tmpl/index.html | 1 + .../views/language_placeholders/view.html.php | 255 +++++ admin/views/languages/index.html | 1 + admin/views/languages/tmpl/default.php | 99 ++ .../languages/tmpl/default_batch_body.php | 32 + .../languages/tmpl/default_batch_footer.php | 37 + admin/views/languages/tmpl/default_body.php | 111 +++ admin/views/languages/tmpl/default_foot.php | 32 + admin/views/languages/tmpl/default_head.php | 64 ++ .../views/languages/tmpl/default_toolbar.php | 59 ++ admin/views/languages/tmpl/index.html | 1 + admin/views/languages/view.html.php | 251 +++++ componentbuilder.xml | 7 +- componentbuilder_update_server.xml | 17 + script.php | 260 +++++- 258 files changed, 8244 insertions(+), 378 deletions(-) create mode 100644 admin/assets/css/language.css create mode 100644 admin/assets/css/language_placeholder.css create mode 100644 admin/assets/css/language_placeholders.css create mode 100644 admin/assets/css/languages.css create mode 100644 admin/assets/images/icons/language_placeholder_add.png create mode 100644 admin/assets/images/icons/language_placeholders.png create mode 100644 admin/controllers/language.php create mode 100644 admin/controllers/language_placeholder.php create mode 100644 admin/controllers/language_placeholders.php create mode 100644 admin/controllers/languages.php create mode 100644 admin/layouts/language/details_left.php create mode 100644 admin/layouts/language/details_right.php create mode 100644 admin/layouts/language/index.html create mode 100644 admin/layouts/language/publishing.php create mode 100644 admin/layouts/language/publlshing.php create mode 100644 admin/layouts/language_placeholder/details_above.php create mode 100644 admin/layouts/language_placeholder/details_fullwidth.php create mode 100644 admin/layouts/language_placeholder/index.html create mode 100644 admin/layouts/language_placeholder/publishing.php create mode 100644 admin/layouts/language_placeholder/publlshing.php create mode 100644 admin/models/fields/components.php create mode 100644 admin/models/forms/language.js create mode 100644 admin/models/forms/language.xml create mode 100644 admin/models/forms/language_placeholder.js create mode 100644 admin/models/forms/language_placeholder.xml create mode 100644 admin/models/language.php create mode 100644 admin/models/language_placeholder.php create mode 100644 admin/models/language_placeholders.php create mode 100644 admin/models/languages.php create mode 100644 admin/sql/updates/mysql/2.4.1.sql create mode 100644 admin/tables/language.php create mode 100644 admin/tables/language_placeholder.php create mode 100644 admin/views/language/submitbutton.js create mode 100644 admin/views/language/tmpl/edit.php create mode 100644 admin/views/language/tmpl/index.html create mode 100644 admin/views/language/view.html.php create mode 100644 admin/views/language_placeholder/submitbutton.js create mode 100644 admin/views/language_placeholder/tmpl/edit.php create mode 100644 admin/views/language_placeholder/tmpl/index.html create mode 100644 admin/views/language_placeholder/view.html.php create mode 100644 admin/views/language_placeholders/index.html create mode 100644 admin/views/language_placeholders/tmpl/default.php create mode 100644 admin/views/language_placeholders/tmpl/default_batch_body.php create mode 100644 admin/views/language_placeholders/tmpl/default_batch_footer.php create mode 100644 admin/views/language_placeholders/tmpl/default_body.php create mode 100644 admin/views/language_placeholders/tmpl/default_foot.php create mode 100644 admin/views/language_placeholders/tmpl/default_head.php create mode 100644 admin/views/language_placeholders/tmpl/default_toolbar.php create mode 100644 admin/views/language_placeholders/tmpl/index.html create mode 100644 admin/views/language_placeholders/view.html.php create mode 100644 admin/views/languages/index.html create mode 100644 admin/views/languages/tmpl/default.php create mode 100644 admin/views/languages/tmpl/default_batch_body.php create mode 100644 admin/views/languages/tmpl/default_batch_footer.php create mode 100644 admin/views/languages/tmpl/default_body.php create mode 100644 admin/views/languages/tmpl/default_foot.php create mode 100644 admin/views/languages/tmpl/default_head.php create mode 100644 admin/views/languages/tmpl/default_toolbar.php create mode 100644 admin/views/languages/tmpl/index.html create mode 100644 admin/views/languages/view.html.php diff --git a/README.md b/README.md index dcaac0216..883b3b30f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Component Builder (2.4.1) +# Component Builder (2.4.2) 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.1) 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.2) 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. @@ -105,13 +105,13 @@ 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*: 1st April, 2017 -+ *Version*: 2.4.1 ++ *Last Build*: 3rd April, 2017 ++ *Version*: 2.4.2 + *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*: **96852** -+ *File count*: **581** -+ *Folder count*: **107** ++ *Line count*: **104692** ++ *File count*: **639** ++ *Folder count*: **115** > This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder). > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) diff --git a/admin/README.txt b/admin/README.txt index dcaac0216..883b3b30f 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -1,4 +1,4 @@ -# Component Builder (2.4.1) +# Component Builder (2.4.2) 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.1) 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.2) 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. @@ -105,13 +105,13 @@ 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*: 1st April, 2017 -+ *Version*: 2.4.1 ++ *Last Build*: 3rd April, 2017 ++ *Version*: 2.4.2 + *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*: **96852** -+ *File count*: **581** -+ *Folder count*: **107** ++ *Line count*: **104692** ++ *File count*: **639** ++ *Folder count*: **115** > This **component** was build with a Joomla [Automated Component Builder](http://vdm.bz/component-builder). > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) diff --git a/admin/access.xml b/admin/access.xml index 4bf60b30b..6be89abce 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -113,6 +113,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -243,6 +268,24 @@ +
+ + + + + + + +
+
+ + + + + + + +
diff --git a/admin/assets/css/admin.css b/admin/assets/css/admin.css index 03bbb02d6..3232356c4 100644 --- a/admin/assets/css/admin.css +++ b/admin/assets/css/admin.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage admin.css diff --git a/admin/assets/css/dashboard.css b/admin/assets/css/dashboard.css index 9b05bc3aa..9431eb91f 100644 --- a/admin/assets/css/dashboard.css +++ b/admin/assets/css/dashboard.css @@ -9,8 +9,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage dashboard.css diff --git a/admin/assets/css/help_document.css b/admin/assets/css/help_document.css index 982d7a0cd..a1d7c013c 100644 --- a/admin/assets/css/help_document.css +++ b/admin/assets/css/help_document.css @@ -10,7 +10,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_document.css diff --git a/admin/assets/css/help_documents.css b/admin/assets/css/help_documents.css index 03e4a4295..300e648f9 100644 --- a/admin/assets/css/help_documents.css +++ b/admin/assets/css/help_documents.css @@ -10,7 +10,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_documents.css diff --git a/admin/assets/css/language.css b/admin/assets/css/language.css new file mode 100644 index 000000000..95309ab6b --- /dev/null +++ b/admin/assets/css/language.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage language.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/language_placeholder.css b/admin/assets/css/language_placeholder.css new file mode 100644 index 000000000..4380e5ceb --- /dev/null +++ b/admin/assets/css/language_placeholder.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 8 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage language_placeholder.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/language_placeholders.css b/admin/assets/css/language_placeholders.css new file mode 100644 index 000000000..13d0b9fed --- /dev/null +++ b/admin/assets/css/language_placeholders.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 8 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage language_placeholders.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/css/languages.css b/admin/assets/css/languages.css new file mode 100644 index 000000000..581d6aa11 --- /dev/null +++ b/admin/assets/css/languages.css @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage languages.css + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +/* CSS Document */ + + diff --git a/admin/assets/images/icons/language_placeholder_add.png b/admin/assets/images/icons/language_placeholder_add.png new file mode 100644 index 0000000000000000000000000000000000000000..e27635ba423e263411c077e7cdfbfef1495dbe38 GIT binary patch literal 43823 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 Hu0mjf=`_vv literal 0 HcmV?d00001 diff --git a/admin/assets/images/icons/language_placeholders.png b/admin/assets/images/icons/language_placeholders.png new file mode 100644 index 0000000000000000000000000000000000000000..94873206ecea9cad638977b7e41286023f2ea746 GIT binary patch literal 35804 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 'snippets', 'field' => 'fields', 'fieldtype' => 'fieldtypes', + 'language_placeholder' => 'language_placeholders', + 'language' => 'languages', 'help_document' => 'help_documents' ); // check if this is a list view diff --git a/admin/controllers/ajax.json.php b/admin/controllers/ajax.json.php index 01a3db4d2..8bffcdea9 100644 --- a/admin/controllers/ajax.json.php +++ b/admin/controllers/ajax.json.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage ajax.json.php diff --git a/admin/controllers/componentbuilder.php b/admin/controllers/componentbuilder.php index 88a662e27..aa4cd6745 100644 --- a/admin/controllers/componentbuilder.php +++ b/admin/controllers/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php diff --git a/admin/controllers/help.php b/admin/controllers/help.php index eec752953..9fcca801b 100644 --- a/admin/controllers/help.php +++ b/admin/controllers/help.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage help.php diff --git a/admin/controllers/help_document.php b/admin/controllers/help_document.php index e7a5d3383..1389b5741 100644 --- a/admin/controllers/help_document.php +++ b/admin/controllers/help_document.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_document.php diff --git a/admin/controllers/help_documents.php b/admin/controllers/help_documents.php index 892240596..7f4065f2c 100644 --- a/admin/controllers/help_documents.php +++ b/admin/controllers/help_documents.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_documents.php diff --git a/admin/controllers/import.php b/admin/controllers/import.php index 7be5cf42b..3c0fb02ca 100644 --- a/admin/controllers/import.php +++ b/admin/controllers/import.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage import.php diff --git a/admin/controllers/import_joomla_components.php b/admin/controllers/import_joomla_components.php index 978adcfc0..f0ee219ae 100644 --- a/admin/controllers/import_joomla_components.php +++ b/admin/controllers/import_joomla_components.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage import_joomla_components.php diff --git a/admin/controllers/language.php b/admin/controllers/language.php new file mode 100644 index 000000000..aef23b27d --- /dev/null +++ b/admin/controllers/language.php @@ -0,0 +1,326 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controllerform'); + +/** + * Language Controller + */ +class ComponentbuilderControllerLanguage extends JControllerForm +{ + /** + * Current or most recently performed task. + * + * @var string + * @since 12.2 + * @note Replaces _task. + */ + protected $task; + + public function __construct($config = array()) + { + $this->view_list = 'Languages'; // safeguard for setting the return view listing to the main view. + parent::__construct($config); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // Access check. + $access = JFactory::getUser()->authorise('language.access', 'com_componentbuilder'); + if (!$access) + { + return false; + } + // In the absense of better information, revert to the component permissions. + return JFactory::getUser()->authorise('language.create', $this->option); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // get user object. + $user = JFactory::getUser(); + // get record id. + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + + + // Access check. + $access = ($user->authorise('language.access', 'com_componentbuilder.language.' . (int) $recordId) && $user->authorise('language.access', 'com_componentbuilder')); + if (!$access) + { + return false; + } + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('language.edit', 'com_componentbuilder.language.' . (int) $recordId); + if (!$permission) + { + if ($user->authorise('language.edit.own', 'com_componentbuilder.language.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + if (empty($ownerId)) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then allow. + if ($ownerId == $user->id) + { + if ($user->authorise('language.edit.own', 'com_componentbuilder')) + { + return true; + } + } + } + return false; + } + } + // Since there is no permission, revert to the component permissions. + return $user->authorise('language.edit', $this->option); + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + + $ref = $this->input->get('ref', 0, 'string'); + $refid = $this->input->get('refid', 0, 'int'); + + // Setup redirect info. + + $append = ''; + + if ($refid) + { + $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; + } + elseif ($ref) + { + $append .= '&ref='.(string)$ref; + } + + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + return $append; + } + + /** + * Method to run batch operations. + * + * @param object $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + public function batch($model = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set the model + $model = $this->getModel('Language', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=languages' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @since 12.2 + */ + public function cancel($key = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + $cancel = parent::cancel($key); + + if ($cancel) + { + if ($this->refid) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + } + else + { + // Redirect to the items screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list, false + ) + ); + } + return $cancel; + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 12.2 + */ + public function save($key = null, $urlVar = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } + + $saved = parent::save($key, $urlVar); + + if ($this->refid && $saved) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref && $saved) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + return $saved; + } + + /** + * Function that allows child controller access to model data + * after the data has been saved. + * + * @param JModel &$model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @since 11.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + return; + } + +} diff --git a/admin/controllers/language_placeholder.php b/admin/controllers/language_placeholder.php new file mode 100644 index 000000000..ebdf36177 --- /dev/null +++ b/admin/controllers/language_placeholder.php @@ -0,0 +1,326 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controllerform library +jimport('joomla.application.component.controllerform'); + +/** + * Language_placeholder Controller + */ +class ComponentbuilderControllerLanguage_placeholder extends JControllerForm +{ + /** + * Current or most recently performed task. + * + * @var string + * @since 12.2 + * @note Replaces _task. + */ + protected $task; + + public function __construct($config = array()) + { + $this->view_list = 'Language_placeholders'; // safeguard for setting the return view listing to the main view. + parent::__construct($config); + } + + /** + * Method override to check if you can add a new record. + * + * @param array $data An array of input data. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowAdd($data = array()) + { + // Access check. + $access = JFactory::getUser()->authorise('language_placeholder.access', 'com_componentbuilder'); + if (!$access) + { + return false; + } + // In the absense of better information, revert to the component permissions. + return JFactory::getUser()->authorise('language_placeholder.create', $this->option); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * + * @since 1.6 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // get user object. + $user = JFactory::getUser(); + // get record id. + $recordId = (int) isset($data[$key]) ? $data[$key] : 0; + + + // Access check. + $access = ($user->authorise('language_placeholder.access', 'com_componentbuilder.language_placeholder.' . (int) $recordId) && $user->authorise('language_placeholder.access', 'com_componentbuilder')); + if (!$access) + { + return false; + } + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('language_placeholder.edit', 'com_componentbuilder.language_placeholder.' . (int) $recordId); + if (!$permission) + { + if ($user->authorise('language_placeholder.edit.own', 'com_componentbuilder.language_placeholder.' . $recordId)) + { + // Now test the owner is the user. + $ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0; + if (empty($ownerId)) + { + // Need to do a lookup from the model. + $record = $this->getModel()->getItem($recordId); + + if (empty($record)) + { + return false; + } + $ownerId = $record->created_by; + } + + // If the owner matches 'me' then allow. + if ($ownerId == $user->id) + { + if ($user->authorise('language_placeholder.edit.own', 'com_componentbuilder')) + { + return true; + } + } + } + return false; + } + } + // Since there is no permission, revert to the component permissions. + return $user->authorise('language_placeholder.edit', $this->option); + } + + /** + * Gets the URL arguments to append to an item redirect. + * + * @param integer $recordId The primary key id for the item. + * @param string $urlVar The name of the URL variable for the id. + * + * @return string The arguments to append to the redirect URL. + * + * @since 12.2 + */ + protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id') + { + $tmpl = $this->input->get('tmpl'); + $layout = $this->input->get('layout', 'edit', 'string'); + + $ref = $this->input->get('ref', 0, 'string'); + $refid = $this->input->get('refid', 0, 'int'); + + // Setup redirect info. + + $append = ''; + + if ($refid) + { + $append .= '&ref='.(string)$ref.'&refid='.(int)$refid; + } + elseif ($ref) + { + $append .= '&ref='.(string)$ref; + } + + if ($tmpl) + { + $append .= '&tmpl=' . $tmpl; + } + + if ($layout) + { + $append .= '&layout=' . $layout; + } + + if ($recordId) + { + $append .= '&' . $urlVar . '=' . $recordId; + } + + return $append; + } + + /** + * Method to run batch operations. + * + * @param object $model The model. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 2.5 + */ + public function batch($model = null) + { + JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN')); + + // Set the model + $model = $this->getModel('Language_placeholder', '', array()); + + // Preset the redirect + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=language_placeholders' . $this->getRedirectToListAppend(), false)); + + return parent::batch($model); + } + + /** + * Method to cancel an edit. + * + * @param string $key The name of the primary key of the URL variable. + * + * @return boolean True if access level checks pass, false otherwise. + * + * @since 12.2 + */ + public function cancel($key = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + $cancel = parent::cancel($key); + + if ($cancel) + { + if ($this->refid) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + } + else + { + // Redirect to the items screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . '&view=' . $this->view_list, false + ) + ); + } + return $cancel; + } + + /** + * Method to save a record. + * + * @param string $key The name of the primary key of the URL variable. + * @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions). + * + * @return boolean True if successful, false otherwise. + * + * @since 12.2 + */ + public function save($key = null, $urlVar = null) + { + // get the referal details + $this->ref = $this->input->get('ref', 0, 'word'); + $this->refid = $this->input->get('refid', 0, 'int'); + + if ($this->ref || $this->refid) + { + // to make sure the item is checkedin on redirect + $this->task = 'save'; + } + + $saved = parent::save($key, $urlVar); + + if ($this->refid && $saved) + { + $redirect = '&view='.(string)$this->ref.'&layout=edit&id='.(int)$this->refid; + + // Redirect to the item screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + elseif ($this->ref && $saved) + { + $redirect = '&view='.(string)$this->ref; + + // Redirect to the list screen. + $this->setRedirect( + JRoute::_( + 'index.php?option=' . $this->option . $redirect, false + ) + ); + } + return $saved; + } + + /** + * Function that allows child controller access to model data + * after the data has been saved. + * + * @param JModel &$model The data model object. + * @param array $validData The validated data. + * + * @return void + * + * @since 11.1 + */ + protected function postSaveHook(JModelLegacy $model, $validData = array()) + { + return; + } + +} diff --git a/admin/controllers/language_placeholders.php b/admin/controllers/language_placeholders.php new file mode 100644 index 000000000..8d631ea6a --- /dev/null +++ b/admin/controllers/language_placeholders.php @@ -0,0 +1,120 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Language_placeholders Controller + */ +class ComponentbuilderControllerLanguage_placeholders extends JControllerAdmin +{ + protected $text_prefix = 'COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS'; + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'Language_placeholder', $prefix = 'ComponentbuilderModel', $config = array()) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } + + public function exportData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('language_placeholder.export', 'com_componentbuilder') && $user->authorise('core.export', 'com_componentbuilder')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Language_placeholders'); + // get the data to export + $data = $model->getExportData($pks); + if (ComponentbuilderHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + ComponentbuilderHelper::xls($data,'Language_placeholders_'.$date->format('jS_F_Y'),'Language placeholders exported ('.$date->format('jS F, Y').')','language placeholders'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_COMPONENTBUILDER_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=language_placeholders', false), $message, 'error'); + return; + } + + + public function importData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('language_placeholder.import', 'com_componentbuilder') && $user->authorise('core.import', 'com_componentbuilder')) + { + // Get the import model + $model = $this->getModel('Language_placeholders'); + // get the headers to import + $headers = $model->getExImPortHeaders(); + if (ComponentbuilderHelper::checkObject($headers)) + { + // Load headers to session. + $session = JFactory::getSession(); + $headers = json_encode($headers); + $session->set('language_placeholder_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'language_placeholders'); + $session->set('dataType_VDM_IMPORTINTO', 'language_placeholder'); + // Redirect to import view. + $message = JText::_('COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LANGUAGE_PLACEHOLDERS'); + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=import', false), $message); + return; + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_COMPONENTBUILDER_IMPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=language_placeholders', false), $message, 'error'); + return; + } + + public function updatePlaceholders() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + return true; + } +} diff --git a/admin/controllers/languages.php b/admin/controllers/languages.php new file mode 100644 index 000000000..62ec59cd5 --- /dev/null +++ b/admin/controllers/languages.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Languages Controller + */ +class ComponentbuilderControllerLanguages extends JControllerAdmin +{ + protected $text_prefix = 'COM_COMPONENTBUILDER_LANGUAGES'; + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'Language', $prefix = 'ComponentbuilderModel', $config = array()) + { + $model = parent::getModel($name, $prefix, array('ignore_request' => true)); + + return $model; + } + + public function exportData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if export is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('language.export', 'com_componentbuilder') && $user->authorise('core.export', 'com_componentbuilder')) + { + // Get the input + $input = JFactory::getApplication()->input; + $pks = $input->post->get('cid', array(), 'array'); + // Sanitize the input + JArrayHelper::toInteger($pks); + // Get the model + $model = $this->getModel('Languages'); + // get the data to export + $data = $model->getExportData($pks); + if (ComponentbuilderHelper::checkArray($data)) + { + // now set the data to the spreadsheet + $date = JFactory::getDate(); + ComponentbuilderHelper::xls($data,'Languages_'.$date->format('jS_F_Y'),'Languages exported ('.$date->format('jS F, Y').')','languages'); + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_COMPONENTBUILDER_EXPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=languages', false), $message, 'error'); + return; + } + + + public function importData() + { + // Check for request forgeries + JSession::checkToken() or die(JText::_('JINVALID_TOKEN')); + // check if import is allowed for this user. + $user = JFactory::getUser(); + if ($user->authorise('language.import', 'com_componentbuilder') && $user->authorise('core.import', 'com_componentbuilder')) + { + // Get the import model + $model = $this->getModel('Languages'); + // get the headers to import + $headers = $model->getExImPortHeaders(); + if (ComponentbuilderHelper::checkObject($headers)) + { + // Load headers to session. + $session = JFactory::getSession(); + $headers = json_encode($headers); + $session->set('language_VDM_IMPORTHEADERS', $headers); + $session->set('backto_VDM_IMPORT', 'languages'); + $session->set('dataType_VDM_IMPORTINTO', 'language'); + // Redirect to import view. + $message = JText::_('COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LANGUAGES'); + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=import', false), $message); + return; + } + } + // Redirect to the list screen with error. + $message = JText::_('COM_COMPONENTBUILDER_IMPORT_FAILED'); + $this->setRedirect(JRoute::_('index.php?option=com_componentbuilder&view=languages', false), $message, 'error'); + return; + } +} diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 078102755..8b3a69a5d 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php @@ -1245,6 +1245,14 @@ abstract class ComponentbuilderHelper JHtmlSidebar::addEntry(JText::_('COM_COMPONENTBUILDER_SUBMENU_FIELDTYPES'), 'index.php?option=com_componentbuilder&view=fieldtypes', $submenu === 'fieldtypes'); JHtmlSidebar::addEntry(JText::_('COM_COMPONENTBUILDER_FIELDTYPE_FIELDTYPE_CATEGORY'), 'index.php?option=com_categories&view=categories&extension=com_componentbuilder.fieldtypes', $submenu === 'categories.fieldtypes'); } + if ($user->authorise('language_placeholder.access', 'com_componentbuilder') && $user->authorise('language_placeholder.submenu', 'com_componentbuilder')) + { + JHtmlSidebar::addEntry(JText::_('COM_COMPONENTBUILDER_SUBMENU_LANGUAGE_PLACEHOLDERS'), 'index.php?option=com_componentbuilder&view=language_placeholders', $submenu === 'language_placeholders'); + } + if ($user->authorise('language.access', 'com_componentbuilder') && $user->authorise('language.submenu', 'com_componentbuilder')) + { + JHtmlSidebar::addEntry(JText::_('COM_COMPONENTBUILDER_SUBMENU_LANGUAGES'), 'index.php?option=com_componentbuilder&view=languages', $submenu === 'languages'); + } if ($user->authorise('help_document.access', 'com_componentbuilder') && $user->authorise('help_document.submenu', 'com_componentbuilder')) { JHtmlSidebar::addEntry(JText::_('COM_COMPONENTBUILDER_SUBMENU_HELP_DOCUMENTS'), 'index.php?option=com_componentbuilder&view=help_documents', $submenu === 'help_documents'); diff --git a/admin/helpers/headercheck.php b/admin/helpers/headercheck.php index fc172fef1..fc9cf2e68 100644 --- a/admin/helpers/headercheck.php +++ b/admin/helpers/headercheck.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage headercheck.php diff --git a/admin/helpers/html/batch_.php b/admin/helpers/html/batch_.php index a2d2596d6..f223e253c 100644 --- a/admin/helpers/html/batch_.php +++ b/admin/helpers/html/batch_.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage batch_.php diff --git a/admin/helpers/indenter.php b/admin/helpers/indenter.php index d4c894712..2393af18d 100644 --- a/admin/helpers/indenter.php +++ b/admin/helpers/indenter.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage indenter.php diff --git a/admin/helpers/js.php b/admin/helpers/js.php index 055494c81..dc6dcef98 100644 --- a/admin/helpers/js.php +++ b/admin/helpers/js.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage js.php diff --git a/admin/helpers/minify.php b/admin/helpers/minify.php index 146b4253a..56167fae6 100644 --- a/admin/helpers/minify.php +++ b/admin/helpers/minify.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage minify.php diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index e5bdc54d2..22797d706 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -1489,6 +1489,8 @@ COM_COMPONENTBUILDER_DASHBOARD_HELP_DOCUMENTS="Help Documents

" COM_COMPONENTBUILDER_DASHBOARD_HELP_DOCUMENT_ADD="Add Help Document

" COM_COMPONENTBUILDER_DASHBOARD_JOOMLA_COMPONENTS="Joomla Components

" COM_COMPONENTBUILDER_DASHBOARD_JOOMLA_COMPONENT_ADD="Add Joomla Component

" +COM_COMPONENTBUILDER_DASHBOARD_LANGUAGE_PLACEHOLDERS="Language Placeholders

" +COM_COMPONENTBUILDER_DASHBOARD_LANGUAGE_PLACEHOLDER_ADD="Add Language Placeholder

" COM_COMPONENTBUILDER_DASHBOARD_LAYOUTS="Layouts

" COM_COMPONENTBUILDER_DASHBOARD_LAYOUT_ADD="Add Layout

" COM_COMPONENTBUILDER_DASHBOARD_SITE_VIEWS="Site Views

" @@ -2266,6 +2268,8 @@ COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_FIELDS="Select the file to import da COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_FIELDTYPES="Select the file to import data to fieldtypes." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_HELP_DOCUMENTS="Select the file to import data to help_documents." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_JOOMLA_COMPONENTS="Select the file to import data to joomla_components." +COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LANGUAGES="Select the file to import data to languages." +COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LANGUAGE_PLACEHOLDERS="Select the file to import data to language_placeholders." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_LAYOUTS="Select the file to import data to layouts." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_SITE_VIEWS="Select the file to import data to site_views." COM_COMPONENTBUILDER_IMPORT_SELECT_FILE_FOR_SNIPPETS="Select the file to import data to snippets." @@ -3000,6 +3004,158 @@ COM_COMPONENTBUILDER_KEEP_ORIGINAL_ACCESS="- Keep Original Access -" COM_COMPONENTBUILDER_KEEP_ORIGINAL_CATEGORY="- Keep Original Category -" COM_COMPONENTBUILDER_KEEP_ORIGINAL_STATE="- Keep Original State -" COM_COMPONENTBUILDER_KEY="Key" +COM_COMPONENTBUILDER_LANGUAGE="Language" +COM_COMPONENTBUILDER_LANGUAGES="Languages" +COM_COMPONENTBUILDER_LANGUAGES_ACCESS="Languages Access" +COM_COMPONENTBUILDER_LANGUAGES_ACCESS_DESC="Allows the users in this group to access access languages" +COM_COMPONENTBUILDER_LANGUAGES_BATCH_OPTIONS="Batch process the selected Languages" +COM_COMPONENTBUILDER_LANGUAGES_BATCH_TIP="All changes will be applied to all selected Languages" +COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE="Languages Batch Use" +COM_COMPONENTBUILDER_LANGUAGES_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch languages" +COM_COMPONENTBUILDER_LANGUAGES_CREATE="Languages Create" +COM_COMPONENTBUILDER_LANGUAGES_CREATE_DESC="Allows the users in this group to create create languages" +COM_COMPONENTBUILDER_LANGUAGES_DELETE="Languages Delete" +COM_COMPONENTBUILDER_LANGUAGES_DELETE_DESC="Allows the users in this group to delete delete languages" +COM_COMPONENTBUILDER_LANGUAGES_EDIT="Languages Edit" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_DESC="Allows the users in this group to edit the language" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_OWN="Languages Edit Own" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_OWN_DESC="Allows the users in this group to edit edit own languages created by them" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE="Languages Edit State" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_STATE_DESC="Allows the users in this group to update the state of the language" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION="Languages Edit Version" +COM_COMPONENTBUILDER_LANGUAGES_EDIT_VERSION_DESC="Allows users in this group to edit versions of version languages" +COM_COMPONENTBUILDER_LANGUAGES_EXPORT="Languages Export" +COM_COMPONENTBUILDER_LANGUAGES_EXPORT_DESC="Allows the users in this group to export export languages" +COM_COMPONENTBUILDER_LANGUAGES_IMPORT="Languages Import" +COM_COMPONENTBUILDER_LANGUAGES_IMPORT_DESC="Allows the users in this group to import import languages" +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_ARCHIVED="%s Languages archived." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_ARCHIVED_1="%s Language archived." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_CHECKED_IN_0="No Language successfully checked in." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_CHECKED_IN_1="%d Language successfully checked in." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_CHECKED_IN_MORE="%d Languages successfully checked in." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_DELETED="%s Languages deleted." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_DELETED_1="%s Language deleted." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_FEATURED="%s Languages featured." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_FEATURED_1="%s Language featured." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_PUBLISHED="%s Languages published." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_PUBLISHED_1="%s Language published." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_TRASHED="%s Languages trashed." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_TRASHED_1="%s Language trashed." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_UNFEATURED="%s Languages unfeatured." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_UNFEATURED_1="%s Language unfeatured." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_UNPUBLISHED="%s Languages unpublished." +COM_COMPONENTBUILDER_LANGUAGES_N_ITEMS_UNPUBLISHED_1="%s Language unpublished." +COM_COMPONENTBUILDER_LANGUAGES_SUBMENU="Languages Submenu" +COM_COMPONENTBUILDER_LANGUAGES_SUBMENU_DESC="Allows the users in this group to update the submenu of the language" +COM_COMPONENTBUILDER_LANGUAGE_CREATED_BY_DESC="The user that created this Language." +COM_COMPONENTBUILDER_LANGUAGE_CREATED_BY_LABEL="Created By" +COM_COMPONENTBUILDER_LANGUAGE_CREATED_DATE_DESC="The date this Language was created." +COM_COMPONENTBUILDER_LANGUAGE_CREATED_DATE_LABEL="Created Date" +COM_COMPONENTBUILDER_LANGUAGE_DETAILS="Details" +COM_COMPONENTBUILDER_LANGUAGE_EDIT="Editing the Language" +COM_COMPONENTBUILDER_LANGUAGE_ERROR_UNIQUE_ALIAS="Another Language has the same alias." +COM_COMPONENTBUILDER_LANGUAGE_ID="Id" +COM_COMPONENTBUILDER_LANGUAGE_LANGTAG="Langtag" +COM_COMPONENTBUILDER_LANGUAGE_LANGTAG_DESCRIPTION="Enter the language tag – example: en-GB for English (UK). This should be the exact prefix used for the language installed or to be installed." +COM_COMPONENTBUILDER_LANGUAGE_LANGTAG_HINT="en-GB" +COM_COMPONENTBUILDER_LANGUAGE_LANGTAG_LABEL="Language Tag" +COM_COMPONENTBUILDER_LANGUAGE_MODIFIED_BY_DESC="The last user that modified this Language." +COM_COMPONENTBUILDER_LANGUAGE_MODIFIED_BY_LABEL="Modified By" +COM_COMPONENTBUILDER_LANGUAGE_MODIFIED_DATE_DESC="The date this Language was modified." +COM_COMPONENTBUILDER_LANGUAGE_MODIFIED_DATE_LABEL="Modified Date" +COM_COMPONENTBUILDER_LANGUAGE_NAME="Name" +COM_COMPONENTBUILDER_LANGUAGE_NAME_DESCRIPTION="Enter Name Here" +COM_COMPONENTBUILDER_LANGUAGE_NAME_HINT="Name Here" +COM_COMPONENTBUILDER_LANGUAGE_NAME_LABEL="Name" +COM_COMPONENTBUILDER_LANGUAGE_NEW="A New Language" +COM_COMPONENTBUILDER_LANGUAGE_ORDERING_LABEL="Ordering" +COM_COMPONENTBUILDER_LANGUAGE_PERMISSION="Permissions" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER="Language Placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS="Language Placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_ACCESS="Language Placeholders Access" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_ACCESS_DESC="Allows the users in this group to access access language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_BATCH_OPTIONS="Batch process the selected Language Placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_BATCH_TIP="All changes will be applied to all selected Language Placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_BATCH_USE="Language Placeholders Batch Use" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_BATCH_USE_DESC="Allows users in this group to use batch copy/update method of batch language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_CREATE="Language Placeholders Create" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_CREATE_DESC="Allows the users in this group to create create language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_DASHBOARD_ADD="Language Placeholders Dashboard Add" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_DASHBOARD_ADD_DESC="Allows the users in this group to update the dashboard add of the language placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_DASHBOARD_LIST="Language Placeholders Dashboard List" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_DASHBOARD_LIST_DESC="Allows the users in this group to update the dashboard list of the language placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_DELETE="Language Placeholders Delete" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_DELETE_DESC="Allows the users in this group to delete delete language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT="Language Placeholders Edit" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_DESC="Allows the users in this group to edit the language placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_OWN="Language Placeholders Edit Own" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_OWN_DESC="Allows the users in this group to edit edit own language placeholders created by them" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_STATE="Language Placeholders Edit State" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_STATE_DESC="Allows the users in this group to update the state of the language placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_VERSION="Language Placeholders Edit Version" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EDIT_VERSION_DESC="Allows users in this group to edit versions of version language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EXPORT="Language Placeholders Export" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_EXPORT_DESC="Allows the users in this group to export export language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_IMPORT="Language Placeholders Import" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_IMPORT_DESC="Allows the users in this group to import import language placeholders" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_ARCHIVED="%s Language Placeholders archived." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_ARCHIVED_1="%s Language Placeholder archived." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_CHECKED_IN_0="No Language Placeholder successfully checked in." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_CHECKED_IN_1="%d Language Placeholder successfully checked in." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_CHECKED_IN_MORE="%d Language Placeholders successfully checked in." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_DELETED="%s Language Placeholders deleted." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_DELETED_1="%s Language Placeholder deleted." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_FEATURED="%s Language Placeholders featured." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_FEATURED_1="%s Language Placeholder featured." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_PUBLISHED="%s Language Placeholders published." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_PUBLISHED_1="%s Language Placeholder published." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_TRASHED="%s Language Placeholders trashed." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_TRASHED_1="%s Language Placeholder trashed." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_UNFEATURED="%s Language Placeholders unfeatured." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_UNFEATURED_1="%s Language Placeholder unfeatured." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_UNPUBLISHED="%s Language Placeholders unpublished." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_N_ITEMS_UNPUBLISHED_1="%s Language Placeholder unpublished." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_SUBMENU="Language Placeholders Submenu" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_SUBMENU_DESC="Allows the users in this group to update the submenu of the language placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_COMPONENTS="Components" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_COMPONENTS_LABEL="Components" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_CREATED_BY_DESC="The user that created this Language Placeholder." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_CREATED_BY_LABEL="Created By" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_CREATED_DATE_DESC="The date this Language Placeholder was created." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_CREATED_DATE_LABEL="Created Date" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_DETAILS="Details" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_EDIT="Editing the Language Placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_ERROR_UNIQUE_ALIAS="Another Language Placeholder has the same alias." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_ID="Id" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_LANGUAGE_LABEL="Language" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_MODIFIED_BY_DESC="The last user that modified this Language Placeholder." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_MODIFIED_BY_LABEL="Modified By" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_MODIFIED_DATE_DESC="The date this Language Placeholder was modified." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_MODIFIED_DATE_LABEL="Modified Date" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_NEW="A New Language Placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_ORDERING_LABEL="Ordering" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PERMISSION="Permissions" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PLACEHOLDER="Placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PLACEHOLDER_DESCRIPTION="The language placeholder in the code" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PLACEHOLDER_HINT="Automatically generated!" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PLACEHOLDER_LABEL="Placeholder" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PUBLISHING="Publishing" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Language Placeholder to customise the alias." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_STATUS="Status" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_TRANSLATION="Translation" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_TRANSLATION_DESCRIPTION="The translation strings." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_TRANSLATION_HINT="Translated String Here" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_TRANSLATION_LABEL="Translated String" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_TRANSLATION_SELECT="Click here" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_UPDATE_PLACEHOLDERS_BUTTON_ACCESS="Language Placeholder Update Placeholders Button Access" +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_UPDATE_PLACEHOLDERS_BUTTON_ACCESS_DESC=" Allows the users in this group to access the update placeholders button." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_VERSION_DESC="A count of the number of times this Language Placeholder has been revised." +COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_VERSION_LABEL="Revision" +COM_COMPONENTBUILDER_LANGUAGE_PUBLISHING="Publishing" +COM_COMPONENTBUILDER_LANGUAGE_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Language to customise the alias." +COM_COMPONENTBUILDER_LANGUAGE_STATUS="Status" +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_LAYOUT="Layout" COM_COMPONENTBUILDER_LAYOUTS="Layouts" COM_COMPONENTBUILDER_LAYOUTS_ACCESS="Layouts Access" @@ -3676,6 +3832,8 @@ COM_COMPONENTBUILDER_SUBMENU_FIELDS="Fields" COM_COMPONENTBUILDER_SUBMENU_FIELDTYPES="Fieldtypes" COM_COMPONENTBUILDER_SUBMENU_HELP_DOCUMENTS="Help Documents" COM_COMPONENTBUILDER_SUBMENU_JOOMLA_COMPONENTS="Joomla Components" +COM_COMPONENTBUILDER_SUBMENU_LANGUAGES="Languages" +COM_COMPONENTBUILDER_SUBMENU_LANGUAGE_PLACEHOLDERS="Language Placeholders" COM_COMPONENTBUILDER_SUBMENU_LAYOUTS="Layouts" COM_COMPONENTBUILDER_SUBMENU_SITE_VIEWS="Site Views" COM_COMPONENTBUILDER_SUBMENU_SNIPPETS="Snippets" @@ -3793,6 +3951,7 @@ 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_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 JCB Global Options, go to the Company tab and add the correct company details there." +COM_COMPONENTBUILDER_UPDATE_PLACEHOLDERS="Update Placeholders" 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" diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini index d24b1ef28..f6bb5169e 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini @@ -10,6 +10,7 @@ COM_COMPONENTBUILDER_MENU_FIELDS="Fields" COM_COMPONENTBUILDER_MENU_FIELDTYPES="Fieldtypes" COM_COMPONENTBUILDER_MENU_HELP_DOCUMENTS="Help Documents" COM_COMPONENTBUILDER_MENU_JOOMLA_COMPONENTS="Joomla Components" +COM_COMPONENTBUILDER_MENU_LANGUAGE_PLACEHOLDERS="Language Placeholders" COM_COMPONENTBUILDER_MENU_LAYOUTS="Layouts" COM_COMPONENTBUILDER_MENU_SITE_VIEWS="Site Views" COM_COMPONENTBUILDER_MENU_SNIPPETS="Snippets" diff --git a/admin/layouts/admin_view/css_fullwidth.php b/admin/layouts/admin_view/css_fullwidth.php index 11d5b5391..550c0dae9 100644 --- a/admin/layouts/admin_view/css_fullwidth.php +++ b/admin/layouts/admin_view/css_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage css_fullwidth.php diff --git a/admin/layouts/admin_view/custom_buttons_fullwidth.php b/admin/layouts/admin_view/custom_buttons_fullwidth.php index ff43fc867..102e6a03a 100644 --- a/admin/layouts/admin_view/custom_buttons_fullwidth.php +++ b/admin/layouts/admin_view/custom_buttons_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_fullwidth.php diff --git a/admin/layouts/admin_view/custom_buttons_left.php b/admin/layouts/admin_view/custom_buttons_left.php index dc5d0d26f..61c408bfb 100644 --- a/admin/layouts/admin_view/custom_buttons_left.php +++ b/admin/layouts/admin_view/custom_buttons_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_left.php diff --git a/admin/layouts/admin_view/custom_import_fullwidth.php b/admin/layouts/admin_view/custom_import_fullwidth.php index eae11be2d..6944ad102 100644 --- a/admin/layouts/admin_view/custom_import_fullwidth.php +++ b/admin/layouts/admin_view/custom_import_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_import_fullwidth.php diff --git a/admin/layouts/admin_view/fields_fullwidth.php b/admin/layouts/admin_view/fields_fullwidth.php index f44d4a62c..6c1af6d8b 100644 --- a/admin/layouts/admin_view/fields_fullwidth.php +++ b/admin/layouts/admin_view/fields_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage fields_fullwidth.php diff --git a/admin/layouts/admin_view/javascript_fullwidth.php b/admin/layouts/admin_view/javascript_fullwidth.php index a96e80fb6..b67fdf81e 100644 --- a/admin/layouts/admin_view/javascript_fullwidth.php +++ b/admin/layouts/admin_view/javascript_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage javascript_fullwidth.php diff --git a/admin/layouts/admin_view/linked_components_fullwidth.php b/admin/layouts/admin_view/linked_components_fullwidth.php index b4f33fd35..3039789b5 100644 --- a/admin/layouts/admin_view/linked_components_fullwidth.php +++ b/admin/layouts/admin_view/linked_components_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage linked_components_fullwidth.php diff --git a/admin/layouts/admin_view/mysql_fullwidth.php b/admin/layouts/admin_view/mysql_fullwidth.php index 7b130cd8e..f9f7d484a 100644 --- a/admin/layouts/admin_view/mysql_fullwidth.php +++ b/admin/layouts/admin_view/mysql_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage mysql_fullwidth.php diff --git a/admin/layouts/admin_view/mysql_left.php b/admin/layouts/admin_view/mysql_left.php index d83fe5089..bbf4680d6 100644 --- a/admin/layouts/admin_view/mysql_left.php +++ b/admin/layouts/admin_view/mysql_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage mysql_left.php diff --git a/admin/layouts/admin_view/php_fullwidth.php b/admin/layouts/admin_view/php_fullwidth.php index d0670dc13..cecc00e79 100644 --- a/admin/layouts/admin_view/php_fullwidth.php +++ b/admin/layouts/admin_view/php_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage php_fullwidth.php diff --git a/admin/layouts/admin_view/publishing.php b/admin/layouts/admin_view/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/admin_view/publishing.php +++ b/admin/layouts/admin_view/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/admin_view/publlshing.php b/admin/layouts/admin_view/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/admin_view/publlshing.php +++ b/admin/layouts/admin_view/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/admin_view/settings_above.php b/admin/layouts/admin_view/settings_above.php index 08b04d555..0ca0ff6d5 100644 --- a/admin/layouts/admin_view/settings_above.php +++ b/admin/layouts/admin_view/settings_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage settings_above.php diff --git a/admin/layouts/admin_view/settings_left.php b/admin/layouts/admin_view/settings_left.php index 34c517325..6fdeeef5c 100644 --- a/admin/layouts/admin_view/settings_left.php +++ b/admin/layouts/admin_view/settings_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage settings_left.php diff --git a/admin/layouts/admin_view/settings_right.php b/admin/layouts/admin_view/settings_right.php index c594449b2..1ffb265b4 100644 --- a/admin/layouts/admin_view/settings_right.php +++ b/admin/layouts/admin_view/settings_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage settings_right.php diff --git a/admin/layouts/admin_view/settings_under.php b/admin/layouts/admin_view/settings_under.php index 7e4dab1cc..b09035ef6 100644 --- a/admin/layouts/admin_view/settings_under.php +++ b/admin/layouts/admin_view/settings_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage settings_under.php diff --git a/admin/layouts/batchselection.php b/admin/layouts/batchselection.php index 03a2ec9b2..bee289666 100644 --- a/admin/layouts/batchselection.php +++ b/admin/layouts/batchselection.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage batchselection.php diff --git a/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php b/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php index f7f756db8..7673dde26 100644 --- a/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php +++ b/admin/layouts/custom_admin_view/custom_buttons_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_fullwidth.php diff --git a/admin/layouts/custom_admin_view/custom_buttons_left.php b/admin/layouts/custom_admin_view/custom_buttons_left.php index dc5d0d26f..61c408bfb 100644 --- a/admin/layouts/custom_admin_view/custom_buttons_left.php +++ b/admin/layouts/custom_admin_view/custom_buttons_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_left.php diff --git a/admin/layouts/custom_admin_view/custom_script_fullwidth.php b/admin/layouts/custom_admin_view/custom_script_fullwidth.php index e3f999510..3a97729c4 100644 --- a/admin/layouts/custom_admin_view/custom_script_fullwidth.php +++ b/admin/layouts/custom_admin_view/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/custom_admin_view/details_above.php b/admin/layouts/custom_admin_view/details_above.php index 264848d0a..504996d9f 100644 --- a/admin/layouts/custom_admin_view/details_above.php +++ b/admin/layouts/custom_admin_view/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/custom_admin_view/details_fullwidth.php b/admin/layouts/custom_admin_view/details_fullwidth.php index c91590b8f..cce076d1b 100644 --- a/admin/layouts/custom_admin_view/details_fullwidth.php +++ b/admin/layouts/custom_admin_view/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/custom_admin_view/details_left.php b/admin/layouts/custom_admin_view/details_left.php index a4f5f96a4..4f0775c74 100644 --- a/admin/layouts/custom_admin_view/details_left.php +++ b/admin/layouts/custom_admin_view/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/custom_admin_view/details_right.php b/admin/layouts/custom_admin_view/details_right.php index 0fa65a8dc..4eb6d2668 100644 --- a/admin/layouts/custom_admin_view/details_right.php +++ b/admin/layouts/custom_admin_view/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/custom_admin_view/details_rightside.php b/admin/layouts/custom_admin_view/details_rightside.php index b30841fc7..88e5cd21a 100644 --- a/admin/layouts/custom_admin_view/details_rightside.php +++ b/admin/layouts/custom_admin_view/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/custom_admin_view/details_under.php b/admin/layouts/custom_admin_view/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/custom_admin_view/details_under.php +++ b/admin/layouts/custom_admin_view/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/custom_admin_view/linked_components_fullwidth.php b/admin/layouts/custom_admin_view/linked_components_fullwidth.php index 212c58bb6..63103555e 100644 --- a/admin/layouts/custom_admin_view/linked_components_fullwidth.php +++ b/admin/layouts/custom_admin_view/linked_components_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage linked_components_fullwidth.php diff --git a/admin/layouts/custom_admin_view/publishing.php b/admin/layouts/custom_admin_view/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/custom_admin_view/publishing.php +++ b/admin/layouts/custom_admin_view/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/custom_admin_view/publlshing.php b/admin/layouts/custom_admin_view/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/custom_admin_view/publlshing.php +++ b/admin/layouts/custom_admin_view/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/custom_code/details_above.php b/admin/layouts/custom_code/details_above.php index 9a164298b..86f1de6af 100644 --- a/admin/layouts/custom_code/details_above.php +++ b/admin/layouts/custom_code/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/custom_code/details_fullwidth.php b/admin/layouts/custom_code/details_fullwidth.php index 3524ff8b0..504b775b8 100644 --- a/admin/layouts/custom_code/details_fullwidth.php +++ b/admin/layouts/custom_code/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/custom_code/details_left.php b/admin/layouts/custom_code/details_left.php index c6597c1d4..341593b48 100644 --- a/admin/layouts/custom_code/details_left.php +++ b/admin/layouts/custom_code/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/custom_code/details_right.php b/admin/layouts/custom_code/details_right.php index 96bb80458..2a9885434 100644 --- a/admin/layouts/custom_code/details_right.php +++ b/admin/layouts/custom_code/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/custom_code/details_under.php b/admin/layouts/custom_code/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/custom_code/details_under.php +++ b/admin/layouts/custom_code/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/custom_code/publishing.php b/admin/layouts/custom_code/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/custom_code/publishing.php +++ b/admin/layouts/custom_code/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/custom_code/publlshing.php b/admin/layouts/custom_code/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/custom_code/publlshing.php +++ b/admin/layouts/custom_code/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/dynamic_get/abacus_fullwidth.php b/admin/layouts/dynamic_get/abacus_fullwidth.php index 3baf78849..e79581b91 100644 --- a/admin/layouts/dynamic_get/abacus_fullwidth.php +++ b/admin/layouts/dynamic_get/abacus_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage abacus_fullwidth.php diff --git a/admin/layouts/dynamic_get/abacus_left.php b/admin/layouts/dynamic_get/abacus_left.php index ca6c66f7b..cd978c29e 100644 --- a/admin/layouts/dynamic_get/abacus_left.php +++ b/admin/layouts/dynamic_get/abacus_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage abacus_left.php diff --git a/admin/layouts/dynamic_get/custom_script_fullwidth.php b/admin/layouts/dynamic_get/custom_script_fullwidth.php index a0c6e2281..286f1a279 100644 --- a/admin/layouts/dynamic_get/custom_script_fullwidth.php +++ b/admin/layouts/dynamic_get/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/dynamic_get/gettable_above.php b/admin/layouts/dynamic_get/gettable_above.php index 6505e9b25..fe8cab238 100644 --- a/admin/layouts/dynamic_get/gettable_above.php +++ b/admin/layouts/dynamic_get/gettable_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage gettable_above.php diff --git a/admin/layouts/dynamic_get/gettable_fullwidth.php b/admin/layouts/dynamic_get/gettable_fullwidth.php index dcb2420b8..49cfba9c5 100644 --- a/admin/layouts/dynamic_get/gettable_fullwidth.php +++ b/admin/layouts/dynamic_get/gettable_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage gettable_fullwidth.php diff --git a/admin/layouts/dynamic_get/gettable_left.php b/admin/layouts/dynamic_get/gettable_left.php index ebf11f644..573df0c6b 100644 --- a/admin/layouts/dynamic_get/gettable_left.php +++ b/admin/layouts/dynamic_get/gettable_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage gettable_left.php diff --git a/admin/layouts/dynamic_get/gettable_right.php b/admin/layouts/dynamic_get/gettable_right.php index 527062936..ab92d21ed 100644 --- a/admin/layouts/dynamic_get/gettable_right.php +++ b/admin/layouts/dynamic_get/gettable_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage gettable_right.php diff --git a/admin/layouts/dynamic_get/gettable_under.php b/admin/layouts/dynamic_get/gettable_under.php index c8de0faff..89dcb1824 100644 --- a/admin/layouts/dynamic_get/gettable_under.php +++ b/admin/layouts/dynamic_get/gettable_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage gettable_under.php diff --git a/admin/layouts/dynamic_get/publishing.php b/admin/layouts/dynamic_get/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/dynamic_get/publishing.php +++ b/admin/layouts/dynamic_get/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/dynamic_get/publlshing.php b/admin/layouts/dynamic_get/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/dynamic_get/publlshing.php +++ b/admin/layouts/dynamic_get/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/field/details_fullwidth.php b/admin/layouts/field/details_fullwidth.php index f55b9c050..4e29edd30 100644 --- a/admin/layouts/field/details_fullwidth.php +++ b/admin/layouts/field/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/field/details_left.php b/admin/layouts/field/details_left.php index 38f7a80e2..3995154e7 100644 --- a/admin/layouts/field/details_left.php +++ b/admin/layouts/field/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/field/details_right.php b/admin/layouts/field/details_right.php index 6a16301c4..b59a4ce91 100644 --- a/admin/layouts/field/details_right.php +++ b/admin/layouts/field/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/field/details_under.php b/admin/layouts/field/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/field/details_under.php +++ b/admin/layouts/field/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/field/linked_admin_views_fullwidth.php b/admin/layouts/field/linked_admin_views_fullwidth.php index 3903e6af5..d57f044f1 100644 --- a/admin/layouts/field/linked_admin_views_fullwidth.php +++ b/admin/layouts/field/linked_admin_views_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage linked_admin_views_fullwidth.php diff --git a/admin/layouts/field/publishing.php b/admin/layouts/field/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/field/publishing.php +++ b/admin/layouts/field/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/field/publlshing.php b/admin/layouts/field/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/field/publlshing.php +++ b/admin/layouts/field/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/field/scripts_left.php b/admin/layouts/field/scripts_left.php index 2dd987515..ad05034b4 100644 --- a/admin/layouts/field/scripts_left.php +++ b/admin/layouts/field/scripts_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage scripts_left.php diff --git a/admin/layouts/field/scripts_right.php b/admin/layouts/field/scripts_right.php index ea30e9451..83967e257 100644 --- a/admin/layouts/field/scripts_right.php +++ b/admin/layouts/field/scripts_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage scripts_right.php diff --git a/admin/layouts/fieldtype/details_left.php b/admin/layouts/fieldtype/details_left.php index 8c1bcd1b7..4c6d7851d 100644 --- a/admin/layouts/fieldtype/details_left.php +++ b/admin/layouts/fieldtype/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/fieldtype/details_right.php b/admin/layouts/fieldtype/details_right.php index f1007ccf5..5a5c2c7eb 100644 --- a/admin/layouts/fieldtype/details_right.php +++ b/admin/layouts/fieldtype/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/fieldtype/fields_fullwidth.php b/admin/layouts/fieldtype/fields_fullwidth.php index eb5751c68..b1026dc58 100644 --- a/admin/layouts/fieldtype/fields_fullwidth.php +++ b/admin/layouts/fieldtype/fields_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage fields_fullwidth.php diff --git a/admin/layouts/fieldtype/publishing.php b/admin/layouts/fieldtype/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/fieldtype/publishing.php +++ b/admin/layouts/fieldtype/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/fieldtype/publlshing.php b/admin/layouts/fieldtype/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/fieldtype/publlshing.php +++ b/admin/layouts/fieldtype/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/help_document/details_above.php b/admin/layouts/help_document/details_above.php index 3bcda896b..be3f279c1 100644 --- a/admin/layouts/help_document/details_above.php +++ b/admin/layouts/help_document/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/help_document/details_fullwidth.php b/admin/layouts/help_document/details_fullwidth.php index cda72317c..3860f070c 100644 --- a/admin/layouts/help_document/details_fullwidth.php +++ b/admin/layouts/help_document/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/help_document/details_left.php b/admin/layouts/help_document/details_left.php index ffb3770b3..620d9a485 100644 --- a/admin/layouts/help_document/details_left.php +++ b/admin/layouts/help_document/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/help_document/details_right.php b/admin/layouts/help_document/details_right.php index 82cd9bd74..86b4974f9 100644 --- a/admin/layouts/help_document/details_right.php +++ b/admin/layouts/help_document/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/help_document/details_under.php b/admin/layouts/help_document/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/help_document/details_under.php +++ b/admin/layouts/help_document/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/help_document/publishing.php b/admin/layouts/help_document/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/help_document/publishing.php +++ b/admin/layouts/help_document/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/help_document/publlshing.php b/admin/layouts/help_document/publlshing.php index c12466cef..bfe84d83b 100644 --- a/admin/layouts/help_document/publlshing.php +++ b/admin/layouts/help_document/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/joomla_component/admin_views_fullwidth.php b/admin/layouts/joomla_component/admin_views_fullwidth.php index f9b760903..821ca1c1e 100644 --- a/admin/layouts/joomla_component/admin_views_fullwidth.php +++ b/admin/layouts/joomla_component/admin_views_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage admin_views_fullwidth.php diff --git a/admin/layouts/joomla_component/custom_admin_views_fullwidth.php b/admin/layouts/joomla_component/custom_admin_views_fullwidth.php index ced6a27dc..66d714542 100644 --- a/admin/layouts/joomla_component/custom_admin_views_fullwidth.php +++ b/admin/layouts/joomla_component/custom_admin_views_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_admin_views_fullwidth.php diff --git a/admin/layouts/joomla_component/details_above.php b/admin/layouts/joomla_component/details_above.php index 264848d0a..504996d9f 100644 --- a/admin/layouts/joomla_component/details_above.php +++ b/admin/layouts/joomla_component/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/joomla_component/details_left.php b/admin/layouts/joomla_component/details_left.php index 71b659b05..05344d065 100644 --- a/admin/layouts/joomla_component/details_left.php +++ b/admin/layouts/joomla_component/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/joomla_component/details_right.php b/admin/layouts/joomla_component/details_right.php index 3397127c8..c584cc88c 100644 --- a/admin/layouts/joomla_component/details_right.php +++ b/admin/layouts/joomla_component/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/joomla_component/details_under.php b/admin/layouts/joomla_component/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/joomla_component/details_under.php +++ b/admin/layouts/joomla_component/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/joomla_component/dynamic_build_beta_fullwidth.php b/admin/layouts/joomla_component/dynamic_build_beta_fullwidth.php index 9414da387..ba1c42727 100644 --- a/admin/layouts/joomla_component/dynamic_build_beta_fullwidth.php +++ b/admin/layouts/joomla_component/dynamic_build_beta_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage dynamic_build_beta_fullwidth.php diff --git a/admin/layouts/joomla_component/dynamic_integration_fullwidth.php b/admin/layouts/joomla_component/dynamic_integration_fullwidth.php index 15d17127d..647c9ffa5 100644 --- a/admin/layouts/joomla_component/dynamic_integration_fullwidth.php +++ b/admin/layouts/joomla_component/dynamic_integration_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage dynamic_integration_fullwidth.php diff --git a/admin/layouts/joomla_component/libs_helpers_fullwidth.php b/admin/layouts/joomla_component/libs_helpers_fullwidth.php index 9c7737faa..76695645d 100644 --- a/admin/layouts/joomla_component/libs_helpers_fullwidth.php +++ b/admin/layouts/joomla_component/libs_helpers_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage libs_helpers_fullwidth.php diff --git a/admin/layouts/joomla_component/mysql_fullwidth.php b/admin/layouts/joomla_component/mysql_fullwidth.php index e662ade84..d44e2d48f 100644 --- a/admin/layouts/joomla_component/mysql_fullwidth.php +++ b/admin/layouts/joomla_component/mysql_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage mysql_fullwidth.php diff --git a/admin/layouts/joomla_component/php_fullwidth.php b/admin/layouts/joomla_component/php_fullwidth.php index 23e666f77..50ca04d72 100644 --- a/admin/layouts/joomla_component/php_fullwidth.php +++ b/admin/layouts/joomla_component/php_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage php_fullwidth.php diff --git a/admin/layouts/joomla_component/publishing.php b/admin/layouts/joomla_component/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/joomla_component/publishing.php +++ b/admin/layouts/joomla_component/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/joomla_component/publlshing.php b/admin/layouts/joomla_component/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/joomla_component/publlshing.php +++ b/admin/layouts/joomla_component/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/joomla_component/readme_left.php b/admin/layouts/joomla_component/readme_left.php index c2a9e2b0b..9856adfcd 100644 --- a/admin/layouts/joomla_component/readme_left.php +++ b/admin/layouts/joomla_component/readme_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage readme_left.php diff --git a/admin/layouts/joomla_component/readme_right.php b/admin/layouts/joomla_component/readme_right.php index e2e0938fa..93168fe04 100644 --- a/admin/layouts/joomla_component/readme_right.php +++ b/admin/layouts/joomla_component/readme_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage readme_right.php diff --git a/admin/layouts/joomla_component/settings_left.php b/admin/layouts/joomla_component/settings_left.php index f148fe2a2..a9448bca5 100644 --- a/admin/layouts/joomla_component/settings_left.php +++ b/admin/layouts/joomla_component/settings_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage settings_left.php diff --git a/admin/layouts/joomla_component/settings_right.php b/admin/layouts/joomla_component/settings_right.php index 7892af1f9..17b1f2fd7 100644 --- a/admin/layouts/joomla_component/settings_right.php +++ b/admin/layouts/joomla_component/settings_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage settings_right.php diff --git a/admin/layouts/joomla_component/site_views_fullwidth.php b/admin/layouts/joomla_component/site_views_fullwidth.php index b51ca4aa8..882082134 100644 --- a/admin/layouts/joomla_component/site_views_fullwidth.php +++ b/admin/layouts/joomla_component/site_views_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage site_views_fullwidth.php diff --git a/admin/layouts/language/details_left.php b/admin/layouts/language/details_left.php new file mode 100644 index 000000000..bbd6dcc61 --- /dev/null +++ b/admin/layouts/language/details_left.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'name' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/language/details_right.php b/admin/layouts/language/details_right.php new file mode 100644 index 000000000..5668a76fa --- /dev/null +++ b/admin/layouts/language/details_right.php @@ -0,0 +1,54 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'langtag' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/language/index.html b/admin/layouts/language/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/layouts/language/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/layouts/language/publishing.php b/admin/layouts/language/publishing.php new file mode 100644 index 000000000..fd7f0e9c1 --- /dev/null +++ b/admin/layouts/language/publishing.php @@ -0,0 +1,58 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'created', + 'created_by', + 'modified', + 'modified_by' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/language/publlshing.php b/admin/layouts/language/publlshing.php new file mode 100644 index 000000000..102b733fa --- /dev/null +++ b/admin/layouts/language/publlshing.php @@ -0,0 +1,60 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'published', + 'ordering', + 'access', + 'version', + 'hits', + 'id' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/language_placeholder/details_above.php b/admin/layouts/language_placeholder/details_above.php new file mode 100644 index 000000000..cd900471d --- /dev/null +++ b/admin/layouts/language_placeholder/details_above.php @@ -0,0 +1,41 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = array( + 'components' +); + +?> +
+ renderField($field); + } ?> +
diff --git a/admin/layouts/language_placeholder/details_fullwidth.php b/admin/layouts/language_placeholder/details_fullwidth.php new file mode 100644 index 000000000..7931472c5 --- /dev/null +++ b/admin/layouts/language_placeholder/details_fullwidth.php @@ -0,0 +1,49 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'placeholder', + 'translation' +); + +?> +
+ +
+
+ getLabel($field); ?> +
+
+ getInput($field); ?> +
+
+ +
diff --git a/admin/layouts/language_placeholder/index.html b/admin/layouts/language_placeholder/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/layouts/language_placeholder/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/layouts/language_placeholder/publishing.php b/admin/layouts/language_placeholder/publishing.php new file mode 100644 index 000000000..fd7f0e9c1 --- /dev/null +++ b/admin/layouts/language_placeholder/publishing.php @@ -0,0 +1,58 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'created', + 'created_by', + 'modified', + 'modified_by' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/language_placeholder/publlshing.php b/admin/layouts/language_placeholder/publlshing.php new file mode 100644 index 000000000..102b733fa --- /dev/null +++ b/admin/layouts/language_placeholder/publlshing.php @@ -0,0 +1,60 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file + +defined('_JEXEC') or die('Restricted access'); + +$app = JFactory::getApplication(); +$form = $displayData->getForm(); + +$fields = $displayData->get('fields') ?: array( + 'published', + 'ordering', + 'access', + 'version', + 'hits', + 'id' +); + +$hiddenFields = $displayData->get('hidden_fields') ?: array(); + +foreach ($fields as $field) +{ + $field = is_array($field) ? $field : array($field); + foreach ($field as $f) + { + if ($form->getField($f)) + { + if (in_array($f, $hiddenFields)) + { + $form->setFieldAttribute($f, 'type', 'hidden'); + } + + echo $form->renderField($f); + break; + } + } +} diff --git a/admin/layouts/layout/custom_script_fullwidth.php b/admin/layouts/layout/custom_script_fullwidth.php index 7e6e62e4e..03dbc25a1 100644 --- a/admin/layouts/layout/custom_script_fullwidth.php +++ b/admin/layouts/layout/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/layout/details_fullwidth.php b/admin/layouts/layout/details_fullwidth.php index 2c704d7ff..58b1d4d47 100644 --- a/admin/layouts/layout/details_fullwidth.php +++ b/admin/layouts/layout/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/layout/details_left.php b/admin/layouts/layout/details_left.php index 1e291edb9..1b871120b 100644 --- a/admin/layouts/layout/details_left.php +++ b/admin/layouts/layout/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/layout/details_right.php b/admin/layouts/layout/details_right.php index 980877794..b7c3154a7 100644 --- a/admin/layouts/layout/details_right.php +++ b/admin/layouts/layout/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/layout/details_rightside.php b/admin/layouts/layout/details_rightside.php index 0bd6b3b0b..15e0158f2 100644 --- a/admin/layouts/layout/details_rightside.php +++ b/admin/layouts/layout/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/layout/details_under.php b/admin/layouts/layout/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/layout/details_under.php +++ b/admin/layouts/layout/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/layout/publishing.php b/admin/layouts/layout/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/layout/publishing.php +++ b/admin/layouts/layout/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/layout/publlshing.php b/admin/layouts/layout/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/layout/publlshing.php +++ b/admin/layouts/layout/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/site_view/custom_buttons_fullwidth.php b/admin/layouts/site_view/custom_buttons_fullwidth.php index f7f756db8..7673dde26 100644 --- a/admin/layouts/site_view/custom_buttons_fullwidth.php +++ b/admin/layouts/site_view/custom_buttons_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_fullwidth.php diff --git a/admin/layouts/site_view/custom_buttons_left.php b/admin/layouts/site_view/custom_buttons_left.php index b43163fd1..4c313eafb 100644 --- a/admin/layouts/site_view/custom_buttons_left.php +++ b/admin/layouts/site_view/custom_buttons_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_left.php diff --git a/admin/layouts/site_view/custom_buttons_right.php b/admin/layouts/site_view/custom_buttons_right.php index f535522c5..58bf7c7ee 100644 --- a/admin/layouts/site_view/custom_buttons_right.php +++ b/admin/layouts/site_view/custom_buttons_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_buttons_right.php diff --git a/admin/layouts/site_view/details_above.php b/admin/layouts/site_view/details_above.php index 264848d0a..504996d9f 100644 --- a/admin/layouts/site_view/details_above.php +++ b/admin/layouts/site_view/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/site_view/details_fullwidth.php b/admin/layouts/site_view/details_fullwidth.php index c91590b8f..cce076d1b 100644 --- a/admin/layouts/site_view/details_fullwidth.php +++ b/admin/layouts/site_view/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/site_view/details_left.php b/admin/layouts/site_view/details_left.php index a4f5f96a4..4f0775c74 100644 --- a/admin/layouts/site_view/details_left.php +++ b/admin/layouts/site_view/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/site_view/details_right.php b/admin/layouts/site_view/details_right.php index 980877794..b7c3154a7 100644 --- a/admin/layouts/site_view/details_right.php +++ b/admin/layouts/site_view/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/site_view/details_rightside.php b/admin/layouts/site_view/details_rightside.php index b30841fc7..88e5cd21a 100644 --- a/admin/layouts/site_view/details_rightside.php +++ b/admin/layouts/site_view/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/site_view/details_under.php b/admin/layouts/site_view/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/site_view/details_under.php +++ b/admin/layouts/site_view/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/site_view/javascript_css_fullwidth.php b/admin/layouts/site_view/javascript_css_fullwidth.php index 478a46354..ae709dcf6 100644 --- a/admin/layouts/site_view/javascript_css_fullwidth.php +++ b/admin/layouts/site_view/javascript_css_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage javascript_css_fullwidth.php diff --git a/admin/layouts/site_view/linked_components_fullwidth.php b/admin/layouts/site_view/linked_components_fullwidth.php index b1d2606e3..ea33c894b 100644 --- a/admin/layouts/site_view/linked_components_fullwidth.php +++ b/admin/layouts/site_view/linked_components_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage linked_components_fullwidth.php diff --git a/admin/layouts/site_view/php_fullwidth.php b/admin/layouts/site_view/php_fullwidth.php index f4afec699..e3b21813e 100644 --- a/admin/layouts/site_view/php_fullwidth.php +++ b/admin/layouts/site_view/php_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage php_fullwidth.php diff --git a/admin/layouts/site_view/publishing.php b/admin/layouts/site_view/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/site_view/publishing.php +++ b/admin/layouts/site_view/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/site_view/publlshing.php b/admin/layouts/site_view/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/site_view/publlshing.php +++ b/admin/layouts/site_view/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/snippet/details_above.php b/admin/layouts/snippet/details_above.php index 3482493fc..ae3f9befe 100644 --- a/admin/layouts/snippet/details_above.php +++ b/admin/layouts/snippet/details_above.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_above.php diff --git a/admin/layouts/snippet/details_left.php b/admin/layouts/snippet/details_left.php index 3535aa04b..91c917bb4 100644 --- a/admin/layouts/snippet/details_left.php +++ b/admin/layouts/snippet/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/snippet/details_right.php b/admin/layouts/snippet/details_right.php index daf8c8e20..4ab0fdb12 100644 --- a/admin/layouts/snippet/details_right.php +++ b/admin/layouts/snippet/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/snippet/publishing.php b/admin/layouts/snippet/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/snippet/publishing.php +++ b/admin/layouts/snippet/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/snippet/publlshing.php b/admin/layouts/snippet/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/snippet/publlshing.php +++ b/admin/layouts/snippet/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/layouts/template/custom_script_fullwidth.php b/admin/layouts/template/custom_script_fullwidth.php index 7e6e62e4e..03dbc25a1 100644 --- a/admin/layouts/template/custom_script_fullwidth.php +++ b/admin/layouts/template/custom_script_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage custom_script_fullwidth.php diff --git a/admin/layouts/template/details_fullwidth.php b/admin/layouts/template/details_fullwidth.php index 9669d0142..f71dfae2d 100644 --- a/admin/layouts/template/details_fullwidth.php +++ b/admin/layouts/template/details_fullwidth.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_fullwidth.php diff --git a/admin/layouts/template/details_left.php b/admin/layouts/template/details_left.php index 1e291edb9..1b871120b 100644 --- a/admin/layouts/template/details_left.php +++ b/admin/layouts/template/details_left.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_left.php diff --git a/admin/layouts/template/details_right.php b/admin/layouts/template/details_right.php index 980877794..b7c3154a7 100644 --- a/admin/layouts/template/details_right.php +++ b/admin/layouts/template/details_right.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_right.php diff --git a/admin/layouts/template/details_rightside.php b/admin/layouts/template/details_rightside.php index 0bd6b3b0b..15e0158f2 100644 --- a/admin/layouts/template/details_rightside.php +++ b/admin/layouts/template/details_rightside.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_rightside.php diff --git a/admin/layouts/template/details_under.php b/admin/layouts/template/details_under.php index 077cf1fbd..6b7267268 100644 --- a/admin/layouts/template/details_under.php +++ b/admin/layouts/template/details_under.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage details_under.php diff --git a/admin/layouts/template/publishing.php b/admin/layouts/template/publishing.php index ac7bd7ed5..fd7f0e9c1 100644 --- a/admin/layouts/template/publishing.php +++ b/admin/layouts/template/publishing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publishing.php diff --git a/admin/layouts/template/publlshing.php b/admin/layouts/template/publlshing.php index 645c15dea..102b733fa 100644 --- a/admin/layouts/template/publlshing.php +++ b/admin/layouts/template/publlshing.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage publlshing.php diff --git a/admin/models/ajax.php b/admin/models/ajax.php index 8e4a70aa8..b940f5ce9 100644 --- a/admin/models/ajax.php +++ b/admin/models/ajax.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage ajax.php diff --git a/admin/models/componentbuilder.php b/admin/models/componentbuilder.php index ce7dff7de..31ea9ed7b 100644 --- a/admin/models/componentbuilder.php +++ b/admin/models/componentbuilder.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage componentbuilder.php @@ -43,7 +43,7 @@ class ComponentbuilderModelComponentbuilder extends JModelList $icons = array(); // view groups array $viewGroups = array( - 'main' => array('png.compiler', 'png.joomla_component.add', 'png.joomla_components', 'png.admin_view.add', 'png.admin_views', 'png.custom_admin_view.add', 'png.custom_admin_views', 'png.site_view.add', 'png.site_views', 'png.template.add', 'png.templates', 'png.layout.add', 'png.layouts', 'png.dynamic_get.add', 'png.dynamic_gets', 'png.custom_codes', 'png.snippet.add', 'png.snippets', 'png.field.add', 'png.fields', 'png.fields.catid', 'png.fieldtype.add', 'png.fieldtypes', 'png.fieldtypes.catid', 'png.help_document.add', 'png.help_documents') + 'main' => array('png.compiler', 'png.joomla_component.add', 'png.joomla_components', 'png.admin_view.add', 'png.admin_views', 'png.custom_admin_view.add', 'png.custom_admin_views', 'png.site_view.add', 'png.site_views', 'png.template.add', 'png.templates', 'png.layout.add', 'png.layouts', 'png.dynamic_get.add', 'png.dynamic_gets', 'png.custom_codes', 'png.snippet.add', 'png.snippets', 'png.field.add', 'png.fields', 'png.fields.catid', 'png.fieldtype.add', 'png.fieldtypes', 'png.fieldtypes.catid', 'png.language_placeholder.add', 'png.language_placeholders', 'png.help_document.add', 'png.help_documents') ); // view access array $viewAccess = array( @@ -107,6 +107,16 @@ class ComponentbuilderModelComponentbuilder extends JModelList 'fieldtypes.submenu' => 'fieldtype.submenu', 'fieldtypes.dashboard_list' => 'fieldtype.dashboard_list', 'fieldtype.dashboard_add' => 'fieldtype.dashboard_add', + 'language_placeholder.create' => 'language_placeholder.create', + 'language_placeholders.access' => 'language_placeholder.access', + 'language_placeholder.access' => 'language_placeholder.access', + 'language_placeholders.submenu' => 'language_placeholder.submenu', + 'language_placeholders.dashboard_list' => 'language_placeholder.dashboard_list', + 'language_placeholder.dashboard_add' => 'language_placeholder.dashboard_add', + 'language.create' => 'language.create', + 'languages.access' => 'language.access', + 'language.access' => 'language.access', + 'languages.submenu' => 'language.submenu', 'help_document.create' => 'help_document.create', 'help_documents.access' => 'help_document.access', 'help_document.access' => 'help_document.access', diff --git a/admin/models/fields/adminviewfolderlist.php b/admin/models/fields/adminviewfolderlist.php index 8e7db4e54..6bd862dcc 100644 --- a/admin/models/fields/adminviewfolderlist.php +++ b/admin/models/fields/adminviewfolderlist.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage adminviewfolderlist.php diff --git a/admin/models/fields/adminviews.php b/admin/models/fields/adminviews.php index 4ff076ddc..21cd45aae 100644 --- a/admin/models/fields/adminviews.php +++ b/admin/models/fields/adminviews.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage adminviews.php diff --git a/admin/models/fields/articles.php b/admin/models/fields/articles.php index bffcd2741..da5c24105 100644 --- a/admin/models/fields/articles.php +++ b/admin/models/fields/articles.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage articles.php diff --git a/admin/models/fields/component.php b/admin/models/fields/component.php index e76e4058e..62bb7a857 100644 --- a/admin/models/fields/component.php +++ b/admin/models/fields/component.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage component.php diff --git a/admin/models/fields/components.php b/admin/models/fields/components.php new file mode 100644 index 000000000..932631b2c --- /dev/null +++ b/admin/models/fields/components.php @@ -0,0 +1,170 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the list field type +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +/** + * Components Form Field class for the Componentbuilder component + */ +class JFormFieldComponents extends JFormFieldList +{ + /** + * The components field type. + * + * @var string + */ + public $type = 'components'; + /** + * Override to add new button + * + * @return string The field input markup. + * + * @since 3.2 + */ + protected function getInput() + { + // see if we should add buttons + $setButton = $this->getAttribute('button'); + // get html + $html = parent::getInput(); + // if true set button + if ($setButton === 'true') + { + $button = array(); + $script = array(); + $buttonName = $this->getAttribute('name'); + // get the input from url + $app = JFactory::getApplication(); + $jinput = $app->input; + // get the view name & id + $values = $jinput->getArray(array( + 'id' => 'int', + 'view' => 'word' + )); + // check if new item + $ref = ''; + $refJ = ''; + if (!is_null($values['id']) && strlen($values['view'])) + { + // only load referal if not new item. + $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; + $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; + } + $user = JFactory::getUser(); + // only add if user allowed to create joomla_component + if ($user->authorise('core.create', 'com_componentbuilder') && $app->isAdmin()) // TODO for now only in admin area. + { + // build Create button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = '
+ '; + } + // only add if user allowed to edit joomla_component + if (($buttonName === 'joomla_component' || $buttonName === 'joomla_components') && $user->authorise('core.edit', 'com_componentbuilder') && $app->isAdmin()) // TODO for now only in admin area. + { + // build edit button + $buttonNamee = trim($buttonName); + $buttonNamee = preg_replace('/_+/', ' ', $buttonNamee); + $buttonNamee = preg_replace('/\s+/', ' ', $buttonNamee); + $buttonNamee = preg_replace("/[^A-Za-z ]/", '', $buttonNamee); + $buttonNamee = ucfirst(strtolower($buttonNamee)); + $button[] = ''; + // build script + $script[] = " + jQuery(document).ready(function() { + jQuery('#adminForm').on('change', '#jform_".$buttonName."',function (e) { + e.preventDefault(); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + var ".$buttonName."Value = jQuery('#jform_".$buttonName."').val(); + ".$buttonName."Button(".$buttonName."Value); + }); + function ".$buttonName."Button(value) { + if (value > 0) { + // hide the create button + jQuery('#".$buttonName."Create').hide(); + // show edit button + jQuery('#".$buttonName."Edit').show(); + var url = 'index.php?option=com_componentbuilder&view=joomla_components&task=joomla_component.edit&id='+value+'".$refJ."'; + jQuery('#".$buttonName."Edit').attr('href', url); + } else { + // show the create button + jQuery('#".$buttonName."Create').show(); + // hide edit button + jQuery('#".$buttonName."Edit').hide(); + } + }"; + } + // check if button was created for joomla_component field. + if (is_array($button) && count($button) > 0) + { + // Load the needed script. + $document = JFactory::getDocument(); + $document->addScriptDeclaration(implode(' ',$script)); + // return the button attached to input field. + return '
' .$html . implode('',$button).'
'; + } + } + return $html; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + public function getOptions() + { + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + $query->select($db->quoteName(array('a.id','a.system_name'),array('id','components_system_name'))); + $query->from($db->quoteName('#__componentbuilder_joomla_component', 'a')); + $query->where($db->quoteName('a.published') . ' >= 1'); + $query->order('a.system_name ASC'); + $db->setQuery((string)$query); + $items = $db->loadObjectList(); + $options = array(); + if ($items) + { + foreach($items as $item) + { + $options[] = JHtml::_('select.option', $item->id, $item->components_system_name); + } + } + return $options; + } +} diff --git a/admin/models/fields/customadminviews.php b/admin/models/fields/customadminviews.php index 1cf4313e6..82c2254ef 100644 --- a/admin/models/fields/customadminviews.php +++ b/admin/models/fields/customadminviews.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage customadminviews.php diff --git a/admin/models/fields/customfilelist.php b/admin/models/fields/customfilelist.php index 55df68651..ef0423759 100644 --- a/admin/models/fields/customfilelist.php +++ b/admin/models/fields/customfilelist.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage customfilelist.php diff --git a/admin/models/fields/customfolderlist.php b/admin/models/fields/customfolderlist.php index b7a303a57..61349411d 100644 --- a/admin/models/fields/customfolderlist.php +++ b/admin/models/fields/customfolderlist.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage customfolderlist.php diff --git a/admin/models/fields/customgets.php b/admin/models/fields/customgets.php index 7e1c1d954..9901bab42 100644 --- a/admin/models/fields/customgets.php +++ b/admin/models/fields/customgets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage customgets.php diff --git a/admin/models/fields/dbtables.php b/admin/models/fields/dbtables.php index 64c1ad7b2..92e299f13 100644 --- a/admin/models/fields/dbtables.php +++ b/admin/models/fields/dbtables.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage dbtables.php diff --git a/admin/models/fields/dynamicget.php b/admin/models/fields/dynamicget.php index b2f0fa58c..c909976ae 100644 --- a/admin/models/fields/dynamicget.php +++ b/admin/models/fields/dynamicget.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage dynamicget.php diff --git a/admin/models/fields/dynamicgets.php b/admin/models/fields/dynamicgets.php index 20405d887..104a58dc7 100644 --- a/admin/models/fields/dynamicgets.php +++ b/admin/models/fields/dynamicgets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage dynamicgets.php diff --git a/admin/models/fields/fields.php b/admin/models/fields/fields.php index e720dc00f..1a227063f 100644 --- a/admin/models/fields/fields.php +++ b/admin/models/fields/fields.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage fields.php diff --git a/admin/models/fields/fieldsmulti.php b/admin/models/fields/fieldsmulti.php index d484d9cd4..133027a89 100644 --- a/admin/models/fields/fieldsmulti.php +++ b/admin/models/fields/fieldsmulti.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage fieldsmulti.php diff --git a/admin/models/fields/fieldtypes.php b/admin/models/fields/fieldtypes.php index b0ea7f761..5a6c23401 100644 --- a/admin/models/fields/fieldtypes.php +++ b/admin/models/fields/fieldtypes.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage fieldtypes.php diff --git a/admin/models/fields/maingets.php b/admin/models/fields/maingets.php index 15125c414..8952a7086 100644 --- a/admin/models/fields/maingets.php +++ b/admin/models/fields/maingets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage maingets.php diff --git a/admin/models/fields/siteviewfolderlist.php b/admin/models/fields/siteviewfolderlist.php index 420974882..1f0b409d9 100644 --- a/admin/models/fields/siteviewfolderlist.php +++ b/admin/models/fields/siteviewfolderlist.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage siteviewfolderlist.php diff --git a/admin/models/fields/siteviews.php b/admin/models/fields/siteviews.php index d2e39b65c..0018c3303 100644 --- a/admin/models/fields/siteviews.php +++ b/admin/models/fields/siteviews.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage siteviews.php diff --git a/admin/models/fields/snippets.php b/admin/models/fields/snippets.php index d7537ce78..4908d2b00 100644 --- a/admin/models/fields/snippets.php +++ b/admin/models/fields/snippets.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage snippets.php diff --git a/admin/models/forms/help_document.js b/admin/models/forms/help_document.js index 5d413bae9..a8a107729 100644 --- a/admin/models/forms/help_document.js +++ b/admin/models/forms/help_document.js @@ -10,7 +10,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_document.js diff --git a/admin/models/forms/language.js b/admin/models/forms/language.js new file mode 100644 index 000000000..30a7bd0ec --- /dev/null +++ b/admin/models/forms/language.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage language.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + + diff --git a/admin/models/forms/language.xml b/admin/models/forms/language.xml new file mode 100644 index 000000000..883c0f2b3 --- /dev/null +++ b/admin/models/forms/language.xml @@ -0,0 +1,145 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/admin/models/forms/language_placeholder.js b/admin/models/forms/language_placeholder.js new file mode 100644 index 000000000..b1815115b --- /dev/null +++ b/admin/models/forms/language_placeholder.js @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 8 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage language_placeholder.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + + diff --git a/admin/models/forms/language_placeholder.xml b/admin/models/forms/language_placeholder.xml new file mode 100644 index 000000000..cfc1ca8d6 --- /dev/null +++ b/admin/models/forms/language_placeholder.xml @@ -0,0 +1,183 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + + +
+
\ No newline at end of file diff --git a/admin/models/help_document.php b/admin/models/help_document.php index dae6e4e85..9d8d15a94 100644 --- a/admin/models/help_document.php +++ b/admin/models/help_document.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_document.php diff --git a/admin/models/help_documents.php b/admin/models/help_documents.php index 76cc18fdd..535c913a4 100644 --- a/admin/models/help_documents.php +++ b/admin/models/help_documents.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_documents.php diff --git a/admin/models/import.php b/admin/models/import.php index 573dd8fad..60c63a4f5 100644 --- a/admin/models/import.php +++ b/admin/models/import.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage import.php diff --git a/admin/models/import_joomla_components.php b/admin/models/import_joomla_components.php index 74e2f9f88..146c3319b 100644 --- a/admin/models/import_joomla_components.php +++ b/admin/models/import_joomla_components.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage import_joomla_components.php diff --git a/admin/models/language.php b/admin/models/language.php new file mode 100644 index 000000000..0351bb6f3 --- /dev/null +++ b/admin/models/language.php @@ -0,0 +1,859 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla modelform library +jimport('joomla.application.component.modeladmin'); + +/** + * Componentbuilder Language Model + */ +class ComponentbuilderModelLanguage extends JModelAdmin +{ + /** + * @var string The prefix to use with controller messages. + * @since 1.6 + */ + protected $text_prefix = 'COM_COMPONENTBUILDER'; + + /** + * The type alias for this content type. + * + * @var string + * @since 3.2 + */ + public $typeAlias = 'com_componentbuilder.language'; + + /** + * Returns a Table object, always creating it + * + * @param type $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 1.6 + */ + public function getTable($type = 'language', $prefix = 'ComponentbuilderTable', $config = array()) + { + return JTable::getInstance($type, $prefix, $config); + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + if ($item = parent::getItem($pk)) + { + if (!empty($item->params)) + { + // Convert the params field to an array. + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry->toArray(); + } + + if (!empty($item->metadata)) + { + // Convert the metadata field to an array. + $registry = new Registry; + $registry->loadString($item->metadata); + $item->metadata = $registry->toArray(); + } + + if (!empty($item->id)) + { + $item->tags = new JHelperTags; + $item->tags->getTagIds($item->id, 'com_componentbuilder.language'); + } + } + + return $item; + } + + /** + * Method to get the record form. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 1.6 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_componentbuilder.language', 'language', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0, 'INT'); + } + // The back end uses id so we use that the rest of the time and set it to 0 by default. + else + { + $id = $jinput->get('id', 0, 'INT'); + } + + $user = JFactory::getUser(); + + // Check for existing item. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('language.edit.state', 'com_componentbuilder.language.' . (int) $id)) + || ($id == 0 && !$user->authorise('language.edit.state', 'com_componentbuilder'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + // If this is a new item insure the greated by is set. + if (0 == $id) + { + // Set the created_by to this user + $form->setValue('created_by', null, $user->id); + } + // Modify the form based on Edit Creaded By access controls. + if (!$user->authorise('core.edit.created_by', 'com_componentbuilder')) + { + // Disable fields for display. + $form->setFieldAttribute('created_by', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('created_by', 'readonly', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created_by', 'filter', 'unset'); + } + // Modify the form based on Edit Creaded Date access controls. + if (!$user->authorise('core.edit.created', 'com_componentbuilder')) + { + // Disable fields for display. + $form->setFieldAttribute('created', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created', 'filter', 'unset'); + } + // Only load these values if no id is found + if (0 == $id) + { + // Set redirected field name + $redirectedField = $jinput->get('ref', null, 'STRING'); + // Set redirected field value + $redirectedValue = $jinput->get('refid', 0, 'INT'); + if (0 != $redirectedValue && $redirectedField) + { + // Now set the local-redirected field default value + $form->setValue($redirectedField, null, $redirectedValue); + } + } + + return $form; + } + + /** + * Method to get the script that have to be included on the form + * + * @return string script files + */ + public function getScript() + { + return 'administrator/components/com_componentbuilder/models/forms/language.js'; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return; + } + + $user = JFactory::getUser(); + // The record has been set. Check the record permissions. + return $user->authorise('language.delete', 'com_componentbuilder.language.' . (int) $record->id); + } + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + $recordId = (!empty($record->id)) ? $record->id : 0; + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('language.edit.state', 'com_componentbuilder.language.' . (int) $recordId); + if (!$permission && !is_null($permission)) + { + return false; + } + } + // In the absense of better information, revert to the component permissions. + return $user->authorise('language.edit.state', 'com_componentbuilder'); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * @since 2.5 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // Check specific edit permission then general edit permission. + $user = JFactory::getUser(); + + return $user->authorise('language.edit', 'com_componentbuilder.language.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('language.edit', 'com_componentbuilder'); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param JTable $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if (isset($table->name)) + { + $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); + } + + if (isset($table->alias) && empty($table->alias)) + { + $table->generateAlias(); + } + + if (empty($table->id)) + { + $table->created = $date->toSql(); + // set the user + if ($table->created_by == 0 || empty($table->created_by)) + { + $table->created_by = $user->id; + } + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__componentbuilder_language')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + $table->modified = $date->toSql(); + $table->modified_by = $user->id; + } + + if (!empty($table->id)) + { + // Increment the items version number. + $table->version++; + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 1.6 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_componentbuilder.edit.language.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get the unique fields of this table. + * + * @return mixed An array of field names, boolean false if none is set. + * + * @since 3.0 + */ + protected function getUniqeFields() + { + return false; + } + + /** + * Method to delete one or more records. + * + * @param array &$pks An array of record primary keys. + * + * @return boolean True if successful, false if an error occurs. + * + * @since 12.2 + */ + public function delete(&$pks) + { + if (!parent::delete($pks)) + { + return false; + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 12.2 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize ids. + $pks = array_unique($pks); + JArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + return false; + } + + $done = false; + + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = ComponentbuilderHelper::getActions('language'); + $this->batchSet = true; + + if (!$this->canDo->get('core.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + return false; + } + + if ($this->type == false) + { + $type = new JUcmType; + $this->type = $type->getTypeByAlias($this->typeAlias); + } + + $this->tagsObserver = $this->table->getObserverOfClass('JTableObserverTags'); + + if (!empty($commands['move_copy'])) + { + $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); + + if ($cmd == 'c') + { + $result = $this->batchCopy($commands, $pks, $contexts); + + if (is_array($result)) + { + foreach ($result as $old => $new) + { + $contexts[$new] = $contexts[$old]; + } + $pks = array_values($result); + } + else + { + return false; + } + } + elseif ($cmd == 'm' && !$this->batchMove($commands, $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $values The new values. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 12.2 + */ + protected function batchCopy($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = ComponentbuilderHelper::getActions('language'); + } + + if (!$this->canDo->get('language.create') && !$this->canDo->get('language.batch')) + { + return false; + } + + // get list of uniqe fields + $uniqeFields = $this->getUniqeFields(); + // remove move_copy from array + unset($values['move_copy']); + + // make sure published is set + if (!isset($values['published'])) + { + $values['published'] = 0; + } + elseif (isset($values['published']) && !$this->canDo->get('language.edit.state')) + { + $values['published'] = 0; + } + + $newIds = array(); + + // Parent exists so let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $this->table->reset(); + + // only allow copy if user may edit this item. + + if (!$this->user->authorise('language.edit', $contexts[$pk])) + + { + + // Not fatal error + + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + + continue; + + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + $this->table->name = $this->generateUniqe('name',$this->table->name); + + // insert all set values + if (ComponentbuilderHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + if (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + // update all uniqe fields + if (ComponentbuilderHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $this->table->$uniqeField = $this->generateUniqe($uniqeField,$this->table->$uniqeField); + } + } + + // Reset the ID because we are making a copy + $this->table->id = 0; + + // TODO: Deal with ordering? + // $this->table->ordering = 1; + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + + // Get the new item ID + $newId = $this->table->get('id'); + + // Add the new ID to the array + $newIds[$pk] = $newId; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Batch move items to a new category + * + * @param integer $value The new category ID. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 12.2 + */ + protected function batchMove($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = ComponentbuilderHelper::getActions('language'); + } + + if (!$this->canDo->get('language.edit') && !$this->canDo->get('language.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // make sure published only updates if user has the permission. + if (isset($values['published']) && !$this->canDo->get('language.edit.state')) + { + unset($values['published']); + } + // remove move_copy from array + unset($values['move_copy']); + + // Parent exists so we proceed + foreach ($pks as $pk) + { + if (!$this->user->authorise('language.edit', $contexts[$pk])) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // insert all set values. + if (ComponentbuilderHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + // Do special action for access. + if ('access' === $key && strlen($value) > 0) + { + $this->table->$key = $value; + } + elseif (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $input = JFactory::getApplication()->input; + $filter = JFilterInput::getInstance(); + + // set the metadata to the Item Data + if (isset($data['metadata']) && isset($data['metadata']['author'])) + { + $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); + + $metadata = new JRegistry; + $metadata->loadArray($data['metadata']); + $data['metadata'] = (string) $metadata; + } + + // Set the Params Items to data + if (isset($data['params']) && is_array($data['params'])) + { + $params = new JRegistry; + $params->loadArray($data['params']); + $data['params'] = (string) $params; + } + + // Alter the uniqe field for save as copy + if ($input->get('task') === 'save2copy') + { + // Automatic handling of other uniqe fields + $uniqeFields = $this->getUniqeFields(); + if (ComponentbuilderHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $data[$uniqeField] = $this->generateUniqe($uniqeField,$data[$uniqeField]); + } + } + } + + if (parent::save($data)) + { + return true; + } + return false; + } + + /** + * Method to generate a uniqe value. + * + * @param string $field name. + * @param string $value data. + * + * @return string New value. + * + * @since 3.0 + */ + protected function generateUniqe($field,$value) + { + + // set field value uniqe + $table = $this->getTable(); + + while ($table->load(array($field => $value))) + { + $value = JString::increment($value); + } + + return $value; + } + + /** + * Method to change the title & alias. + * + * @param string $title The title. + * + * @return array Contains the modified title and alias. + * + */ + protected function _generateNewTitle($title) + { + + // Alter the title + $table = $this->getTable(); + + while ($table->load(array('title' => $title))) + { + $title = JString::increment($title); + } + + return $title; + } +} diff --git a/admin/models/language_placeholder.php b/admin/models/language_placeholder.php new file mode 100644 index 000000000..d32829de5 --- /dev/null +++ b/admin/models/language_placeholder.php @@ -0,0 +1,871 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla modelform library +jimport('joomla.application.component.modeladmin'); + +/** + * Componentbuilder Language_placeholder Model + */ +class ComponentbuilderModelLanguage_placeholder extends JModelAdmin +{ + /** + * @var string The prefix to use with controller messages. + * @since 1.6 + */ + protected $text_prefix = 'COM_COMPONENTBUILDER'; + + /** + * The type alias for this content type. + * + * @var string + * @since 3.2 + */ + public $typeAlias = 'com_componentbuilder.language_placeholder'; + + /** + * Returns a Table object, always creating it + * + * @param type $type The table type to instantiate + * @param string $prefix A prefix for the table class name. Optional. + * @param array $config Configuration array for model. Optional. + * + * @return JTable A database object + * + * @since 1.6 + */ + public function getTable($type = 'language_placeholder', $prefix = 'ComponentbuilderTable', $config = array()) + { + return JTable::getInstance($type, $prefix, $config); + } + + /** + * Method to get a single record. + * + * @param integer $pk The id of the primary key. + * + * @return mixed Object on success, false on failure. + * + * @since 1.6 + */ + public function getItem($pk = null) + { + if ($item = parent::getItem($pk)) + { + if (!empty($item->params)) + { + // Convert the params field to an array. + $registry = new Registry; + $registry->loadString($item->params); + $item->params = $registry->toArray(); + } + + if (!empty($item->metadata)) + { + // Convert the metadata field to an array. + $registry = new Registry; + $registry->loadString($item->metadata); + $item->metadata = $registry->toArray(); + } + + if (!empty($item->components)) + { + // JSON Decode components. + $item->components = json_decode($item->components); + } + + if (!empty($item->id)) + { + $item->tags = new JHelperTags; + $item->tags->getTagIds($item->id, 'com_componentbuilder.language_placeholder'); + } + } + + return $item; + } + + /** + * Method to get the record form. + * + * @param array $data Data for the form. + * @param boolean $loadData True if the form is to load its own data (default case), false if not. + * + * @return mixed A JForm object on success, false on failure + * + * @since 1.6 + */ + public function getForm($data = array(), $loadData = true) + { + // Get the form. + $form = $this->loadForm('com_componentbuilder.language_placeholder', 'language_placeholder', array('control' => 'jform', 'load_data' => $loadData)); + + if (empty($form)) + { + return false; + } + + $jinput = JFactory::getApplication()->input; + + // The front end calls this model and uses a_id to avoid id clashes so we need to check for that first. + if ($jinput->get('a_id')) + { + $id = $jinput->get('a_id', 0, 'INT'); + } + // The back end uses id so we use that the rest of the time and set it to 0 by default. + else + { + $id = $jinput->get('id', 0, 'INT'); + } + + $user = JFactory::getUser(); + + // Check for existing item. + // Modify the form based on Edit State access controls. + if ($id != 0 && (!$user->authorise('language_placeholder.edit.state', 'com_componentbuilder.language_placeholder.' . (int) $id)) + || ($id == 0 && !$user->authorise('language_placeholder.edit.state', 'com_componentbuilder'))) + { + // Disable fields for display. + $form->setFieldAttribute('ordering', 'disabled', 'true'); + $form->setFieldAttribute('published', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('ordering', 'filter', 'unset'); + $form->setFieldAttribute('published', 'filter', 'unset'); + } + // If this is a new item insure the greated by is set. + if (0 == $id) + { + // Set the created_by to this user + $form->setValue('created_by', null, $user->id); + } + // Modify the form based on Edit Creaded By access controls. + if (!$user->authorise('core.edit.created_by', 'com_componentbuilder')) + { + // Disable fields for display. + $form->setFieldAttribute('created_by', 'disabled', 'true'); + // Disable fields for display. + $form->setFieldAttribute('created_by', 'readonly', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created_by', 'filter', 'unset'); + } + // Modify the form based on Edit Creaded Date access controls. + if (!$user->authorise('core.edit.created', 'com_componentbuilder')) + { + // Disable fields for display. + $form->setFieldAttribute('created', 'disabled', 'true'); + // Disable fields while saving. + $form->setFieldAttribute('created', 'filter', 'unset'); + } + // Only load these values if no id is found + if (0 == $id) + { + // Set redirected field name + $redirectedField = $jinput->get('ref', null, 'STRING'); + // Set redirected field value + $redirectedValue = $jinput->get('refid', 0, 'INT'); + if (0 != $redirectedValue && $redirectedField) + { + // Now set the local-redirected field default value + $form->setValue($redirectedField, null, $redirectedValue); + } + } + + return $form; + } + + /** + * Method to get the script that have to be included on the form + * + * @return string script files + */ + public function getScript() + { + return 'administrator/components/com_componentbuilder/models/forms/language_placeholder.js'; + } + + /** + * Method to test whether a record can be deleted. + * + * @param object $record A record object. + * + * @return boolean True if allowed to delete the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canDelete($record) + { + if (!empty($record->id)) + { + if ($record->published != -2) + { + return; + } + + $user = JFactory::getUser(); + // The record has been set. Check the record permissions. + return $user->authorise('language_placeholder.delete', 'com_componentbuilder.language_placeholder.' . (int) $record->id); + } + return false; + } + + /** + * Method to test whether a record can have its state edited. + * + * @param object $record A record object. + * + * @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component. + * + * @since 1.6 + */ + protected function canEditState($record) + { + $user = JFactory::getUser(); + $recordId = (!empty($record->id)) ? $record->id : 0; + + if ($recordId) + { + // The record has been set. Check the record permissions. + $permission = $user->authorise('language_placeholder.edit.state', 'com_componentbuilder.language_placeholder.' . (int) $recordId); + if (!$permission && !is_null($permission)) + { + return false; + } + } + // In the absense of better information, revert to the component permissions. + return $user->authorise('language_placeholder.edit.state', 'com_componentbuilder'); + } + + /** + * Method override to check if you can edit an existing record. + * + * @param array $data An array of input data. + * @param string $key The name of the key for the primary key. + * + * @return boolean + * @since 2.5 + */ + protected function allowEdit($data = array(), $key = 'id') + { + // Check specific edit permission then general edit permission. + $user = JFactory::getUser(); + + return $user->authorise('language_placeholder.edit', 'com_componentbuilder.language_placeholder.'. ((int) isset($data[$key]) ? $data[$key] : 0)) or $user->authorise('language_placeholder.edit', 'com_componentbuilder'); + } + + /** + * Prepare and sanitise the table data prior to saving. + * + * @param JTable $table A JTable object. + * + * @return void + * + * @since 1.6 + */ + protected function prepareTable($table) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if (isset($table->name)) + { + $table->name = htmlspecialchars_decode($table->name, ENT_QUOTES); + } + + if (isset($table->alias) && empty($table->alias)) + { + $table->generateAlias(); + } + + if (empty($table->id)) + { + $table->created = $date->toSql(); + // set the user + if ($table->created_by == 0 || empty($table->created_by)) + { + $table->created_by = $user->id; + } + // Set ordering to the last item if not set + if (empty($table->ordering)) + { + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select('MAX(ordering)') + ->from($db->quoteName('#__componentbuilder_language_placeholder')); + $db->setQuery($query); + $max = $db->loadResult(); + + $table->ordering = $max + 1; + } + } + else + { + $table->modified = $date->toSql(); + $table->modified_by = $user->id; + } + + if (!empty($table->id)) + { + // Increment the items version number. + $table->version++; + } + } + + /** + * Method to get the data that should be injected in the form. + * + * @return mixed The data for the form. + * + * @since 1.6 + */ + protected function loadFormData() + { + // Check the session for previously entered form data. + $data = JFactory::getApplication()->getUserState('com_componentbuilder.edit.language_placeholder.data', array()); + + if (empty($data)) + { + $data = $this->getItem(); + } + + return $data; + } + + /** + * Method to get the unique fields of this table. + * + * @return mixed An array of field names, boolean false if none is set. + * + * @since 3.0 + */ + protected function getUniqeFields() + { + return false; + } + + /** + * Method to delete one or more records. + * + * @param array &$pks An array of record primary keys. + * + * @return boolean True if successful, false if an error occurs. + * + * @since 12.2 + */ + public function delete(&$pks) + { + if (!parent::delete($pks)) + { + return false; + } + + return true; + } + + /** + * Method to change the published state of one or more records. + * + * @param array &$pks A list of the primary keys to change. + * @param integer $value The value of the published state. + * + * @return boolean True on success. + * + * @since 12.2 + */ + public function publish(&$pks, $value = 1) + { + if (!parent::publish($pks, $value)) + { + return false; + } + + return true; + } + + /** + * Method to perform batch operations on an item or a set of items. + * + * @param array $commands An array of commands to perform. + * @param array $pks An array of item ids. + * @param array $contexts An array of item contexts. + * + * @return boolean Returns true on success, false on failure. + * + * @since 12.2 + */ + public function batch($commands, $pks, $contexts) + { + // Sanitize ids. + $pks = array_unique($pks); + JArrayHelper::toInteger($pks); + + // Remove any values of zero. + if (array_search(0, $pks, true)) + { + unset($pks[array_search(0, $pks, true)]); + } + + if (empty($pks)) + { + $this->setError(JText::_('JGLOBAL_NO_ITEM_SELECTED')); + return false; + } + + $done = false; + + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = ComponentbuilderHelper::getActions('language_placeholder'); + $this->batchSet = true; + + if (!$this->canDo->get('core.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + return false; + } + + if ($this->type == false) + { + $type = new JUcmType; + $this->type = $type->getTypeByAlias($this->typeAlias); + } + + $this->tagsObserver = $this->table->getObserverOfClass('JTableObserverTags'); + + if (!empty($commands['move_copy'])) + { + $cmd = JArrayHelper::getValue($commands, 'move_copy', 'c'); + + if ($cmd == 'c') + { + $result = $this->batchCopy($commands, $pks, $contexts); + + if (is_array($result)) + { + foreach ($result as $old => $new) + { + $contexts[$new] = $contexts[$old]; + } + $pks = array_values($result); + } + else + { + return false; + } + } + elseif ($cmd == 'm' && !$this->batchMove($commands, $pks, $contexts)) + { + return false; + } + + $done = true; + } + + if (!$done) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_INSUFFICIENT_BATCH_INFORMATION')); + + return false; + } + + // Clear the cache + $this->cleanCache(); + + return true; + } + + /** + * Batch copy items to a new category or current. + * + * @param integer $values The new values. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return mixed An array of new IDs on success, boolean false on failure. + * + * @since 12.2 + */ + protected function batchCopy($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = ComponentbuilderHelper::getActions('language_placeholder'); + } + + if (!$this->canDo->get('language_placeholder.create') && !$this->canDo->get('language_placeholder.batch')) + { + return false; + } + + // get list of uniqe fields + $uniqeFields = $this->getUniqeFields(); + // remove move_copy from array + unset($values['move_copy']); + + // make sure published is set + if (!isset($values['published'])) + { + $values['published'] = 0; + } + elseif (isset($values['published']) && !$this->canDo->get('language_placeholder.edit.state')) + { + $values['published'] = 0; + } + + $newIds = array(); + + // Parent exists so let's proceed + while (!empty($pks)) + { + // Pop the first ID off the stack + $pk = array_shift($pks); + + $this->table->reset(); + + // only allow copy if user may edit this item. + + if (!$this->user->authorise('language_placeholder.edit', $contexts[$pk])) + + { + + // Not fatal error + + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + + continue; + + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + $this->table->placeholder = $this->generateUniqe('placeholder',$this->table->placeholder); + + // insert all set values + if (ComponentbuilderHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + if (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + // update all uniqe fields + if (ComponentbuilderHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $this->table->$uniqeField = $this->generateUniqe($uniqeField,$this->table->$uniqeField); + } + } + + // Reset the ID because we are making a copy + $this->table->id = 0; + + // TODO: Deal with ordering? + // $this->table->ordering = 1; + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + + // Get the new item ID + $newId = $this->table->get('id'); + + // Add the new ID to the array + $newIds[$pk] = $newId; + } + + // Clean the cache + $this->cleanCache(); + + return $newIds; + } + + /** + * Batch move items to a new category + * + * @param integer $value The new category ID. + * @param array $pks An array of row IDs. + * @param array $contexts An array of item contexts. + * + * @return boolean True if successful, false otherwise and internal error is set. + * + * @since 12.2 + */ + protected function batchMove($values, $pks, $contexts) + { + if (empty($this->batchSet)) + { + // Set some needed variables. + $this->user = JFactory::getUser(); + $this->table = $this->getTable(); + $this->tableClassName = get_class($this->table); + $this->contentType = new JUcmType; + $this->type = $this->contentType->getTypeByTable($this->tableClassName); + $this->canDo = ComponentbuilderHelper::getActions('language_placeholder'); + } + + if (!$this->canDo->get('language_placeholder.edit') && !$this->canDo->get('language_placeholder.batch')) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + return false; + } + + // make sure published only updates if user has the permission. + if (isset($values['published']) && !$this->canDo->get('language_placeholder.edit.state')) + { + unset($values['published']); + } + // remove move_copy from array + unset($values['move_copy']); + + // Parent exists so we proceed + foreach ($pks as $pk) + { + if (!$this->user->authorise('language_placeholder.edit', $contexts[$pk])) + { + $this->setError(JText::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + + // Check that the row actually exists + if (!$this->table->load($pk)) + { + if ($error = $this->table->getError()) + { + // Fatal error + $this->setError($error); + + return false; + } + else + { + // Not fatal error + $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_BATCH_MOVE_ROW_NOT_FOUND', $pk)); + continue; + } + } + + // insert all set values. + if (ComponentbuilderHelper::checkArray($values)) + { + foreach ($values as $key => $value) + { + // Do special action for access. + if ('access' === $key && strlen($value) > 0) + { + $this->table->$key = $value; + } + elseif (strlen($value) > 0 && isset($this->table->$key)) + { + $this->table->$key = $value; + } + } + } + + + // Check the row. + if (!$this->table->check()) + { + $this->setError($this->table->getError()); + + return false; + } + + if (!empty($this->type)) + { + $this->createTagsHelper($this->tagsObserver, $this->type, $pk, $this->typeAlias, $this->table); + } + + // Store the row. + if (!$this->table->store()) + { + $this->setError($this->table->getError()); + + return false; + } + } + + // Clean the cache + $this->cleanCache(); + + return true; + } + + /** + * Method to save the form data. + * + * @param array $data The form data. + * + * @return boolean True on success. + * + * @since 1.6 + */ + public function save($data) + { + $input = JFactory::getApplication()->input; + $filter = JFilterInput::getInstance(); + + // set the metadata to the Item Data + if (isset($data['metadata']) && isset($data['metadata']['author'])) + { + $data['metadata']['author'] = $filter->clean($data['metadata']['author'], 'TRIM'); + + $metadata = new JRegistry; + $metadata->loadArray($data['metadata']); + $data['metadata'] = (string) $metadata; + } + + // Set the components string to JSON string. + if (isset($data['components'])) + { + $data['components'] = (string) json_encode($data['components']); + } + + // Set the Params Items to data + if (isset($data['params']) && is_array($data['params'])) + { + $params = new JRegistry; + $params->loadArray($data['params']); + $data['params'] = (string) $params; + } + + // Alter the uniqe field for save as copy + if ($input->get('task') === 'save2copy') + { + // Automatic handling of other uniqe fields + $uniqeFields = $this->getUniqeFields(); + if (ComponentbuilderHelper::checkArray($uniqeFields)) + { + foreach ($uniqeFields as $uniqeField) + { + $data[$uniqeField] = $this->generateUniqe($uniqeField,$data[$uniqeField]); + } + } + } + + if (parent::save($data)) + { + return true; + } + return false; + } + + /** + * Method to generate a uniqe value. + * + * @param string $field name. + * @param string $value data. + * + * @return string New value. + * + * @since 3.0 + */ + protected function generateUniqe($field,$value) + { + + // set field value uniqe + $table = $this->getTable(); + + while ($table->load(array($field => $value))) + { + $value = JString::increment($value); + } + + return $value; + } + + /** + * Method to change the title & alias. + * + * @param string $title The title. + * + * @return array Contains the modified title and alias. + * + */ + protected function _generateNewTitle($title) + { + + // Alter the title + $table = $this->getTable(); + + while ($table->load(array('title' => $title))) + { + $title = JString::increment($title); + } + + return $title; + } +} diff --git a/admin/models/language_placeholders.php b/admin/models/language_placeholders.php new file mode 100644 index 000000000..38a579882 --- /dev/null +++ b/admin/models/language_placeholders.php @@ -0,0 +1,376 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Language_placeholders Model + */ +class ComponentbuilderModelLanguage_placeholders extends JModelList +{ + public function __construct($config = array()) + { + if (empty($config['filter_fields'])) + { + $config['filter_fields'] = array( + 'a.id','id', + 'a.published','published', + 'a.ordering','ordering', + 'a.created_by','created_by', + 'a.modified_by','modified_by', + 'a.placeholder','placeholder' + ); + } + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * @return void + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + if ($layout = $app->input->get('layout')) + { + $this->context .= '.' . $layout; + } + $placeholder = $this->getUserStateFromRequest($this->context . '.filter.placeholder', 'filter_placeholder'); + $this->setState('filter.placeholder', $placeholder); + + $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); + $this->setState('filter.sorting', $sorting); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $created_by = $this->getUserStateFromRequest($this->context . '.filter.created_by', 'filter_created_by', ''); + $this->setState('filter.created_by', $created_by); + + $created = $this->getUserStateFromRequest($this->context . '.filter.created', 'filter_created'); + $this->setState('filter.created', $created); + + // List state information. + parent::populateState($ordering, $direction); + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + // check in items + $this->checkInNow(); + + // load parent items + $items = parent::getItems(); + + // set values to display correctly. + if (ComponentbuilderHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('language_placeholder.access', 'com_componentbuilder.language_placeholder.' . (int) $item->id) && $user->authorise('language_placeholder.access', 'com_componentbuilder')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // convert components + $item->components = ComponentbuilderHelper::jsonToString($item->components, ', ', 'components'); + } + } + + // return items + return $items; + } + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the componentbuilder_item table + $query->from($db->quoteName('#__componentbuilder_language_placeholder', 'a')); + + // From the componentbuilder_joomla_component table. + $query->select($db->quoteName('g.system_name','components_system_name')); + $query->join('LEFT', $db->quoteName('#__componentbuilder_joomla_component', 'g') . ' ON (' . $db->quoteName('a.components') . ' = ' . $db->quoteName('g.id') . ')'); + + // Filter by published state + $published = $this->getState('filter.published'); + if (is_numeric($published)) + { + $query->where('a.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(a.published = 0 OR a.published = 1)'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_componentbuilder')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + // Filter by search. + $search = $this->getState('filter.search'); + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('a.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.placeholder LIKE '.$search.' OR a.components LIKE '.$search.' OR g.system_name LIKE '.$search.')'); + } + } + + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'a.id'); + $orderDirn = $this->state->get('list.direction', 'asc'); + if ($orderCol != '') + { + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + } + + return $query; + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExportData($pks) + { + // setup the query + if (ComponentbuilderHelper::checkArray($pks)) + { + // Set a value to know this is exporting method. + $_export = true; + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the componentbuilder_language_placeholder table + $query->from($db->quoteName('#__componentbuilder_language_placeholder', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + // Implement View Level Access + if (!$user->authorise('core.options', 'com_componentbuilder')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (ComponentbuilderHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('language_placeholder.access', 'com_componentbuilder.language_placeholder.' . (int) $item->id) && $user->authorise('language_placeholder.access', 'com_componentbuilder')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // unset the values we don't want exported. + unset($item->asset_id); + unset($item->checked_out); + unset($item->checked_out_time); + } + } + // Add headers to items array. + $headers = $this->getExImPortHeaders(); + if (ComponentbuilderHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + return $items; + } + } + return false; + } + + /** + * Method to get header. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExImPortHeaders() + { + // Get a db connection. + $db = JFactory::getDbo(); + // get the columns + $columns = $db->getTableColumns("#__componentbuilder_language_placeholder"); + if (ComponentbuilderHelper::checkArray($columns)) + { + // remove the headers you don't import/export. + unset($columns['asset_id']); + unset($columns['checked_out']); + unset($columns['checked_out_time']); + $headers = new stdClass(); + foreach ($columns as $column => $type) + { + $headers->{$column} = $column; + } + return $headers; + } + return false; + } + + /** + * Method to get a store id based on model configuration state. + * + * @return string A store id. + * + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.id'); + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.ordering'); + $id .= ':' . $this->getState('filter.created_by'); + $id .= ':' . $this->getState('filter.modified_by'); + $id .= ':' . $this->getState('filter.placeholder'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to checkin all items left checked out longer then a set time. + * + * @return a bool + * + */ + protected function checkInNow() + { + // Get set check in time + $time = JComponentHelper::getParams('com_componentbuilder')->get('check_in'); + + if ($time) + { + + // Get a db connection. + $db = JFactory::getDbo(); + // reset query + $query = $db->getQuery(true); + $query->select('*'); + $query->from($db->quoteName('#__componentbuilder_language_placeholder')); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + // Get Yesterdays date + $date = JFactory::getDate()->modify($time)->toSql(); + // reset query + $query = $db->getQuery(true); + + // Fields to update. + $fields = array( + $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', + $db->quoteName('checked_out') . '=0' + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->quoteName('checked_out') . '!=0', + $db->quoteName('checked_out_time') . '<\''.$date.'\'' + ); + + // Check table + $query->update($db->quoteName('#__componentbuilder_language_placeholder'))->set($fields)->where($conditions); + + $db->setQuery($query); + + $db->execute(); + } + } + + return false; + } +} diff --git a/admin/models/languages.php b/admin/models/languages.php new file mode 100644 index 000000000..8bcf570cc --- /dev/null +++ b/admin/models/languages.php @@ -0,0 +1,375 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import the Joomla modellist library +jimport('joomla.application.component.modellist'); + +/** + * Languages Model + */ +class ComponentbuilderModelLanguages extends JModelList +{ + public function __construct($config = array()) + { + if (empty($config['filter_fields'])) + { + $config['filter_fields'] = array( + 'a.id','id', + 'a.published','published', + 'a.ordering','ordering', + 'a.created_by','created_by', + 'a.modified_by','modified_by', + 'a.name','name', + 'a.langtag','langtag' + ); + } + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * @return void + */ + protected function populateState($ordering = null, $direction = null) + { + $app = JFactory::getApplication(); + + // Adjust the context to support modal layouts. + if ($layout = $app->input->get('layout')) + { + $this->context .= '.' . $layout; + } + $name = $this->getUserStateFromRequest($this->context . '.filter.name', 'filter_name'); + $this->setState('filter.name', $name); + + $langtag = $this->getUserStateFromRequest($this->context . '.filter.langtag', 'filter_langtag'); + $this->setState('filter.langtag', $langtag); + + $sorting = $this->getUserStateFromRequest($this->context . '.filter.sorting', 'filter_sorting', 0, 'int'); + $this->setState('filter.sorting', $sorting); + + $access = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', 0, 'int'); + $this->setState('filter.access', $access); + + $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $published = $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', ''); + $this->setState('filter.published', $published); + + $created_by = $this->getUserStateFromRequest($this->context . '.filter.created_by', 'filter_created_by', ''); + $this->setState('filter.created_by', $created_by); + + $created = $this->getUserStateFromRequest($this->context . '.filter.created', 'filter_created'); + $this->setState('filter.created', $created); + + // List state information. + parent::populateState($ordering, $direction); + } + + /** + * Method to get an array of data items. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getItems() + { + // check in items + $this->checkInNow(); + + // load parent items + $items = parent::getItems(); + + // set values to display correctly. + if (ComponentbuilderHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('language.access', 'com_componentbuilder.language.' . (int) $item->id) && $user->authorise('language.access', 'com_componentbuilder')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + } + } + + // return items + return $items; + } + + /** + * Method to build an SQL query to load the list data. + * + * @return string An SQL query + */ + protected function getListQuery() + { + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the componentbuilder_item table + $query->from($db->quoteName('#__componentbuilder_language', 'a')); + + // Filter by published state + $published = $this->getState('filter.published'); + if (is_numeric($published)) + { + $query->where('a.published = ' . (int) $published); + } + elseif ($published === '') + { + $query->where('(a.published = 0 OR a.published = 1)'); + } + + // Join over the asset groups. + $query->select('ag.title AS access_level'); + $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + // Filter by access level. + if ($access = $this->getState('filter.access')) + { + $query->where('a.access = ' . (int) $access); + } + // Implement View Level Access + if (!$user->authorise('core.options', 'com_componentbuilder')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + // Filter by search. + $search = $this->getState('filter.search'); + if (!empty($search)) + { + if (stripos($search, 'id:') === 0) + { + $query->where('a.id = ' . (int) substr($search, 3)); + } + else + { + $search = $db->quote('%' . $db->escape($search) . '%'); + $query->where('(a.name LIKE '.$search.' OR a.langtag LIKE '.$search.')'); + } + } + + + // Add the list ordering clause. + $orderCol = $this->state->get('list.ordering', 'a.id'); + $orderDirn = $this->state->get('list.direction', 'asc'); + if ($orderCol != '') + { + $query->order($db->escape($orderCol . ' ' . $orderDirn)); + } + + return $query; + } + + /** + * Method to get list export data. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExportData($pks) + { + // setup the query + if (ComponentbuilderHelper::checkArray($pks)) + { + // Set a value to know this is exporting method. + $_export = true; + // Get the user object. + $user = JFactory::getUser(); + // Create a new query object. + $db = JFactory::getDBO(); + $query = $db->getQuery(true); + + // Select some fields + $query->select('a.*'); + + // From the componentbuilder_language table + $query->from($db->quoteName('#__componentbuilder_language', 'a')); + $query->where('a.id IN (' . implode(',',$pks) . ')'); + // Implement View Level Access + if (!$user->authorise('core.options', 'com_componentbuilder')) + { + $groups = implode(',', $user->getAuthorisedViewLevels()); + $query->where('a.access IN (' . $groups . ')'); + } + + // Order the results by ordering + $query->order('a.ordering ASC'); + + // Load the items + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + $items = $db->loadObjectList(); + + // set values to display correctly. + if (ComponentbuilderHelper::checkArray($items)) + { + // get user object. + $user = JFactory::getUser(); + foreach ($items as $nr => &$item) + { + $access = ($user->authorise('language.access', 'com_componentbuilder.language.' . (int) $item->id) && $user->authorise('language.access', 'com_componentbuilder')); + if (!$access) + { + unset($items[$nr]); + continue; + } + + // unset the values we don't want exported. + unset($item->asset_id); + unset($item->checked_out); + unset($item->checked_out_time); + } + } + // Add headers to items array. + $headers = $this->getExImPortHeaders(); + if (ComponentbuilderHelper::checkObject($headers)) + { + array_unshift($items,$headers); + } + return $items; + } + } + return false; + } + + /** + * Method to get header. + * + * @return mixed An array of data items on success, false on failure. + */ + public function getExImPortHeaders() + { + // Get a db connection. + $db = JFactory::getDbo(); + // get the columns + $columns = $db->getTableColumns("#__componentbuilder_language"); + if (ComponentbuilderHelper::checkArray($columns)) + { + // remove the headers you don't import/export. + unset($columns['asset_id']); + unset($columns['checked_out']); + unset($columns['checked_out_time']); + $headers = new stdClass(); + foreach ($columns as $column => $type) + { + $headers->{$column} = $column; + } + return $headers; + } + return false; + } + + /** + * Method to get a store id based on model configuration state. + * + * @return string A store id. + * + */ + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.id'); + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.published'); + $id .= ':' . $this->getState('filter.ordering'); + $id .= ':' . $this->getState('filter.created_by'); + $id .= ':' . $this->getState('filter.modified_by'); + $id .= ':' . $this->getState('filter.name'); + $id .= ':' . $this->getState('filter.langtag'); + + return parent::getStoreId($id); + } + + /** + * Build an SQL query to checkin all items left checked out longer then a set time. + * + * @return a bool + * + */ + protected function checkInNow() + { + // Get set check in time + $time = JComponentHelper::getParams('com_componentbuilder')->get('check_in'); + + if ($time) + { + + // Get a db connection. + $db = JFactory::getDbo(); + // reset query + $query = $db->getQuery(true); + $query->select('*'); + $query->from($db->quoteName('#__componentbuilder_language')); + $db->setQuery($query); + $db->execute(); + if ($db->getNumRows()) + { + // Get Yesterdays date + $date = JFactory::getDate()->modify($time)->toSql(); + // reset query + $query = $db->getQuery(true); + + // Fields to update. + $fields = array( + $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', + $db->quoteName('checked_out') . '=0' + ); + + // Conditions for which records should be updated. + $conditions = array( + $db->quoteName('checked_out') . '!=0', + $db->quoteName('checked_out_time') . '<\''.$date.'\'' + ); + + // Check table + $query->update($db->quoteName('#__componentbuilder_language'))->set($fields)->where($conditions); + + $db->setQuery($query); + + $db->execute(); + } + } + + return false; + } +} diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index 2de984f8a..c81eb1db0 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -683,6 +683,58 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_fieldtype` ( KEY `idx_catid` (`catid`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; +CREATE TABLE IF NOT EXISTS `#__componentbuilder_language_placeholder` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `components` TEXT NOT NULL, + `placeholder` TEXT NOT NULL, + `translation` TEXT NOT NULL, + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__componentbuilder_language` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `langtag` VARCHAR(64) NOT NULL DEFAULT '', + `name` VARCHAR(255) NOT NULL DEFAULT '', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + CREATE TABLE IF NOT EXISTS `#__componentbuilder_help_document` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', diff --git a/admin/sql/uninstall.mysql.utf8.sql b/admin/sql/uninstall.mysql.utf8.sql index 45da17ee2..fcddac080 100644 --- a/admin/sql/uninstall.mysql.utf8.sql +++ b/admin/sql/uninstall.mysql.utf8.sql @@ -9,4 +9,6 @@ DROP TABLE IF EXISTS `#__componentbuilder_custom_code`; DROP TABLE IF EXISTS `#__componentbuilder_snippet`; DROP TABLE IF EXISTS `#__componentbuilder_field`; DROP TABLE IF EXISTS `#__componentbuilder_fieldtype`; +DROP TABLE IF EXISTS `#__componentbuilder_language_placeholder`; +DROP TABLE IF EXISTS `#__componentbuilder_language`; DROP TABLE IF EXISTS `#__componentbuilder_help_document`; diff --git a/admin/sql/updates/mysql/2.4.1.sql b/admin/sql/updates/mysql/2.4.1.sql new file mode 100644 index 000000000..a4a9eb87d --- /dev/null +++ b/admin/sql/updates/mysql/2.4.1.sql @@ -0,0 +1,51 @@ +CREATE TABLE IF NOT EXISTS `#__componentbuilder_language_placeholder` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `components` TEXT NOT NULL, + `placeholder` TEXT NOT NULL, + `translation` TEXT NOT NULL, + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `#__componentbuilder_language` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', + `langtag` VARCHAR(64) NOT NULL DEFAULT '', + `name` VARCHAR(255) NOT NULL DEFAULT '', + `params` text NOT NULL DEFAULT '', + `published` TINYINT(3) NOT NULL DEFAULT 1, + `created_by` INT(10) unsigned NOT NULL DEFAULT 0, + `modified_by` INT(10) unsigned NOT NULL DEFAULT 0, + `created` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `checked_out` int(11) unsigned NOT NULL DEFAULT 0, + `checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00', + `version` INT(10) unsigned NOT NULL DEFAULT 1, + `hits` INT(10) unsigned NOT NULL DEFAULT 0, + `access` INT(10) unsigned NOT NULL DEFAULT 0, + `ordering` INT(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_checkout` (`checked_out`), + KEY `idx_createdby` (`created_by`), + KEY `idx_modifiedby` (`modified_by`), + KEY `idx_state` (`published`), + KEY `idx_name` (`name`) +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; diff --git a/admin/tables/help_document.php b/admin/tables/help_document.php index 45217b177..5c4b29858 100644 --- a/admin/tables/help_document.php +++ b/admin/tables/help_document.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage help_document.php diff --git a/admin/tables/language.php b/admin/tables/language.php new file mode 100644 index 000000000..57370ff8c --- /dev/null +++ b/admin/tables/language.php @@ -0,0 +1,351 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla table library +jimport('joomla.database.table'); + +/** + * Languages Table class + */ +class ComponentbuilderTableLanguage extends JTable +{ + /** + * Ensure the params and metadata in json encoded in the bind method + * + * @var array + * @since 3.3 + */ + protected $_jsonEncode = array('params', 'metadata'); + + /** + * Constructor + * + * @param object Database connector object + */ + function __construct(&$db) + { + parent::__construct('#__componentbuilder_language', 'id', $db); + + // Adding History Options + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_componentbuilder.language')); + } + + public function bind($array, $ignore = '') + { + + if (isset($array['params']) && is_array($array['params'])) + { + $registry = new JRegistry; + $registry->loadArray($array['params']); + $array['params'] = (string) $registry; + } + + if (isset($array['metadata']) && is_array($array['metadata'])) + { + $registry = new JRegistry; + $registry->loadArray($array['metadata']); + $array['metadata'] = (string) $registry; + } + + // Bind the rules. + if (isset($array['rules']) && is_array($array['rules'])) + { + $rules = new JAccessRules($array['rules']); + $this->setRules($rules); + } + return parent::bind($array, $ignore); + } + + /** + * Overload the store method for the Language table. + * + * @param boolean Toggle whether null values should be updated. + * @return boolean True on success, false on failure. + * @since 1.6 + */ + public function store($updateNulls = false) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if ($this->id) + { + // Existing item + $this->modified = $date->toSql(); + $this->modified_by = $user->get('id'); + } + else + { + // New language. A language created and created_by field can be set by the user, + // so we don't touch either of these if they are set. + if (!(int) $this->created) + { + $this->created = $date->toSql(); + } + if (empty($this->created_by)) + { + $this->created_by = $user->get('id'); + } + } + + if (isset($this->alias)) + { + // Verify that the alias is unique + $table = JTable::getInstance('language', 'ComponentbuilderTable'); + + if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->setError(JText::_('COM_COMPONENTBUILDER_LANGUAGE_ERROR_UNIQUE_ALIAS')); + return false; + } + } + + if (isset($this->url)) + { + // Convert IDN urls to punycode + $this->url = JStringPunycode::urlToPunycode($this->url); + } + if (isset($this->website)) + { + // Convert IDN urls to punycode + $this->website = JStringPunycode::urlToPunycode($this->website); + } + + return parent::store($updateNulls); + } + + /** + * Overloaded check method to ensure data integrity. + * + * @return boolean True on success. + */ + public function check() + { + if (isset($this->alias)) + { + // Generate a valid alias + $this->generateAlias(); + + $table = JTable::getInstance('language', 'componentbuilderTable'); + + while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->alias = JString::increment($this->alias, 'dash'); + } + } + + /* + * Clean up keywords -- eliminate extra spaces between phrases + * and cr (\r) and lf (\n) characters from string. + * Only process if not empty. + */ + if (!empty($this->metakey)) + { + // Array of characters to remove. + $bad_characters = array("\n", "\r", "\"", "<", ">"); + + // Remove bad characters. + $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); + + // Create array using commas as delimiter. + $keys = explode(',', $after_clean); + $clean_keys = array(); + + foreach ($keys as $key) + { + // Ignore blank keywords. + if (trim($key)) + { + $clean_keys[] = trim($key); + } + } + + // Put array back together delimited by ", " + $this->metakey = implode(", ", $clean_keys); + } + + // Clean up description -- eliminate quotes and <> brackets + if (!empty($this->metadesc)) + { + // Only process if not empty + $bad_characters = array("\"", "<", ">"); + $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); + } + + // If we don't have any access rules set at this point just use an empty JAccessRules class + if (!$this->getRules()) + { + $rules = $this->getDefaultAssetValues('com_componentbuilder.language.'.$this->id); + $this->setRules($rules); + } + + // Set ordering + if ($this->published < 0) + { + // Set ordering to 0 if state is archived or trashed + $this->ordering = 0; + } + + return true; + } + + /** + * Gets the default asset values for a component. + * + * @param $string $component The component asset name to search for + * + * @return JAccessRules The JAccessRules object for the asset + */ + protected function getDefaultAssetValues($component, $try = true) + { + // Need to find the asset id by the name of the component. + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__assets')) + ->where($db->quoteName('name') . ' = ' . $db->quote($component)); + $db->setQuery($query); + $db->execute(); + if ($db->loadRowList()) + { + // asset alread set so use saved rules + $assetId = (int) $db->loadResult(); + return JAccess::getAssetRules($assetId); + } + // try again + elseif ($try) + { + $try = explode('.',$component); + $result = $this->getDefaultAssetValues($try[0], false); + if ($result instanceof JAccessRules) + { + if (isset($try[1])) + { + $_result = (string) $result; + $_result = json_decode($_result); + foreach ($_result as $name => &$rule) + { + $v = explode('.', $name); + if ($try[1] !== $v[0]) + { + // remove since it is not part of this view + unset($_result->$name); + } + else + { + // clear the value since we inherit + $rule = array(); + } + } + // check if there are any view values remaining + if (count($_result)) + { + $_result = json_encode($_result); + $_result = array($_result); + // Instantiate and return the JAccessRules object for the asset rules. + $rules = new JAccessRules; + $rules->mergeCollection($_result); + + return $rules; + } + } + return $result; + } + } + return JAccess::getAssetRules(0); + } + + /** + * Method to compute the default name of the asset. + * The default name is in the form 'table_name.id' + * where id is the value of the primary key of the table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetName() + { + $k = $this->_tbl_key; + return 'com_componentbuilder.language.'.(int) $this->$k; + } + + /** + * Method to return the title to use for the asset table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetTitle() + { + if (isset($this->title)) + { + return $this->title; + } + return ''; + } + + /** + * Get the parent asset id for the record + * + * @return int + * @since 2.5 + */ + protected function _getAssetParentId(JTable $table = NULL, $id = NULL) + { + $asset = JTable::getInstance('Asset'); + $asset->loadByName('com_componentbuilder'); + + return $asset->id; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); + } + + return $this->alias; + } + +} diff --git a/admin/tables/language_placeholder.php b/admin/tables/language_placeholder.php new file mode 100644 index 000000000..7390e2769 --- /dev/null +++ b/admin/tables/language_placeholder.php @@ -0,0 +1,351 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +// import Joomla table library +jimport('joomla.database.table'); + +/** + * Language_placeholders Table class + */ +class ComponentbuilderTableLanguage_placeholder extends JTable +{ + /** + * Ensure the params and metadata in json encoded in the bind method + * + * @var array + * @since 3.3 + */ + protected $_jsonEncode = array('params', 'metadata'); + + /** + * Constructor + * + * @param object Database connector object + */ + function __construct(&$db) + { + parent::__construct('#__componentbuilder_language_placeholder', 'id', $db); + + // Adding History Options + JTableObserverContenthistory::createObserver($this, array('typeAlias' => 'com_componentbuilder.language_placeholder')); + } + + public function bind($array, $ignore = '') + { + + if (isset($array['params']) && is_array($array['params'])) + { + $registry = new JRegistry; + $registry->loadArray($array['params']); + $array['params'] = (string) $registry; + } + + if (isset($array['metadata']) && is_array($array['metadata'])) + { + $registry = new JRegistry; + $registry->loadArray($array['metadata']); + $array['metadata'] = (string) $registry; + } + + // Bind the rules. + if (isset($array['rules']) && is_array($array['rules'])) + { + $rules = new JAccessRules($array['rules']); + $this->setRules($rules); + } + return parent::bind($array, $ignore); + } + + /** + * Overload the store method for the Language_placeholder table. + * + * @param boolean Toggle whether null values should be updated. + * @return boolean True on success, false on failure. + * @since 1.6 + */ + public function store($updateNulls = false) + { + $date = JFactory::getDate(); + $user = JFactory::getUser(); + + if ($this->id) + { + // Existing item + $this->modified = $date->toSql(); + $this->modified_by = $user->get('id'); + } + else + { + // New language_placeholder. A language_placeholder created and created_by field can be set by the user, + // so we don't touch either of these if they are set. + if (!(int) $this->created) + { + $this->created = $date->toSql(); + } + if (empty($this->created_by)) + { + $this->created_by = $user->get('id'); + } + } + + if (isset($this->alias)) + { + // Verify that the alias is unique + $table = JTable::getInstance('language_placeholder', 'ComponentbuilderTable'); + + if ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->setError(JText::_('COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_ERROR_UNIQUE_ALIAS')); + return false; + } + } + + if (isset($this->url)) + { + // Convert IDN urls to punycode + $this->url = JStringPunycode::urlToPunycode($this->url); + } + if (isset($this->website)) + { + // Convert IDN urls to punycode + $this->website = JStringPunycode::urlToPunycode($this->website); + } + + return parent::store($updateNulls); + } + + /** + * Overloaded check method to ensure data integrity. + * + * @return boolean True on success. + */ + public function check() + { + if (isset($this->alias)) + { + // Generate a valid alias + $this->generateAlias(); + + $table = JTable::getInstance('language_placeholder', 'componentbuilderTable'); + + while ($table->load(array('alias' => $this->alias)) && ($table->id != $this->id || $this->id == 0)) + { + $this->alias = JString::increment($this->alias, 'dash'); + } + } + + /* + * Clean up keywords -- eliminate extra spaces between phrases + * and cr (\r) and lf (\n) characters from string. + * Only process if not empty. + */ + if (!empty($this->metakey)) + { + // Array of characters to remove. + $bad_characters = array("\n", "\r", "\"", "<", ">"); + + // Remove bad characters. + $after_clean = JString::str_ireplace($bad_characters, "", $this->metakey); + + // Create array using commas as delimiter. + $keys = explode(',', $after_clean); + $clean_keys = array(); + + foreach ($keys as $key) + { + // Ignore blank keywords. + if (trim($key)) + { + $clean_keys[] = trim($key); + } + } + + // Put array back together delimited by ", " + $this->metakey = implode(", ", $clean_keys); + } + + // Clean up description -- eliminate quotes and <> brackets + if (!empty($this->metadesc)) + { + // Only process if not empty + $bad_characters = array("\"", "<", ">"); + $this->metadesc = JString::str_ireplace($bad_characters, "", $this->metadesc); + } + + // If we don't have any access rules set at this point just use an empty JAccessRules class + if (!$this->getRules()) + { + $rules = $this->getDefaultAssetValues('com_componentbuilder.language_placeholder.'.$this->id); + $this->setRules($rules); + } + + // Set ordering + if ($this->published < 0) + { + // Set ordering to 0 if state is archived or trashed + $this->ordering = 0; + } + + return true; + } + + /** + * Gets the default asset values for a component. + * + * @param $string $component The component asset name to search for + * + * @return JAccessRules The JAccessRules object for the asset + */ + protected function getDefaultAssetValues($component, $try = true) + { + // Need to find the asset id by the name of the component. + $db = JFactory::getDbo(); + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__assets')) + ->where($db->quoteName('name') . ' = ' . $db->quote($component)); + $db->setQuery($query); + $db->execute(); + if ($db->loadRowList()) + { + // asset alread set so use saved rules + $assetId = (int) $db->loadResult(); + return JAccess::getAssetRules($assetId); + } + // try again + elseif ($try) + { + $try = explode('.',$component); + $result = $this->getDefaultAssetValues($try[0], false); + if ($result instanceof JAccessRules) + { + if (isset($try[1])) + { + $_result = (string) $result; + $_result = json_decode($_result); + foreach ($_result as $name => &$rule) + { + $v = explode('.', $name); + if ($try[1] !== $v[0]) + { + // remove since it is not part of this view + unset($_result->$name); + } + else + { + // clear the value since we inherit + $rule = array(); + } + } + // check if there are any view values remaining + if (count($_result)) + { + $_result = json_encode($_result); + $_result = array($_result); + // Instantiate and return the JAccessRules object for the asset rules. + $rules = new JAccessRules; + $rules->mergeCollection($_result); + + return $rules; + } + } + return $result; + } + } + return JAccess::getAssetRules(0); + } + + /** + * Method to compute the default name of the asset. + * The default name is in the form 'table_name.id' + * where id is the value of the primary key of the table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetName() + { + $k = $this->_tbl_key; + return 'com_componentbuilder.language_placeholder.'.(int) $this->$k; + } + + /** + * Method to return the title to use for the asset table. + * + * @return string + * @since 2.5 + */ + protected function _getAssetTitle() + { + if (isset($this->title)) + { + return $this->title; + } + return ''; + } + + /** + * Get the parent asset id for the record + * + * @return int + * @since 2.5 + */ + protected function _getAssetParentId(JTable $table = NULL, $id = NULL) + { + $asset = JTable::getInstance('Asset'); + $asset->loadByName('com_componentbuilder'); + + return $asset->id; + } + + /** + * Generate a valid alias from title / date. + * Remains public to be able to check for duplicated alias before saving + * + * @return string + */ + public function generateAlias() + { + if (empty($this->alias)) + { + $this->alias = $this->name; + } + + $this->alias = JApplication::stringURLSafe($this->alias); + + if (trim(str_replace('-', '', $this->alias)) == '') + { + $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); + } + + return $this->alias; + } + +} diff --git a/admin/views/componentbuilder/tmpl/default.php b/admin/views/componentbuilder/tmpl/default.php index 569e21abb..d7c8b9dfd 100644 --- a/admin/views/componentbuilder/tmpl/default.php +++ b/admin/views/componentbuilder/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/componentbuilder/tmpl/default_closed_issues_the_closed_issues_on_github.php b/admin/views/componentbuilder/tmpl/default_closed_issues_the_closed_issues_on_github.php index 37820dc7e..bb328c9b2 100644 --- a/admin/views/componentbuilder/tmpl/default_closed_issues_the_closed_issues_on_github.php +++ b/admin/views/componentbuilder/tmpl/default_closed_issues_the_closed_issues_on_github.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default_closed_issues_the_closed_issues_on_github.php diff --git a/admin/views/componentbuilder/tmpl/default_main.php b/admin/views/componentbuilder/tmpl/default_main.php index 4e4587f64..a58ff88ac 100644 --- a/admin/views/componentbuilder/tmpl/default_main.php +++ b/admin/views/componentbuilder/tmpl/default_main.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default_main.php diff --git a/admin/views/componentbuilder/tmpl/default_open_issues_the_open_issues_on_github.php b/admin/views/componentbuilder/tmpl/default_open_issues_the_open_issues_on_github.php index b484eb23b..2960466ac 100644 --- a/admin/views/componentbuilder/tmpl/default_open_issues_the_open_issues_on_github.php +++ b/admin/views/componentbuilder/tmpl/default_open_issues_the_open_issues_on_github.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default_open_issues_the_open_issues_on_github.php diff --git a/admin/views/componentbuilder/tmpl/default_readme_information.php b/admin/views/componentbuilder/tmpl/default_readme_information.php index e192bff73..e0bea9c3f 100644 --- a/admin/views/componentbuilder/tmpl/default_readme_information.php +++ b/admin/views/componentbuilder/tmpl/default_readme_information.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default_readme_information.php diff --git a/admin/views/componentbuilder/tmpl/default_vast_development_method_notice_board.php b/admin/views/componentbuilder/tmpl/default_vast_development_method_notice_board.php index 1bd34d2e0..6cf0d068b 100644 --- a/admin/views/componentbuilder/tmpl/default_vast_development_method_notice_board.php +++ b/admin/views/componentbuilder/tmpl/default_vast_development_method_notice_board.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default_vast_development_method_notice_board.php diff --git a/admin/views/componentbuilder/tmpl/default_vdm.php b/admin/views/componentbuilder/tmpl/default_vdm.php index 68f43c122..1d7c793eb 100644 --- a/admin/views/componentbuilder/tmpl/default_vdm.php +++ b/admin/views/componentbuilder/tmpl/default_vdm.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default_vdm.php diff --git a/admin/views/componentbuilder/view.html.php b/admin/views/componentbuilder/view.html.php index 08a977d20..44a925089 100644 --- a/admin/views/componentbuilder/view.html.php +++ b/admin/views/componentbuilder/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/help_document/submitbutton.js b/admin/views/help_document/submitbutton.js index b8f8f0aac..43fc878f4 100644 --- a/admin/views/help_document/submitbutton.js +++ b/admin/views/help_document/submitbutton.js @@ -10,7 +10,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage submitbutton.js diff --git a/admin/views/help_document/tmpl/edit.php b/admin/views/help_document/tmpl/edit.php index 1e348ee3a..2420cfa5e 100644 --- a/admin/views/help_document/tmpl/edit.php +++ b/admin/views/help_document/tmpl/edit.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage edit.php diff --git a/admin/views/help_document/view.html.php b/admin/views/help_document/view.html.php index 950cf867f..914ed2364 100644 --- a/admin/views/help_document/view.html.php +++ b/admin/views/help_document/view.html.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage view.html.php diff --git a/admin/views/help_documents/tmpl/default.php b/admin/views/help_documents/tmpl/default.php index bd97385a4..c475a4f25 100644 --- a/admin/views/help_documents/tmpl/default.php +++ b/admin/views/help_documents/tmpl/default.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default.php diff --git a/admin/views/help_documents/tmpl/default_batch_body.php b/admin/views/help_documents/tmpl/default_batch_body.php index 1b6e9f603..6ae140a23 100644 --- a/admin/views/help_documents/tmpl/default_batch_body.php +++ b/admin/views/help_documents/tmpl/default_batch_body.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default_batch_body.php diff --git a/admin/views/help_documents/tmpl/default_batch_footer.php b/admin/views/help_documents/tmpl/default_batch_footer.php index 2d658233d..b17000070 100644 --- a/admin/views/help_documents/tmpl/default_batch_footer.php +++ b/admin/views/help_documents/tmpl/default_batch_footer.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default_batch_footer.php diff --git a/admin/views/help_documents/tmpl/default_body.php b/admin/views/help_documents/tmpl/default_body.php index dd59f6adb..17d8d6021 100644 --- a/admin/views/help_documents/tmpl/default_body.php +++ b/admin/views/help_documents/tmpl/default_body.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default_body.php diff --git a/admin/views/help_documents/tmpl/default_foot.php b/admin/views/help_documents/tmpl/default_foot.php index a034d0cc4..6930ef269 100644 --- a/admin/views/help_documents/tmpl/default_foot.php +++ b/admin/views/help_documents/tmpl/default_foot.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default_foot.php diff --git a/admin/views/help_documents/tmpl/default_head.php b/admin/views/help_documents/tmpl/default_head.php index 5b22f3a96..307cb65f0 100644 --- a/admin/views/help_documents/tmpl/default_head.php +++ b/admin/views/help_documents/tmpl/default_head.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default_head.php diff --git a/admin/views/help_documents/tmpl/default_toolbar.php b/admin/views/help_documents/tmpl/default_toolbar.php index 9223cd26b..8aa3d9a9a 100644 --- a/admin/views/help_documents/tmpl/default_toolbar.php +++ b/admin/views/help_documents/tmpl/default_toolbar.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage default_toolbar.php diff --git a/admin/views/help_documents/view.html.php b/admin/views/help_documents/view.html.php index c719328be..786c28036 100644 --- a/admin/views/help_documents/view.html.php +++ b/admin/views/help_documents/view.html.php @@ -11,7 +11,7 @@ /-------------------------------------------------------------------------------------------------------------------------------/ @version @update number 6 of this MVC - @build 17th October, 2016 + @build 18th October, 2016 @created 4th March, 2016 @package Component Builder @subpackage view.html.php diff --git a/admin/views/import/tmpl/default.php b/admin/views/import/tmpl/default.php index 796e153da..059076e23 100644 --- a/admin/views/import/tmpl/default.php +++ b/admin/views/import/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/import/view.html.php b/admin/views/import/view.html.php index be6012f12..1d633b2cb 100644 --- a/admin/views/import/view.html.php +++ b/admin/views/import/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/import_joomla_components/tmpl/default.php b/admin/views/import_joomla_components/tmpl/default.php index 908ea3c6b..1a4e1c410 100644 --- a/admin/views/import_joomla_components/tmpl/default.php +++ b/admin/views/import_joomla_components/tmpl/default.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage default.php diff --git a/admin/views/import_joomla_components/view.html.php b/admin/views/import_joomla_components/view.html.php index 1ad378fe1..e21b2aa59 100644 --- a/admin/views/import_joomla_components/view.html.php +++ b/admin/views/import_joomla_components/view.html.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage view.html.php diff --git a/admin/views/language/submitbutton.js b/admin/views/language/submitbutton.js new file mode 100644 index 000000000..55d835eb0 --- /dev/null +++ b/admin/views/language/submitbutton.js @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 3 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage submitbutton.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +Joomla.submitbutton = function(task) +{ + if (task == ''){ + return false; + } else { + var isValid=true; + var action = task.split('.'); + if (action[1] != 'cancel' && action[1] != 'close'){ + var forms = $$('form.form-validate'); + for (var i=0;i + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.formvalidation'); +JHtml::_('formbehavior.chosen', 'select'); +JHtml::_('behavior.keepalive'); +$componentParams = JComponentHelper::getParams('com_componentbuilder'); +?> + + diff --git a/admin/views/language/tmpl/index.html b/admin/views/language/tmpl/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/views/language/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/language/view.html.php b/admin/views/language/view.html.php new file mode 100644 index 000000000..374949377 --- /dev/null +++ b/admin/views/language/view.html.php @@ -0,0 +1,200 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Language View class + */ +class ComponentbuilderViewLanguage extends JViewLegacy +{ + /** + * display method of View + * @return void + */ + public function display($tpl = null) + { + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + JError::raiseError(500, implode('
', $errors)); + return false; + } + + // Assign the variables + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = ComponentbuilderHelper::getActions('language',$this->item); + // get input + $jinput = JFactory::getApplication()->input; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; + if ($this->refid) + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } + + // Set the toolbar + $this->addToolBar(); + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JFactory::getApplication()->input->set('hidemainmenu', true); + $user = JFactory::getUser(); + $userId = $user->id; + $isNew = $this->item->id == 0; + + JToolbarHelper::title( JText::_($isNew ? 'COM_COMPONENTBUILDER_LANGUAGE_NEW' : 'COM_COMPONENTBUILDER_LANGUAGE_EDIT'), 'pencil-2 article-add'); + // Built the actions for new and existing records. + if ($this->refid || $this->ref) + { + if ($this->canDo->get('language.create') && $isNew) + { + // We can create the record. + JToolBarHelper::save('language.save', 'JTOOLBAR_SAVE'); + } + elseif ($this->canDo->get('language.edit')) + { + // We can save the record. + JToolBarHelper::save('language.save', 'JTOOLBAR_SAVE'); + } + if ($isNew) + { + // Do not creat but cancel. + JToolBarHelper::cancel('language.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + // We can close it. + JToolBarHelper::cancel('language.cancel', 'JTOOLBAR_CLOSE'); + } + } + else + { + if ($isNew) + { + // For new records, check the create permission. + if ($this->canDo->get('language.create')) + { + JToolBarHelper::apply('language.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('language.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::custom('language.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + }; + JToolBarHelper::cancel('language.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + if ($this->canDo->get('language.edit')) + { + // We can save the new record + JToolBarHelper::apply('language.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('language.save', 'JTOOLBAR_SAVE'); + // We can save this record, but check the create permission to see + // if we can return to make a new one. + if ($this->canDo->get('language.create')) + { + JToolBarHelper::custom('language.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + } + } + $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('language.version')); + if ($this->state->params->get('save_history', 1) && $this->canDo->get('language.edit') && $canVersion) + { + JToolbarHelper::versions('com_componentbuilder.language', $this->item->id); + } + if ($this->canDo->get('language.create')) + { + JToolBarHelper::custom('language.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); + } + JToolBarHelper::cancel('language.cancel', 'JTOOLBAR_CLOSE'); + } + } + JToolbarHelper::divider(); + // set help url for this view if found + $help_url = ComponentbuilderHelper::getHelpUrl('language'); + if (ComponentbuilderHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_COMPONENTBUILDER_HELP_MANAGER', false, $help_url); + } + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 30) + { + // use the helper htmlEscape method instead and shorten the string + return ComponentbuilderHelper::htmlEscape($var, $this->_charset, true, 30); + } + // use the helper htmlEscape method instead. + return ComponentbuilderHelper::htmlEscape($var, $this->_charset); + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $isNew = ($this->item->id < 1); + $document = JFactory::getDocument(); + $document->setTitle(JText::_($isNew ? 'COM_COMPONENTBUILDER_LANGUAGE_NEW' : 'COM_COMPONENTBUILDER_LANGUAGE_EDIT')); + $document->addStyleSheet(JURI::root() . "administrator/components/com_componentbuilder/assets/css/language.css"); + $document->addScript(JURI::root() . $this->script); + $document->addScript(JURI::root() . "administrator/components/com_componentbuilder/views/language/submitbutton.js"); + JText::script('view not acceptable. Error'); + } +} diff --git a/admin/views/language_placeholder/submitbutton.js b/admin/views/language_placeholder/submitbutton.js new file mode 100644 index 000000000..f922155c3 --- /dev/null +++ b/admin/views/language_placeholder/submitbutton.js @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------------------| www.vdm.io |------/ + __ __ _ _____ _ _ __ __ _ _ _ + \ \ / / | | | __ \ | | | | | \/ | | | | | | | + \ \ / /_ _ ___| |_ | | | | _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ | \ / | ___| |_| |__ ___ __| | + \ \/ / _` / __| __| | | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| | |\/| |/ _ \ __| '_ \ / _ \ / _` | + \ / (_| \__ \ |_ | |__| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ | | | | __/ |_| | | | (_) | (_| | + \/ \__,_|___/\__| |_____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| |_| |_|\___|\__|_| |_|\___/ \__,_| + | | + |_| +/-------------------------------------------------------------------------------------------------------------------------------/ + + @version @update number 8 of this MVC + @build 3rd April, 2017 + @created 3rd April, 2017 + @package Component Builder + @subpackage submitbutton.js + @author Llewellyn van der Merwe + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +Joomla.submitbutton = function(task) +{ + if (task == ''){ + return false; + } else { + var isValid=true; + var action = task.split('.'); + if (action[1] != 'cancel' && action[1] != 'close'){ + var forms = $$('form.form-validate'); + for (var i=0;i + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.formvalidation'); +JHtml::_('formbehavior.chosen', 'select'); +JHtml::_('behavior.keepalive'); +$componentParams = JComponentHelper::getParams('com_componentbuilder'); +?> + + diff --git a/admin/views/language_placeholder/tmpl/index.html b/admin/views/language_placeholder/tmpl/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/views/language_placeholder/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/language_placeholder/view.html.php b/admin/views/language_placeholder/view.html.php new file mode 100644 index 000000000..1025e48d6 --- /dev/null +++ b/admin/views/language_placeholder/view.html.php @@ -0,0 +1,200 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Language_placeholder View class + */ +class ComponentbuilderViewLanguage_placeholder extends JViewLegacy +{ + /** + * display method of View + * @return void + */ + public function display($tpl = null) + { + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + JError::raiseError(500, implode('
', $errors)); + return false; + } + + // Assign the variables + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->script = $this->get('Script'); + $this->state = $this->get('State'); + // get action permissions + $this->canDo = ComponentbuilderHelper::getActions('language_placeholder',$this->item); + // get input + $jinput = JFactory::getApplication()->input; + $this->ref = $jinput->get('ref', 0, 'word'); + $this->refid = $jinput->get('refid', 0, 'int'); + $this->referral = ''; + if ($this->refid) + { + // return to the item that refered to this item + $this->referral = '&ref='.(string)$this->ref.'&refid='.(int)$this->refid; + } + elseif($this->ref) + { + // return to the list view that refered to this item + $this->referral = '&ref='.(string)$this->ref; + } + + // Set the toolbar + $this->addToolBar(); + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JFactory::getApplication()->input->set('hidemainmenu', true); + $user = JFactory::getUser(); + $userId = $user->id; + $isNew = $this->item->id == 0; + + JToolbarHelper::title( JText::_($isNew ? 'COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_NEW' : 'COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_EDIT'), 'pencil-2 article-add'); + // Built the actions for new and existing records. + if ($this->refid || $this->ref) + { + if ($this->canDo->get('language_placeholder.create') && $isNew) + { + // We can create the record. + JToolBarHelper::save('language_placeholder.save', 'JTOOLBAR_SAVE'); + } + elseif ($this->canDo->get('language_placeholder.edit')) + { + // We can save the record. + JToolBarHelper::save('language_placeholder.save', 'JTOOLBAR_SAVE'); + } + if ($isNew) + { + // Do not creat but cancel. + JToolBarHelper::cancel('language_placeholder.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + // We can close it. + JToolBarHelper::cancel('language_placeholder.cancel', 'JTOOLBAR_CLOSE'); + } + } + else + { + if ($isNew) + { + // For new records, check the create permission. + if ($this->canDo->get('language_placeholder.create')) + { + JToolBarHelper::apply('language_placeholder.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('language_placeholder.save', 'JTOOLBAR_SAVE'); + JToolBarHelper::custom('language_placeholder.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + }; + JToolBarHelper::cancel('language_placeholder.cancel', 'JTOOLBAR_CANCEL'); + } + else + { + if ($this->canDo->get('language_placeholder.edit')) + { + // We can save the new record + JToolBarHelper::apply('language_placeholder.apply', 'JTOOLBAR_APPLY'); + JToolBarHelper::save('language_placeholder.save', 'JTOOLBAR_SAVE'); + // We can save this record, but check the create permission to see + // if we can return to make a new one. + if ($this->canDo->get('language_placeholder.create')) + { + JToolBarHelper::custom('language_placeholder.save2new', 'save-new.png', 'save-new_f2.png', 'JTOOLBAR_SAVE_AND_NEW', false); + } + } + $canVersion = ($this->canDo->get('core.version') && $this->canDo->get('language_placeholder.version')); + if ($this->state->params->get('save_history', 1) && $this->canDo->get('language_placeholder.edit') && $canVersion) + { + JToolbarHelper::versions('com_componentbuilder.language_placeholder', $this->item->id); + } + if ($this->canDo->get('language_placeholder.create')) + { + JToolBarHelper::custom('language_placeholder.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); + } + JToolBarHelper::cancel('language_placeholder.cancel', 'JTOOLBAR_CLOSE'); + } + } + JToolbarHelper::divider(); + // set help url for this view if found + $help_url = ComponentbuilderHelper::getHelpUrl('language_placeholder'); + if (ComponentbuilderHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_COMPONENTBUILDER_HELP_MANAGER', false, $help_url); + } + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 30) + { + // use the helper htmlEscape method instead and shorten the string + return ComponentbuilderHelper::htmlEscape($var, $this->_charset, true, 30); + } + // use the helper htmlEscape method instead. + return ComponentbuilderHelper::htmlEscape($var, $this->_charset); + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $isNew = ($this->item->id < 1); + $document = JFactory::getDocument(); + $document->setTitle(JText::_($isNew ? 'COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_NEW' : 'COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_EDIT')); + $document->addStyleSheet(JURI::root() . "administrator/components/com_componentbuilder/assets/css/language_placeholder.css"); + $document->addScript(JURI::root() . $this->script); + $document->addScript(JURI::root() . "administrator/components/com_componentbuilder/views/language_placeholder/submitbutton.js"); + JText::script('view not acceptable. Error'); + } +} diff --git a/admin/views/language_placeholders/index.html b/admin/views/language_placeholders/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/views/language_placeholders/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default.php b/admin/views/language_placeholders/tmpl/default.php new file mode 100644 index 000000000..27ca96de6 --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default.php @@ -0,0 +1,99 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// load tooltip behavior +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.multiselect'); +JHtml::_('dropdown.init'); +JHtml::_('formbehavior.chosen', 'select'); + +if ($this->saveOrder) +{ + $saveOrderingUrl = 'index.php?option=com_componentbuilder&task=language_placeholders.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'language_placeholderList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); +} + +?> + +
+sidebar)): ?> +
+ sidebar; ?> +
+
+ +
+ +items)): ?> + loadTemplate('toolbar');?> +
+ +
+ + loadTemplate('toolbar');?> + + loadTemplate('head');?> + loadTemplate('foot');?> + loadTemplate('body');?> +
+ + canCreate && $this->canEdit) : ?> + JText::_('COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS_BATCH_OPTIONS'), + 'footer' => $this->loadTemplate('batch_footer') + ), + $this->loadTemplate('batch_body') + ); ?> + + + + +
+ + + + \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default_batch_body.php b/admin/views/language_placeholders/tmpl/default_batch_body.php new file mode 100644 index 000000000..5c011683f --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default_batch_body.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + +

+batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default_batch_footer.php b/admin/views/language_placeholders/tmpl/default_batch_footer.php new file mode 100644 index 000000000..c949e886e --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default_batch_footer.php @@ -0,0 +1,37 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + + \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default_body.php b/admin/views/language_placeholders/tmpl/default_body.php new file mode 100644 index 000000000..f70d8b322 --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default_body.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +$edit = "index.php?option=com_componentbuilder&view=language_placeholders&task=language_placeholder.edit"; + +?> +items as $i => $item): ?> + user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = ComponentbuilderHelper::getActions('language_placeholder',$item,'language_placeholders'); + ?> + + + get('language_placeholder.edit.state')): ?> + saveOrder) + { + $iconClass = ' inactive'; + } + else + { + $iconClass = ' inactive tip-top" hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED'); + } + ?> + + + + saveOrder) : ?> + + + + ⋮ + + + + get('language_placeholder.edit')): ?> + checked_out) : ?> + + id); ?> + + □ + + + id); ?> + + + □ + + + + get('language_placeholder.edit')): ?> +
+ escape($item->placeholder); ?> + checked_out): ?> + name, $item->checked_out_time, 'language_placeholders.', $canCheckin); ?> + +
+ +
escape($item->placeholder); ?>
+ + + + escape($item->components); ?> + + + get('language_placeholder.edit.state')) : ?> + checked_out) : ?> + + published, $i, 'language_placeholders.', true, 'cb'); ?> + + published, $i, 'language_placeholders.', false, 'cb'); ?> + + + published, $i, 'language_placeholders.', true, 'cb'); ?> + + + published, $i, 'language_placeholders.', false, 'cb'); ?> + + + + id; ?> + + + \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default_foot.php b/admin/views/language_placeholders/tmpl/default_foot.php new file mode 100644 index 000000000..00796167e --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + pagination->getListFooter(); ?> + \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default_head.php b/admin/views/language_placeholders/tmpl/default_head.php new file mode 100644 index 000000000..67db508f1 --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default_head.php @@ -0,0 +1,64 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + canEdit&& $this->canState): ?> + + ', 'ordering', $this->listDirn, $this->listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + + + + + + + ▾ + + + ■ + + + + listDirn, $this->listOrder); ?> + + + listDirn, $this->listOrder); ?> + + canState): ?> + + listDirn, $this->listOrder); ?> + + + + + + + + listDirn, $this->listOrder); ?> + + \ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/default_toolbar.php b/admin/views/language_placeholders/tmpl/default_toolbar.php new file mode 100644 index 000000000..095cbe62b --- /dev/null +++ b/admin/views/language_placeholders/tmpl/default_toolbar.php @@ -0,0 +1,59 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/admin/views/language_placeholders/tmpl/index.html b/admin/views/language_placeholders/tmpl/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/views/language_placeholders/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/language_placeholders/view.html.php b/admin/views/language_placeholders/view.html.php new file mode 100644 index 000000000..777b6c5f0 --- /dev/null +++ b/admin/views/language_placeholders/view.html.php @@ -0,0 +1,255 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Componentbuilder View class for the Language_placeholders + */ +class ComponentbuilderViewLanguage_placeholders extends JViewLegacy +{ + /** + * Language_placeholders view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + ComponentbuilderHelper::addSubmenu('language_placeholders'); + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + JError::raiseError(500, implode('
', $errors)); + return false; + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = ComponentbuilderHelper::getActions('language_placeholder'); + $this->canEdit = $this->canDo->get('language_placeholder.edit'); + $this->canState = $this->canDo->get('language_placeholder.edit.state'); + $this->canCreate = $this->canDo->get('language_placeholder.create'); + $this->canDelete = $this->canDo->get('language_placeholder.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS'), 'comments-2'); + JHtmlSidebar::setAction('index.php?option=com_componentbuilder&view=language_placeholders'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('language_placeholder.add'); + } + + // Only load if there are items + if (ComponentbuilderHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('language_placeholder.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('language_placeholders.publish'); + JToolBarHelper::unpublishList('language_placeholders.unpublish'); + JToolBarHelper::archiveList('language_placeholders.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('language_placeholders.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + if ($this->user->authorise('language_placeholder.update_placeholders')) + { + // add Update Placeholders button. + JToolBarHelper::custom('language_placeholders.updatePlaceholders', 'flash', '', 'COM_COMPONENTBUILDER_UPDATE_PLACEHOLDERS', false); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'language_placeholders.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('language_placeholders.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('language_placeholder.export')) + { + JToolBarHelper::custom('language_placeholders.exportData', 'download', '', 'COM_COMPONENTBUILDER_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('language_placeholder.import')) + { + JToolBarHelper::custom('language_placeholders.importData', 'upload', '', 'COM_COMPONENTBUILDER_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = ComponentbuilderHelper::getHelpUrl('language_placeholders'); + if (ComponentbuilderHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_COMPONENTBUILDER_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_componentbuilder'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_COMPONENTBUILDER_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_COMPONENTBUILDER_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $document = JFactory::getDocument(); + $document->setTitle(JText::_('COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDERS')); + $document->addStyleSheet(JURI::root() . "administrator/components/com_componentbuilder/assets/css/language_placeholders.css"); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return ComponentbuilderHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return ComponentbuilderHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.placeholder' => JText::_('COM_COMPONENTBUILDER_LANGUAGE_PLACEHOLDER_PLACEHOLDER_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/admin/views/languages/index.html b/admin/views/languages/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/views/languages/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/languages/tmpl/default.php b/admin/views/languages/tmpl/default.php new file mode 100644 index 000000000..8dc44bb69 --- /dev/null +++ b/admin/views/languages/tmpl/default.php @@ -0,0 +1,99 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// load tooltip behavior +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.multiselect'); +JHtml::_('dropdown.init'); +JHtml::_('formbehavior.chosen', 'select'); + +if ($this->saveOrder) +{ + $saveOrderingUrl = 'index.php?option=com_componentbuilder&task=languages.saveOrderAjax&tmpl=component'; + JHtml::_('sortablelist.sortable', 'languageList', 'adminForm', strtolower($this->listDirn), $saveOrderingUrl); +} + +?> + +
+sidebar)): ?> +
+ sidebar; ?> +
+
+ +
+ +items)): ?> + loadTemplate('toolbar');?> +
+ +
+ + loadTemplate('toolbar');?> + + loadTemplate('head');?> + loadTemplate('foot');?> + loadTemplate('body');?> +
+ + canCreate && $this->canEdit) : ?> + JText::_('COM_COMPONENTBUILDER_LANGUAGES_BATCH_OPTIONS'), + 'footer' => $this->loadTemplate('batch_footer') + ), + $this->loadTemplate('batch_body') + ); ?> + + + + +
+ + + + \ No newline at end of file diff --git a/admin/views/languages/tmpl/default_batch_body.php b/admin/views/languages/tmpl/default_batch_body.php new file mode 100644 index 000000000..faeb701b8 --- /dev/null +++ b/admin/views/languages/tmpl/default_batch_body.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + +

+batchDisplay; ?> \ No newline at end of file diff --git a/admin/views/languages/tmpl/default_batch_footer.php b/admin/views/languages/tmpl/default_batch_footer.php new file mode 100644 index 000000000..a82216fd8 --- /dev/null +++ b/admin/views/languages/tmpl/default_batch_footer.php @@ -0,0 +1,37 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + + + \ No newline at end of file diff --git a/admin/views/languages/tmpl/default_body.php b/admin/views/languages/tmpl/default_body.php new file mode 100644 index 000000000..1d295d47c --- /dev/null +++ b/admin/views/languages/tmpl/default_body.php @@ -0,0 +1,111 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +$edit = "index.php?option=com_componentbuilder&view=languages&task=language.edit"; + +?> +items as $i => $item): ?> + user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0; + $userChkOut = JFactory::getUser($item->checked_out); + $canDo = ComponentbuilderHelper::getActions('language',$item,'languages'); + ?> + + + get('language.edit.state')): ?> + saveOrder) + { + $iconClass = ' inactive'; + } + else + { + $iconClass = ' inactive tip-top" hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED'); + } + ?> + + + + saveOrder) : ?> + + + + ⋮ + + + + get('language.edit')): ?> + checked_out) : ?> + + id); ?> + + □ + + + id); ?> + + + □ + + + + get('language.edit')): ?> +
+ escape($item->name); ?> + checked_out): ?> + name, $item->checked_out_time, 'languages.', $canCheckin); ?> + +
+ +
escape($item->name); ?>
+ + + + escape($item->langtag); ?> + + + get('language.edit.state')) : ?> + checked_out) : ?> + + published, $i, 'languages.', true, 'cb'); ?> + + published, $i, 'languages.', false, 'cb'); ?> + + + published, $i, 'languages.', true, 'cb'); ?> + + + published, $i, 'languages.', false, 'cb'); ?> + + + + id; ?> + + + \ No newline at end of file diff --git a/admin/views/languages/tmpl/default_foot.php b/admin/views/languages/tmpl/default_foot.php new file mode 100644 index 000000000..7bbd92029 --- /dev/null +++ b/admin/views/languages/tmpl/default_foot.php @@ -0,0 +1,32 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + pagination->getListFooter(); ?> + \ No newline at end of file diff --git a/admin/views/languages/tmpl/default_head.php b/admin/views/languages/tmpl/default_head.php new file mode 100644 index 000000000..caaf19c28 --- /dev/null +++ b/admin/views/languages/tmpl/default_head.php @@ -0,0 +1,64 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> + + canEdit&& $this->canState): ?> + + ', 'ordering', $this->listDirn, $this->listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + + + + + + + ▾ + + + ■ + + + + listDirn, $this->listOrder); ?> + + + listDirn, $this->listOrder); ?> + + canState): ?> + + listDirn, $this->listOrder); ?> + + + + + + + + listDirn, $this->listOrder); ?> + + \ No newline at end of file diff --git a/admin/views/languages/tmpl/default_toolbar.php b/admin/views/languages/tmpl/default_toolbar.php new file mode 100644 index 000000000..82f13ccf7 --- /dev/null +++ b/admin/views/languages/tmpl/default_toolbar.php @@ -0,0 +1,59 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +?> +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/admin/views/languages/tmpl/index.html b/admin/views/languages/tmpl/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/admin/views/languages/tmpl/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/views/languages/view.html.php b/admin/views/languages/view.html.php new file mode 100644 index 000000000..31b1cb252 --- /dev/null +++ b/admin/views/languages/view.html.php @@ -0,0 +1,251 @@ + + @copyright Copyright (C) 2015. All Rights Reserved + @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + + Builds Complex Joomla Components + +/-----------------------------------------------------------------------------------------------------------------------------*/ + +// No direct access to this file +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Componentbuilder View class for the Languages + */ +class ComponentbuilderViewLanguages extends JViewLegacy +{ + /** + * Languages view display method + * @return void + */ + function display($tpl = null) + { + if ($this->getLayout() !== 'modal') + { + // Include helper submenu + ComponentbuilderHelper::addSubmenu('languages'); + } + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + JError::raiseError(500, implode('
', $errors)); + return false; + } + + // Assign data to the view + $this->items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + $this->user = JFactory::getUser(); + $this->listOrder = $this->escape($this->state->get('list.ordering')); + $this->listDirn = $this->escape($this->state->get('list.direction')); + $this->saveOrder = $this->listOrder == 'ordering'; + // get global action permissions + $this->canDo = ComponentbuilderHelper::getActions('language'); + $this->canEdit = $this->canDo->get('language.edit'); + $this->canState = $this->canDo->get('language.edit.state'); + $this->canCreate = $this->canDo->get('language.create'); + $this->canDelete = $this->canDo->get('language.delete'); + $this->canBatch = $this->canDo->get('core.batch'); + + // We don't need toolbar in the modal window. + if ($this->getLayout() !== 'modal') + { + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + // load the batch html + if ($this->canCreate && $this->canEdit && $this->canState) + { + $this->batchDisplay = JHtmlBatch_::render(); + } + } + + // Display the template + parent::display($tpl); + + // Set the document + $this->setDocument(); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_COMPONENTBUILDER_LANGUAGES'), 'comment'); + JHtmlSidebar::setAction('index.php?option=com_componentbuilder&view=languages'); + JFormHelper::addFieldPath(JPATH_COMPONENT . '/models/fields'); + + if ($this->canCreate) + { + JToolBarHelper::addNew('language.add'); + } + + // Only load if there are items + if (ComponentbuilderHelper::checkArray($this->items)) + { + if ($this->canEdit) + { + JToolBarHelper::editList('language.edit'); + } + + if ($this->canState) + { + JToolBarHelper::publishList('languages.publish'); + JToolBarHelper::unpublishList('languages.unpublish'); + JToolBarHelper::archiveList('languages.archive'); + + if ($this->canDo->get('core.admin')) + { + JToolBarHelper::checkin('languages.checkin'); + } + } + + // Add a batch button + if ($this->canBatch && $this->canCreate && $this->canEdit && $this->canState) + { + // Get the toolbar object instance + $bar = JToolBar::getInstance('toolbar'); + // set the batch button name + $title = JText::_('JTOOLBAR_BATCH'); + // Instantiate a new JLayoutFile instance and render the batch button + $layout = new JLayoutFile('joomla.toolbar.batch'); + // add the button to the page + $dhtml = $layout->render(array('title' => $title)); + $bar->appendButton('Custom', $dhtml, 'batch'); + } + + if ($this->state->get('filter.published') == -2 && ($this->canState && $this->canDelete)) + { + JToolbarHelper::deleteList('', 'languages.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + elseif ($this->canState && $this->canDelete) + { + JToolbarHelper::trash('languages.trash'); + } + + if ($this->canDo->get('core.export') && $this->canDo->get('language.export')) + { + JToolBarHelper::custom('languages.exportData', 'download', '', 'COM_COMPONENTBUILDER_EXPORT_DATA', true); + } + } + + if ($this->canDo->get('core.import') && $this->canDo->get('language.import')) + { + JToolBarHelper::custom('languages.importData', 'upload', '', 'COM_COMPONENTBUILDER_IMPORT_DATA', false); + } + + // set help url for this view if found + $help_url = ComponentbuilderHelper::getHelpUrl('languages'); + if (ComponentbuilderHelper::checkString($help_url)) + { + JToolbarHelper::help('COM_COMPONENTBUILDER_HELP_MANAGER', false, $help_url); + } + + // add the options comp button + if ($this->canDo->get('core.admin') || $this->canDo->get('core.options')) + { + JToolBarHelper::preferences('com_componentbuilder'); + } + + if ($this->canState) + { + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_published', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions'), 'value', 'text', $this->state->get('filter.published'), true) + ); + // only load if batch allowed + if ($this->canBatch) + { + JHtmlBatch_::addListSelection( + JText::_('COM_COMPONENTBUILDER_KEEP_ORIGINAL_STATE'), + 'batch[published]', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array('all' => false)), 'value', 'text', '', true) + ); + } + } + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_ACCESS'), + 'filter_access', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access')) + ); + + if ($this->canBatch && $this->canCreate && $this->canEdit) + { + JHtmlBatch_::addListSelection( + JText::_('COM_COMPONENTBUILDER_KEEP_ORIGINAL_ACCESS'), + 'batch[access]', + JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text') + ); + } + } + + /** + * Method to set up the document properties + * + * @return void + */ + protected function setDocument() + { + $document = JFactory::getDocument(); + $document->setTitle(JText::_('COM_COMPONENTBUILDER_LANGUAGES')); + $document->addStyleSheet(JURI::root() . "administrator/components/com_componentbuilder/assets/css/languages.css"); + } + + /** + * Escapes a value for output in a view script. + * + * @param mixed $var The output to escape. + * + * @return mixed The escaped value. + */ + public function escape($var) + { + if(strlen($var) > 50) + { + // use the helper htmlEscape method instead and shorten the string + return ComponentbuilderHelper::htmlEscape($var, $this->_charset, true); + } + // use the helper htmlEscape method instead. + return ComponentbuilderHelper::htmlEscape($var, $this->_charset); + } + + /** + * Returns an array of fields the table can be sorted by + * + * @return array Array containing the field name to sort by as the key and display text as value + */ + protected function getSortFields() + { + return array( + 'a.sorting' => JText::_('JGRID_HEADING_ORDERING'), + 'a.published' => JText::_('JSTATUS'), + 'a.name' => JText::_('COM_COMPONENTBUILDER_LANGUAGE_NAME_LABEL'), + 'a.langtag' => JText::_('COM_COMPONENTBUILDER_LANGUAGE_LANGTAG_LABEL'), + 'a.id' => JText::_('JGRID_HEADING_ID') + ); + } +} diff --git a/componentbuilder.xml b/componentbuilder.xml index 8a40227c5..a604e0530 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 1st April, 2017 + 3rd April, 2017 Llewellyn van der Merwe joomla@vdm.io http://vdm.bz/component-builder Copyright (C) 2015. All Rights Reserved GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html - 2.4.1 + 2.4.2 Component Builder (v.2.4.1) +

Component Builder (v.2.4.2)

The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanced, truly able to build extremely complex components in a fraction of the time. @@ -70,6 +70,7 @@ Whether you're a seasoned [Joomla](http://www.joomla.org/) developer, or have ju

COM_COMPONENTBUILDER_MENU_SNIPPETS COM_COMPONENTBUILDER_MENU_FIELDS COM_COMPONENTBUILDER_MENU_FIELDTYPES + COM_COMPONENTBUILDER_MENU_LANGUAGE_PLACEHOLDERS COM_COMPONENTBUILDER_MENU_HELP_DOCUMENTS diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index f7a9ff9a4..86865f36a 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -220,4 +220,21 @@ http://vdm.bz/component-builder + + Component Builder + Builds Complex Joomla Components + com_componentbuilder + component + 2.4.2 + http://vdm.bz/component-builder + + https://github.com/vdm-io/Joomla-Component-Builder/releases/download/v2.4.2/JCB_v2.4.2.zip + + + stable + + Llewellyn van der Merwe + http://vdm.bz/component-builder + + \ No newline at end of file diff --git a/script.php b/script.php index 495df16cb..7aff1131c 100644 --- a/script.php +++ b/script.php @@ -10,8 +10,8 @@ |_| /-------------------------------------------------------------------------------------------------------------------------------/ - @version 2.4.1 - @build 1st April, 2017 + @version 2.4.2 + @build 3rd April, 2017 @created 30th April, 2015 @package Component Builder @subpackage script.php @@ -1176,6 +1176,178 @@ class com_componentbuilderInstallerScript } } + // Create a new query object. + $query = $db->getQuery(true); + // Select id from content type table + $query->select($db->quoteName('type_id')); + $query->from($db->quoteName('#__content_types')); + // Where Language_placeholder alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_componentbuilder.language_placeholder') ); + $db->setQuery($query); + // Execute query to see if alias is found + $db->execute(); + $language_placeholder_found = $db->getNumRows(); + // Now check if there were any rows + if ($language_placeholder_found) + { + // Since there are load the needed language_placeholder type ids + $language_placeholder_ids = $db->loadColumn(); + // Remove Language_placeholder from the content type table + $language_placeholder_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_componentbuilder.language_placeholder') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__content_types')); + $query->where($language_placeholder_condition); + $db->setQuery($query); + // Execute the query to remove Language_placeholder items + $language_placeholder_done = $db->execute(); + if ($language_placeholder_done); + { + // If succesfully remove Language_placeholder add queued success message. + $app->enqueueMessage(JText::_('The (com_componentbuilder.language_placeholder) type alias was removed from the #__content_type table')); + } + + // Remove Language_placeholder items from the contentitem tag map table + $language_placeholder_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_componentbuilder.language_placeholder') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__contentitem_tag_map')); + $query->where($language_placeholder_condition); + $db->setQuery($query); + // Execute the query to remove Language_placeholder items + $language_placeholder_done = $db->execute(); + if ($language_placeholder_done); + { + // If succesfully remove Language_placeholder add queued success message. + $app->enqueueMessage(JText::_('The (com_componentbuilder.language_placeholder) type alias was removed from the #__contentitem_tag_map table')); + } + + // Remove Language_placeholder items from the ucm content table + $language_placeholder_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_componentbuilder.language_placeholder') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_content')); + $query->where($language_placeholder_condition); + $db->setQuery($query); + // Execute the query to remove Language_placeholder items + $language_placeholder_done = $db->execute(); + if ($language_placeholder_done); + { + // If succesfully remove Language_placeholder add queued success message. + $app->enqueueMessage(JText::_('The (com_componentbuilder.language_placeholder) type alias was removed from the #__ucm_content table')); + } + + // Make sure that all the Language_placeholder items are cleared from DB + foreach ($language_placeholder_ids as $language_placeholder_id) + { + // Remove Language_placeholder items from the ucm base table + $language_placeholder_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $language_placeholder_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_base')); + $query->where($language_placeholder_condition); + $db->setQuery($query); + // Execute the query to remove Language_placeholder items + $db->execute(); + + // Remove Language_placeholder items from the ucm history table + $language_placeholder_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $language_placeholder_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_history')); + $query->where($language_placeholder_condition); + $db->setQuery($query); + // Execute the query to remove Language_placeholder items + $db->execute(); + } + } + + // Create a new query object. + $query = $db->getQuery(true); + // Select id from content type table + $query->select($db->quoteName('type_id')); + $query->from($db->quoteName('#__content_types')); + // Where Language alias is found + $query->where( $db->quoteName('type_alias') . ' = '. $db->quote('com_componentbuilder.language') ); + $db->setQuery($query); + // Execute query to see if alias is found + $db->execute(); + $language_found = $db->getNumRows(); + // Now check if there were any rows + if ($language_found) + { + // Since there are load the needed language type ids + $language_ids = $db->loadColumn(); + // Remove Language from the content type table + $language_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_componentbuilder.language') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__content_types')); + $query->where($language_condition); + $db->setQuery($query); + // Execute the query to remove Language items + $language_done = $db->execute(); + if ($language_done); + { + // If succesfully remove Language add queued success message. + $app->enqueueMessage(JText::_('The (com_componentbuilder.language) type alias was removed from the #__content_type table')); + } + + // Remove Language items from the contentitem tag map table + $language_condition = array( $db->quoteName('type_alias') . ' = '. $db->quote('com_componentbuilder.language') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__contentitem_tag_map')); + $query->where($language_condition); + $db->setQuery($query); + // Execute the query to remove Language items + $language_done = $db->execute(); + if ($language_done); + { + // If succesfully remove Language add queued success message. + $app->enqueueMessage(JText::_('The (com_componentbuilder.language) type alias was removed from the #__contentitem_tag_map table')); + } + + // Remove Language items from the ucm content table + $language_condition = array( $db->quoteName('core_type_alias') . ' = ' . $db->quote('com_componentbuilder.language') ); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_content')); + $query->where($language_condition); + $db->setQuery($query); + // Execute the query to remove Language items + $language_done = $db->execute(); + if ($language_done); + { + // If succesfully remove Language add queued success message. + $app->enqueueMessage(JText::_('The (com_componentbuilder.language) type alias was removed from the #__ucm_content table')); + } + + // Make sure that all the Language items are cleared from DB + foreach ($language_ids as $language_id) + { + // Remove Language items from the ucm base table + $language_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $language_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_base')); + $query->where($language_condition); + $db->setQuery($query); + // Execute the query to remove Language items + $db->execute(); + + // Remove Language items from the ucm history table + $language_condition = array( $db->quoteName('ucm_type_id') . ' = ' . $language_id); + // Create a new query object. + $query = $db->getQuery(true); + $query->delete($db->quoteName('#__ucm_history')); + $query->where($language_condition); + $db->setQuery($query); + // Execute the query to remove Language items + $db->execute(); + } + } + // Create a new query object. $query = $db->getQuery(true); // Select id from content type table @@ -1500,6 +1672,30 @@ class com_componentbuilderInstallerScript // Set the object into the content types table. $fieldtype_category_Inserted = $db->insertObject('#__content_types', $fieldtype_category); + // Create the language_placeholder content type object. + $language_placeholder = new stdClass(); + $language_placeholder->type_title = 'Componentbuilder Language_placeholder'; + $language_placeholder->type_alias = 'com_componentbuilder.language_placeholder'; + $language_placeholder->table = '{"special": {"dbtable": "#__componentbuilder_language_placeholder","key": "id","type": "Language_placeholder","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $language_placeholder->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "placeholder","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"placeholder":"placeholder","components":"components"}}'; + $language_placeholder->router = 'ComponentbuilderHelperRoute::getLanguage_placeholderRoute'; + $language_placeholder->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/language_placeholder.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "components","targetTable": "#__componentbuilder_joomla_component","targetColumn": "id","displayColumn": "system_name"}]}'; + + // Set the object into the content types table. + $language_placeholder_Inserted = $db->insertObject('#__content_types', $language_placeholder); + + // Create the language content type object. + $language = new stdClass(); + $language->type_title = 'Componentbuilder Language'; + $language->type_alias = 'com_componentbuilder.language'; + $language->table = '{"special": {"dbtable": "#__componentbuilder_language","key": "id","type": "Language","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $language->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","langtag":"langtag"}}'; + $language->router = 'ComponentbuilderHelperRoute::getLanguageRoute'; + $language->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/language.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + + // Set the object into the content types table. + $language_Inserted = $db->insertObject('#__content_types', $language); + // Create the help_document content type object. $help_document = new stdClass(); $help_document->type_title = 'Componentbuilder Help_document'; @@ -1917,6 +2113,64 @@ class com_componentbuilderInstallerScript $fieldtype_category_Inserted = $db->insertObject('#__content_types', $fieldtype_category); } + // Create the language_placeholder content type object. + $language_placeholder = new stdClass(); + $language_placeholder->type_title = 'Componentbuilder Language_placeholder'; + $language_placeholder->type_alias = 'com_componentbuilder.language_placeholder'; + $language_placeholder->table = '{"special": {"dbtable": "#__componentbuilder_language_placeholder","key": "id","type": "Language_placeholder","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $language_placeholder->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "placeholder","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"placeholder":"placeholder","components":"components"}}'; + $language_placeholder->router = 'ComponentbuilderHelperRoute::getLanguage_placeholderRoute'; + $language_placeholder->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/language_placeholder.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "components","targetTable": "#__componentbuilder_joomla_component","targetColumn": "id","displayColumn": "system_name"}]}'; + + // Check if language_placeholder type is already in content_type DB. + $language_placeholder_id = null; + $query = $db->getQuery(true); + $query->select($db->quoteName(array('type_id'))); + $query->from($db->quoteName('#__content_types')); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($language_placeholder->type_alias)); + $db->setQuery($query); + $db->execute(); + + // Set the object into the content types table. + if ($db->getNumRows()) + { + $language_placeholder->type_id = $db->loadResult(); + $language_placeholder_Updated = $db->updateObject('#__content_types', $language_placeholder, 'type_id'); + } + else + { + $language_placeholder_Inserted = $db->insertObject('#__content_types', $language_placeholder); + } + + // Create the language content type object. + $language = new stdClass(); + $language->type_title = 'Componentbuilder Language'; + $language->type_alias = 'com_componentbuilder.language'; + $language->table = '{"special": {"dbtable": "#__componentbuilder_language","key": "id","type": "Language","prefix": "componentbuilderTable","config": "array()"},"common": {"dbtable": "#__ucm_content","key": "ucm_id","type": "Corecontent","prefix": "JTable","config": "array()"}}'; + $language->field_mappings = '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "null","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","langtag":"langtag"}}'; + $language->router = 'ComponentbuilderHelperRoute::getLanguageRoute'; + $language->content_history_options = '{"formFile": "administrator/components/com_componentbuilder/models/forms/language.xml","hideFields": ["asset_id","checked_out","checked_out_time","version"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"}]}'; + + // Check if language type is already in content_type DB. + $language_id = null; + $query = $db->getQuery(true); + $query->select($db->quoteName(array('type_id'))); + $query->from($db->quoteName('#__content_types')); + $query->where($db->quoteName('type_alias') . ' LIKE '. $db->quote($language->type_alias)); + $db->setQuery($query); + $db->execute(); + + // Set the object into the content types table. + if ($db->getNumRows()) + { + $language->type_id = $db->loadResult(); + $language_Updated = $db->updateObject('#__content_types', $language, 'type_id'); + } + else + { + $language_Inserted = $db->insertObject('#__content_types', $language); + } + // Create the help_document content type object. $help_document = new stdClass(); $help_document->type_title = 'Componentbuilder Help_document'; @@ -1950,7 +2204,7 @@ class com_componentbuilderInstallerScript echo ' -

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

'; +

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

'; } } }