Stable release of v2.0.18

Adds bottom module position on tag, search, ai and app pages. Fixed JavaScript Database Manager some more.
This commit is contained in:
Robot 2023-08-10 09:04:11 +02:00
parent 76ac03f902
commit e9693965d3
Signed by: Robot
GPG Key ID: 14DECD44E7E1BB95
25 changed files with 854 additions and 98 deletions

View File

@ -87,4 +87,9 @@
# v2.0.17 # v2.0.17
- Adds brut-force protection - Adds brut-force protection
# v2.0.18
- Adds bottom module position on tag, search, ai and app pages.
- Fixed JavaScript Database Manager some more.

View File

@ -1,4 +1,4 @@
# Get Bible (2.0.17) # Get Bible (2.0.18)
![Get Bible image](https://git.vdm.dev/getBible/joomla-component/raw/branch/master/admin/assets/images/vdm-component.jpg "GetBible") ![Get Bible image](https://git.vdm.dev/getBible/joomla-component/raw/branch/master/admin/assets/images/vdm-component.jpg "GetBible")
@ -18,38 +18,38 @@ In essence, The Bible for Joomla is designed to transform how the Word of God is
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Get Bible](https://getbible.net) + *Name*: [Get Bible](https://getbible.net)
+ *First Build*: 3rd December, 2015 + *First Build*: 3rd December, 2015
+ *Last Build*: 7th August, 2023 + *Last Build*: 10th August, 2023
+ *Version*: 2.0.17 + *Version*: 2.0.18
+ *Copyright*: Copyright (C) 2015. All Rights Reserved + *Copyright*: Copyright (C) 2015. All Rights Reserved
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
## Build Time ## Build Time
**550 Hours** or **69 Eight Hour Days** (actual time the author saved - **552 Hours** or **69 Eight Hour Days** (actual time the author saved -
due to [Automated Component Builder](https://www.joomlacomponentbuilder.com)) due to [Automated Component Builder](https://www.joomlacomponentbuilder.com))
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**, > (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,
> never making one mistake or taking any coffee break.) > never making one mistake or taking any coffee break.)
+ *Line count*: **196949** + *Line count*: **197705**
+ *File count*: **1712** + *File count*: **1717**
+ *Folder count*: **163** + *Folder count*: **163**
**362 Hours** or **45 Eight Hour Days** (the actual time the author spent) **364 Hours** or **46 Eight Hour Days** (the actual time the author spent)
> (with the following break down: > (with the following break down:
> **debugging @137hours** = codingtime / 4; > **debugging @138hours** = codingtime / 4;
> **planning @79hours** = codingtime / 7; > **planning @79hours** = codingtime / 7;
> **mapping @55hours** = codingtime / 10; > **mapping @55hours** = codingtime / 10;
> **office @92hours** = codingtime / 6;) > **office @92hours** = codingtime / 6;)
**912 Hours** or **114 Eight Hour Days** **916 Hours** or **115 Eight Hour Days**
(a total of the realistic time frame for this project) (a total of the realistic time frame for this project)
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**, > (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,
> with the normal everyday realities at the office, that includes the component planning, mapping & debugging.) > with the normal everyday realities at the office, that includes the component planning, mapping & debugging.)
Project duration: **22.8 weeks** or **4.8 months** Project duration: **23 weeks** or **4.8 months**
> This **component** was build with a Joomla [Automated Component Builder](https://www.joomlacomponentbuilder.com). > This **component** was build with a Joomla [Automated Component Builder](https://www.joomlacomponentbuilder.com).
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)

View File

@ -1,4 +1,4 @@
# Get Bible (2.0.17) # Get Bible (2.0.18)
![Get Bible image](https://git.vdm.dev/getBible/joomla-component/raw/branch/master/admin/assets/images/vdm-component.jpg "GetBible") ![Get Bible image](https://git.vdm.dev/getBible/joomla-component/raw/branch/master/admin/assets/images/vdm-component.jpg "GetBible")
@ -18,38 +18,38 @@ In essence, The Bible for Joomla is designed to transform how the Word of God is
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
+ *Name*: [Get Bible](https://getbible.net) + *Name*: [Get Bible](https://getbible.net)
+ *First Build*: 3rd December, 2015 + *First Build*: 3rd December, 2015
+ *Last Build*: 7th August, 2023 + *Last Build*: 10th August, 2023
+ *Version*: 2.0.17 + *Version*: 2.0.18
+ *Copyright*: Copyright (C) 2015. All Rights Reserved + *Copyright*: Copyright (C) 2015. All Rights Reserved
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html + *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
## Build Time ## Build Time
**550 Hours** or **69 Eight Hour Days** (actual time the author saved - **552 Hours** or **69 Eight Hour Days** (actual time the author saved -
due to [Automated Component Builder](https://www.joomlacomponentbuilder.com)) due to [Automated Component Builder](https://www.joomlacomponentbuilder.com))
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**, > (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,
> never making one mistake or taking any coffee break.) > never making one mistake or taking any coffee break.)
+ *Line count*: **196949** + *Line count*: **197705**
+ *File count*: **1712** + *File count*: **1717**
+ *Folder count*: **163** + *Folder count*: **163**
**362 Hours** or **45 Eight Hour Days** (the actual time the author spent) **364 Hours** or **46 Eight Hour Days** (the actual time the author spent)
> (with the following break down: > (with the following break down:
> **debugging @137hours** = codingtime / 4; > **debugging @138hours** = codingtime / 4;
> **planning @79hours** = codingtime / 7; > **planning @79hours** = codingtime / 7;
> **mapping @55hours** = codingtime / 10; > **mapping @55hours** = codingtime / 10;
> **office @92hours** = codingtime / 6;) > **office @92hours** = codingtime / 6;)
**912 Hours** or **114 Eight Hour Days** **916 Hours** or **115 Eight Hour Days**
(a total of the realistic time frame for this project) (a total of the realistic time frame for this project)
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**, > (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,
> with the normal everyday realities at the office, that includes the component planning, mapping & debugging.) > with the normal everyday realities at the office, that includes the component planning, mapping & debugging.)
Project duration: **22.8 weeks** or **4.8 months** Project duration: **23 weeks** or **4.8 months**
> This **component** was build with a Joomla [Automated Component Builder](https://www.joomlacomponentbuilder.com). > This **component** was build with a Joomla [Automated Component Builder](https://www.joomlacomponentbuilder.com).
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)

View File

@ -304,6 +304,96 @@
<option value="2"> <option value="2">
COM_GETBIBLE_CONFIG_CASE_SENSITIVE</option> COM_GETBIBLE_CONFIG_CASE_SENSITIVE</option>
</field> </field>
<!-- Bottom_search_position Field. Type: Subform. (joomla) -->
<field
type="subform"
name="bottom_search_position"
label="COM_GETBIBLE_CONFIG_BOTTOM_SEARCH_POSITION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
buttons="add,remove,move"
icon="list"
max="5"
showon="activate_search:1"
>
<form hidden="true" name="list_bottom_search_position_modal" repeat="true">
<!-- Position Field. Type: Text. (joomla) -->
<field
type="text"
name="position"
label="COM_GETBIBLE_CONFIG_POSITION_LABEL"
size="10"
maxlength="50"
description="COM_GETBIBLE_CONFIG_POSITION_DESCRIPTION"
class="text_area"
message="COM_GETBIBLE_CONFIG_POSITION_MESSAGE"
hint="COM_GETBIBLE_CONFIG_POSITION_HINT"
autocomplete="on"
/>
<!-- Separator Field. Type: List. (joomla) -->
<field
type="list"
name="separator"
label="COM_GETBIBLE_CONFIG_SEPARATOR_LABEL"
class="list_class"
default="div">
<!-- Option Set. -->
<option value="none">
COM_GETBIBLE_CONFIG_NONE</option>
<option value="div">
COM_GETBIBLE_CONFIG_DIV</option>
<option value="list">
COM_GETBIBLE_CONFIG_LIST</option>
<option value="array">
COM_GETBIBLE_CONFIG_ARRAY</option>
<option value="break">
COM_GETBIBLE_CONFIG_BREAK</option>
</field>
<!-- Class Field. Type: Text. (joomla) -->
<field
type="text"
name="class"
label="COM_GETBIBLE_CONFIG_CLASS_LABEL"
size="50"
maxlength="150"
class="text_area"
filter="STRING"
message="COM_GETBIBLE_CONFIG_CLASS_MESSAGE"
hint="COM_GETBIBLE_CONFIG_CLASS_HINT"
autocomplete="on"
/>
</form>
</field>
<!-- Show_bottom_search_position_card Field. Type: Radio. (joomla) -->
<field
type="radio"
name="show_bottom_search_position_card"
label="COM_GETBIBLE_CONFIG_SHOW_BOTTOM_SEARCH_POSITION_CARD_LABEL"
class="btn-group btn-group-yesno"
default="1"
showon="activate_search:1">
<!-- Option Set. -->
<option value="1">
COM_GETBIBLE_CONFIG_YES</option>
<option value="0">
COM_GETBIBLE_CONFIG_NO</option>
</field>
<!-- Bottom_search_position_card_style Field. Type: List. (joomla) -->
<field
type="list"
name="bottom_search_position_card_style"
label="COM_GETBIBLE_CONFIG_BOTTOM_SEARCH_POSITION_CARD_STYLE_LABEL"
class="list_class"
default="default"
showon="activate_search:1[AND]show_bottom_search_position_card:1">
<!-- Option Set. -->
<option value="default">
COM_GETBIBLE_CONFIG_DEFAULT</option>
<option value="primary">
COM_GETBIBLE_CONFIG_PRIMARY</option>
<option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option>
</field>
</fieldset> </fieldset>
<fieldset <fieldset
name="notes_custom_config" name="notes_custom_config"
@ -358,6 +448,96 @@
<option value="1"> <option value="1">
COM_GETBIBLE_CONFIG_YES</option> COM_GETBIBLE_CONFIG_YES</option>
</field> </field>
<!-- Bottom_tag_position Field. Type: Subform. (joomla) -->
<field
type="subform"
name="bottom_tag_position"
label="COM_GETBIBLE_CONFIG_BOTTOM_TAG_POSITION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
buttons="add,remove,move"
icon="list"
max="5"
showon="activate_tags:1"
>
<form hidden="true" name="list_bottom_tag_position_modal" repeat="true">
<!-- Position Field. Type: Text. (joomla) -->
<field
type="text"
name="position"
label="COM_GETBIBLE_CONFIG_POSITION_LABEL"
size="10"
maxlength="50"
description="COM_GETBIBLE_CONFIG_POSITION_DESCRIPTION"
class="text_area"
message="COM_GETBIBLE_CONFIG_POSITION_MESSAGE"
hint="COM_GETBIBLE_CONFIG_POSITION_HINT"
autocomplete="on"
/>
<!-- Separator Field. Type: List. (joomla) -->
<field
type="list"
name="separator"
label="COM_GETBIBLE_CONFIG_SEPARATOR_LABEL"
class="list_class"
default="div">
<!-- Option Set. -->
<option value="none">
COM_GETBIBLE_CONFIG_NONE</option>
<option value="div">
COM_GETBIBLE_CONFIG_DIV</option>
<option value="list">
COM_GETBIBLE_CONFIG_LIST</option>
<option value="array">
COM_GETBIBLE_CONFIG_ARRAY</option>
<option value="break">
COM_GETBIBLE_CONFIG_BREAK</option>
</field>
<!-- Class Field. Type: Text. (joomla) -->
<field
type="text"
name="class"
label="COM_GETBIBLE_CONFIG_CLASS_LABEL"
size="50"
maxlength="150"
class="text_area"
filter="STRING"
message="COM_GETBIBLE_CONFIG_CLASS_MESSAGE"
hint="COM_GETBIBLE_CONFIG_CLASS_HINT"
autocomplete="on"
/>
</form>
</field>
<!-- Show_bottom_tag_position_card Field. Type: Radio. (joomla) -->
<field
type="radio"
name="show_bottom_tag_position_card"
label="COM_GETBIBLE_CONFIG_SHOW_BOTTOM_TAG_POSITION_CARD_LABEL"
class="btn-group btn-group-yesno"
default="1"
showon="activate_tags:1">
<!-- Option Set. -->
<option value="1">
COM_GETBIBLE_CONFIG_YES</option>
<option value="0">
COM_GETBIBLE_CONFIG_NO</option>
</field>
<!-- Bottom_tag_position_card_style Field. Type: List. (joomla) -->
<field
type="list"
name="bottom_tag_position_card_style"
label="COM_GETBIBLE_CONFIG_BOTTOM_TAG_POSITION_CARD_STYLE_LABEL"
class="list_class"
default="default"
showon="activate_tags:1[AND]show_bottom_tag_position_card:1">
<!-- Option Set. -->
<option value="default">
COM_GETBIBLE_CONFIG_DEFAULT</option>
<option value="primary">
COM_GETBIBLE_CONFIG_PRIMARY</option>
<option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option>
</field>
</fieldset> </fieldset>
<fieldset <fieldset
name="share_custom_config" name="share_custom_config"
@ -670,8 +850,8 @@
type="text" type="text"
name="class" name="class"
label="COM_GETBIBLE_CONFIG_CLASS_LABEL" label="COM_GETBIBLE_CONFIG_CLASS_LABEL"
size="10" size="50"
maxlength="50" maxlength="150"
class="text_area" class="text_area"
filter="STRING" filter="STRING"
message="COM_GETBIBLE_CONFIG_CLASS_MESSAGE" message="COM_GETBIBLE_CONFIG_CLASS_MESSAGE"
@ -1252,6 +1432,94 @@
<option value="secondary"> <option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option> COM_GETBIBLE_CONFIG_SECONDARY</option>
</field> </field>
<!-- Bottom_app_position Field. Type: Subform. (joomla) -->
<field
type="subform"
name="bottom_app_position"
label="COM_GETBIBLE_CONFIG_BOTTOM_APP_POSITION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
buttons="add,remove,move"
icon="list"
max="5"
>
<form hidden="true" name="list_bottom_app_position_modal" repeat="true">
<!-- Position Field. Type: Text. (joomla) -->
<field
type="text"
name="position"
label="COM_GETBIBLE_CONFIG_POSITION_LABEL"
size="10"
maxlength="50"
description="COM_GETBIBLE_CONFIG_POSITION_DESCRIPTION"
class="text_area"
message="COM_GETBIBLE_CONFIG_POSITION_MESSAGE"
hint="COM_GETBIBLE_CONFIG_POSITION_HINT"
autocomplete="on"
/>
<!-- Separator Field. Type: List. (joomla) -->
<field
type="list"
name="separator"
label="COM_GETBIBLE_CONFIG_SEPARATOR_LABEL"
class="list_class"
default="div">
<!-- Option Set. -->
<option value="none">
COM_GETBIBLE_CONFIG_NONE</option>
<option value="div">
COM_GETBIBLE_CONFIG_DIV</option>
<option value="list">
COM_GETBIBLE_CONFIG_LIST</option>
<option value="array">
COM_GETBIBLE_CONFIG_ARRAY</option>
<option value="break">
COM_GETBIBLE_CONFIG_BREAK</option>
</field>
<!-- Class Field. Type: Text. (joomla) -->
<field
type="text"
name="class"
label="COM_GETBIBLE_CONFIG_CLASS_LABEL"
size="50"
maxlength="150"
class="text_area"
filter="STRING"
message="COM_GETBIBLE_CONFIG_CLASS_MESSAGE"
hint="COM_GETBIBLE_CONFIG_CLASS_HINT"
autocomplete="on"
/>
</form>
</field>
<!-- Show_bottom_app_position_card Field. Type: Radio. (joomla) -->
<field
type="radio"
name="show_bottom_app_position_card"
label="COM_GETBIBLE_CONFIG_SHOW_BOTTOM_APP_POSITION_CARD_LABEL"
class="btn-group btn-group-yesno"
default="1">
<!-- Option Set. -->
<option value="1">
COM_GETBIBLE_CONFIG_YES</option>
<option value="0">
COM_GETBIBLE_CONFIG_NO</option>
</field>
<!-- Bottom_app_position_card_style Field. Type: List. (joomla) -->
<field
type="list"
name="bottom_app_position_card_style"
label="COM_GETBIBLE_CONFIG_BOTTOM_APP_POSITION_CARD_STYLE_LABEL"
class="list_class"
default="default"
showon="show_bottom_app_position_card:1">
<!-- Option Set. -->
<option value="default">
COM_GETBIBLE_CONFIG_DEFAULT</option>
<option value="primary">
COM_GETBIBLE_CONFIG_PRIMARY</option>
<option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option>
</field>
<!-- Debug Field. Type: Radio. (joomla) --> <!-- Debug Field. Type: Radio. (joomla) -->
<field <field
type="radio" type="radio"
@ -1458,6 +1726,96 @@
step="0.1" step="0.1"
showon="enable_open_ai:1" showon="enable_open_ai:1"
/> />
<!-- Bottom_ai_position Field. Type: Subform. (joomla) -->
<field
type="subform"
name="bottom_ai_position"
label="COM_GETBIBLE_CONFIG_BOTTOM_AI_POSITION_LABEL"
layout="joomla.form.field.subform.repeatable-table"
multiple="true"
buttons="add,remove,move"
icon="list"
max="5"
showon="enable_open_ai:1"
>
<form hidden="true" name="list_bottom_ai_position_modal" repeat="true">
<!-- Position Field. Type: Text. (joomla) -->
<field
type="text"
name="position"
label="COM_GETBIBLE_CONFIG_POSITION_LABEL"
size="10"
maxlength="50"
description="COM_GETBIBLE_CONFIG_POSITION_DESCRIPTION"
class="text_area"
message="COM_GETBIBLE_CONFIG_POSITION_MESSAGE"
hint="COM_GETBIBLE_CONFIG_POSITION_HINT"
autocomplete="on"
/>
<!-- Separator Field. Type: List. (joomla) -->
<field
type="list"
name="separator"
label="COM_GETBIBLE_CONFIG_SEPARATOR_LABEL"
class="list_class"
default="div">
<!-- Option Set. -->
<option value="none">
COM_GETBIBLE_CONFIG_NONE</option>
<option value="div">
COM_GETBIBLE_CONFIG_DIV</option>
<option value="list">
COM_GETBIBLE_CONFIG_LIST</option>
<option value="array">
COM_GETBIBLE_CONFIG_ARRAY</option>
<option value="break">
COM_GETBIBLE_CONFIG_BREAK</option>
</field>
<!-- Class Field. Type: Text. (joomla) -->
<field
type="text"
name="class"
label="COM_GETBIBLE_CONFIG_CLASS_LABEL"
size="50"
maxlength="150"
class="text_area"
filter="STRING"
message="COM_GETBIBLE_CONFIG_CLASS_MESSAGE"
hint="COM_GETBIBLE_CONFIG_CLASS_HINT"
autocomplete="on"
/>
</form>
</field>
<!-- Show_bottom_ai_position_card Field. Type: Radio. (joomla) -->
<field
type="radio"
name="show_bottom_ai_position_card"
label="COM_GETBIBLE_CONFIG_SHOW_BOTTOM_AI_POSITION_CARD_LABEL"
class="btn-group btn-group-yesno"
default="1"
showon="enable_open_ai:1">
<!-- Option Set. -->
<option value="1">
COM_GETBIBLE_CONFIG_YES</option>
<option value="0">
COM_GETBIBLE_CONFIG_NO</option>
</field>
<!-- Bottom_ai_position_card_style Field. Type: List. (joomla) -->
<field
type="list"
name="bottom_ai_position_card_style"
label="COM_GETBIBLE_CONFIG_BOTTOM_AI_POSITION_CARD_STYLE_LABEL"
class="list_class"
default="default"
showon="enable_open_ai:1[AND]show_bottom_ai_position_card:1">
<!-- Option Set. -->
<option value="default">
COM_GETBIBLE_CONFIG_DEFAULT</option>
<option value="primary">
COM_GETBIBLE_CONFIG_PRIMARY</option>
<option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option>
</field>
</fieldset> </fieldset>
<fieldset <fieldset
name="permissions" name="permissions"

View File

@ -218,7 +218,15 @@ COM_GETBIBLE_CONFIG_BOOKS_TAB_HINT="Books"
COM_GETBIBLE_CONFIG_BOOKS_TAB_LABEL="Books Tab" COM_GETBIBLE_CONFIG_BOOKS_TAB_LABEL="Books Tab"
COM_GETBIBLE_CONFIG_BOOKS_TAB_MESSAGE="Error! Please add some name here." COM_GETBIBLE_CONFIG_BOOKS_TAB_MESSAGE="Error! Please add some name here."
COM_GETBIBLE_CONFIG_BOTTOM="Bottom" COM_GETBIBLE_CONFIG_BOTTOM="Bottom"
COM_GETBIBLE_CONFIG_BOTTOM_AI_POSITION_CARD_STYLE_LABEL="Bottom AI Position Card Style"
COM_GETBIBLE_CONFIG_BOTTOM_AI_POSITION_LABEL="Bottom AI Positions"
COM_GETBIBLE_CONFIG_BOTTOM_APP_POSITION_CARD_STYLE_LABEL="Bottom APP Position Card Style"
COM_GETBIBLE_CONFIG_BOTTOM_APP_POSITION_LABEL="Bottom Bible Positions"
COM_GETBIBLE_CONFIG_BOTTOM_MENU_TYPE_LABEL="Bottom Menu Type" COM_GETBIBLE_CONFIG_BOTTOM_MENU_TYPE_LABEL="Bottom Menu Type"
COM_GETBIBLE_CONFIG_BOTTOM_SEARCH_POSITION_CARD_STYLE_LABEL="Bottom Search Position Card Style"
COM_GETBIBLE_CONFIG_BOTTOM_SEARCH_POSITION_LABEL="Bottom Search Positions"
COM_GETBIBLE_CONFIG_BOTTOM_TAG_POSITION_CARD_STYLE_LABEL="Bottom Tag Position Card Style"
COM_GETBIBLE_CONFIG_BOTTOM_TAG_POSITION_LABEL="Bottom Tag Positions"
COM_GETBIBLE_CONFIG_BREAK="break" COM_GETBIBLE_CONFIG_BREAK="break"
COM_GETBIBLE_CONFIG_CASE_INSENSITIVE="Case Insensitive" COM_GETBIBLE_CONFIG_CASE_INSENSITIVE="Case Insensitive"
COM_GETBIBLE_CONFIG_CASE_SENSITIVE="Case Sensitive" COM_GETBIBLE_CONFIG_CASE_SENSITIVE="Case Sensitive"
@ -297,7 +305,7 @@ COM_GETBIBLE_CONFIG_NAME_HINT="Tab Name"
COM_GETBIBLE_CONFIG_NAME_LABEL="Tab" COM_GETBIBLE_CONFIG_NAME_LABEL="Tab"
COM_GETBIBLE_CONFIG_NAME_MESSAGE="Error! Please add some name here." COM_GETBIBLE_CONFIG_NAME_MESSAGE="Error! Please add some name here."
COM_GETBIBLE_CONFIG_NO="No" COM_GETBIBLE_CONFIG_NO="No"
COM_GETBIBLE_CONFIG_NONE="None" COM_GETBIBLE_CONFIG_NONE="none"
COM_GETBIBLE_CONFIG_NOTES="Notes" COM_GETBIBLE_CONFIG_NOTES="Notes"
COM_GETBIBLE_CONFIG_ONLY_EXTRA="Only Extra" COM_GETBIBLE_CONFIG_ONLY_EXTRA="Only Extra"
COM_GETBIBLE_CONFIG_OPENAI_DOCUMENTATION_NOTE_DESCRIPTION="<p>Please review the OpenAI API documentation for creating a chat conversation at <a href='https://platform.openai.com/docs/api-reference/chat/create'>this link</a>. The document provides a comprehensive guide on parameters and methods to create chat completion using OpenAI's model. It includes instructions on:</p><ul> <li>How to post a request to create model responses</li> <li>The format for the request body including role, model, messages, and optional parameters such as name, content, and function_call</li> <li>Different ways to control the model's response such as temperature and top_p</li> <li>How to control the number of generated chat completion choices, the stop sequences, and maximum number of tokens</li> <li>Utilizing penalties and biases for managing the output</li> <li>Additional features like streaming and user tracking for abuse monitoring</li></ul>" COM_GETBIBLE_CONFIG_OPENAI_DOCUMENTATION_NOTE_DESCRIPTION="<p>Please review the OpenAI API documentation for creating a chat conversation at <a href='https://platform.openai.com/docs/api-reference/chat/create'>this link</a>. The document provides a comprehensive guide on parameters and methods to create chat completion using OpenAI's model. It includes instructions on:</p><ul> <li>How to post a request to create model responses</li> <li>The format for the request body including role, model, messages, and optional parameters such as name, content, and function_call</li> <li>Different ways to control the model's response such as temperature and top_p</li> <li>How to control the number of generated chat completion choices, the stop sequences, and maximum number of tokens</li> <li>Utilizing penalties and biases for managing the output</li> <li>Additional features like streaming and user tracking for abuse monitoring</li></ul>"
@ -391,7 +399,11 @@ COM_GETBIBLE_CONFIG_SHOW_API_LINK_LABEL="API Link"
COM_GETBIBLE_CONFIG_SHOW_BOOKS_CARD_LABEL="Show Books Card" COM_GETBIBLE_CONFIG_SHOW_BOOKS_CARD_LABEL="Show Books Card"
COM_GETBIBLE_CONFIG_SHOW_BOOKS_ICON_LABEL="Show Books Icon" COM_GETBIBLE_CONFIG_SHOW_BOOKS_ICON_LABEL="Show Books Icon"
COM_GETBIBLE_CONFIG_SHOW_BOOKS_TAB_TEXT_LABEL="Show Books Tab Text" COM_GETBIBLE_CONFIG_SHOW_BOOKS_TAB_TEXT_LABEL="Show Books Tab Text"
COM_GETBIBLE_CONFIG_SHOW_BOTTOM_AI_POSITION_CARD_LABEL="Show Bottom AI Position Card"
COM_GETBIBLE_CONFIG_SHOW_BOTTOM_APP_POSITION_CARD_LABEL="Show Bottom APP Position Card"
COM_GETBIBLE_CONFIG_SHOW_BOTTOM_MENU_LABEL="Show Bottom Menu" COM_GETBIBLE_CONFIG_SHOW_BOTTOM_MENU_LABEL="Show Bottom Menu"
COM_GETBIBLE_CONFIG_SHOW_BOTTOM_SEARCH_POSITION_CARD_LABEL="Show Bottom Search Position Card"
COM_GETBIBLE_CONFIG_SHOW_BOTTOM_TAG_POSITION_CARD_LABEL="Show Bottom Tag Position Card"
COM_GETBIBLE_CONFIG_SHOW_CHAPTERS_CARD_LABEL="Show Chapters Card" COM_GETBIBLE_CONFIG_SHOW_CHAPTERS_CARD_LABEL="Show Chapters Card"
COM_GETBIBLE_CONFIG_SHOW_CHAPTERS_ICON_LABEL="Show Chapters Icon" COM_GETBIBLE_CONFIG_SHOW_CHAPTERS_ICON_LABEL="Show Chapters Icon"
COM_GETBIBLE_CONFIG_SHOW_CHAPTERS_TAB_TEXT_LABEL="Show Chapters Tab Text" COM_GETBIBLE_CONFIG_SHOW_CHAPTERS_TAB_TEXT_LABEL="Show Chapters Tab Text"

View File

@ -0,0 +1 @@

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="4" method="upgrade"> <extension type="component" version="4" method="upgrade">
<name>COM_GETBIBLE</name> <name>COM_GETBIBLE</name>
<creationDate>7th August, 2023</creationDate> <creationDate>10th August, 2023</creationDate>
<author>Llewellyn van der Merwe</author> <author>Llewellyn van der Merwe</author>
<authorEmail>joomla@vdm.io</authorEmail> <authorEmail>joomla@vdm.io</authorEmail>
<authorUrl>https://getbible.net</authorUrl> <authorUrl>https://getbible.net</authorUrl>
<copyright>Copyright (C) 2015. All Rights Reserved</copyright> <copyright>Copyright (C) 2015. All Rights Reserved</copyright>
<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license> <license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
<version>2.0.17</version> <version>2.0.18</version>
<description><![CDATA[ <description><![CDATA[
<h1>Get Bible (v.2.0.17)</h1> <h1>Get Bible (v.2.0.18)</h1>
<div style="clear: both;"></div> <div style="clear: both;"></div>
<p>Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn't just a typical extension; it's a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide. <p>Welcome to the next level of scripture engagement - The Bible for Joomla! Our purpose is to bring the Word of God to every person, in their native language, entirely free. This isn't just a typical extension; it's a groundbreaking tool developed to span language divides and deliver a rich, customizable Bible study experience to users worldwide.

View File

@ -1108,7 +1108,7 @@ class com_getbibleInstallerScript
$query = $db->getQuery(true); $query = $db->getQuery(true);
// Field to update. // Field to update.
$fields = array( $fields = array(
$db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","default_translation":"kjv","show_install_button":"0","show_getbible_logo":"1","show_getbible_link":"1","show_hash_validation":"1","show_api_link":"1","activate_search":"0","search_found_color":"#4747ff","table_selection_color":"#dfdfdf","search_words":"1","search_match":"1","search_case":"1","activate_notes":"0","activate_tags":"0","allow_untagging":"0","activate_sharing":"1","verse_layout_share":"1","verse_number_share":"1","local_link_share":"1","text_reference_share":"3","type_translation_share":"2","default_format_share":"1","verse_selected_color":"#4747ff","show_header":"1","verse_per_line":"1","show_top_menu":"1","top_menu_type":"1","show_bottom_menu":"0","bottom_menu_type":"1","previous_next_navigation":"1","set_custom_tabs":"0","custom_tabs":"div","set_default_tab_names":"0","custom_icons":"0","show_scripture_tab_text":"1","show_scripture_icon":"1","show_scripture_card":"1","scripture_card_style":"default","show_books_tab_text":"1","show_books_icon":"1","show_books_card":"1","books_card_style":"default","show_chapters_tab_text":"1","show_chapters_icon":"1","show_chapters_card":"1","chapters_card_style":"default","show_translations_tab_text":"1","show_translations_icon":"1","show_translations_card":"1","translations_card_style":"default","show_settings":"0","show_settings_tab_text":"1","show_settings_icon":"1","show_settings_card":"1","settings_card_style":"default","show_details":"1","show_details_tab_text":"1","show_details_icon":"1","show_details_card":"1","details_card_style":"default","debug":"0","enable_open_ai":"0","openai_model":"gpt-4","openai_token":"secret","enable_open_ai_org":"0","openai_org_token":"secret","openai_max_tokens":"300","openai_temperature":"1","openai_top_p":"1","openai_n":"1","openai_presence_penalty":"0","openai_frequency_penalty":"0","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":""}'), $db->quoteName('params') . ' = ' . $db->quote('{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","default_translation":"kjv","show_install_button":"0","show_getbible_logo":"1","show_getbible_link":"1","show_hash_validation":"1","show_api_link":"1","activate_search":"0","search_found_color":"#4747ff","table_selection_color":"#dfdfdf","search_words":"1","search_match":"1","search_case":"1","bottom_search_position":"div","show_bottom_search_position_card":"1","bottom_search_position_card_style":"default","activate_notes":"0","activate_tags":"0","allow_untagging":"0","bottom_tag_position":"div","show_bottom_tag_position_card":"1","bottom_tag_position_card_style":"default","activate_sharing":"1","verse_layout_share":"1","verse_number_share":"1","local_link_share":"1","text_reference_share":"3","type_translation_share":"2","default_format_share":"1","verse_selected_color":"#4747ff","show_header":"1","verse_per_line":"1","show_top_menu":"1","top_menu_type":"1","show_bottom_menu":"0","bottom_menu_type":"1","previous_next_navigation":"1","set_custom_tabs":"0","custom_tabs":"div","set_default_tab_names":"0","custom_icons":"0","show_scripture_tab_text":"1","show_scripture_icon":"1","show_scripture_card":"1","scripture_card_style":"default","show_books_tab_text":"1","show_books_icon":"1","show_books_card":"1","books_card_style":"default","show_chapters_tab_text":"1","show_chapters_icon":"1","show_chapters_card":"1","chapters_card_style":"default","show_translations_tab_text":"1","show_translations_icon":"1","show_translations_card":"1","translations_card_style":"default","show_settings":"0","show_settings_tab_text":"1","show_settings_icon":"1","show_settings_card":"1","settings_card_style":"default","show_details":"1","show_details_tab_text":"1","show_details_icon":"1","show_details_card":"1","details_card_style":"default","bottom_app_position":"div","show_bottom_app_position_card":"1","bottom_app_position_card_style":"default","debug":"0","enable_open_ai":"0","openai_model":"gpt-4","openai_token":"secret","enable_open_ai_org":"0","openai_org_token":"secret","openai_max_tokens":"300","openai_temperature":"1","openai_top_p":"1","openai_n":"1","openai_presence_penalty":"0","openai_frequency_penalty":"0","bottom_ai_position":"div","show_bottom_ai_position_card":"1","bottom_ai_position_card_style":"default","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":""}'),
); );
// Condition. // Condition.
$conditions = array( $conditions = array(
@ -1539,7 +1539,7 @@ class com_getbibleInstallerScript
echo '<a target="_blank" href="https://getbible.net" title="Get Bible"> echo '<a target="_blank" href="https://getbible.net" title="Get Bible">
<img src="components/com_getbible/assets/images/vdm-component.jpg"/> <img src="components/com_getbible/assets/images/vdm-component.jpg"/>
</a> </a>
<h3>Upgrade to Version 2.0.17 Was Successful! Let us know if anything is not working as expected.</h3>'; <h3>Upgrade to Version 2.0.18 Was Successful! Let us know if anything is not working as expected.</h3>';
// Set db if not set already. // Set db if not set already.
if (!isset($db)) if (!isset($db))

View File

@ -118,68 +118,68 @@ class ScrollMemory {
} }
class DatabaseManager { class DatabaseManager {
#dbName; dbName;
#storeName; storeName;
#fields; fields;
#db; db;
#uniqueFields; uniqueFields;
#isReady = false; isReady = false;
#readyPromise = null; readyPromise = null;
#data; data;
constructor(dbName, storeName, fields) { constructor(dbName, storeName, fields) {
this.#dbName = dbName; this.dbName = dbName;
this.#storeName = storeName; this.storeName = storeName;
this.#fields = fields; this.fields = fields;
this.#uniqueFields = fields.filter((field) => field[1]).map((field) => field[0]); this.uniqueFields = fields.filter((field) => field[1]).map((field) => field[0]);
this.#data = JSON.parse(localStorage.getItem(this.#storeName)) || []; this.data = JSON.parse(localStorage.getItem(this.storeName)) || [];
if (window.indexedDB) { if (window.indexedDB) {
this.#readyPromise = this.#openDB().then(() => { this.readyPromise = this.openDB().then(() => {
this.#isReady = true; this.isReady = true;
}); });
} else { } else {
this.#isReady = true; this.isReady = true;
} }
} }
#openDB = () => { openDB = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const request = window.indexedDB.open(this.#dbName); const request = window.indexedDB.open(this.dbName);
request.onerror = (e) => { request.onerror = (e) => {
console.log('Error opening db', e); console.log('Error opening db', e);
reject('Error'); reject('Error');
}; };
request.onsuccess = (e) => { request.onsuccess = (e) => {
this.#db = e.target.result; this.db = e.target.result;
resolve(); resolve();
}; };
request.onupgradeneeded = (e) => { request.onupgradeneeded = (e) => {
let db = e.target.result; let db = e.target.result;
let store = db.createObjectStore(this.#storeName, { autoIncrement: true, keyPath: 'id' }); let store = db.createObjectStore(this.storeName, { autoIncrement: true, keyPath: 'id' });
this.#uniqueFields.forEach((field) => { this.uniqueFields.forEach((field) => {
store.createIndex(field, field, { unique: true }); store.createIndex(field, field, { unique: true });
}); });
}; };
}); });
} }
#waitUntilReady = () => { waitUntilReady = () => {
return this.#isReady ? Promise.resolve() : this.#readyPromise; return this.isReady ? Promise.resolve() : this.readyPromise;
} }
#saveToLocalStorage = () => { saveToLocalStorage = () => {
localStorage.setItem(this.#storeName, JSON.stringify(this.#data)); localStorage.setItem(this.storeName, JSON.stringify(this.data));
} }
async set(data) { async set(data) {
return this.#waitUntilReady().then(() => { return this.waitUntilReady().then(() => {
if (!this.#db) { if (!this.db) {
let existingItem = this.#data.find((item) => this.#uniqueFields.some((field) => item[field] === data[field])); let existingItem = this.data.find((item) => this.uniqueFields.some((field) => item[field] === data[field]));
if (existingItem) { if (existingItem) {
Object.assign(existingItem, data); Object.assign(existingItem, data);
} else { } else {
this.#data.push(data); this.data.push(data);
} }
this.#saveToLocalStorage(); this.saveToLocalStorage();
} else { } else {
const transaction = this.#db.transaction([this.#storeName], 'readwrite'); const transaction = this.db.transaction([this.storeName], 'readwrite');
const store = transaction.objectStore(this.#storeName); const store = transaction.objectStore(this.storeName);
this.#uniqueFields.forEach((field) => { this.uniqueFields.forEach((field) => {
const index = store.index(field); const index = store.index(field);
const getRequest = index.get(data[field]); const getRequest = index.get(data[field]);
getRequest.onsuccess = () => { getRequest.onsuccess = () => {
@ -199,16 +199,16 @@ class DatabaseManager {
}); });
} }
async get(value, key, field = 'guid') { async get(value, key, field = 'guid') {
return this.#waitUntilReady().then(() => { return this.waitUntilReady().then(() => {
if (!this.#db) { if (!this.db) {
// If IndexedDB is not available, get value from local storage // If IndexedDB is not available, get value from local storage
const item = this.#data.find(item => item[field] === value); const item = this.data.find(item => item[field] === value);
return item ? item[key] : undefined; return item ? item[key] : undefined;
} else { } else {
// If IndexedDB is available, get value from the database // If IndexedDB is available, get value from the database
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let transaction = this.#db.transaction([this.#storeName], "readonly"); let transaction = this.db.transaction([this.storeName], "readonly");
let store = transaction.objectStore(this.#storeName); let store = transaction.objectStore(this.storeName);
let request = store.index(field).get(value); let request = store.index(field).get(value);
request.onsuccess = e => { request.onsuccess = e => {
const item = e.target.result; const item = e.target.result;
@ -222,13 +222,13 @@ class DatabaseManager {
}); });
} }
async item(value, field = 'guid') { async item(value, field = 'guid') {
return this.#waitUntilReady().then(() => { return this.waitUntilReady().then(() => {
if (!this.#db) { if (!this.db) {
return this.#data.find((item) => item[field] === value); return this.data.find((item) => item[field] === value);
} else { } else {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const transaction = this.#db.transaction([this.#storeName], 'readonly'); const transaction = this.db.transaction([this.storeName], 'readonly');
const store = transaction.objectStore(this.#storeName); const store = transaction.objectStore(this.storeName);
const index = store.index(field); const index = store.index(field);
const getRequest = index.get(value); const getRequest = index.get(value);
getRequest.onsuccess = () => { getRequest.onsuccess = () => {
@ -242,13 +242,13 @@ class DatabaseManager {
}); });
} }
async all() { async all() {
return this.#waitUntilReady().then(() => { return this.waitUntilReady().then(() => {
if (!this.#db) { if (!this.db) {
return this.#data; return this.data;
} else { } else {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const transaction = this.#db.transaction([this.#storeName], 'readonly'); const transaction = this.db.transaction([this.storeName], 'readonly');
const store = transaction.objectStore(this.#storeName); const store = transaction.objectStore(this.storeName);
const getAllRequest = store.getAll(); const getAllRequest = store.getAll();
getAllRequest.onsuccess = () => { getAllRequest.onsuccess = () => {
resolve(getAllRequest.result); resolve(getAllRequest.result);
@ -261,17 +261,17 @@ class DatabaseManager {
}); });
} }
async remove(value, field = 'guid') { async remove(value, field = 'guid') {
return this.#waitUntilReady().then(() => { return this.waitUntilReady().then(() => {
if (!this.#db) { if (!this.db) {
// Handle removal from localStorage // Handle removal from localStorage
this.#data = this.#data.filter(item => item[field] !== value); this.data = this.data.filter(item => item[field] !== value);
this.#saveToLocalStorage(); this.saveToLocalStorage();
return Promise.resolve(); return Promise.resolve();
} else { } else {
// Handle removal from IndexedDB // Handle removal from IndexedDB
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const transaction = this.#db.transaction([this.#storeName], 'readwrite'); const transaction = this.db.transaction([this.storeName], 'readwrite');
const store = transaction.objectStore(this.#storeName); const store = transaction.objectStore(this.storeName);
let index = store.index(field); let index = store.index(field);
let request = index.openCursor(IDBKeyRange.only(value)); let request = index.openCursor(IDBKeyRange.only(value));
request.onsuccess = e => { request.onsuccess = e => {

View File

@ -223,7 +223,7 @@ COM_GETBIBLE_TOP_P="Top P"
COM_GETBIBLE_TOTALTOKENS="TotalTokens" COM_GETBIBLE_TOTALTOKENS="TotalTokens"
COM_GETBIBLE_TO_PERFORM_THIS_OPEN_THE_GLOBAL_OPTIONS_SECTION_OF_THE_GETBIBLE_BACKEND_LOCATE_THE_GLOBAL_TAB_AND_SWITCH_SHOW_INSTALL_BUTTON_TO_NO_THIS_STEP_ENSURES_THAT_YOUR_SYSTEM_RESOURCES_ARE_NOT_UTILIZED_UNNECESSARILY_ONCE_YOU_HAVE_SUCCESSFULLY_INSTALLED_ALL_YOUR_DESIRED_BIBLE_TRANSLATIONS="To perform this, open the 'Global Options' section of the getBible backend, locate the 'Global' Tab, and switch 'Show Install Button' to [No]. This step ensures that your system resources are not utilized unnecessarily once you have successfully installed all your desired Bible translations." COM_GETBIBLE_TO_PERFORM_THIS_OPEN_THE_GLOBAL_OPTIONS_SECTION_OF_THE_GETBIBLE_BACKEND_LOCATE_THE_GLOBAL_TAB_AND_SWITCH_SHOW_INSTALL_BUTTON_TO_NO_THIS_STEP_ENSURES_THAT_YOUR_SYSTEM_RESOURCES_ARE_NOT_UTILIZED_UNNECESSARILY_ONCE_YOU_HAVE_SUCCESSFULLY_INSTALLED_ALL_YOUR_DESIRED_BIBLE_TRANSLATIONS="To perform this, open the 'Global Options' section of the getBible backend, locate the 'Global' Tab, and switch 'Show Install Button' to [No]. This step ensures that your system resources are not utilized unnecessarily once you have successfully installed all your desired Bible translations."
COM_GETBIBLE_TO_UNTAG_A_VERSE_DRAG_AND_DROP_THE_DESIRED_TAG_FROM_ACTIVE_TO_THE_AVAILABLE_TAGS_AREA="To un-tag a verse, drag and drop the desired tag from active to the available tags area." COM_GETBIBLE_TO_UNTAG_A_VERSE_DRAG_AND_DROP_THE_DESIRED_TAG_FROM_ACTIVE_TO_THE_AVAILABLE_TAGS_AREA="To un-tag a verse, drag and drop the desired tag from active to the available tags area."
COM_GETBIBLE_TO_USE_A_DIFFERENT_PERSISTENT_SESSION_KEY_SIMPLY_ADD_IT_ABOVE_AND_CLICK_THE_BUTTON_BELOW_THAT_SAYS_LOAD_PREVIOUS_PERSISTENT_SESSION="To use a different persistent session key, simply add it above, and click the button below that says: Load Previous Persistent Session." COM_GETBIBLE_TO_USE_A_DIFFERENT_PERSISTENT_SESSION_KEY_SIMPLY_ADD_IT_ABOVE_AND_CLICK_THE_BUTTON_BELOW="To use a different persistent session key, simply add it above, and click the button below."
COM_GETBIBLE_TRANSLATION="Translation" COM_GETBIBLE_TRANSLATION="Translation"
COM_GETBIBLE_TRANSLATIONS="Translations" COM_GETBIBLE_TRANSLATIONS="Translations"
COM_GETBIBLE_TYPE_YOUR_SEARCH_PHRASE_INTO_THE_SEARCH_BOX_AND_PRESS_ENTER_TO_SEARCH_THE_BSCRIPTURESB_DAILY="Type your search phrase into the search box and press [ENTER] to search the <b>Scriptures</b> daily!" COM_GETBIBLE_TYPE_YOUR_SEARCH_PHRASE_INTO_THE_SEARCH_BOX_AND_PRESS_ENTER_TO_SEARCH_THE_BSCRIPTURESB_DAILY="Type your search phrase into the search box and press [ENTER] to search the <b>Scriptures</b> daily!"

View File

@ -735,6 +735,39 @@
<option value="secondary"> <option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option> COM_GETBIBLE_CONFIG_SECONDARY</option>
</field> </field>
<!-- Show_bottom_app_position_card Field. Type: Radio. (joomla) -->
<field
type="radio"
name="show_bottom_app_position_card"
label="COM_GETBIBLE_CONFIG_SHOW_BOTTOM_APP_POSITION_CARD_LABEL"
class="btn-group btn-group-yesno"
default="">
<!-- Global & Option Set. -->
<option value="">
JGLOBAL_USE_GLOBAL</option>
<option value="1">
COM_GETBIBLE_CONFIG_YES</option>
<option value="0">
COM_GETBIBLE_CONFIG_NO</option>
</field>
<!-- Bottom_app_position_card_style Field. Type: List. (joomla) -->
<field
type="list"
name="bottom_app_position_card_style"
label="COM_GETBIBLE_CONFIG_BOTTOM_APP_POSITION_CARD_STYLE_LABEL"
class="list_class"
default=""
showon="show_bottom_app_position_card:1">
<!-- Global & Option Set. -->
<option value="">
JGLOBAL_USE_GLOBAL</option>
<option value="default">
COM_GETBIBLE_CONFIG_DEFAULT</option>
<option value="primary">
COM_GETBIBLE_CONFIG_PRIMARY</option>
<option value="secondary">
COM_GETBIBLE_CONFIG_SECONDARY</option>
</field>
<!-- Debug Field. Type: Radio. (joomla) --> <!-- Debug Field. Type: Radio. (joomla) -->
<field <field
type="radio" type="radio"

View File

@ -31,7 +31,7 @@ defined('_JEXEC') or die('Restricted access');
<?php echo JLayoutHelper::render('inputbox', ['id' => 'getbible-settings-session-linker', 'label' => JText::_('COM_GETBIBLE_PERSISTENT_SESSION_KEY'), 'class_other' => 'getbible-linker-guid-input uk-text-center', 'value' => $this->linker['guid']]); ?> <?php echo JLayoutHelper::render('inputbox', ['id' => 'getbible-settings-session-linker', 'label' => JText::_('COM_GETBIBLE_PERSISTENT_SESSION_KEY'), 'class_other' => 'getbible-linker-guid-input uk-text-center', 'value' => $this->linker['guid']]); ?>
<button id="getbible-settings-session-copy" class="uk-button uk-button-primary uk-width-1-1 uk-margin-small-bottom" uk-tooltip="<?php echo JText::_('COM_GETBIBLE_YOU_CAN_SHARE_YOUR_SESSION_WITH_LOVED_ONES_SO_THEY_CAN_SEE_YOUR_NOTES_AND_TAGS'); ?>"><?php echo JText::_('COM_GETBIBLE_SHARE_YOUR_SESSION'); ?></button> <button id="getbible-settings-session-copy" class="uk-button uk-button-primary uk-width-1-1 uk-margin-small-bottom" uk-tooltip="<?php echo JText::_('COM_GETBIBLE_YOU_CAN_SHARE_YOUR_SESSION_WITH_LOVED_ONES_SO_THEY_CAN_SEE_YOUR_NOTES_AND_TAGS'); ?>"><?php echo JText::_('COM_GETBIBLE_SHARE_YOUR_SESSION'); ?></button>
<button id="getbible-settings-session-name-update" class="uk-button uk-button-primary uk-width-1-1 uk-margin-small-bottom" uk-tooltip="<?php echo JText::_('COM_GETBIBLE_YOU_CAN_CHANGE_YOUR_SESSION_NAME_TO_SOMETHING_MORE_RECOGNIZABLE'); ?>"><?php echo JText::_('COM_GETBIBLE_UPDATE_PERSISTENT_SESSION_NAME'); ?></button> <button id="getbible-settings-session-name-update" class="uk-button uk-button-primary uk-width-1-1 uk-margin-small-bottom" uk-tooltip="<?php echo JText::_('COM_GETBIBLE_YOU_CAN_CHANGE_YOUR_SESSION_NAME_TO_SOMETHING_MORE_RECOGNIZABLE'); ?>"><?php echo JText::_('COM_GETBIBLE_UPDATE_PERSISTENT_SESSION_NAME'); ?></button>
<p class="uk-text-muted"><?php echo JText::_('COM_GETBIBLE_TO_USE_A_DIFFERENT_PERSISTENT_SESSION_KEY_SIMPLY_ADD_IT_ABOVE_AND_CLICK_THE_BUTTON_BELOW_THAT_SAYS_LOAD_PREVIOUS_PERSISTENT_SESSION'); ?></p> <p class="uk-text-muted"><?php echo JText::_('COM_GETBIBLE_TO_USE_A_DIFFERENT_PERSISTENT_SESSION_KEY_SIMPLY_ADD_IT_ABOVE_AND_CLICK_THE_BUTTON_BELOW'); ?></p>
<button id="getbible-settings-session-load" class="uk-button uk-button-default uk-width-1-1 uk-margin-small-bottom"><?php echo JText::_('COM_GETBIBLE_LOAD_PREVIOUS_PERSISTENT_SESSION'); ?></button> <button id="getbible-settings-session-load" class="uk-button uk-button-default uk-width-1-1 uk-margin-small-bottom"><?php echo JText::_('COM_GETBIBLE_LOAD_PREVIOUS_PERSISTENT_SESSION'); ?></button>
</div> </div>
</div> </div>

View File

@ -82,4 +82,11 @@ if ($this->params->get('show_details') == 1)
<?php if ($this->params->get('set_custom_tabs') == 1): ?> <?php if ($this->params->get('set_custom_tabs') == 1): ?>
<?php echo $this->loadTemplate('getbibleappcustomtabs'); ?> <?php echo $this->loadTemplate('getbibleappcustomtabs'); ?>
<?php endif; ?> <?php endif; ?>
</ul> </ul>
<?php
$this->getBibleModules = [
'position' => 'bottom_app_position',
'page' => 'GetBible'
];
echo $this->loadTemplate('getbiblemodules');
?>

View File

@ -0,0 +1,61 @@
<?php
/*----------------------------------------------------------------------------------| io.vdm.dev |----/
Vast Development Method
/-------------------------------------------------------------------------------------------------------/
@package getBible.net
@created 3rd December, 2015
@author Llewellyn van der Merwe <https://getbible.net>
@git Get Bible <https://git.vdm.dev/getBible>
@github Get Bible <https://github.com/getBible>
@support Get Bible <https://git.vdm.dev/getBible/support>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use VDM\Joomla\Utilities\ObjectHelper;
$modules = $this->params->get($this->getBibleModules['position']);
$position_card = '';
$positions = [];
if (ObjectHelper::check($modules))
{
foreach ($modules as $module)
{
if (isset($module->position) && strlen($module->position) > 0)
{
if (($content = $this->getModules($module->position, $module->separator ?? '', $module->class ?? '')) !== false)
{
$positions[$module->position] = $content;
}
else
{
$positions[$module->position] = JLayoutHelper::render('modulepositionerror', ['position' => $module->position, 'page' => $this->getBibleModules['page']]);
}
}
}
$position_card = ($this->params->get('show_' . $this->getBibleModules['position'] . '_card') == 1) ? 'uk-card uk-card-' . $this->params->get($this->getBibleModules['position'] . '_card_style', 'default') . ' uk-card-body uk-margin' : 'uk-margin';
}
?>
<?php if ($positions !== []): ?>
<div class="<?php echo $this->getBibleModules['class'] ?? 'uk-margin'; ?>">
<?php foreach ($positions as $mod): ?>
<div class="<?php echo $position_card; ?>">
<?php if (is_array($mod)): ?>
<?php foreach ($mod as $pos): ?>
<?php echo $pos; ?>
<?php endforeach; ?>
<?php elseif (is_string($mod)): ?>
<div uk-grid>
<?php echo $mod; ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>

View File

@ -17,10 +17,10 @@
// No direct access to this file // No direct access to this file
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.module.helper'); use Joomla\CMS\Helper\ModuleHelper as JModuleHelper;
use VDM\Joomla\GetBible\Factory;
use Joomla\CMS\MVC\View\HtmlView; use Joomla\CMS\MVC\View\HtmlView;
use VDM\Joomla\GetBible\Factory;
/** /**
* Getbible Html View class for the App * Getbible Html View class for the App
@ -929,7 +929,6 @@ class GetbibleViewApp extends HtmlView
default: default:
return implode('<br />', $this->setModules[$position]); return implode('<br />', $this->setModules[$position]);
break; break;
} }
} }
return false; return false;

View File

@ -70,4 +70,11 @@ if ($this->params->get('show_openai_details', 1) == 1)
<?php if ($this->params->get('set_custom_ai_tabs') == 1): ?> <?php if ($this->params->get('set_custom_ai_tabs') == 1): ?>
<?php echo $this->loadTemplate('getbibleaicustomtabs'); ?> <?php echo $this->loadTemplate('getbibleaicustomtabs'); ?>
<?php endif; ?> <?php endif; ?>
</ul> </ul>
<?php
$this->getBibleModules = [
'position' => 'bottom_ai_position',
'page' => 'GetBible AI'
];
echo $this->loadTemplate('getbiblemodules');
?>

View File

@ -0,0 +1,61 @@
<?php
/*----------------------------------------------------------------------------------| io.vdm.dev |----/
Vast Development Method
/-------------------------------------------------------------------------------------------------------/
@package getBible.net
@created 3rd December, 2015
@author Llewellyn van der Merwe <https://getbible.net>
@git Get Bible <https://git.vdm.dev/getBible>
@github Get Bible <https://github.com/getBible>
@support Get Bible <https://git.vdm.dev/getBible/support>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use VDM\Joomla\Utilities\ObjectHelper;
$modules = $this->params->get($this->getBibleModules['position']);
$position_card = '';
$positions = [];
if (ObjectHelper::check($modules))
{
foreach ($modules as $module)
{
if (isset($module->position) && strlen($module->position) > 0)
{
if (($content = $this->getModules($module->position, $module->separator ?? '', $module->class ?? '')) !== false)
{
$positions[$module->position] = $content;
}
else
{
$positions[$module->position] = JLayoutHelper::render('modulepositionerror', ['position' => $module->position, 'page' => $this->getBibleModules['page']]);
}
}
}
$position_card = ($this->params->get('show_' . $this->getBibleModules['position'] . '_card') == 1) ? 'uk-card uk-card-' . $this->params->get($this->getBibleModules['position'] . '_card_style', 'default') . ' uk-card-body uk-margin' : 'uk-margin';
}
?>
<?php if ($positions !== []): ?>
<div class="<?php echo $this->getBibleModules['class'] ?? 'uk-margin'; ?>">
<?php foreach ($positions as $mod): ?>
<div class="<?php echo $position_card; ?>">
<?php if (is_array($mod)): ?>
<?php foreach ($mod as $pos): ?>
<?php echo $pos; ?>
<?php endforeach; ?>
<?php elseif (is_string($mod)): ?>
<div uk-grid>
<?php echo $mod; ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>

View File

@ -17,7 +17,7 @@
// No direct access to this file // No direct access to this file
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.module.helper'); use Joomla\CMS\Helper\ModuleHelper as JModuleHelper;
use Joomla\CMS\MVC\View\HtmlView; use Joomla\CMS\MVC\View\HtmlView;
@ -162,7 +162,6 @@ class GetbibleViewOpenai extends HtmlView
default: default:
return implode('<br />', $this->setModules[$position]); return implode('<br />', $this->setModules[$position]);
break; break;
} }
} }
return false; return false;

View File

@ -0,0 +1,61 @@
<?php
/*----------------------------------------------------------------------------------| io.vdm.dev |----/
Vast Development Method
/-------------------------------------------------------------------------------------------------------/
@package getBible.net
@created 3rd December, 2015
@author Llewellyn van der Merwe <https://getbible.net>
@git Get Bible <https://git.vdm.dev/getBible>
@github Get Bible <https://github.com/getBible>
@support Get Bible <https://git.vdm.dev/getBible/support>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use VDM\Joomla\Utilities\ObjectHelper;
$modules = $this->params->get($this->getBibleModules['position']);
$position_card = '';
$positions = [];
if (ObjectHelper::check($modules))
{
foreach ($modules as $module)
{
if (isset($module->position) && strlen($module->position) > 0)
{
if (($content = $this->getModules($module->position, $module->separator ?? '', $module->class ?? '')) !== false)
{
$positions[$module->position] = $content;
}
else
{
$positions[$module->position] = JLayoutHelper::render('modulepositionerror', ['position' => $module->position, 'page' => $this->getBibleModules['page']]);
}
}
}
$position_card = ($this->params->get('show_' . $this->getBibleModules['position'] . '_card') == 1) ? 'uk-card uk-card-' . $this->params->get($this->getBibleModules['position'] . '_card_style', 'default') . ' uk-card-body uk-margin' : 'uk-margin';
}
?>
<?php if ($positions !== []): ?>
<div class="<?php echo $this->getBibleModules['class'] ?? 'uk-margin'; ?>">
<?php foreach ($positions as $mod): ?>
<div class="<?php echo $position_card; ?>">
<?php if (is_array($mod)): ?>
<?php foreach ($mod as $pos): ?>
<?php echo $pos; ?>
<?php endforeach; ?>
<?php elseif (is_string($mod)): ?>
<div uk-grid>
<?php echo $mod; ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>

View File

@ -31,4 +31,11 @@ defined('_JEXEC') or die('Restricted access');
<p><?php echo JText::_('COM_GETBIBLE_TYPE_YOUR_SEARCH_PHRASE_INTO_THE_SEARCH_BOX_AND_PRESS_ENTER_TO_SEARCH_THE_BSCRIPTURESB_DAILY'); ?></p> <p><?php echo JText::_('COM_GETBIBLE_TYPE_YOUR_SEARCH_PHRASE_INTO_THE_SEARCH_BOX_AND_PRESS_ENTER_TO_SEARCH_THE_BSCRIPTURESB_DAILY'); ?></p>
<?php endif; ?> <?php endif; ?>
</div> </div>
<?php endif; ?> <?php endif; ?>
<?php
$this->getBibleModules = [
'position' => 'bottom_search_position',
'page' => 'GetBible Search'
];
echo $this->loadTemplate('getbiblemodules');
?>

View File

@ -17,9 +17,10 @@
// No direct access to this file // No direct access to this file
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\Helper\ModuleHelper as JModuleHelper;
use VDM\Joomla\GetBible\Factory;
use Joomla\CMS\MVC\View\HtmlView; use Joomla\CMS\MVC\View\HtmlView;
use VDM\Joomla\GetBible\Factory;
/** /**
* Getbible Html View class for the Search * Getbible Html View class for the Search
@ -209,6 +210,65 @@ class GetbibleViewSearch extends HtmlView
$this->toolbar = JToolbar::getInstance(); $this->toolbar = JToolbar::getInstance();
} }
/**
* Get the modules published in a position
*/
public function getModules($position, $seperator = '', $class = '')
{
// set default
$found = false;
// check if we aleady have these modules loaded
if (isset($this->setModules[$position]))
{
$found = true;
}
else
{
// this is where you want to load your module position
$modules = JModuleHelper::getModules($position);
if (GetbibleHelper::checkArray($modules, true))
{
// set the place holder
$this->setModules[$position] = array();
foreach($modules as $module)
{
$this->setModules[$position][] = JModuleHelper::renderModule($module);
}
$found = true;
}
}
// check if modules were found
if ($found && isset($this->setModules[$position]) && GetbibleHelper::checkArray($this->setModules[$position]))
{
// set class
if (GetbibleHelper::checkString($class))
{
$class = ' class="'.$class.'" ';
}
// set seperating return values
switch($seperator)
{
case 'none':
return implode('', $this->setModules[$position]);
break;
case 'div':
return '<div'.$class.'>'.implode('</div><div'.$class.'>', $this->setModules[$position]).'</div>';
break;
case 'list':
return '<ul'.$class.'><li>'.implode('</li><li>', $this->setModules[$position]).'</li></ul>';
break;
case 'array':
case 'Array':
return $this->setModules[$position];
break;
default:
return implode('<br />', $this->setModules[$position]);
break;
}
}
return false;
}
/** /**
* Escapes a value for output in a view script. * Escapes a value for output in a view script.
* *

View File

@ -0,0 +1,61 @@
<?php
/*----------------------------------------------------------------------------------| io.vdm.dev |----/
Vast Development Method
/-------------------------------------------------------------------------------------------------------/
@package getBible.net
@created 3rd December, 2015
@author Llewellyn van der Merwe <https://getbible.net>
@git Get Bible <https://git.vdm.dev/getBible>
@github Get Bible <https://github.com/getBible>
@support Get Bible <https://git.vdm.dev/getBible/support>
@copyright Copyright (C) 2015. All Rights Reserved
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
/------------------------------------------------------------------------------------------------------*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
use VDM\Joomla\Utilities\ObjectHelper;
$modules = $this->params->get($this->getBibleModules['position']);
$position_card = '';
$positions = [];
if (ObjectHelper::check($modules))
{
foreach ($modules as $module)
{
if (isset($module->position) && strlen($module->position) > 0)
{
if (($content = $this->getModules($module->position, $module->separator ?? '', $module->class ?? '')) !== false)
{
$positions[$module->position] = $content;
}
else
{
$positions[$module->position] = JLayoutHelper::render('modulepositionerror', ['position' => $module->position, 'page' => $this->getBibleModules['page']]);
}
}
}
$position_card = ($this->params->get('show_' . $this->getBibleModules['position'] . '_card') == 1) ? 'uk-card uk-card-' . $this->params->get($this->getBibleModules['position'] . '_card_style', 'default') . ' uk-card-body uk-margin' : 'uk-margin';
}
?>
<?php if ($positions !== []): ?>
<div class="<?php echo $this->getBibleModules['class'] ?? 'uk-margin'; ?>">
<?php foreach ($positions as $mod): ?>
<div class="<?php echo $position_card; ?>">
<?php if (is_array($mod)): ?>
<?php foreach ($mod as $pos): ?>
<?php echo $pos; ?>
<?php endforeach; ?>
<?php elseif (is_string($mod)): ?>
<div uk-grid>
<?php echo $mod; ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>

View File

@ -49,4 +49,11 @@ $tags_card = ($this->params->get('show_tags_card') == 1) ? 'uk-card uk-card-' .
<?php if ($this->params->get('set_custom_tag_tabs') == 1): ?> <?php if ($this->params->get('set_custom_tag_tabs') == 1): ?>
<?php echo $this->loadTemplate('getbibletagcustomtabs'); ?> <?php echo $this->loadTemplate('getbibletagcustomtabs'); ?>
<?php endif; ?> <?php endif; ?>
</ul> </ul>
<?php
$this->getBibleModules = [
'position' => 'bottom_tag_position',
'page' => 'GetBible Tag'
];
echo $this->loadTemplate('getbiblemodules');
?>

View File

@ -17,10 +17,10 @@
// No direct access to this file // No direct access to this file
defined('_JEXEC') or die('Restricted access'); defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.module.helper'); use Joomla\CMS\Helper\ModuleHelper as JModuleHelper;
use VDM\Joomla\GetBible\Factory;
use Joomla\CMS\MVC\View\HtmlView; use Joomla\CMS\MVC\View\HtmlView;
use VDM\Joomla\GetBible\Factory;
/** /**
* Getbible Html View class for the Tag * Getbible Html View class for the Tag
@ -320,7 +320,6 @@ class GetbibleViewTag extends HtmlView
default: default:
return implode('<br />', $this->setModules[$position]); return implode('<br />', $this->setModules[$position]);
break; break;
} }
} }
return false; return false;

View File

@ -287,4 +287,22 @@
<maintainerurl>https://getbible.net</maintainerurl> <maintainerurl>https://getbible.net</maintainerurl>
<targetplatform name="joomla" version="3.*"/> <targetplatform name="joomla" version="3.*"/>
</update> </update>
<update>
<name>Get Bible</name>
<description>The Bible for Joomla</description>
<element>pkg_getbible</element>
<type>package</type>
<client>site</client>
<version>2.0.18</version>
<infourl title="Get Bible!">https://getbible.net</infourl>
<downloads>
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/getBible/joomla-pkg/archive/v2.0.18.zip</downloadurl>
</downloads>
<tags>
<tag>stable</tag>
</tags>
<maintainer>Llewellyn van der Merwe</maintainer>
<maintainerurl>https://getbible.net</maintainerurl>
<targetplatform name="joomla" version="3.*"/>
</update>
</updates> </updates>