diff --git a/modules/module/module.class.php b/modules/module/module.class.php
index 59425c718..07f6e1340 100644
--- a/modules/module/module.class.php
+++ b/modules/module/module.class.php
@@ -17,32 +17,34 @@ class module extends ModuleObject
$oDB = &DB::getInstance();
$oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"), true);
- $oDB->addIndex('sites','unique_domain',array('domain'),true);
+
+ // Insert new domain
+ $output = executeQuery('module.getDomains');
+ if(!$output->data || !$output->data->index_module_srl)
+ {
+ $current_url = Rhymix\Framework\Url::getCurrentUrl();
+ $domain = new stdClass();
+ $domain->domain_srl = 0;
+ $domain->domain = Rhymix\Framework\URL::decodeIdna(parse_url($current_url, PHP_URL_HOST));
+ $domain->index_module_srl = 0;
+ $domain->index_document_srl = 0;
+ $domain->http_port = null;
+ $domain->https_port = null;
+ $domain->security = config('url.ssl') ?: 'none';
+ $domain->description = '';
+ $domain->settings = json_encode(array('language' => null, 'timezone' => null));
+ $output = executeQuery('module.insertDomain', $domain);
+ if (!$output->toBool())
+ {
+ return $output;
+ }
+ }
+
// Create a directory to use in the module module
FileHandler::makeDir('./files/cache/module_info');
FileHandler::makeDir('./files/cache/triggers');
FileHandler::makeDir('./files/ruleset');
- // Insert site information into the sites table
- $args = new stdClass;
- $args->site_srl = 0;
- $output = $oDB->executeQuery('module.getSite', $args);
- if(!$output->data || !$output->data->index_module_srl)
- {
- $domain = Context::getDefaultUrl();
- $url_info = parse_url($domain);
- $domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
-
- $site_args = new stdClass;
- $site_args->site_srl = 0;
- $site_args->index_module_srl = 0;
- $site_args->domain = $domain;
- $site_args->default_language = config('locale.default_lang');
-
- $output = executeQuery('module.insertSite', $site_args);
- if(!$output->toBool()) return $output;
- }
-
return new Object();
}
@@ -58,23 +60,13 @@ class module extends ModuleObject
if(!$oDB->isIndexExists('modules',"idx_site_mid")) return true;
// Move permissions/skin information of all modules to the table, grants.
if($oDB->isColumnExists('modules', 'grants')) return true;
- // Move permissions/skin information of all modules to the table, grants.
- if(!$oDB->isColumnExists('sites', 'default_language')) return true;
// Delete extra_vars* column
for($i=1;$i<=20;$i++)
{
if($oDB->isColumnExists("documents","extra_vars".$i)) return true;
}
- // Insert site information to the table, sites
- $args = new stdClass();
- $args->site_srl = 0;
- $output = $oDB->executeQuery('module.getSite', $args);
- if(!$output->data) return true;
-
- // If domain index is defined on the table, sites
- if($oDB->isIndexExists('sites', 'idx_domain')) return true;
- if(!$oDB->isIndexExists('sites','unique_domain')) return true;
+ // Check indexes
if(!$oDB->isColumnExists("modules", "use_mobile")) return true;
if(!$oDB->isColumnExists("modules", "mlayout_srl")) return true;
if(!$oDB->isColumnExists("modules", "mcontent")) return true;
@@ -99,7 +91,16 @@ class module extends ModuleObject
}
}
- // XE 1.7
+ // Check domains
+ if (!$oDB->isTableExists('domains'))
+ {
+ return true;
+ }
+ $output = $oDB->executeQuery('module.getDomains', new stdClass);
+ if (!$output->data)
+ {
+ return true;
+ }
// check fix mskin
if(!$oDB->isColumnExists("modules", "is_mskin_fix")) return true;
@@ -303,11 +304,7 @@ class module extends ModuleObject
$oDB->dropColumn('modules','skin_vars');
$oDB->dropColumn('modules','extra_vars');
}
- // Rights of all modules/skins transferring the information into a table Update grants
- if(!$oDB->isColumnExists('sites', 'default_language'))
- {
- $oDB->addColumn('sites','default_language','varchar',255,0,false);
- }
+
// extra_vars * Remove Column
for($i=1;$i<=20;$i++)
{
@@ -315,35 +312,16 @@ class module extends ModuleObject
$oDB->dropColumn('documents','extra_vars'.$i);
}
- // Enter the main site information sites on the table
- $args = new stdClass;
- $args->site_srl = 0;
- $output = $oDB->executeQuery('module.getSite', $args);
- if(!$output->data)
+ // Migrate domains
+ if (!$oDB->isTableExists('domains'))
{
- // Basic mid, language Wanted
- $mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
- $domain = Context::getDefaultUrl();
- $url_info = parse_url($domain);
- $domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path'];
- $site_args = new stdClass();
- $site_args->site_srl = 0;
- $site_args->index_module_srl = $mid_output->data->module_srl;
- $site_args->domain = $domain;
- $site_args->default_language = config('locale.default_lang');
-
- $output = executeQuery('module.insertSite', $site_args);
- if(!$output->toBool()) return $output;
+ $oDB->createTableByXmlFile($this->module_path . 'schemas/domains.xml');
}
-
- if($oDB->isIndexExists('sites','idx_domain'))
+
+ $output = executeQuery('module.getDomains');
+ if (!$output->data)
{
- $oDB->dropIndex('sites','idx_domain');
- }
- if(!$oDB->isIndexExists('sites','unique_domain'))
- {
- $this->updateForUniqueSiteDomain();
- $oDB->addIndex('sites','unique_domain',array('domain'),true);
+ $this->migrateDomains();
}
if(!$oDB->isColumnExists("modules", "use_mobile"))
@@ -414,30 +392,95 @@ class module extends ModuleObject
return new Object(0, 'success_updated');
}
- function updateForUniqueSiteDomain()
+ /**
+ * @brief Migrate old sites and multidomain info to new 'domains' table
+ */
+ function migrateDomains()
{
- $output = executeQueryArray("module.getNonuniqueDomains");
- if(!$output->data) return;
- foreach($output->data as $data)
+ // Initialize domains data.
+ $domains = array();
+
+ // Check XE sites.
+ $output = executeQueryArray('module.getSites');
+ if ($output->data)
{
- if($data->count == 1) continue;
- $domain = $data->domain;
- $args = new stdClass;
- $args->domain = $domain;
- $output2 = executeQueryArray("module.getSiteByDomain", $args);
- $bFirst = true;
- foreach($output2->data as $site)
+ foreach ($output->data as $site_info)
{
- if($bFirst)
+ $site_domain = $site_info->domain;
+ if (!preg_match('@^https?://@', $site_domain))
{
- $bFirst = false;
- continue;
+ $site_domain = 'http://' . $site_domain;
}
- $domain .= "_";
- $args = new stdClass;
- $args->domain = $domain;
- $args->site_srl = $site->site_srl;
- $output3 = executeQuery("module.updateSite", $args);
+
+ $domain = new stdClass();
+ $domain->domain_srl = $site_info->site_srl;
+ $domain->domain = Rhymix\Framework\URL::decodeIdna(strtolower(parse_url($site_domain, PHP_URL_HOST)));
+ $domain->index_module_srl = $site_info->index_module_srl;
+ $domain->index_document_srl = 0;
+ $domain->http_port = config('url.http_port') ?: null;
+ $domain->https_port = config('url.https_port') ?: null;
+ $domain->security = config('url.ssl') ?: 'none';
+ $domain->description = '';
+ $domain->settings = json_encode(array('language' => $site_info->default_language, 'timezone' => null));
+ $domain->regdate = $site_info->regdate;
+ $domains[$domain->domain] = $domain;
+ }
+ }
+ else
+ {
+ $output = executeQuery('module.getDefaultMidInfo', $args);
+ $default_hostinfo = parse_url(Context::getDefaultUrl());
+
+ $domain = new stdClass();
+ $domain->domain_srl = 0;
+ $domain->domain = Rhymix\Framework\URL::decodeIdna(strtolower($default_hostinfo['host']));
+ $domain->index_module_srl = $output->data->module_srl;
+ $domain->index_document_srl = 0;
+ $domain->http_port = isset($default_hostinfo['port']) ? intval($default_hostinfo['port']) : null;
+ $domain->https_port = null;
+ $domain->security = config('url.ssl') ?: 'none';
+ $domain->description = '';
+ $domain->settings = json_encode(array('language' => null, 'timezone' => null));
+ $domains[$domain->domain] = $domain;
+ }
+
+ // Check multidomain module.
+ if (getModel('multidomain'))
+ {
+ $output = executeQueryArray('multidomain.getMultidomainList', (object)array('order_type' => 'asc', 'list_count' => 100000000));
+ if ($output->data)
+ {
+ foreach ($output->data as $site_info)
+ {
+ $site_domain = $site_info->domain;
+ if (!preg_match('@^https?://@', $site_domain))
+ {
+ $site_domain = 'http://' . $site_domain;
+ }
+
+ $domain = new stdClass();
+ $domain->domain_srl = $site_info->multidomain_srl;
+ $domain->domain = Rhymix\Framework\URL::decodeIdna(strtolower(parse_url($site_domain, PHP_URL_HOST)));
+ $domain->index_module_srl = intval($site_info->module_srl);
+ $domain->index_document_srl = intval($site_info->document_srl);
+ $domain->http_port = config('url.http_port') ?: null;
+ $domain->https_port = config('url.https_port') ?: null;
+ $domain->security = config('url.ssl') ?: 'none';
+ $domain->description = '';
+ $domain->settings = json_encode(array('language' => null, 'timezone' => null));
+ $domain->regdate = $site_info->regdate;
+ $domains[$domain->domain] = $domain;
+ }
+ }
+ }
+
+ // Insert into DB.
+ foreach ($domains as $domain)
+ {
+ $output = executeQuery('module.insertDomain', $domain);
+ if (!$output->toBool())
+ {
+ return $output;
}
}
}
diff --git a/modules/module/queries/getDomains.xml b/modules/module/queries/getDomains.xml
new file mode 100644
index 000000000..9e883152c
--- /dev/null
+++ b/modules/module/queries/getDomains.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/module/queries/getSites.xml b/modules/module/queries/getSites.xml
new file mode 100644
index 000000000..788cb1e9e
--- /dev/null
+++ b/modules/module/queries/getSites.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/module/queries/insertDomain.xml b/modules/module/queries/insertDomain.xml
new file mode 100644
index 000000000..f90f2ea55
--- /dev/null
+++ b/modules/module/queries/insertDomain.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file