| Current Path : /var/www/html/administrator/components/com_jchat/ |
| Current File : /var/www/html/administrator/components/com_jchat/installscript.php |
<?php
//namespace administrator\components\com_jchat;
/**
* Application install script
* @package JCHAT::INSTALL::administrator::components::com_jchat
* @author Joomla! Extensions Store
* @copyright (C) 2024 - Joomla! Extensions Store
* @license GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html
*/
defined ( '_JEXEC' ) or die ( 'Restricted access' );
use Joomla\CMS\Language\Text;
use Joomla\CMS\Factory;
use Joomla\CMS\Uri\Uri;
use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Installer\InstallerScriptInterface;
use Joomla\CMS\Installer\InstallerAdapter;
use Joomla\Filesystem\File;
/**
* Application install script class
* @package JCHAT::INSTALL::administrator::components::com_jchat
*/
class JChatBaseInstallerScript {
/*
* Find mimimum required joomla version for this extension. It will be read from the version attribute (install tag) in the manifest file
*/
private $minimum_joomla_release = '4.0';
/*
* $parent is the class calling this method.
* $type is the type of change (install, update or discover_install, uninstall).
* preflight runs before anything else and while the extracted files are in the uploaded temp folder.
* If preflight returns false, Joomla will abort the update and undo everything already done.
*/
function preflight(string $type, InstallerAdapter $parent): bool {
// Check for Joomla compatibility
if(version_compare(JVERSION, '4', '<')) {
Factory::getApplication()->enqueueMessage (Text::sprintf('COM_JCHAT_INSTALLING_VERSION_NOTCOMPATIBLE', JVERSION), 'error');
if(version_compare(JVERSION, '3.10', '<')) {
Factory::getApplication()->enqueueMessage (Text::sprintf('Error, installation aborted. Pay attention! You are attempting to install a component package for Joomla 4 that does not match your actual Joomla version. Download and install the correct package for your Joomla %s version.', JVERSION), 'error');
}
return false;
}
// Set MySql 5.7.8+ strict mode off
$installer = $parent->getParent();
if ($installer && method_exists($installer, 'getPath')) {
$source = $installer->getPath('source');
if ($source && is_dir($source)) {
$file = $source . '/admin/Framework/Helpers/Mysql.php';
if (is_file($file)) {
require_once $file;
JExtstore\Component\JChat\Administrator\Framework\Helpers\Mysql::set($parent);
}
}
}
return true;
}
/*
* $parent is the class calling this method.
* install runs after the database scripts are executed.
* If the extension is new, the install method is run.
* If install returns false, Joomla will abort the install and undo everything already done.
*/
function install(InstallerAdapter $parent, $isUpdate = false): bool {
// Reset any previous messages queue, keep only strict installation messages since now on
$app = Factory::getApplication();
$currentMessageQueue = $app->getMessageQueue(true);
if(!empty($currentMessageQueue)) {
foreach ($currentMessageQueue as $message) {
if($message['type'] == 'info') {
$app->enqueueMessage($message['message'], 'info');
}
}
}
// Evaluate nonce csp feature
$appNonce = $app->get('csp_nonce', null);
$nonce = $appNonce ? ' nonce="' . $appNonce . '"' : '';
echo ('<link rel="stylesheet" type="text/css"' . $nonce . ' href="' . Uri::root ( true ) . '/administrator/components/com_jchat/css/bootstrap-install.css' . '" />');
echo ('<script type="text/javascript"' . $nonce . ' src="' . Uri::root ( true ) . '/media/vendor/jquery/js/jquery.min.js' .'"></script>' );
echo ('<script type="text/javascript"' . $nonce . ' src="' . Uri::root ( true ) . '/administrator/components/com_jchat/js/installer.js' .'" defer></script>' );
$lang = Factory::getApplication()->getLanguage();
$lang->load('com_jchat.sys', JPATH_ADMINISTRATOR . '/components/com_jchat', null, false, true) || $lang->load('com_jchat.sys', JPATH_ADMINISTRATOR, null, false, true);
$parentParent = $parent->getParent();
$database = Factory::getContainer()->get('DatabaseDriver');
/*
if($this->minimum_joomla_release) {
return false;
}
*/
// Component installer
$componentInstaller = Installer::getInstance ();
if(!$componentInstaller->getPath ( 'source' )) {
$componentInstaller = $parent->getParent();
}
$pathToPlugin = $componentInstaller->getPath ( 'source' ) . '/plugin';
$pathToPluginLogin = $componentInstaller->getPath ( 'source' ) . '/pluginlogin';
$pathToModule = $componentInstaller->getPath ( 'source' ) . '/module';
$pathToMessagingModule = $componentInstaller->getPath ( 'source' ) . '/modulemessaging';
echo ('<div class="installcontainer">');
// New plugin installer
$pluginInstaller = new Installer ();
$pluginInstaller->setDatabase($database);
if (! $pluginInstaller->install ( $pathToPlugin )) {
echo '<p>' . Text::_ ( 'COM_JCHAT_ERROR_INSTALLING_PLUGINS' ) . '</p>';
// Install failed, rollback changes
$parentParent->abort(Text::_('COM_JCHAT_ERROR_INSTALLING_PLUGINS'));
return false;
} else {
$query = "UPDATE #__extensions" . "\n SET enabled = 1" .
"\n WHERE type = 'plugin' AND element = " . $database->quote ( 'jchat' ) .
"\n AND folder = " . $database->quote ( 'system' );
$database->setQuery ( $query );
if (! $database->execute ()) {
echo '<p>' . Text::_ ( 'COM_JCHAT_ERROR_PUBLISHING_PLUGIN' ) . '</p>';
}
}
// New plugin installer
$pluginInstaller = new Installer ();
$pluginInstaller->setDatabase($database);
if (! $pluginInstaller->install ( $pathToPluginLogin )) {
echo '<p>' . Text::_ ( 'COM_JCHAT_ERROR_INSTALLING_PLUGINS' ) . '</p>';
// Install failed, rollback changes
$parentParent->abort(Text::_('COM_JCHAT_ERROR_INSTALLING_PLUGINS'));
return false;
} else {
$query = "UPDATE #__extensions" . "\n SET enabled = 1" .
"\n WHERE type = 'plugin' AND element = " . $database->quote ( 'jchatlogin' ) .
"\n AND folder = " . $database->quote ( 'system' );
$database->setQuery ( $query );
if (! $database->execute ()) {
echo '<p>' . Text::_ ( 'COM_JCHAT_ERROR_PUBLISHING_PLUGIN' ) . '</p>';
}?>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<span class="step_details"><?php echo Text::_('COM_JCHAT_OK_INSTALLING_PLUGINS');?></span>
</div>
</div>
<?php
}
// New module installer
$moduleInstaller = new Installer ();
$moduleInstaller->setDatabase($database);
if (! $moduleInstaller->install ( $pathToModule )) {
echo '<p>' . Text::_ ( 'COM_JCHAT_ERROR_INSTALLING_MODULE' ) . '</p>';
// Install failed, rollback changes
$parentParent->abort(Text::_('COM_JCHAT_ERROR_INSTALLING_MODULE'));
return false;
} else {
?>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<span class="step_details"><?php echo Text::_('COM_JCHAT_OK_INSTALLING_MODULE');?></span>
</div>
</div>
<?php
}
// New module messaging installer
$moduleInstaller = new Installer ();
$moduleInstaller->setDatabase($database);
if (! $moduleInstaller->install ( $pathToMessagingModule )) {
echo '<p>' . Text::_ ( 'COM_JCHAT_ERROR_INSTALLING_MODULE' ) . '</p>';
// Install failed, rollback changes
$parentParent->abort(Text::_('COM_JCHAT_ERROR_INSTALLING_MODULE'));
return false;
} else {
?>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<span class="step_details"><?php echo Text::_('COM_JCHAT_OK_INSTALLING_MODULE');?></span>
</div>
</div>
<?php
}
?>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<span class="step_details"><?php echo Text::_('COM_JCHAT_OK_INSTALLING_COMPONENT');?></span>
</div>
</div>
<div class="alert alert-success"><?php echo Text::_('COM_JCHAT_ALL_COMPLETED');?></div>
<?php
echo ('</div>');
// Update tables to Utf8mb4 utf8_unicode_ci collation if the Joomla database has been upgraded, use feature detection on the #__session core table
try {
$db = Factory::getContainer()->get('DatabaseDriver');
// Get Third Party table current collation
$thirdpartyCollationQuery = "SHOW FULL COLUMNS FROM " . $db->quoteName(('#__jchat'));
$thirdpartyResultTableInfo = $db->setQuery($thirdpartyCollationQuery)->loadObjectList();
$thirdpartyResultTableFieldInfo = $thirdpartyResultTableInfo[1]; // From field
// Get Joomla core table current collation
$testCollationQuery = "SHOW FULL COLUMNS FROM " . $db->quoteName(('#__session'));
$resultTableInfo = $db->setQuery($testCollationQuery)->loadObject();
if(isset($resultTableInfo->Collation) && isset($thirdpartyResultTableFieldInfo->Collation) && $resultTableInfo->Collation != $thirdpartyResultTableFieldInfo->Collation) {
// #__jchat table Utf8mb4 utf8_unicode_ci
$charset = strpos($resultTableInfo->Collation, 'utf8mb4') !== false ? 'utf8mb4' : 'utf8';
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat') . " CHANGE " . $db->quoteName('from') . " " . $db->quoteName('from') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat') . " CHANGE " . $db->quoteName('to') . " " . $db->quoteName('to') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_public_sessionrelations table Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_public_sessionrelations') . " CHANGE " . $db->quoteName('ownerid') . " " . $db->quoteName('ownerid') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_public_sessionrelations') . " CHANGE " . $db->quoteName('contactid') . " " . $db->quoteName('contactid') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_sessionstatus table Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_sessionstatus') . " CHANGE " . $db->quoteName('sessionid') . " " . $db->quoteName('sessionid') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_banned_users Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_banned_users') . " CHANGE " . $db->quoteName('banning') . " " . $db->quoteName('banning') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_banned_users') . " CHANGE " . $db->quoteName('banned') . " " . $db->quoteName('banned') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_webrtc Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc') . " CHANGE " . $db->quoteName('peer1') . " " . $db->quoteName('peer1') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc') . " CHANGE " . $db->quoteName('peer2') . " " . $db->quoteName('peer2') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_webrtc_blackboard Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_blackboard') . " CHANGE " . $db->quoteName('peer1') . " " . $db->quoteName('peer1') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_blackboard') . " CHANGE " . $db->quoteName('peer2') . " " . $db->quoteName('peer2') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_webrtc_conference Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_conference') . " CHANGE " . $db->quoteName('peer1') . " " . $db->quoteName('peer1') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_conference') . " CHANGE " . $db->quoteName('peer2') . " " . $db->quoteName('peer2') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_deleted_messages Utf8mb4 utf8_unicode_ci
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_deleted_messages') . " CHANGE " . $db->quoteName('from') . " " . $db->quoteName('from') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_deleted_messages') . " CHANGE " . $db->quoteName('to') . " " . $db->quoteName('to') ." VARCHAR( 191 ) CHARACTER SET " . $charset . " COLLATE " . $resultTableInfo->Collation . " NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
} else {
// Align tables to the newest varbinary
if(isset($resultTableInfo->Type) && isset($thirdpartyResultTableFieldInfo->Type) && stripos($resultTableInfo->Type, 'varbinary') !== false && $resultTableInfo->Type != $thirdpartyResultTableFieldInfo->Type) {
// #__jchat table varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat') . " CHANGE " . $db->quoteName('from') . " " . $db->quoteName('from') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat') . " CHANGE " . $db->quoteName('to') . " " . $db->quoteName('to') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_public_sessionrelations table varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_public_sessionrelations') . " CHANGE " . $db->quoteName('ownerid') . " " . $db->quoteName('ownerid') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_public_sessionrelations') . " CHANGE " . $db->quoteName('contactid') . " " . $db->quoteName('contactid') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_sessionstatus table varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_sessionstatus') . " CHANGE " . $db->quoteName('sessionid') . " " . $db->quoteName('sessionid') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_banned_users varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_banned_users') . " CHANGE " . $db->quoteName('banning') . " " . $db->quoteName('banning') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_banned_users') . " CHANGE " . $db->quoteName('banned') . " " . $db->quoteName('banned') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_webrtc varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc') . " CHANGE " . $db->quoteName('peer1') . " " . $db->quoteName('peer1') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc') . " CHANGE " . $db->quoteName('peer2') . " " . $db->quoteName('peer2') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_webrtc varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_blackboard') . " CHANGE " . $db->quoteName('peer1') . " " . $db->quoteName('peer1') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_blackboard') . " CHANGE " . $db->quoteName('peer2') . " " . $db->quoteName('peer2') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_webrtc_conference varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_conference') . " CHANGE " . $db->quoteName('peer1') . " " . $db->quoteName('peer1') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_webrtc_conference') . " CHANGE " . $db->quoteName('peer2') . " " . $db->quoteName('peer2') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
// #__jchat_deleted_messages varbinary
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_deleted_messages') . " CHANGE " . $db->quoteName('from') . " " . $db->quoteName('from') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
$alterSessiontablesCollation = "ALTER TABLE " . $db->quoteName('#__jchat_deleted_messages') . " CHANGE " . $db->quoteName('to') . " " . $db->quoteName('to') ." VARBINARY( 192 ) NOT NULL ;";
$db->setQuery($alterSessiontablesCollation)->execute();
}
}
} catch (\Exception $e) {
// Do nothing for user
}
// Move the service worker to the root if this is the first installation
if(file_exists(JPATH_ROOT . '/components/com_jchat/js/jchatsw.js')) {
File::move(JPATH_ROOT . '/components/com_jchat/js/jchatsw.js', JPATH_ROOT . '/jchatsw.js');
}
// Processing complete
return true;
}
/*
* $parent is the class calling this method.
* update runs after the database scripts are executed.
* If the extension exists, then the update method is run.
* If this returns false, Joomla will abort the update and undo everything already done.
*/
function update(InstallerAdapter $parent): bool {
// Execute always SQL install file to get added updates in that file, disregard DBMS messages and Joomla queue for user
$parentParent = $parent->getParent();
$parentManifest = $parentParent->getManifest();
try {
// Install/update always without error handling
if (isset($parentManifest->install->sql)) {
$parentParent->parseSQLFiles($parentManifest->install->sql);
}
} catch (\Exception $e) {
// Do nothing for user for Joomla 3.x case, case Exception handling
}
/*
if($this->minimum_joomla_release) {
return false;
}
*/
$this->install($parent, true);
return true;
}
/*
* $parent is the class calling this method.
* $type is the type of change (install, update or discover_install, uninstall).
* postflight is run after the extension is registered in the database.
*/
function postflight(string $type, InstallerAdapter $parent): bool {
// Preferences
$params ['chatrefresh'] = '2';
$params ['lastmessagetime'] = '60';
$params ['maxinactivitytime'] = '30';
$params ['remove_duplicated_users'] = '0';
$params ['registration_email'] = '';
$params ['forceavailable'] = '0';
$params ['usefullname'] = 'username';
$params ['start_open_mode'] = '0';
$params ['chatboxes_open_mode'] = '0';
$params ['show_send_button'] = '2';
$params ['chat_title'] = 'Chat';
$params ['private_chat_title'] = '';
$params ['public_chat_title'] = '';
$params ['resizable_chatboxes'] = '1';
$params ['resizable_sidebar'] = '1';
$params ['chatrooms_users_details'] = '1';
$params ['auto_close_popups'] = '1';
$params ['exclude_onmobile'] = '0';
$params ['messenger_sounds_variation'] = 'variation1';
$params ['messenger_typing_sound'] = '1';
$params ['default_private_chat_sound'] = '1';
$params ['default_public_chat_sound'] = '1';
$params ['emoticons_enabled'] = '1';
$params ['emoticons_original_size'] = '0';
// Features
$params ['3pdintegration'] = '';
$params ['filter_friendship'] = '0';
$params ['pm_integration'] = '0';
$params ['social_menu_item'] = '0';
$params ['easysocial_profilelink_id'] = '1';
$params ['joomlauser_profilelink'] = '0';
$params ['skypebridge'] = '0';
$params ['groupchat'] = '1';
$params ['groupchat_start_open_mode'] = '1';
$params ['groupchatmode'] = 'chatroom';
$params ['autoclear_conversation'] = '1';
$params ['default_chatroom'] = '';
$params ['guestenabled'] = '1';
$params ['meetings_enabled'] = '0';
$params ['meeting_url_redirection'] = '0';
$params ['meeting_url_redirect'] = '';
$params ['meeting_show_details'] = '1';
$params ['meeting_auto_logout'] = '1';
$params ['guests_name_algo'] = 'name_based';
$params ['guests_name_length'] = '3';
$params ['guests_name_odd'] = 'odd';
$params ['guestprefix'] = 'Guest';
$params ['searchfield'] = '1';
$params ['history'] = '1';
$params ['history_autoload'] = '';
$params ['buddylist_visible'] = '1';
$params ['privatechat_enabled'] = '1';
$params ['typing_enabled'] = '1';
$params ['lastreadmessage'] = '1';
$params ['messages_deletion'] = '0';
$params ['messages_forward_whatsapp'] = '0';
$params ['enable_images_lightbox'] = '0';
$params ['maximize_box'] = '1024';
$params ['show_suggestion_tooltip'] = '1';
$params ['suggestion_tooltip_text'] = '';
$params ['geolocation_enabled'] = '0';
$params ['geolocation_flags_enabled'] = '0';
$params ['geolocation_service'] = 'geoip';
$params ['geolocation_gids'] = array('0');
$params ['usersbanning'] = '0';
$params ['usersbanning_mode'] = 'private';
$params ['wordsbanning'] = '0';
$params ['wordsbanned'] = 'shit,fuck,cock,asshole';
$params ['wordsbanned_replacement'] = 'banned';
$params ['ipbanning'] = '0';
$params ['iprange_multiple'] = '';
// Chat rendering
$params ['chat_template'] = 'animated.css';
$params ['chat_template_tooltip'] = 'std';
$params ['chat_template_tooltip_image'] = '';
$params ['chat_template_tooltip_variant'] = 'horiz';
$params ['tooltip_bordercolor_override'] = '';
$params ['tooltip_bckcolor_override'] = '';
$params ['chat_color_override'] = '';
$params ['fontsize_override'] = '';
$params ['fontsize_titles_override'] = '';
$params ['submitlamform_color_override'] = '';
$params ['positionment_chatboxes'] = 'middle';
$params ['render_rounded_baloon'] = '1';
$params ['public_chat_height_override'] = '';
$params ['private_chat_height_override'] = '';
$params ['sidebar_default_width_override'] = '';
$params ['public_chat_top_override'] = '';
$params ['videoconference_localvideo_maxwidth'] = '300px';
$params ['videoconference_pinnedvideo_maxwidth'] = '260px';
$params ['videoconference_remotevideo_maxwidth'] = '200px';
$params ['chatboxes_min_width'] = '230';
$params ['show_users_count'] = '1';
$params ['show_myusername'] = '1';
$params ['micro_splacement_konstant'] = '1';
$params ['custom_css_styles'] = '';
$params ['rendering_mode'] = 'auto';
$params ['sidebar_width'] = '260';
$params ['sidebar_height'] = '600';
$params ['search_width'] = '100';
$params ['chatroom_width'] = '400';
$params ['baloon_position'] = 'top';
$params ['separate_widgets'] = '0';
// Videochat peer-to-peer
$params ['webrtc_enabled'] = '0';
$params ['webrtc_call_sound'] = 'alert_tone.mp3';
$params ['timeout_start_call'] = '40';
$params ['timeout_end_call'] = '40';
$params ['micvolume_default'] = '0.8';
$params ['audiovolume_default'] = '0.8';
$params ['videochat_auto_maximize_box'] = '1024';
$params ['hide_webcam_when_disabled'] = '1';
$params ['show_webrtc_stats'] = '1';
$params ['show_webrtc_vumeter'] = '1';
$params ['videochat_background_image_override'] = '';
$params ['enable_recording'] = '0';
$params ['enable_save_recording'] = '1';
$params ['recorder_max_videos_per_row'] = '4';
$params ['recorder_video_width'] = '640';
$params ['recorder_video_height'] = '480';
$params ['recorder_video_miniature_width'] = '160';
$params ['enable_blackboard'] = '0';
$params ['auto_quality_bandwidth_management'] = '0';
$params ['serverload_reduction'] = '0';
$params ['no_webrtc_fallback'] = '1';
$params ['stun_servers'] = 'stun:stun.l.google.com:19302';
$params ['turn_servers_enabled'] = '0';
$params ['turn_servers'] = 'turn:standard.relay.metered.ca:80,5117152f3f8880c7f63188ba,AuS5jBoAxcXc7xGn' . PHP_EOL .
'turn:standard.relay.metered.ca:80?transport=tcp,5117152f3f8880c7f63188ba,AuS5jBoAxcXc7xGn' . PHP_EOL .
'turn:standard.relay.metered.ca:443,5117152f3f8880c7f63188ba,AuS5jBoAxcXc7xGn' . PHP_EOL .
'turn:standard.relay.metered.ca:443?transport=tcp,5117152f3f8880c7f63188ba,AuS5jBoAxcXc7xGn';
$params ['turn_anyfirewall_enabled'] = '0';
$params ['turn_twilio_sid'] = 'AC6f94f1e056ab8560aadc1eace975a251';
$params ['turn_twilio_auth_token'] = 'a323b78af612f7d7eea9ad8f110ef682';
// File system
$params ['avatarenable'] = '1';
$params ['use_joomla_contacts_avatar'] = '0';
$params ['avatar_allowed_extensions'] = 'jpg,jpeg,png,gif';
$params ['cropmode'] = '1';
$params ['avatarupload'] = '1';
$params ['attachmentsenable'] = '1';
$params ['maxfilesize'] = '2';
$params ['disallowed_extensions'] = 'exe,bat,pif';
$params ['resize_attachments_images'] = '0';
$params ['resize_attachments_images_maxwidth'] = '800';
$params ['resize_attachments_images_quality'] = '80';
$params ['easysocial_avatar_path'] = 'media/com_easysocial';
$params ['easysocial_custom_avatar'] = '0';
$params ['easysocial_custom_avatar_path'] = '';
$params ['kunena_avatars_resize_format'] = 'size36';
$params ['chatbot_avatar'] = '';
$params ['chatbot_top_inner_icon'] = '1';
$params ['chatbot_top_inner_icon_image'] = '';
// Ticketing and live support
$params ['chatadmins_gids'] = array('0');
$params ['auto_open_agentbox'] = '0';
$params ['auto_open_agentbox_defaultmessage'] = '';
$params ['enable_predefined_answers'] = '0';
$params ['predefined_answers'] = '';
$params ['affect_public_chat'] = '1';
$params ['offline_message_switcher'] = '0';
$params ['offline_message'] = '';
$params ['tickets_form'] = '0';
$params ['tickets_form_always_visible'] = '0';
$params ['tickets_form_include_phonenumber'] = '0';
$params ['tickets_form_include_recaptcha'] = '0';
$params ['tickets_mailfrom'] = '';
$params ['tickets_fromname'] = '';
$params ['ticket_sent_notify'] = '0';
$params ['ticket_notify_emails'] = '';
$params ['ticket_creation'] = '1';
$params ['email_ticket_user'] = '1';
$params ['private_messaging_notification_email'] = '0';
$params ['notification_email_switcher'] = '0';
$params ['notification_email'] = '';
$params ['email_subject'] = 'JChatSocial - New conversation started';
$params ['email_start_text'] = '';
// ChatGPT AI Bot
$params ['chatgpt_ai_bot_enabled'] = '0';
$params ['chatgpt_ai_bot_name'] = 'ChatBot';
$params ['chatgpt_conversation_argument'] = 'Learn about services of https://www.yourdomain.com to be able to answer customer questions and provide help';
$params ['chatgpt_ai_bot_avatar'] = '';
$params ['chatgpt_ai_role'] = '';
$params ['chatgpt_ai_tone'] = 'professional';
$params ['chatgpt_ai_language'] = '';
$params ['chatgpt_ai_greeting'] = '';
$params ['chatgpt_ai_max_response_length'] = 'medium';
$params ['chatgpt_knowledge_base'] = '';
$params ['chatgpt_qa_dictionary'] = '';
$params ['chatgpt_forbidden_topics'] = '';
$params ['chatgpt_fallback_message'] = '';
$params ['chatgpt_include_links'] = '1';
$params ['chatgpt_custom_instructions'] = '';
$params ['allow_chatgpt_bot'] = array(0);
$params ['aigenerator_service_http_transport'] = 'curl';
$params ['chatgpt_apikey'] = '';
$params ['chatgpt_api_model'] = 'gpt-3.5-turbo';
$params ['chatgpt_api_custom_model'] = '';
$params ['chatgpt_maxtokens'] = '3500';
$params ['chatgpt_maxmessages'] = '20';
$params ['chatgpt_temperature'] = '0.5';
$params ['top_inner_icon_chatbot_open'] = '0';
// Social login
$params ['fblogin_active'] = '0';
$params ['appId'] = '';
$params ['secret'] = '';
$params ['gpluslogin_active'] = '0';
$params ['gplusClientID'] = '';
$params ['gplusKey'] = '';
$params ['twitterlogin_active'] = '0';
$params ['twitterKey'] = '';
$params ['twitterSecret'] = '';
$params ['sdkloadmode'] = '2';
$params ['sdkversion'] = '6.0';
$params ['auth_type'] = 'id';
$params ['curl_ssl_verifypeer'] = '1';
// Language translation
$params ['language_translation_enabled'] = '0';
$params ['language_translation_groups'] = array('8');
$params ['language_translation_incomingmessages'] = '1';
$params ['language_translation_selfmessages'] = '0';
$params ['default_language'] = '';
$params ['default_to_language'] = 'en';
$params ['language_translator_dynamic_values'] = '0';
// Permissions
$params ['chat_accesslevels'] = array('0');
$params ['allow_guest_fileupload'] = '1';
$params ['allow_guest_avatarupload'] = '1';
$params ['allow_guest_skypebridge'] = '1';
$params ['allow_guest_overridename'] = '1';
$params ['allow_guest_banning'] = '1';
$params ['allow_guest_buddylist'] = '1';
$params ['allow_media_objects'] = '1';
$params ['allow_videochat'] = array('0');
$params ['allow_backend_access'] = array('0');
$params ['allow_media_recorder'] = array('0');
$params ['allow_media_recorder_save'] = array('0');
$params ['allow_blackboard'] = array('0');
$params ['allow_livestreaming'] = array('0');
$params ['limit_my_users_groups'] = '0';
$params ['conference_access_guest'] = '0';
$params ['addchatroom'] = '0';
$params ['addchatroom_groups'] = array('8');
$params ['deletechatroom'] = '0';
$params ['deletechatroom_groups'] = array('8');
$params ['enablemoderation'] = '0';
$params ['moderation_groups'] = array('8');
$params ['days_of_the_week'] = '';
$params ['start_at_hour'] = '';
$params ['stop_at_hour'] = '';
// Advanced
$params ['chat_exclusions'] = array('0');
$params ['chatrooms_latest'] = '1';
$params ['chatrooms_latest_interval'] = '120';
$params ['wall_history_delay'] = '1';
$params ['wall_history_delay_autoload'] = '0';
$params ['chatrooms_messages_stillinroom'] = '0';
$params ['maxtimeinterval_groupmessages'] = '12';
$params ['chatrooms_notifications'] = '1';
$params ['privacy_policy'] = '0';
$params ['privacy_policy_link'] = '';
$params ['async_send_message'] = 'before';
$params ['unique_usernames'] = '0';
$params ['download_msgs_multitabs_mode'] = '0';
$params ['exclude_bots'] = '0';
$params ['manage_unstable_network'] = '0';
$params ['advanced_avatars_mgmt'] = '0';
$params ['pm_num_loading_msgs'] = '100';
$params ['pm_order_by_clause'] = 'alpha';
$params ['public_chat_joined_btn_tooltip'] = 'title';
$params ['shared_session_support'] = '1';
$params ['force_joomla_session_cleanup'] = '0';
$params ['prevent_contacting_busy_users'] = '0';
$params ['purge_reset_all_userstatus'] = '0';
$params ['caching'] = '0';
$params ['cache_lifetime'] = '15';
$params ['scripts_loading'] = 'dom';
$params ['keep_latest_msgs'] = '7';
$params ['clean_sessionid'] = '0';
$params ['enable_debug'] = '0';
$params ['notifications_auto_enable'] = '0';
$params ['notifications_time'] = '10';
$params ['notifications_public_time'] = '5';
$params ['includejquery'] = '1';
$params ['noconflict'] = '0';
$params ['includeevent'] = 'afterdispatch';
// Insert all params settings default first time, merge and insert only new one if any on update, keeping current settings
if ($type == 'install') {
$this->setParams ( $params );
} elseif ($type == 'update') {
// Load and merge existing params, this let add new params default and keep existing settings one
$db = Factory::getContainer()->get('DatabaseDriver');
$query = method_exists ( $db, 'createQuery' ) ? $db->createQuery () : $db->getQuery ( true );
$query->select('params');
$query->from('#__extensions');
$query->where($db->quoteName('name') . '=' . $db->quote('jchat'));
$db->setQuery($query);
$existingParamsString = $db->loadResult();
// store the combined new and existing values back as a JSON string
$existingParams = json_decode ( $existingParamsString, true );
if(!is_array($existingParams)) {
$existingParams = [];
}
$updatedParams = array_merge($params, $existingParams);
$this->setParams($updatedParams);
}
return true;
}
/*
* $parent is the class calling this method
* uninstall runs before any other action is taken (file removal or database processing).
*/
function uninstall(InstallerAdapter $parent): bool {
$database = Factory::getContainer()->get('DatabaseDriver');
$lang = Factory::getApplication()->getLanguage();
$lang->load('com_jchat.sys', JPATH_ADMINISTRATOR . '/components/com_jchat', null, false, true) || $lang->load('com_jchat.sys', JPATH_ADMINISTRATOR, null, false, true);
// Check if plugin exists
$query = "SELECT extension_id" .
"\n FROM #__extensions" .
"\n WHERE type = 'plugin' AND element = " . $database->quote('jchat') .
"\n AND folder = " . $database->quote('system');
$database->setQuery($query);
$pluginID = $database->loadResult();
if(!$pluginID) {
echo '<p>' . Text::_('COM_JCHAT_PLUGIN_ALREADY_REMOVED') . '</p>';
} else {
// New plugin installer
$pluginInstaller = new Installer ();
$pluginInstaller->setDatabase($database);
if(!$pluginInstaller->uninstall('plugin', $pluginID)) {
echo '<p>' . Text::_('COM_JCHAT_ERROR_UNINSTALLING_PLUGINS') . '</p>';
}
}
// Check if social login plugin exists
$query = "SELECT extension_id" .
"\n FROM #__extensions" .
"\n WHERE type = 'plugin' AND element = " . $database->quote('jchatlogin') .
"\n AND folder = " . $database->quote('system');
$database->setQuery($query);
$pluginID = $database->loadResult();
if(!$pluginID) {
echo '<p>' . Text::_('COM_JCHAT_PLUGIN_ALREADY_REMOVED') . '</p>';
} else {
// New plugin installer
$pluginInstaller = new Installer ();
$pluginInstaller->setDatabase($database);
if(!$pluginInstaller->uninstall('plugin', $pluginID)) {
echo '<p>' . Text::_('COM_JCHAT_ERROR_UNINSTALLING_PLUGINS') . '</p>';
}
}
// Check if module exists
$query = "SELECT extension_id" .
"\n FROM #__extensions" .
"\n WHERE type = 'module' AND element = " . $database->quote('mod_jchat') .
"\n AND client_id = 0";
$database->setQuery($query);
$moduleID = $database->loadResult();
if(!$moduleID) {
echo '<p>' . Text::_('COM_JCHAT_MODULE_ALREADY_REMOVED') . '</p>';
} else {
// New plugin installer
$moduleInstaller = new Installer ();
$moduleInstaller->setDatabase($database);
if(!$moduleInstaller->uninstall('module', $moduleID)) {
echo '<p>' . Text::_('COM_JCHAT_ERROR_UNINSTALLING_MODULE') . '</p>';
}
}
// Check if module exists
$query = "SELECT extension_id" .
"\n FROM #__extensions" .
"\n WHERE type = 'module' AND element = " . $database->quote('mod_jchat_messaging') .
"\n AND client_id = 0";
$database->setQuery($query);
$moduleID = $database->loadResult();
if(!$moduleID) {
echo '<p>' . Text::_('COM_JCHAT_MODULE_ALREADY_REMOVED') . '</p>';
} else {
// New plugin installer
$moduleInstaller = new Installer ();
$moduleInstaller->setDatabase($database);
if(!$moduleInstaller->uninstall('module', $moduleID)) {
echo '<p>' . Text::_('COM_JCHAT_ERROR_UNINSTALLING_MODULE') . '</p>';
}
}
// Move the service worker to the root if this is the first installation
if(file_exists(JPATH_ROOT . '/jchatsw.js')) {
File::delete(JPATH_ROOT . '/jchatsw.js');
}
// Check if social login plugin exists
$queryDeleteBotSession = "DELETE" .
"\n FROM #__session" .
"\n WHERE " . $database->quoteName('session_id') . " = " . $database->quote('02jsess544jchat8b99gptc688bot1');
$database->setQuery($queryDeleteBotSession);
$database->execute();
// Uninstall complete
return true;
}
/*
* get a variable from the manifest file (actually, from the manifest cache).
*/
function getParam($name) {
$db = Factory::getContainer()->get('DatabaseDriver');
$db->setQuery ( 'SELECT manifest_cache FROM #__extensions WHERE name = "jchat"' );
$manifest = json_decode ( $db->loadResult (), true );
return $manifest [$name];
}
/*
* sets parameter values in the component's row of the extension table
*/
function setParams($param_array) {
if (count ( $param_array ) > 0) {
$db = Factory::getContainer()->get('DatabaseDriver');
// store the combined new and existing values back as a JSON string
$paramsString = json_encode ( $param_array );
$db->setQuery ( 'UPDATE #__extensions SET params = ' . $db->quote ( $paramsString ) . ' WHERE name = "jchat"' );
$db->execute ();
}
}
}
// Facade pattern layout for Joomla legacy and new container based installer. Legacy installer up to 4.2, new container installer from 4.3+
if(version_compare(JVERSION, '4.3', '>=') && interface_exists('\\Joomla\\CMS\\Installer\\InstallerScriptInterface')) {
return new class () extends JChatBaseInstallerScript implements InstallerScriptInterface {
};
} else {
class com_jchatInstallerScript extends JChatBaseInstallerScript {
}
}