|
@@ -1350,6 +1350,8 @@ function InstallCopy()
|
|
|
'images_url' => $themeurl . '/' . $name . '/images',
|
|
|
'version' => '1.0',
|
|
|
'install_for' => '2.1 - 2.1.99, '. strtr($forum_version, array('SMF ' => '')),
|
|
|
+ 'based_on' => '',
|
|
|
+ 'based_on_dir' => $themedir . '/default',
|
|
|
);
|
|
|
|
|
|
|
|
@@ -1831,32 +1833,22 @@ function CopyTemplate()
|
|
|
|
|
|
$_GET['th'] = isset($_GET['th']) ? (int) $_GET['th'] : (int) $_GET['id'];
|
|
|
|
|
|
- $request = $smcFunc['db_query']('', '
|
|
|
- SELECT th1.value, th1.id_theme, th2.value
|
|
|
- FROM {db_prefix}themes AS th1
|
|
|
- LEFT JOIN {db_prefix}themes AS th2 ON (th2.variable = {string:base_theme_dir} AND th2.id_theme = {int:current_theme})
|
|
|
- WHERE th1.variable = {string:theme_dir}
|
|
|
- AND th1.id_theme = {int:current_theme}
|
|
|
- LIMIT 1',
|
|
|
- array(
|
|
|
- 'current_theme' => $_GET['th'],
|
|
|
- 'base_theme_dir' => 'base_theme_dir',
|
|
|
- 'theme_dir' => 'theme_dir',
|
|
|
- )
|
|
|
- );
|
|
|
- list ($theme_dir, $context['theme_id'], $base_theme_dir) = $smcFunc['db_fetch_row']($request);
|
|
|
- $smcFunc['db_free_result']($request);
|
|
|
+ if (empty($_GET['th']))
|
|
|
+ fatal_lang_error('theme_install_invalid_id');
|
|
|
+
|
|
|
+
|
|
|
+ $theme = get_single_theme($_GET['th']);
|
|
|
+ $context['theme_id'] = $theme['id'];
|
|
|
|
|
|
if (isset($_REQUEST['template']) && preg_match('~[\./\\\\:\0]~', $_REQUEST['template']) == 0)
|
|
|
{
|
|
|
- if (!empty($base_theme_dir) && file_exists($base_theme_dir . '/' . $_REQUEST['template'] . '.template.php'))
|
|
|
- $filename = $base_theme_dir . '/' . $_REQUEST['template'] . '.template.php';
|
|
|
- elseif (file_exists($settings['default_theme_dir'] . '/' . $_REQUEST['template'] . '.template.php'))
|
|
|
+ if (file_exists($settings['default_theme_dir'] . '/' . $_REQUEST['template'] . '.template.php'))
|
|
|
$filename = $settings['default_theme_dir'] . '/' . $_REQUEST['template'] . '.template.php';
|
|
|
+
|
|
|
else
|
|
|
fatal_lang_error('no_access', false);
|
|
|
|
|
|
- $fp = fopen($theme_dir . '/' . $_REQUEST['template'] . '.template.php', 'w');
|
|
|
+ $fp = fopen($theme['theme_dir'] . '/' . $_REQUEST['template'] . '.template.php', 'w');
|
|
|
fwrite($fp, file_get_contents($filename));
|
|
|
fclose($fp);
|
|
|
|
|
@@ -1864,14 +1856,13 @@ function CopyTemplate()
|
|
|
}
|
|
|
elseif (isset($_REQUEST['lang_file']) && preg_match('~^[^\./\\\\:\0]\.[^\./\\\\:\0]$~', $_REQUEST['lang_file']) != 0)
|
|
|
{
|
|
|
- if (!empty($base_theme_dir) && file_exists($base_theme_dir . '/languages/' . $_REQUEST['lang_file'] . '.php'))
|
|
|
- $filename = $base_theme_dir . '/languages/' . $_REQUEST['template'] . '.php';
|
|
|
- elseif (file_exists($settings['default_theme_dir'] . '/languages/' . $_REQUEST['template'] . '.php'))
|
|
|
+ if (file_exists($settings['default_theme_dir'] . '/languages/' . $_REQUEST['template'] . '.php'))
|
|
|
$filename = $settings['default_theme_dir'] . '/languages/' . $_REQUEST['template'] . '.php';
|
|
|
+
|
|
|
else
|
|
|
fatal_lang_error('no_access', false);
|
|
|
|
|
|
- $fp = fopen($theme_dir . '/languages/' . $_REQUEST['lang_file'] . '.php', 'w');
|
|
|
+ $fp = fopen($theme['theme_dir'] . '/languages/' . $_REQUEST['lang_file'] . '.php', 'w');
|
|
|
fwrite($fp, file_get_contents($filename));
|
|
|
fclose($fp);
|
|
|
|
|
@@ -1897,28 +1888,6 @@ function CopyTemplate()
|
|
|
}
|
|
|
$dir->close();
|
|
|
|
|
|
- if (!empty($base_theme_dir))
|
|
|
- {
|
|
|
- $dir = dir($base_theme_dir);
|
|
|
- while ($entry = $dir->read())
|
|
|
- {
|
|
|
- if (substr($entry, -13) == '.template.php' && !in_array(substr($entry, 0, -13), $templates))
|
|
|
- $templates[] = substr($entry, 0, -13);
|
|
|
- }
|
|
|
- $dir->close();
|
|
|
-
|
|
|
- if (file_exists($base_theme_dir . '/languages'))
|
|
|
- {
|
|
|
- $dir = dir($base_theme_dir . '/languages');
|
|
|
- while ($entry = $dir->read())
|
|
|
- {
|
|
|
- if (preg_match('~^([^\.]+\.[^\.]+)\.php$~', $entry, $matches) && !in_array($matches[1], $lang_files))
|
|
|
- $lang_files[] = $matches[1];
|
|
|
- }
|
|
|
- $dir->close();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
natcasesort($templates);
|
|
|
natcasesort($lang_files);
|
|
|
|
|
@@ -1928,7 +1897,7 @@ function CopyTemplate()
|
|
|
'filename' => $template . '.template.php',
|
|
|
'value' => $template,
|
|
|
'already_exists' => false,
|
|
|
- 'can_copy' => is_writable($theme_dir),
|
|
|
+ 'can_copy' => is_writable($theme['theme_dir']),
|
|
|
);
|
|
|
$context['available_language_files'] = array();
|
|
|
foreach ($lang_files as $file)
|
|
@@ -1936,29 +1905,29 @@ function CopyTemplate()
|
|
|
'filename' => $file . '.php',
|
|
|
'value' => $file,
|
|
|
'already_exists' => false,
|
|
|
- 'can_copy' => file_exists($theme_dir . '/languages') ? is_writable($theme_dir . '/languages') : is_writable($theme_dir),
|
|
|
+ 'can_copy' => file_exists($theme['theme_dir'] . '/languages') ? is_writable($theme['theme_dir'] . '/languages') : is_writable($theme['theme_dir']),
|
|
|
);
|
|
|
|
|
|
- $dir = dir($theme_dir);
|
|
|
+ $dir = dir($theme['theme_dir']);
|
|
|
while ($entry = $dir->read())
|
|
|
{
|
|
|
if (substr($entry, -13) == '.template.php' && isset($context['available_templates'][substr($entry, 0, -13)]))
|
|
|
{
|
|
|
$context['available_templates'][substr($entry, 0, -13)]['already_exists'] = true;
|
|
|
- $context['available_templates'][substr($entry, 0, -13)]['can_copy'] = is_writable($theme_dir . '/' . $entry);
|
|
|
+ $context['available_templates'][substr($entry, 0, -13)]['can_copy'] = is_writable($theme['theme_dir'] . '/' . $entry);
|
|
|
}
|
|
|
}
|
|
|
$dir->close();
|
|
|
|
|
|
- if (file_exists($theme_dir . '/languages'))
|
|
|
+ if (file_exists($theme['theme_dir'] . '/languages'))
|
|
|
{
|
|
|
- $dir = dir($theme_dir . '/languages');
|
|
|
+ $dir = dir($theme['theme_dir'] . '/languages');
|
|
|
while ($entry = $dir->read())
|
|
|
{
|
|
|
if (preg_match('~^([^\.]+\.[^\.]+)\.php$~', $entry, $matches) && isset($context['available_language_files'][$matches[1]]))
|
|
|
{
|
|
|
$context['available_language_files'][$matches[1]]['already_exists'] = true;
|
|
|
- $context['available_language_files'][$matches[1]]['can_copy'] = is_writable($theme_dir . '/languages/' . $entry);
|
|
|
+ $context['available_language_files'][$matches[1]]['can_copy'] = is_writable($theme['theme_dir'] . '/languages/' . $entry);
|
|
|
}
|
|
|
}
|
|
|
$dir->close();
|