diff --git a/README.md b/README.md
index 0257c8379..8d145a9f3 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
-You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.3) with **ALL** its features and **ALL** concepts totally open-source and free!
+You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.4) with **ALL** its features and **ALL** concepts totally open-source and free!
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
@@ -141,10 +141,10 @@ TODO
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
+ *First Build*: 30th April, 2015
+ *Last Build*: 9th July, 2022
-+ *Version*: 3.1.3
++ *Version*: 3.1.4
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
-+ *Line count*: **311259**
++ *Line count*: **311349**
+ *Field count*: **2002**
+ *File count*: **2050**
+ *Folder count*: **349**
diff --git a/admin/README.txt b/admin/README.txt
index 0257c8379..8d145a9f3 100644
--- a/admin/README.txt
+++ b/admin/README.txt
@@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
-You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.3) with **ALL** its features and **ALL** concepts totally open-source and free!
+You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (3.1.4) with **ALL** its features and **ALL** concepts totally open-source and free!
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
@@ -141,10 +141,10 @@ TODO
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
+ *First Build*: 30th April, 2015
+ *Last Build*: 9th July, 2022
-+ *Version*: 3.1.3
++ *Version*: 3.1.4
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
-+ *Line count*: **311259**
++ *Line count*: **311349**
+ *Field count*: **2002**
+ *File count*: **2050**
+ *Folder count*: **349**
diff --git a/admin/compiler/joomla_3/default_vdm.php b/admin/compiler/joomla_3/default_vdm.php
index 65062d5ea..ec4349bd6 100644
--- a/admin/compiler/joomla_3/default_vdm.php
+++ b/admin/compiler/joomla_3/default_vdm.php
@@ -20,7 +20,7 @@ defined('_JEXEC') or die('Restricted access');
?>
- - : manifest->version; ?>
+ - : manifest->version; ?>
- : manifest->creationDate; ?>
- : manifest->author; ?>
- : manifest->authorUrl; ?>
diff --git a/admin/controllers/ajax.json.php b/admin/controllers/ajax.json.php
index b1fa2bd77..0d831e5ec 100644
--- a/admin/controllers/ajax.json.php
+++ b/admin/controllers/ajax.json.php
@@ -35,6 +35,7 @@ class ComponentbuilderControllerAjax extends BaseController
$this->registerTask('getComponentDetails', 'ajax');
$this->registerTask('getCronPath', 'ajax');
$this->registerTask('getWiki', 'ajax');
+ $this->registerTask('getVersion', 'ajax');
$this->registerTask('getJCBpackageInfo', 'ajax');
$this->registerTask('getCrowdinDetails', 'ajax');
$this->registerTask('getModuleCode', 'ajax');
@@ -295,6 +296,47 @@ class ComponentbuilderControllerAjax extends BaseController
}
}
break;
+ case 'getVersion':
+ try
+ {
+ $versionValue = $jinput->get('version', NULL, 'INT');
+ if($versionValue && $user->id != 0)
+ {
+ $result = $this->getModel('ajax')->getVersion($versionValue);
+ }
+ else
+ {
+ $result = false;
+ }
+ if($callback)
+ {
+ echo $callback . "(".json_encode($result).");";
+ }
+ elseif($returnRaw)
+ {
+ echo json_encode($result);
+ }
+ else
+ {
+ echo "(".json_encode($result).");";
+ }
+ }
+ catch(Exception $e)
+ {
+ if($callback)
+ {
+ echo $callback."(".json_encode($e).");";
+ }
+ elseif($returnRaw)
+ {
+ echo json_encode($e);
+ }
+ else
+ {
+ echo "(".json_encode($e).");";
+ }
+ }
+ break;
case 'getJCBpackageInfo':
try
{
diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini
index d2a91744a..a4cb1bba7 100644
--- a/admin/language/en-GB/en-GB.com_componentbuilder.ini
+++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini
@@ -5483,7 +5483,7 @@ COM_COMPONENTBUILDER_GET_SNIPPETS_TEMPLATES_BUTTON_ACCESS_DESC="Allows the users
COM_COMPONENTBUILDER_GET_THE_SNIPPET_FROM_GITHUB_AND_INSTALL_IT_LOCALLY="Get the snippet from gitHub and install it locally"
COM_COMPONENTBUILDER_GET_THE_SNIPPET_FROM_GITHUB_AND_UPDATE_THE_LOCAL_VERSION="Get the snippet from gitHub and update the local version"
COM_COMPONENTBUILDER_GET_TOKEN="Get Token"
-COM_COMPONENTBUILDER_GET_TOKEN_FROM_VDM_FOR_UPDATES_AND_ADD_IT_TO_YOUR_GLOBAL_OPTIONS="Get token from VDM for updates, and add it to your global options"
+COM_COMPONENTBUILDER_GET_TOKEN_FROM_VDM_TO_GET_UPDATE_NOTICE_AND_ADD_IT_TO_YOUR_GLOBAL_OPTIONS="Get token from VDM to get update notice, and add it to your global options."
COM_COMPONENTBUILDER_GLOBAL="Global"
COM_COMPONENTBUILDER_GLUECODE="Glue/Code"
COM_COMPONENTBUILDER_GREAT_THIS_FUNCTION_NAME_WILL_WORK="Great, this function name will work!"
@@ -7810,7 +7810,7 @@ COM_COMPONENTBUILDER_OPTIONS="Options"
COM_COMPONENTBUILDER_ORDER_BEFORE="Order Before"
COM_COMPONENTBUILDER_ORDER_IN_EDIT="Order in Edit"
COM_COMPONENTBUILDER_ORDER_IN_LIST_VIEWS="Order in list views"
-COM_COMPONENTBUILDER_OUT_OF_DATE="Out of Date"
+COM_COMPONENTBUILDER_OUT_OF_DATE="Out of date"
COM_COMPONENTBUILDER_OWNER_DETAILS_WAS_SET="Owner details was set"
COM_COMPONENTBUILDER_OWNER_S="Owner: %s"
COM_COMPONENTBUILDER_PACKAGE="Package"
@@ -8117,6 +8117,7 @@ COM_COMPONENTBUILDER_PROPERTY_VALUE="Property Value"
COM_COMPONENTBUILDER_PUBLIC_ACCESS="Public Access"
COM_COMPONENTBUILDER_PUBLISHED="Published"
COM_COMPONENTBUILDER_PUBLISHING="Publishing"
+COM_COMPONENTBUILDER_README="Readme"
COM_COMPONENTBUILDER_READY_TO_COMPILE_A_COMPONENT="Ready to compile a component"
COM_COMPONENTBUILDER_REFRESH="Refresh"
COM_COMPONENTBUILDER_REMOVE="Remove"
@@ -9347,6 +9348,7 @@ COM_COMPONENTBUILDER_WE_DID_NOT_CHECK_THE_SNIPPET_IT_SELF_TO_SEE_IF_IT_CHANGED_W
COM_COMPONENTBUILDER_WE_FAILED_TO_MOVE_BSB="We failed to move %s!"
COM_COMPONENTBUILDER_WE_SUCCESSFULLY_MOVED_BSB="We successfully moved %s!"
COM_COMPONENTBUILDER_WHILE_WE_DOWNLOAD_ALL_TWENTY_SIX_COMPILER_GIF_ANIMATIONS_RANDOMLY_USED_IN_THE_COMPILER_GUI_DURING_COMPILATION="While we download all 26 compiler GIF animations randomly used in the compiler GUI during compilation"
+COM_COMPONENTBUILDER_WIKI="Wiki"
COM_COMPONENTBUILDER_YES="Yes"
COM_COMPONENTBUILDER_YOUR_DATA_IS_ENCRYPTED_WITH_A_AES_ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_ENCRYPTION_USING_THE_ABOVE_THIRTY_TWO_CHARACTER_KEY="Your data is encrypted with a AES 128 bit encryption using the above 32 character key."
COM_COMPONENTBUILDER_YOUR_DATA_IS_ENCRYPTED_WITH_A_AES_ONE_HUNDRED_AND_TWENTY_EIGHT_BIT_ENCRYPTION_USING_THE_ABOVE_THIRTY_TWO_CHARACTER_KEY_WITHOUT_THIS_KEY_IT_WILL_TAKE_THE_CURRENT_TECHNOLOGY_WITH_A_BRUTE_FORCE_ATTACK_METHOD_MORE_THEN_A_HREFHTTPRANDOMIZECOMHOWLONGTOHACKPASS_TARGET_BLANK_TITLEHOW_LONG_TO_HACK_PASSSEVEN_HUNDRED_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZERO_ZEROA_YEARS_TO_CRACK_THEORETICALLY_UNLESS_THEY_HAVE_THIS_KEY_ABOVE_SO_DO_KEEP_IT_SAFE="Your data is encrypted with a AES 128 bit encryption using the above 32 character key. Without this key it will take the current technology with a brute force attack method more then 700 000 000 000 000 000 000 000 000 000 000 years to crack theoretically. Unless they have this key above, so do keep it safe."
diff --git a/admin/models/ajax.php b/admin/models/ajax.php
index 8abff0928..ffa98741d 100644
--- a/admin/models/ajax.php
+++ b/admin/models/ajax.php
@@ -305,15 +305,15 @@ class ComponentbuilderModelAjax extends ListModel
}
catch (DomainException $e)
{
- return $this->getTokenFromVDM($e->getMessage());
+ return $this->getTokenForWiki($e->getMessage());
}
catch (InvalidArgumentException $e)
{
- return $this->getTokenFromVDM($e->getMessage());
+ return $this->getTokenForWiki($e->getMessage());
}
catch (Exception $e)
{
- return $this->getTokenFromVDM($e->getMessage());
+ return $this->getTokenForWiki($e->getMessage());
}
// get the html
@@ -322,10 +322,10 @@ class ComponentbuilderModelAjax extends ListModel
return ['page' => $page];
}
- return $this->getTokenFromVDM();
+ return $this->getTokenForWiki();
}
- protected function getTokenFromVDM($message = null)
+ protected function getTokenForWiki($message = null)
{
if ($message)
{
@@ -333,7 +333,94 @@ class ComponentbuilderModelAjax extends ListModel
}
return ['error' => JText::_('COM_COMPONENTBUILDER_THE_WIKI_CAN_ONLY_BE_LOADED_WHEN_YOUR_JCB_SYSTEM_HAS_INTERNET_CONNECTION')];
- }
+ }
+
+ public function getVersion($version = null)
+ {
+ // get the token if set
+ $token = JComponentHelper::getParams('com_componentbuilder')->get('gitea_token', false);
+ // only add if token is set
+ if ($token)
+ {
+ // setup a registry
+ $options = new Registry;
+ $options->set('access.token', $token);
+ // get the gitea http
+ try
+ {
+ // get gitea object
+ $gitea = new Gitea($options);
+ // get a list of all the repos tags
+ $tags = $gitea->repo->getListTags('joomla', 'Component-Builder');
+ }
+ catch (DomainException $e)
+ {
+ return $this->getTokenForVersion($e->getMessage());
+ }
+ catch (InvalidArgumentException $e)
+ {
+ return $this->getTokenForVersion($e->getMessage());
+ }
+ catch (Exception $e)
+ {
+ return $this->getTokenForVersion($e->getMessage());
+ }
+ // do we have tags returned
+ if (isset($tags[0]) && isset($tags[0]->name))
+ {
+ // get the version
+ $manifest = ComponentbuilderHelper::manifest();
+ $local_version = (string) $manifest->version;
+ $current_version = trim($tags[0]->name, 'vV');
+
+ // now check if this version is out dated
+ if ($current_version === $local_version)
+ {
+ return ['notice' => '' . JText::_('COM_COMPONENTBUILDER_UP_TO_DATE') . ''];
+ }
+ else
+ {
+ // check if this is beta version
+ $current_array = array_map(function ($v) { return (int) $v; }, (array) explode('.', $current_version));
+ $local_array = array_map(function ($v) { return (int) $v; }, (array) explode('.', $local_version));
+ if (($local_array[0] > $current_array[0]) ||
+ ($local_array[0] == $current_array[0] && $local_array[1] > $current_array[1]) ||
+ ($local_array[0] == $current_array[0] && $local_array[1] == $current_array[1] && $local_array[2] > $current_array[2]))
+ {
+ return ['notice' => '' . JText::_('COM_COMPONENTBUILDER_BETA_RELEASE') . ''];
+ }
+ else
+ {
+ // download link of the latest version
+ $download = "https://git.vdm.dev/api/v1/repos/joomla/Component-Builder/archive/" . $tags[0]->name . ".zip?access_token=" . $token;
+
+ return ['notice' => '' . JText::_('COM_COMPONENTBUILDER_OUT_OF_DATE') . '! ' . JText::_('COM_COMPONENTBUILDER_DOWNLOAD_UPDATE') . '!'];
+ }
+ }
+ }
+ }
+
+ return $this->getTokenForVersion();
+ }
+
+ protected function getTokenForVersion($message = null)
+ {
+ // the URL
+ $url = 'https://git.vdm.dev/user/settings/applications';
+ // create link
+ $a = '';
+ $_a = '';
+
+ if ($message)
+ {
+ return ['error' => $a . $message . $a_ . JText::_('COM_COMPONENTBUILDER_GET_TOKEN') . $_a];
+ }
+
+ return ['error' => $a . JText::_('COM_COMPONENTBUILDER_GET_TOKEN_FROM_VDM_TO_GET_UPDATE_NOTICE_AND_ADD_IT_TO_YOUR_GLOBAL_OPTIONS') . $a_ . JText::_('COM_COMPONENTBUILDER_GET_TOKEN') . $_a];
+ }
+
// Used in joomla_module
public function getModuleCode($data)
diff --git a/admin/models/componentbuilder.php b/admin/models/componentbuilder.php
index 255aa6cb4..32bfb2260 100644
--- a/admin/models/componentbuilder.php
+++ b/admin/models/componentbuilder.php
@@ -416,90 +416,26 @@ class ComponentbuilderModelComponentbuilder extends ListModel
$call_url = JUri::base() . 'index.php?option=com_componentbuilder&task=ajax.getWiki&format=json&raw=true&' . JSession::getFormToken() . '=1&name=Home';
$document = JFactory::getDocument();
$document->addScriptDeclaration('
- fetch("' . $call_url . '").then((response) => {
- if (response.ok) {
- return response.json();
- }
- }).then((result) => {
- if (typeof result.page !== "undefined") {
- document.getElementById("wiki-md").innerHTML = result.page;
- } else if (typeof result.error !== "undefined") {
- document.getElementById("wiki-md-error").innerHTML = result.error
- }
- });');
+ function getWikiPage(){
+
+ fetch("' . $call_url . '").then((response) => {
+ if (response.ok) {
+ return response.json();
+ }
+ }).then((result) => {
+ if (typeof result.page !== "undefined") {
+ document.getElementById("wiki-md").innerHTML = result.page;
+ } else if (typeof result.error !== "undefined") {
+ document.getElementById("wiki-md-error").innerHTML = result.error
+ }
+ });
+ }
+ setTimeout(getWikiPage, 1000);');
return ''.JText::_('COM_COMPONENTBUILDER_THE_WIKI_IS_LOADING').'..
';
}
- public function getGitea()
- {
- // get the document
- $document = JFactory::getDocument();
- // get the token if set
- $token = JComponentHelper::getParams('com_componentbuilder')->get('gitea_token', false);
- // only add if token is set
- if ($token)
- {
- // setup a registry
- $options = new Registry;
- $options->set('access.token', $token);
- // get the gitea http
- try
- {
- // get gitea object
- $gitea = new Gitea($options);
- // get a list of all the repos tags
- $tags = $gitea->repo->getListTags('joomla', 'Component-Builder');
- }
- catch (DomainException $m)
- {
- $token = false;
- }
- // get the document to load the scripts
- if ($token && isset($tags[0]) && isset($tags[0]->name))
- {
- // download link of the latest version
- $download = "https://git.vdm.dev/api/v1/repos/joomla/Component-Builder/archive/" . $tags[0]->name . ".zip?access_token=" . $token;
- // load the JavaScript to the page
- $document->addScriptDeclaration('
- jQuery(document).ready(function () {
- var activeVersion = "' . trim($tags[0]->name, 'vV') . '";
- if (activeVersion === manifest.version) {
- // local version is in sync with latest release
- jQuery(".update-notice").html("' . JText::_('COM_COMPONENTBUILDER_UP_TO_DATE') . '");
- } else {
- // split versions in to array
- var activeVersionArray = activeVersion.split(".");
- var localVersionArray = manifest.version.split(".");
- if ((+localVersionArray[0] > +activeVersionArray[0]) ||
- (+localVersionArray[0] == +activeVersionArray[0] && +localVersionArray[1] > +activeVersionArray[1]) ||
- (+localVersionArray[0] == +activeVersionArray[0] && +localVersionArray[1] == +activeVersionArray[1] && +localVersionArray[2] > +activeVersionArray[2])) {
- // local version head latest release
- jQuery(".update-notice").html("' . JText::_('COM_COMPONENTBUILDER_BETA_RELEASE') . '");
- } else {
- // local version behind latest release
- jQuery(".update-notice").html("' . JText::_('COM_COMPONENTBUILDER_OUT_OF_DATE') . ' ' .
- JText::_('COM_COMPONENTBUILDER_DOWNLOAD_UPDATE') . '!");
- }
- }
- });');
-
- return;
- }
- }
- // the URL
- $url = 'https://git.vdm.dev/user/settings/applications';
- // give a notice to get the token
- $document->addScriptDeclaration(
- 'jQuery(document).ready(function () {jQuery(".update-notice").html("' .
- JText::_('COM_COMPONENTBUILDER_GET_TOKEN') . '!");});'
- );
- }
-
-
public function getNoticeboard()
{
// get the document to load the scripts
@@ -590,5 +526,28 @@ jQuery(document).ready( function($) {
});');
return ''.JText::_('COM_COMPONENTBUILDER_THE_README_IS_LOADING').'..
';
- }
+ }
+
+ public function getVersion()
+ {
+ // the call URL
+ $call_url = JUri::base() . 'index.php?option=com_componentbuilder&task=ajax.getVersion&format=json&raw=true&' . JSession::getFormToken() . '=1&version=1';
+ $document = JFactory::getDocument();
+ $document->addScriptDeclaration('
+ function getComponentVersionStatus() {
+ fetch("' . $call_url . '").then((response) => {
+ if (response.ok) {
+ return response.json();
+ }
+ }).then((result) => {
+ if (typeof result.notice !== "undefined") {
+ document.getElementById("component-update-notice").innerHTML = result.notice;
+ } else if (typeof result.error !== "undefined") {
+ document.getElementById("component-update-notice").innerHTML = result.error;
+ }
+ });
+ }
+ setTimeout(getComponentVersionStatus, 800);');
+ }
+
}
diff --git a/admin/views/componentbuilder/tmpl/default.php b/admin/views/componentbuilder/tmpl/default.php
index 8aad416cf..626d49926 100644
--- a/admin/views/componentbuilder/tmpl/default.php
+++ b/admin/views/componentbuilder/tmpl/default.php
@@ -38,58 +38,50 @@ defined('_JEXEC') or die('Restricted access');
-
+
+
-
+
'wiki_one')); ?>
loadTemplate('wiki_tutorials');?>
+
+
+
-
+
-
+
'notice_board_one')); ?>
loadTemplate('notice_board_vast_development_method');?>
+
+
+
-
+
-
+
'readme_one')); ?>
loadTemplate('readme_information');?>
-
-
-
-
-
-
- 'notice_board_one')); ?>
-
- loadTemplate('notice_board_vast_development_method');?>
-
-
- loadTemplate('notice_board_jcb_pro_membership');?>
-
-
-
-
+
diff --git a/admin/views/componentbuilder/tmpl/default_vdm.php b/admin/views/componentbuilder/tmpl/default_vdm.php
index 0c207d8e5..2249ff26e 100644
--- a/admin/views/componentbuilder/tmpl/default_vdm.php
+++ b/admin/views/componentbuilder/tmpl/default_vdm.php
@@ -15,7 +15,7 @@ defined('_JEXEC') or die('Restricted access');
?>
- - : manifest->version; ?>
+ - : manifest->version; ?>
- : manifest->creationDate; ?>
- : manifest->author; ?>
- : manifest->authorUrl; ?>
diff --git a/admin/views/componentbuilder/view.html.php b/admin/views/componentbuilder/view.html.php
index be1b27148..ca502ee7e 100644
--- a/admin/views/componentbuilder/view.html.php
+++ b/admin/views/componentbuilder/view.html.php
@@ -29,9 +29,9 @@ class ComponentbuilderViewComponentbuilder extends JViewLegacy
$this->icons = $this->get('Icons');
$this->contributors = ComponentbuilderHelper::getContributors();
$this->wiki = $this->get('Wiki');
- $this->gitea = $this->get('Gitea');
$this->noticeboard = $this->get('Noticeboard');
$this->readme = $this->get('Readme');
+ $this->version = $this->get('Version');
// get the manifest details of the component
$this->manifest = ComponentbuilderHelper::manifest();
diff --git a/componentbuilder.xml b/componentbuilder.xml
index 274ae3a22..46eecc7b9 100644
--- a/componentbuilder.xml
+++ b/componentbuilder.xml
@@ -7,9 +7,9 @@
https://dev.vdm.io
Copyright (C) 2015 Vast Development Method. All rights reserved.
GNU General Public License version 2 or later; see LICENSE.txt
- 3.1.3
+ 3.1.4
Component Builder (v.3.1.3)
+ Component Builder (v.3.1.4)
The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml
index 53242bbf1..2cd47afe7 100644
--- a/componentbuilder_update_server.xml
+++ b/componentbuilder_update_server.xml
@@ -1079,10 +1079,10 @@
pkg_component_builder
package
site
- 3.1.3
+ 3.1.4
https://dev.vdm.io
- https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.1.3.zip
+ https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.1.4.zip
stable
diff --git a/script.php b/script.php
index cfe61e2cf..26557c517 100644
--- a/script.php
+++ b/script.php
@@ -9422,7 +9422,7 @@ class com_componentbuilderInstallerScript
echo '
- Upgrade to Version 3.1.3 Was Successful! Let us know if anything is not working as expected.
';
+ Upgrade to Version 3.1.4 Was Successful! Let us know if anything is not working as expected.
';
// Set db if not set already.
if (!isset($db))