<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/licenses/gpl-2.0.html
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\Registry\Registry;
use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Version;
use Joomla\CMS\Uri\Uri;
class com_rsformInstallerScript
{
protected $source;
protected static $legacy = array('inline', '2lines', '2colsinline', '2cols2lines', 'inline-xhtml', '2lines-xhtml');
protected $warnPlugins = false;
protected $migrateResponsiveLayoutFramework = false;
private static $minJoomla = '3.10.0';
private static $minPHP = '5.5';
public function update($parent) {
$db = Factory::getDbo();
$this->source = $parent->getParent()->getPath('source');
/**
* Create column here, so we can run the SQL immediately after
*/
$columns = $db->getTableColumns('#__rsform_component_type_fields', false);
if (!isset($columns['Properties']))
{
$db->setQuery("ALTER TABLE `#__rsform_component_type_fields` ADD `Properties` TEXT NOT NULL AFTER `FieldValues`");
$db->execute();
}
if ($columns['FieldType']->Type != "varchar(32)") {
$db->setQuery("ALTER TABLE `#__rsform_component_type_fields` CHANGE `FieldType` `FieldType` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'hidden'");
$db->execute();
}
$columns = $db->getTableColumns('#__rsform_component_types');
if (!isset($columns['CanBeDuplicated']))
{
$db->setQuery("ALTER TABLE `#__rsform_component_types` ADD `CanBeDuplicated` tinyint(1) NOT NULL DEFAULT '1' AFTER `ComponentTypeName`");
$db->execute();
$query = $db->getQuery(true);
$query->update('#__rsform_component_types')
->set($db->qn('CanBeDuplicated') . ' = ' . $db->q(0))
->where($db->qn('ComponentTypeId') . ' = '. $db->q(8));
$db->setQuery($query)->execute();
}
// Add config data
$this->runSQL('config.data.sql');
// Run all SQL queries to create missing data
$this->runSQL('component_type_fields.data.sql');
$this->runSQL('component_types.data.sql');
$this->runSQL('conditions.sql');
$this->runSQL('condition_details.sql');
$this->runSQL('emails.sql');
$this->runSQL('posts.sql');
$this->runSQL('submission_columns.sql');
$this->runSQL('translations.sql');
$this->runSQL('calculations.sql');
$this->runSQL('directory.sql');
$this->runSQL('directory_fields.sql');
// #__rsform_forms updates
$columns = $db->getTableColumns('#__rsform_forms', false);
// Change varchar to text
$textColumns = array('UserEmailAttachFile', 'UserEmailCC', 'UserEmailBCC', 'UserEmailReplyTo', 'UserEmailReplyToName', 'AdminEmailCC', 'AdminEmailBCC', 'AdminEmailReplyTo', 'AdminEmailReplyToName', 'DeletionEmailCC', 'DeletionEmailBCC', 'DeletionEmailFrom', 'DeletionEmailReplyTo', 'DeletionEmailReplyToName', 'DeletionEmailFromName', 'DeletionEmailSubject');
foreach ($textColumns as $textColumn)
{
if (isset($columns[$textColumn]))
{
if (strpos($columns[$textColumn]->Type, 'text') === false)
{
$db->setQuery("ALTER TABLE #__rsform_forms CHANGE " . $db->qn($textColumn) . " " . $db->qn($textColumn) . " text NOT NULL");
$db->execute();
}
}
}
$columns = $db->getTableColumns('#__rsform_forms');
if (!isset($columns['UserEmailAttach'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailAttach` TINYINT NOT NULL AFTER `UserEmailMode`");
$db->execute();
}
if (!isset($columns['UserEmailAttachFile'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailAttachFile` TEXT NOT NULL AFTER `UserEmailAttach`");
$db->execute();
}
if (!isset($columns['ScriptProcess2'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `ScriptProcess2` mediumtext NOT NULL AFTER `ScriptProcess`");
$db->execute();
}
if (!isset($columns['UserEmailCC'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailCC` TEXT NOT NULL AFTER `UserEmailTo`");
$db->execute();
}
if (!isset($columns['UserEmailBCC'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailBCC` TEXT NOT NULL AFTER `UserEmailCC`");
$db->execute();
}
if (!isset($columns['UserEmailReplyTo'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailReplyTo` TEXT NOT NULL AFTER `UserEmailBCC`");
$db->execute();
}
if (!isset($columns['UserEmailReplyToName'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailReplyToName` TEXT NOT NULL AFTER `UserEmailReplyTo`");
$db->execute();
}
if (!isset($columns['AdminEmailCC'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `AdminEmailCC` TEXT NOT NULL AFTER `AdminEmailTo`");
$db->execute();
}
if (!isset($columns['AdminEmailBCC'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `AdminEmailBCC` TEXT NOT NULL AFTER `AdminEmailCC`");
$db->execute();
}
if (!isset($columns['AdminEmailReplyTo'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `AdminEmailReplyTo` TEXT NOT NULL AFTER `AdminEmailBCC`");
$db->execute();
}
if (!isset($columns['AdminEmailReplyToName'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `AdminEmailReplyToName` TEXT NOT NULL AFTER `AdminEmailReplyTo`");
$db->execute();
}
if (!isset($columns['LoadFormLayoutFramework'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `LoadFormLayoutFramework` TINYINT( 1 ) NOT NULL default '1' AFTER `FormLayoutName`");
$db->execute();
}
if (!isset($columns['FormLayoutFlow'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `FormLayoutFlow` TINYINT( 1 ) NOT NULL default '0' AFTER `FormLayoutAutogenerate`");
$db->execute();
}
if (!isset($columns['MetaTitle'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `MetaTitle` TINYINT( 1 ) NOT NULL");
$db->execute();
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `MetaDesc` TEXT NOT NULL");
$db->execute();
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `MetaKeywords` TEXT NOT NULL");
$db->execute();
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `Required` VARCHAR( 255 ) NOT NULL DEFAULT '(*)'");
$db->execute();
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ErrorMessage` TEXT NOT NULL");
$db->execute();
$db->setQuery("SELECT FormId FROM #__rsform_forms WHERE FormId='1' AND FormName='RSformPro example' AND ErrorMessage=''");
if ($db->loadResult())
{
$db->setQuery("UPDATE #__rsform_forms SET MetaTitle=0, MetaDesc='This is the meta description of your form. You can use it for SEO purposes.', MetaKeywords='rsform, contact, form, joomla', Required='(*)', ErrorMessage='<p class=\"formRed\">Please complete all required fields!</p>' WHERE FormId='1' LIMIT 1");
$db->execute();
}
}
if (!isset($columns['CSS'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `CSS` mediumtext NOT NULL AFTER `FormLayoutAutogenerate` ,".
" ADD `JS` mediumtext NOT NULL AFTER `CSS` ,".
" ADD `ShowThankyou` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `ReturnUrl` ,".
" ADD `UserEmailScript` mediumtext NOT NULL AFTER `ScriptDisplay` ,".
" ADD `AdminEmailScript` mediumtext NOT NULL AFTER `UserEmailScript` ,".
" ADD `MultipleSeparator` VARCHAR( 64 ) NOT NULL AFTER `ErrorMessage` ,".
" ADD `TextareaNewLines` TINYINT( 1 ) NOT NULL AFTER `MultipleSeparator`");
$db->execute();
}
if (!isset($columns['CSSClass'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `CSSClass` VARCHAR( 255 ) NOT NULL AFTER `TextareaNewLines` ,".
" ADD `CSSId` VARCHAR( 255 ) NOT NULL DEFAULT 'userForm' AFTER `CSSClass` ,".
" ADD `CSSName` VARCHAR( 255 ) NOT NULL AFTER `CSSId` ,".
" ADD `CSSAction` TEXT NOT NULL AFTER `CSSName` ,".
" ADD `CSSAdditionalAttributes` TEXT NOT NULL AFTER `CSSAction`,".
" ADD `AjaxValidation` TINYINT( 1 ) NOT NULL AFTER `CSSAdditionalAttributes`");
$db->execute();
}
if (isset($columns['UserEmailConfirmation'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` DROP `UserEmailConfirmation`");
$db->execute();
}
if (isset($columns['ThemeParams']))
{
$db->setQuery("ALTER TABLE `#__rsform_forms` DROP `ThemeParams`");
$db->execute();
}
if (!isset($columns['ShowContinue'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ShowContinue` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `Thankyou`");
$db->execute();
}
if (!isset($columns['ShowSystemMessage'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ShowSystemMessage` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `ReturnUrl`");
$db->execute();
}
if (!isset($columns['Keepdata'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `Keepdata` TINYINT( 1 ) NOT NULL DEFAULT '1'");
$db->execute();
$db->setQuery("UPDATE `#__rsform_forms` SET `Keepdata` = 1");
$db->execute();
} else {
$db->setQuery("ALTER TABLE `#__rsform_forms` CHANGE `Keepdata` `Keepdata` TINYINT( 1 ) NOT NULL DEFAULT '1'");
$db->execute();
}
if (!isset($columns['KeepIP'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `KeepIP` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `Keepdata`");
$db->execute();
}
if (!isset($columns['DeleteSubmissionsAfter'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `DeleteSubmissionsAfter` INT( 11 ) NOT NULL DEFAULT '0' AFTER `KeepIP`");
$db->execute();
}
if (!isset($columns['Backendmenu'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `Backendmenu` TINYINT( 1 ) NOT NULL");
$db->execute();
}
if (!isset($columns['ConfirmSubmission'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ConfirmSubmission` TINYINT( 1 ) NOT NULL DEFAULT '0'");
$db->execute();
}
if (!isset($columns['ConfirmSubmissionDefer'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ConfirmSubmissionDefer` TEXT NOT NULL AFTER `ConfirmSubmission`");
$db->execute();
}
if (!isset($columns['ConfirmSubmissionUrl'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ConfirmSubmissionUrl` TEXT NOT NULL AFTER `ConfirmSubmission`");
$db->execute();
}
if (!isset($columns['AdditionalEmailsScript'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `AdditionalEmailsScript` mediumtext NOT NULL AFTER `AdminEmailScript`");
$db->execute();
}
if (!isset($columns['ShowFormTitle'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `ShowFormTitle` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `FormTitle`");
$db->execute();
}
if (!isset($columns['Access'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `Access` VARCHAR( 5 ) NOT NULL");
$db->execute();
}
if (!isset($columns['LimitSubmissions'])) {
$db->setQuery("ALTER TABLE `#__rsform_forms` ADD `LimitSubmissions` INT( 11 ) NOT NULL default '0'");
$db->execute();
}
if (!isset($columns['ScrollToThankYou'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `ScrollToThankYou` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `ShowThankyou`");
$db->execute();
}
if (!isset($columns['ThankYouMessagePopUp'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `ThankYouMessagePopUp` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `ScrollToThankYou`");
$db->execute();
}
if (!isset($columns['ScrollToError'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `ScrollToError` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `AjaxValidation`");
$db->execute();
}
if (!isset($columns['DisableSubmitButton'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DisableSubmitButton` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `FormLayoutAutogenerate`");
$db->execute();
}
if (!isset($columns['RemoveCaptchaLogged'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `RemoveCaptchaLogged` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `DisableSubmitButton`");
$db->execute();
}
if (!isset($columns['GridLayout'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `GridLayout` MEDIUMTEXT NOT NULL AFTER `FormLayout`");
$db->execute();
}
if (!isset($columns['DeletionEmailText']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailText` mediumtext NOT NULL AFTER `AdminEmailMode`");
$db->execute();
}
if (!isset($columns['DeletionEmailTo']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailTo` text NOT NULL AFTER `DeletionEmailText`");
$db->execute();
}
if (!isset($columns['DeletionEmailCC']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailCC` TEXT NOT NULL AFTER `DeletionEmailTo`");
$db->execute();
}
if (!isset($columns['DeletionEmailBCC']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailBCC` TEXT NOT NULL AFTER `DeletionEmailCC`");
$db->execute();
}
if (!isset($columns['DeletionEmailFrom']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailFrom` TEXT NOT NULL AFTER `DeletionEmailBCC`");
$db->execute();
}
if (!isset($columns['DeletionEmailReplyTo']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailReplyTo` TEXT NOT NULL AFTER `DeletionEmailFrom`");
$db->execute();
}
if (!isset($columns['DeletionEmailReplyToName']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailReplyToName` TEXT NOT NULL AFTER `DeletionEmailReplyTo`");
$db->execute();
}
if (!isset($columns['DeletionEmailFromName']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailFromName` TEXT NOT NULL AFTER `DeletionEmailReplyTo`");
$db->execute();
}
if (!isset($columns['DeletionEmailSubject']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailSubject` TEXT NOT NULL AFTER `DeletionEmailFromName`");
$db->execute();
}
if (!isset($columns['DeletionEmailMode']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `DeletionEmailMode` tinyint(1) NOT NULL default '1' AFTER `DeletionEmailSubject`");
$db->execute();
}
if (!isset($columns['ScriptBeforeDisplay'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `ScriptBeforeDisplay` mediumtext NOT NULL AFTER `ScriptProcess2`");
$db->execute();
}
if (!isset($columns['ScriptBeforeValidation'])) {
$db->setQuery("ALTER TABLE #__rsform_forms ADD `ScriptBeforeValidation` mediumtext NOT NULL AFTER `ScriptBeforeDisplay`");
$db->execute();
}
if ($columns['FormLayout'] == 'text') {
$db->setQuery("ALTER TABLE `#__rsform_forms` CHANGE `FormLayout` `FormLayout` LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
$db->execute();
}
if (!isset($columns['UserEmailGenerate']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `UserEmailGenerate` TINYINT(1) NOT NULL DEFAULT '0' AFTER `UserEmailAttachFile`");
$db->execute();
}
if (!isset($columns['AdminEmailGenerate']))
{
$db->setQuery("ALTER TABLE #__rsform_forms ADD `AdminEmailGenerate` TINYINT(1) NOT NULL DEFAULT '0' AFTER `AdminEmailMode`");
$db->execute();
}
// #__rsform_emails updates
$columns = $db->getTableColumns('#__rsform_emails');
if (!isset($columns['type'])) {
$db->setQuery("ALTER TABLE `#__rsform_emails` ADD `type` VARCHAR( 255 ) NOT NULL AFTER `formId`");
$db->execute();
$db->setQuery("UPDATE `#__rsform_emails` SET `type` = 'additional'");
$db->execute();
}
if (!isset($columns['replytoname'])) {
$db->setQuery("ALTER TABLE `#__rsform_emails` ADD `replytoname` VARCHAR( 255 ) NOT NULL AFTER `replyto`");
$db->execute();
}
if ($columns['message'] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_emails CHANGE " . $db->qn('message') . " " . $db->qn('message') . ' mediumtext');
$db->execute();
}
// Let's make some columns mediumtext
$columns = $db->getTableColumns('#__rsform_forms');
$changed = array('CSS', 'JS', 'ScriptProcess', 'ScriptProcess2', 'ScriptBeforeDisplay', 'ScriptBeforeValidation', 'ScriptDisplay', 'UserEmailScript', 'AdminEmailScript', 'AdditionalEmailsScript', 'Thankyou', 'UserEmailText', 'AdminEmailText', 'DeletionEmailText');
foreach ($changed as $column)
{
if (isset($columns[$column]) && $columns[$column] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_forms CHANGE " . $db->qn($column) . " " . $db->qn($column) . ' mediumtext');
$db->execute();
}
}
$columns = $db->getTableColumns('#__rsform_submission_values');
$changed = array('FieldValue');
foreach ($changed as $column)
{
if (isset($columns[$column]) && $columns[$column] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_submission_values CHANGE " . $db->qn($column) . " " . $db->qn($column) . ' mediumtext');
$db->execute();
}
}
$columns = $db->getTableColumns('#__rsform_properties');
$changed = array('PropertyValue');
foreach ($changed as $column)
{
if (isset($columns[$column]) && $columns[$column] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_properties CHANGE " . $db->qn($column) . " " . $db->qn($column) . ' mediumtext');
$db->execute();
}
}
// #__rsform_config updates
$columns = $db->getTableColumns('#__rsform_config', false);
if (isset($columns['ConfigId'])) {
$db->setQuery("ALTER TABLE `#__rsform_config` DROP `ConfigId`");
$db->execute();
}
if (!$columns['SettingName']->Key) {
// remove duplicates
$query = $db->getQuery(true);
$query->select($db->qn('SettingName'))->from('#__rsform_config');
$db->setQuery($query);
$results = $db->loadColumn();
$counts = array_count_values($results);
foreach ($counts as $key => $num) {
if ($num > 1) {
$db->setQuery("DELETE FROM #__rsform_config WHERE ".$db->qn('SettingName').'='.$db->q($key)." LIMIT ".($num-1));
$db->execute();
}
}
$db->setQuery("ALTER TABLE `#__rsform_config` ADD PRIMARY KEY (`SettingName`)");
$db->execute();
}
// #__rsform_submission_values updates
$columns = $db->getTableColumns('#__rsform_submission_values', false);
if ($columns['FormId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_submission_values ADD INDEX (`FormId`)");
$db->execute();
}
if ($columns['SubmissionId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_submission_values ADD INDEX (`SubmissionId`)");
$db->execute();
}
if (!isset($columns['FormId'])) {
$db->setQuery("ALTER TABLE #__rsform_submission_values ADD `FormId` INT NOT NULL AFTER `SubmissionValueId`");
$db->execute();
$db->setQuery("UPDATE #__rsform_submission_values sv, #__rsform_submissions s SET sv.FormId=s.FormId WHERE sv.SubmissionId = s.SubmissionId");
$db->execute();
}
if ($db->hasUTF8mb4Support())
{
if (strpos(strtolower($columns['FieldValue']->Collation), 'utf8mb4') === false)
{
$db->setQuery('ALTER TABLE '.$db->qn('#__rsform_submission_values').' CHANGE '.$db->qn('FieldValue').' '.$db->qn('FieldValue').' '.$columns['FieldValue']->Type.' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$db->execute();
}
}
// #__rsform_submissions updates
$columns = $db->getTableColumns('#__rsform_submissions', false);
if ($columns['FormId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_submissions ADD INDEX (`FormId`)");
$db->execute();
}
if (!isset($columns['Lang'])) {
$db->setQuery("ALTER TABLE `#__rsform_submissions` ADD `Lang` VARCHAR( 255 ) NOT NULL AFTER `UserId`");
$db->execute();
}
if (!isset($columns['confirmed'])) {
$db->setQuery("ALTER TABLE `#__rsform_submissions` ADD `confirmed` TINYINT( 1 ) NOT NULL");
$db->execute();
}
if (!isset($columns['ConfirmedIp']))
{
$db->setQuery("ALTER TABLE `#__rsform_submissions` ADD `ConfirmedIp` varchar(255) NOT NULL default ''");
$db->execute();
$db->setQuery("UPDATE #__rsform_submissions SET ConfirmedIp = UserIp WHERE confirmed = 1;");
$db->execute();
}
if (!isset($columns['ConfirmedDate']))
{
$db->setQuery("ALTER TABLE `#__rsform_submissions` ADD `ConfirmedDate` datetime");
$db->execute();
$db->setQuery("UPDATE #__rsform_submissions SET ConfirmedDate = DateSubmitted WHERE confirmed = 1;");
$db->execute();
}
if (!isset($columns['SubmissionHash'])) {
$db->setQuery("ALTER TABLE `#__rsform_submissions` ADD `SubmissionHash` VARCHAR( 32 ) NOT NULL," .
"ADD KEY `SubmissionId` (`SubmissionId`,`FormId`,`DateSubmitted`)," .
"ADD KEY `SubmissionHash` (`SubmissionHash`)");
$db->execute();
}
$columns = $db->getTableColumns('#__rsform_submissions', false);
if ($columns['UserIp']->Type == 'varchar(15)') {
$db->setQuery("ALTER TABLE `#__rsform_submissions` CHANGE `UserIp` `UserIp` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
$db->execute();
}
if ($columns['UserId']->Type == 'text') {
$db->setQuery("UPDATE `#__rsform_submissions` SET `UserId` = '0' WHERE `UserId` = ''");
$db->execute();
$db->setQuery("ALTER TABLE `#__rsform_submissions` CHANGE `UserId` `UserId` INT( 11 ) NOT NULL DEFAULT '0'");
$db->execute();
}
// #__rsform_component_type_fields updates
$query = $db->getQuery(true);
$query->update('#__rsform_component_type_fields')
->set($db->qn('FieldType').'='.$db->q('textarea'))
->where($db->qn('FieldName').'='.$db->q('DEFAULTVALUE'))
->where($db->qn('ComponentTypeId').'='.$db->q(1));
$db->setQuery($query);
$db->execute();
$columns = $db->getTableColumns('#__rsform_component_type_fields', false);
if (isset($columns['ComponentTypeFieldId'])) {
$db->setQuery("ALTER TABLE `#__rsform_component_type_fields` DROP `ComponentTypeFieldId`");
$db->execute();
}
if ($columns['ComponentTypeId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_component_type_fields ADD INDEX (`ComponentTypeId`)");
$db->execute();
}
// #__rsform_translations updates
$columns = $db->getTableColumns('#__rsform_translations', false);
if ($columns['lang_code']->Key != 'MUL')
{
try
{
$db->setQuery("ALTER TABLE #__rsform_translations ADD KEY `lang_code` (`lang_code`)")->execute();
$db->setQuery("ALTER TABLE #__rsform_translations ADD KEY `reference` (`reference`)")->execute();
$db->setQuery("ALTER TABLE #__rsform_translations ADD KEY `lang_search` (`form_id`,`lang_code`,`reference`)")->execute();
}
catch (Exception $e)
{
// Do nothing
}
}
$columns = $db->getTableColumns('#__rsform_translations');
$changed = array('value');
foreach ($changed as $column)
{
if (isset($columns[$column]) && $columns[$column] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_translations CHANGE " . $db->qn($column) . " " . $db->qn($column) . ' mediumtext');
$db->execute();
}
}
$columns = $db->getTableColumns('#__rsform_conditions', false);
if ($columns['component_id']->Type != 'text')
{
try
{
$db->setQuery("ALTER TABLE `#__rsform_conditions` DROP INDEX `component_id`")->execute();
}
catch (Exception $e)
{
}
try
{
$db->setQuery("ALTER TABLE `#__rsform_conditions` CHANGE `component_id` `component_id` TEXT NOT NULL")->execute();
}
catch (Exception $e)
{
}
}
// add the VALIDATIONMULTIPLE to the textBox field
$db->setQuery("SELECT COUNT(`FieldName`) FROM #__rsform_component_type_fields WHERE `ComponentTypeId` = 1 AND `FieldName` = 'VALIDATIONMULTIPLE'");
if (!$db->loadResult()) {
$db->setQuery("INSERT INTO #__rsform_component_type_fields SET `ComponentTypeId` = 1, `FieldName` = 'VALIDATIONMULTIPLE' , `FieldType` = 'selectmultiple', `FieldValues` = '".$db->escape("//<code>\r\nreturn RSFormProHelper::getValidationRules(false, true);\r\n//</code>")."', `Ordering`= 6");
$db->execute();
}
// add the VALIDATIONMULTIPLE to the textArea field
$db->setQuery("SELECT COUNT(`FieldName`) FROM #__rsform_component_type_fields WHERE `ComponentTypeId` = 2 AND `FieldName` = 'VALIDATIONMULTIPLE'");
if (!$db->loadResult()) {
$db->setQuery("INSERT INTO #__rsform_component_type_fields SET `ComponentTypeId` = 2, `FieldName` = 'VALIDATIONMULTIPLE' , `FieldType` = 'selectmultiple', `FieldValues` = '".$db->escape("//<code>\r\nreturn RSFormProHelper::getValidationRules(false, true);\r\n//</code>")."', `Ordering`= 6");
$db->execute();
}
// add the VALIDATIONMULTIPLE to the password field
$db->setQuery("SELECT COUNT(`FieldName`) FROM #__rsform_component_type_fields WHERE `ComponentTypeId` = 14 AND `FieldName` = 'VALIDATIONMULTIPLE'");
if (!$db->loadResult()) {
$db->setQuery("INSERT INTO #__rsform_component_type_fields SET `ComponentTypeId` = 14, `FieldName` = 'VALIDATIONMULTIPLE' , `FieldType` = 'selectmultiple', `FieldValues` = '".$db->escape("//<code>\r\nreturn RSFormProHelper::getValidationRules(false, true);\r\n//</code>")."', `Ordering`= 9");
$db->execute();
}
// rename old RSadapter function to new one
$db->setQuery("UPDATE #__rsform_component_type_fields SET FieldValues='".$db->escape("//<code>\r\nreturn JPATH_SITE.'/components/com_rsform/uploads/';\r\n//</code>")."' WHERE FieldName='DESTINATION' AND ComponentTypeId=9 AND FieldValues LIKE '%RSadapter%'");
$db->execute();
// remove old "ATTACHUSEREMAIL" and "ATTACHADMINEMAIL" fields
$db->setQuery("SELECT * FROM #__rsform_component_type_fields WHERE `ComponentTypeId` = 9 AND `FieldName`='ATTACHUSEREMAIL' OR `FieldName`='ATTACHADMINEMAIL'");
if ($db->loadResult()) {
$db->setQuery("DELETE FROM `#__rsform_component_type_fields` WHERE `ComponentTypeId` = 9 AND `FieldName` ='ATTACHUSEREMAIL'");
$db->execute();
$db->setQuery("DELETE FROM `#__rsform_component_type_fields` WHERE `ComponentTypeId` = 9 AND `FieldName` ='ATTACHADMINEMAIL'");
$db->execute();
// if we deleted the fields, then we need to migrate the old information
$db->setQuery("SELECT `ComponentId` FROM `#__rsform_components` WHERE `ComponentTypeId` = 9 ");
if ($uploadcomponents = $db->loadColumn()) {
$db->setQuery("SELECT * FROM #__rsform_properties WHERE ComponentId IN (".implode(",", $uploadcomponents).") AND PropertyName IN ('ATTACHADMINEMAIL', 'ATTACHUSEREMAIL') AND PropertyValue='YES'");
$properties = array();
if ($tmp = $db->loadObject()) {
if (!isset($properties[$tmp->ComponentId])) {
$properties[$tmp->ComponentId] = array();
}
$properties[$tmp->ComponentId][$tmp->PropertyName] = 1;
}
foreach ($properties as $ComponentId => $property) {
$updateemailattach = array();
if (isset($property['ATTACHADMINEMAIL'])) {
$updateemailattach[] = 'adminemail';
}
if (isset($property['ATTACHUSEREMAIL'])) {
$updateemailattach[] = 'useremail';
}
if ($updateemailattach) {
$db->setQuery("INSERT INTO #__rsform_properties SET ComponentId = '".$ComponentId."' , PropertyName = 'EMAILATTACH', PropertyValue = '".$db->escape(implode(",", $updateemailattach))."' ");
$db->execute();
}
}
// delete them
$db->setQuery("DELETE FROM #__rsform_properties WHERE PropertyName IN ('ATTACHADMINEMAIL', 'ATTACHUSEREMAIL')");
$db->execute();
}
}
$db->setQuery("UPDATE `#__rsform_component_type_fields` SET `FieldType` = 'textarea' WHERE `ComponentTypeId` = 6 AND `FieldName` IN ('MINDATE', 'MAXDATE') AND `FieldType` = 'textbox'");
$db->execute();
$db->setQuery("UPDATE `#__rsform_component_type_fields` SET `FieldValues` = '//<code>\r\nreturn RSFormProHelper::getOtherCalendars(6);\r\n//</code>' WHERE `ComponentTypeId` = 6 AND `FieldName` = 'VALIDATIONCALENDAR'");
$db->execute();
// replace old ImageButton with Submits buttons fields
$db->setQuery("SELECT `ComponentId` FROM `#__rsform_components` WHERE `ComponentTypeId` = 12 ");
if ($imagebuttons = $db->loadColumn()) {
$db->setQuery("SELECT `FieldName` FROM `#__rsform_component_type_fields` WHERE `ComponentTypeId` = 13 ");
$submitButtonProperties = $db->loadColumn();
$db->setQuery("SELECT * FROM #__rsform_properties WHERE ComponentId IN (".implode(",", $imagebuttons).")");
if ($tmp = $db->loadObjectList()) {
$newProperties = array();
// handle common properties
foreach ($tmp as $property) {
if (!isset($newProperties[$property->ComponentId])) {
$newProperties[$property->ComponentId] = array();
}
if (in_array($property->PropertyName, $submitButtonProperties)) {
if ($property->PropertyName == 'ADDITIONALATTRIBUTES' && isset($newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES'])) {
$newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES'] = $property->PropertyValue."\r\n".$newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES'];
} else {
$newProperties[$property->ComponentId][$property->PropertyName] = $property->PropertyValue;
}
} else if ($property->PropertyName == 'IMAGEBUTTON' && !empty($property->PropertyValue)) {
$additional = 'type="image"'."\r\n".'src="'.$property->PropertyValue.'"';
if (isset($newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES']) && !empty($newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES'])) {
$additional = $newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES']."\r\n".$additional;
}
$newProperties[$property->ComponentId]['ADDITIONALATTRIBUTES'] = $additional;
}
}
// add the submit button extra properties
foreach ($newProperties as $ComponentId => $property) {
foreach ($submitButtonProperties as $submitProperty) {
$value = '';
switch ($submitProperty) {
case 'DISPLAYPROGRESS':
$value = 'NO';
break;
case 'DISPLAYPROGRESSMSG':
$value = '<div>'."\r\n".' <p><em>Page <strong>{page}</strong> of {total}</em></p>'."\r\n".' <div class="rsformProgressContainer">'."\r\n".' <div class="rsformProgressBar" style="width: {percent}%;"></div>'."\r\n".' </div>'."\r\n".'</div>';
break;
}
if (!empty($value)) {
$newProperties[$ComponentId][$submitProperty] = $value;
}
}
}
foreach ($newProperties as $ComponentId => $property) {
// delete the old image button specific properties
$db->setQuery("DELETE FROM `#__rsform_properties` WHERE `ComponentId` = '".$ComponentId."'");
$db->execute();
// add the new submit button properties
foreach ($property as $propertyName => $propertyValue) {
$db->setQuery("INSERT INTO #__rsform_properties SET ComponentId = '".$ComponentId."' , PropertyName = '".$db->escape($propertyName)."', PropertyValue = '".$db->escape($propertyValue)."'");
$db->execute();
}
}
}
// change the ComponentTypeId from the image button to the submit one
$db->setQuery("UPDATE `#__rsform_components` SET `ComponentTypeId` = 13 WHERE `ComponentTypeId` = 12");
$db->execute();
// delete the image button component type
$db->setQuery("DELETE FROM #__rsform_component_types WHERE `ComponentTypeId` = 12");
$db->execute();
}
// #__rsform_components updates
$columns = $db->getTableColumns('#__rsform_components', false);
if ($columns['FormId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_components ADD INDEX (`FormId`)");
$db->execute();
}
if ($columns['ComponentTypeId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_components ADD INDEX (`ComponentTypeId`)");
$db->execute();
}
// #__rsform_properties
$columns = $db->getTableColumns('#__rsform_properties', false);
if ($columns['ComponentId']->Key != 'MUL') {
$db->setQuery("ALTER TABLE #__rsform_properties ADD INDEX (`ComponentId`)");
$db->execute();
}
if ($db->hasUTF8mb4Support())
{
if (strpos(strtolower($columns['PropertyValue']->Collation), 'utf8mb4') === false)
{
$db->setQuery('ALTER TABLE '.$db->qn('#__rsform_properties').' CHANGE '.$db->qn('PropertyValue').' '.$db->qn('PropertyValue').' '.$columns['PropertyValue']->Type.' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
$db->execute();
}
}
// #__rsform_mappings migration
$columns = $db->getTableColumns('#__rsform_mappings');
if (isset($columns['MappingTable'])) {
$db->setQuery("SELECT * FROM #__rsform_mappings");
$mappings = $db->loadObjectList();
$mtables = array();
if (!empty($mappings))
{
foreach ($mappings as $mapping)
{
$db->setQuery("SELECT p.PropertyValue FROM #__rsform_properties p LEFT JOIN #__rsform_components c ON (p.ComponentId = c.ComponentId) WHERE c.ComponentId='".$mapping->ComponentId."' AND p.PropertyName='NAME' AND c.Published='1' ORDER BY c.Order");
$component = $db->loadResult();
$db->setQuery("SELECT FormId FROM #__rsform_components WHERE ComponentId = '".$mapping->ComponentId."'");
$formId = $db->loadResult();
if (!empty($component))
{
$object = new stdClass();
$object->column = $mapping->MappingColumn;
$object->component = '{'.$component.':value}';
$mtables[$mapping->MappingTable][$formId][] = $object;
}
}
}
$db->setQuery("DROP TABLE `#__rsform_mappings`");
$db->execute();
$this->runSQL('mappings.sql');
$data = array();
if (!empty($mtables))
{
foreach ($mtables as $table => $details)
{
if (!empty($details))
foreach ($details as $formId => $columns)
{
if (!empty($columns))
foreach ($columns as $column)
{
$data[$column->column] = $column->component;
}
if (!empty($data))
{
$data = serialize($data);
$db->setQuery("INSERT INTO `#__rsform_mappings` SET `formId` = '".$db->escape($formId)."', `connection` = 0, `port` = '3306', `method` = 0, `table` = '".$db->escape($table)."', `data` = '".$db->escape($data)."' ");
$db->execute();
}
unset($data);
}
}
}
}
if (!isset($columns['driver'])) {
$db->setQuery('ALTER TABLE `#__rsform_mappings` ADD `driver` VARCHAR( 16 ) NOT NULL AFTER `host`');
$db->execute();
$query = $db->getQuery(true)
->update($db->qn('#__rsform_mappings'))
->set($db->qn('driver').'='.$db->q(Factory::getApplication()->get('dbtype')))
->where($db->qn('driver').'='.$db->q(''));
$db->setQuery($query)->execute();
}
$changed = array('data', 'wheredata', 'extra');
foreach ($changed as $column)
{
if (isset($columns[$column]) && $columns[$column] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_mappings CHANGE " . $db->qn($column) . " " . $db->qn($column) . ' mediumtext');
$db->execute();
}
}
// Add filename field to #__rsform_directory table
$columns = $db->getTableColumns('#__rsform_directory');
if (!isset($columns['filename'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `filename` VARCHAR(255) NOT NULL DEFAULT 'export.pdf' AFTER `formId`");
$db->execute();
}
if (!isset($columns['csvfilename'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `csvfilename` VARCHAR(255) NOT NULL DEFAULT '{alias}.csv' AFTER `filename`");
$db->execute();
}
if (!isset($columns['EmailsCreatedScript'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `EmailsCreatedScript` TEXT NOT NULL AFTER `EmailsScript`");
$db->execute();
}
if (!isset($columns['DeletionGroups'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `DeletionGroups` TEXT NOT NULL AFTER `groups`");
$db->execute();
}
if (!isset($columns['HideEmptyValues'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `HideEmptyValues` tinyint(1) NOT NULL AFTER `enablecsv`");
$db->execute();
}
if (!isset($columns['ShowGoogleMap'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `ShowGoogleMap` tinyint(1) NOT NULL AFTER `HideEmptyValues`");
$db->execute();
}
if (!isset($columns['EditScript'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `EditScript` MEDIUMTEXT NOT NULL AFTER `ListScript`");
$db->execute();
}
if (!isset($columns['SaveScript'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `SaveScript` MEDIUMTEXT NOT NULL AFTER `EditScript`");
$db->execute();
}
if (!isset($columns['AllowCSVFullDownload'])) {
$db->setQuery("ALTER TABLE `#__rsform_directory` ADD `AllowCSVFullDownload` tinyint(1) NOT NULL AFTER `enablecsv`");
$db->execute();
}
$changed = array('CSS', 'JS', 'ListScript', 'DetailsScript', 'EmailsScript', 'EmailsCreatedScript');
foreach ($changed as $column)
{
if (isset($columns[$column]) && $columns[$column] == 'text')
{
$db->setQuery("ALTER TABLE #__rsform_directory CHANGE " . $db->qn($column) . " " . $db->qn($column) . ' mediumtext');
$db->execute();
}
}
// #__rsform_posts updates
$columns = $db->getTableColumns('#__rsform_posts');
if (!isset($columns['fields'])) {
$db->setQuery("ALTER TABLE `#__rsform_posts` ADD `fields` MEDIUMTEXT NOT NULL AFTER `method`");
$db->execute();
}
if (!isset($columns['headers'])) {
$db->setQuery("ALTER TABLE `#__rsform_posts` ADD `headers` MEDIUMTEXT NOT NULL AFTER `fields`");
$db->execute();
}
// Update DESTINATION to relative path format.
$query = $db->getQuery(true);
$query->update($db->qn('#__rsform_component_type_fields'))
->set($db->qn('FieldValues').' = '.$db->q("//<code>\r\nreturn 'components/com_rsform/uploads/';\r\n//</code>"))
->where($db->qn('FieldName').' = '.$db->q('DESTINATION'))
->where($db->qn('ComponentTypeId').' = '.$db->q(9))
->where($db->qn('FieldValues').' = '.$db->q('%JPATH_SITE%'));
$db->setQuery($query);
$db->execute();
// Change RSgetValidationRules() to the new format
$query = $db->getQuery(true);
$query->update($db->qn('#__rsform_component_type_fields'))
->set($db->qn('FieldValues').' = '.$db->q("//<code>\r\nreturn RSFormProHelper::getValidationRules();\r\n//</code>"))
->where($db->qn('FieldName').' = '.$db->q('VALIDATIONRULE'))
->where($db->qn('FieldValues').' = '.$db->q('%RSgetValidationRules%'));
$db->setQuery($query);
$db->execute();
$columns = $db->getTableColumns('#__rsform_calculations', false);
if (!$columns['formId']->Key)
{
$db->setQuery('ALTER TABLE `#__rsform_calculations` ADD INDEX(`formId`), ADD INDEX (`ordering`), ADD INDEX (`formId`, `ordering`)')->execute();
}
$columns = $db->getTableColumns('#__rsform_directory_fields');
if (!isset($columns['sort']))
{
$db->setQuery("ALTER TABLE `#__rsform_directory_fields` ADD `sort` tinyint(1) NOT NULL DEFAULT '0' AFTER `incsv`");
$db->execute();
}
if (!empty($this->migrateResponsiveLayoutFramework)) {
$query = $db->getQuery(true);
$query->update($db->qn('#__rsform_forms'))
->set($db->qn('LoadFormLayoutFramework').'='.$db->q(1))
->where($db->qn('FormLayoutName').'='.$db->q('responsive'));
$db->setQuery($query)
->execute();
}
// Let's see if we have legacy layouts
$query = $db->getQuery(true)
->select('FormId')
->from($db->qn('#__rsform_forms'))
->where($db->qn('FormLayoutName') . ' IN (' . implode(',', $db->q(self::$legacy)) . ')');
if ($forms = $db->setQuery($query)->loadColumn())
{
$query = $db->getQuery(true)
->update($db->qn('#__rsform_forms'))
->set($db->qn('GridLayout') . ' = ' . $db->q(''))
->where($db->qn('FormId') . ' IN (' . implode(',', $db->q($forms)) . ')');
$db->setQuery($query)->execute();
}
// Update legacy params
$query = $db->getQuery(true)
->select('*')
->from($db->qn('#__menu'))
->where($db->qn('client_id') . ' = ' . $db->q(0))
->where($db->qn('link') . ' IN (' . implode(',', $db->q(array('index.php?option=com_rsform&view=directory', 'index.php?option=com_rsform&view=submissions'))) . ')');
if ($items = $db->setQuery($query)->loadObjectList())
{
foreach ($items as $item)
{
if ($item->params)
{
$params = new Registry($item->params);
$userId = $params->get('userId');
if ($userId === '0')
{
$params->set('show_all_submissions', 1);
$params->set('show_logged_in_submissions', 0);
$params->set('userId', '');
}
elseif ($userId == 'login')
{
$params->set('show_all_submissions', 0);
$params->set('show_logged_in_submissions', 1);
$params->set('userId', '');
}
else
{
continue;
}
$updateObject = (object) array(
'id' => $item->id,
'params' => $params->toString()
);
$db->updateObject('#__menu', $updateObject, array('id'));
}
}
}
}
public function uninstall($parent) {
$db = Factory::getDbo();
// Uninstall the Installer - RSForm! Pro Plugin
$query = $db->getQuery(true);
$query->select($db->qn('extension_id'))
->from($db->qn('#__extensions'))
->where($db->qn('element').'='.$db->q('rsform'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('installer'));
$db->setQuery($query);
$plg_installer_id = (int) $db->loadResult();
if (!empty($plg_installer_id)) {
// Get a new installer
$installer = new Installer();
$installer->uninstall('plugin', $plg_installer_id);
}
// Uninstall the System - RSForm! Pro Delete Submissions Plugin
$query = $db->getQuery(true);
$query->select($db->qn('extension_id'))
->from($db->qn('#__extensions'))
->where($db->qn('element').'='.$db->q('rsformdeletesubmissions'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('system'));
$db->setQuery($query);
$plg_installer_id = (int) $db->loadResult();
if (!empty($plg_installer_id)) {
// Get a new installer
$installer = new Installer();
$installer->uninstall('plugin', $plg_installer_id);
}
// Uninstall the System - RSForm! Pro Console Plugin
$query = $db->getQuery(true);
$query->select($db->qn('extension_id'))
->from($db->qn('#__extensions'))
->where($db->qn('element').'='.$db->q('rsformconsole'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('system'));
$db->setQuery($query);
$plg_installer_id = (int) $db->loadResult();
if (!empty($plg_installer_id)) {
// Get a new installer
$installer = new Installer();
$installer->uninstall('plugin', $plg_installer_id);
}
// Uninstall the Page Cache - RSForm! Pro Plugin
$query = $db->getQuery(true);
$query->select($db->qn('extension_id'))
->from($db->qn('#__extensions'))
->where($db->qn('element').'='.$db->q('rsform'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('pagecache'));
$db->setQuery($query);
$plg_installer_id = (int) $db->loadResult();
if (!empty($plg_installer_id)) {
// Get a new installer
$installer = new Installer();
$installer->uninstall('plugin', $plg_installer_id);
}
}
public function preflight($type, $parent) {
try
{
if (!class_exists('\\Joomla\\CMS\\Version'))
{
throw new Exception(sprintf('Please upgrade to at least Joomla! %s before continuing!', static::$minJoomla));
}
$jversion = new \Joomla\CMS\Version;
if (!$jversion->isCompatible(static::$minJoomla))
{
throw new Exception(sprintf('Please upgrade to at least Joomla! %s before continuing!', static::$minJoomla));
}
if (version_compare(PHP_VERSION, static::$minPHP, '<'))
{
throw new Exception('Please upgrade PHP to at least version ' . static::$minPHP . ' before continuing!');
}
// Flag to check if we should set 'Load Layout Framework' to 'Yes' for 'Responsive' layout forms now that front.css is missing responsive declarations
if ($type == 'update' && !file_exists(JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/formlayouts/responsive.php'))
{
$this->migrateResponsiveLayoutFramework = true;
}
// This has been added in 3.0.0, so it's an update from an older version
if ($type == 'update' && !is_dir(JPATH_ADMINISTRATOR . '/components/com_rsform/views/calculation'))
{
$this->warnPlugins = true;
}
}
catch (Exception $e)
{
if (class_exists('\\Joomla\\CMS\\Factory'))
{
$app = \Joomla\CMS\Factory::getApplication();
}
elseif (class_exists('JFactory'))
{
$app = JFactory::getApplication();
}
if (!empty($app))
{
$app->enqueueMessage($e->getMessage(), 'error');
}
return false;
}
return true;
}
public function postflight($type, $parent) {
if ($type == 'uninstall') {
return true;
}
$this->source = $parent->getParent()->getPath('source');
$db = Factory::getDbo();
$messages = array(
'plg_installer' => false,
'plg_rsformdeletesubmissions' => false,
'plg_pagecache' => false,
'plugins' => array(),
'modules' => array()
);
// update plugins, modules as necessary
// Get a new installer
$installer = new Installer();
if ($installer->install($this->source.'/other/plg_installer')) {
$query = $db->getQuery(true);
$query->update('#__extensions')
->set($db->qn('enabled').'='.$db->q(1))
->where($db->qn('element').'='.$db->q('rsform'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('installer'));
$db->setQuery($query);
$db->execute();
$messages['plg_installer'] = true;
}
// Get a new installer
$installer = new Installer();
if ($installer->install($this->source.'/other/plg_rsformdeletesubmissions')) {
$query = $db->getQuery(true);
$query->update('#__extensions')
->set($db->qn('enabled').'='.$db->q(1))
->where($db->qn('element').'='.$db->q('rsformdeletesubmissions'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('system'));
$db->setQuery($query);
$db->execute();
$messages['plg_rsformdeletesubmissions'] = true;
}
// Get a new installer
$installer = new Installer();
if ($installer->install($this->source.'/other/plg_pagecache')) {
$query = $db->getQuery(true);
$query->update('#__extensions')
->set($db->qn('enabled').'='.$db->q(1))
->where($db->qn('element').'='.$db->q('rsform'))
->where($db->qn('type').'='.$db->q('plugin'))
->where($db->qn('folder').'='.$db->q('pagecache'));
$db->setQuery($query);
$db->execute();
$messages['plg_pagecache'] = true;
}
// Get a new installer
if (version_compare(JVERSION, '4.0', '>=')) {
$installer = new Installer();
if ($installer->install($this->source.'/other/plg_console'))
{
$messages['plg_console'] = true;
}
}
if ($type === 'install')
{
// Set defaults to Bootstrap 5 on Joomla! 4
if (version_compare(JVERSION, '4.0', '>='))
{
$query = $db->getQuery(true)
->update('#__rsform_config')
->set($db->qn('SettingValue') . ' = ' . $db->q('bootstrap5'))
->where($db->qn('SettingName') . ' = ' . $db->q('global.default_layout'));
$db->setQuery($query)->execute();
$query = $db->getQuery(true)
->update('#__rsform_forms')
->set($db->qn('FormLayoutName') . ' = ' . $db->q('bootstrap5'))
->where($db->qn('FormLayoutName') . ' = ' . $db->q('responsive'));
$db->setQuery($query)->execute();
}
}
$this->showInstallMessage($messages);
}
protected function runSQL($file) {
$db = Factory::getDbo();
$driver = strtolower($db->name);
if (strpos($driver, 'mysql') !== false) {
$driver = 'mysql';
} elseif ($driver == 'sqlsrv') {
$driver = 'sqlazure';
}
$sqlfile = $this->source.'/admin/sql/'.$driver.'/'.$file;
if (file_exists($sqlfile)) {
$buffer = file_get_contents($sqlfile);
if ($buffer !== false) {
$queries = $db->splitSql($buffer);
foreach ($queries as $query) {
$query = trim($query);
if ($query != '') {
$db->setQuery($query);
try
{
$db->execute();
}
catch (Exception $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage());
}
}
}
}
}
}
protected function escape($string) {
return htmlentities($string, ENT_COMPAT, 'utf-8');
}
protected function showInstallMessage($messages=array()) {
?>
<style type="text/css">
.version-history {
margin: 0 0 2em 0;
padding: 0;
list-style-type: none;
}
.version-history > li {
margin: 0 0 0.5em 0;
padding: 0 0 0 4em;
}
.version-new,
.version-fixed,
.version-upgraded {
float: left;
font-size: 0.8em;
margin-left: -4.9em;
width: 4.5em;
color: white;
text-align: center;
font-weight: bold;
text-transform: uppercase;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.version-new {
background: #7dc35b;
}
.version-fixed {
background: #e9a130;
}
.version-upgraded {
background: #61b3de;
}
.install-ok {
background: #7dc35b;
color: #fff;
padding: 3px;
}
.install-not-ok {
background: #E9452F;
color: #fff;
padding: 3px;
}
.install-warning {
background: #EFBB67;
color: #fff;
padding: 3px;
}
.big-warning {
background: #FAF0DB;
border: solid 1px #EBC46F;
padding: 5px;
font-size: 22px;
line-height: 22px;
}
.big-warning b {
color: red;
}
.red {
color: red;
}
.rsform-row {
width: 100%;
display: block;
margin-bottom: 2%;
}
.rsform-row:after {
clear: both;
display: block;
content: "";
}
.rsform-column-2 {
width: 19%;
margin-right: 1%;
float: left;
}
.rsform-column-10 {
width: 80%;
float: left;
}
</style>
<div class="rsform-row">
<div class="rsform-column-2">
<img src="<?php echo Uri::root(true); ?>/media/com_rsform/images/admin/box.png" alt="RSForm! Pro Box" />
</div>
<div class="rsform-column-10">
<p>Installer Plugin ...
<?php if ($messages['plg_installer']) { ?>
<b class="install-ok">Installed</b>
<?php } else { ?>
<b class="install-not-ok">Error installing!</b>
<?php } ?>
</p>
<p>System - RSForm! Pro Delete Submissions Plugin ...
<?php if ($messages['plg_rsformdeletesubmissions']) { ?>
<b class="install-ok">Installed</b>
<?php } else { ?>
<b class="install-not-ok">Error installing!</b>
<?php } ?>
</p>
<p>Page Cache - RSForm! Pro Plugin ...
<?php if ($messages['plg_pagecache']) { ?>
<b class="install-ok">Installed</b>
<?php } else { ?>
<b class="install-not-ok">Error installing!</b>
<?php } ?>
</p>
<?php
if (isset($messages['plg_console']))
{
?>
<p>System - RSForm! Pro CLI Plugin ...
<?php if ($messages['plg_console']) { ?>
<b class="install-ok">Installed</b>. Please enable manually if you wish to use the CLI.
<?php } else { ?>
<b class="install-not-ok">Error installing!</b>
<?php } ?>
</p>
<?php
}
?>
<h2>Changelog v3.3.4</h2>
<ul class="version-history">
<li><span class="version-new">New</span> 'Preview Field' - allowing you to preview the values from other form fields.</li>
<li><span class="version-new">New</span> 'Restricted Words' validation rule which disallows submissions containing defined words.</li>
</ul>
<a class="btn btn-large btn-lg btn-primary text-white" href="index.php?option=com_rsform">Start using RSForm! Pro</a>
<a class="btn btn-secondary text-white" href="https://www.rsjoomla.com/support/documentation/rsform-pro.html" target="_blank">Read the RSForm! Pro User Guide</a>
<a class="btn btn-secondary text-white" href="https://www.rsjoomla.com/support.html" target="_blank">Get Support!</a>
</div>
</div>
<?php
}
}