mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
some fixes... hopefully not breaking something. :o
git-svn-id: file:///svn/phpbb/trunk@7216 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
d8013e9c75
commit
3ff475bcbb
6 changed files with 59 additions and 210 deletions
|
@ -101,7 +101,7 @@
|
||||||
<p>
|
<p>
|
||||||
{L_PERFORM_DATABASE_UPDATE_EXPLAIN}<br />
|
{L_PERFORM_DATABASE_UPDATE_EXPLAIN}<br />
|
||||||
<br />
|
<br />
|
||||||
<a href="{U_DB_UPDATE}" target="update"><strong>» {L_RUN_DATABASE_SCRIPT} «</strong></a>
|
<a href="{U_DB_UPDATE}"><strong>» {L_RUN_DATABASE_SCRIPT} «</strong></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<br /><br />
|
<br /><br />
|
||||||
|
|
|
@ -1693,19 +1693,20 @@ function redirect($url, $return = false)
|
||||||
// Is the uri pointing to the current directory?
|
// Is the uri pointing to the current directory?
|
||||||
if ($pathinfo['dirname'] == '.')
|
if ($pathinfo['dirname'] == '.')
|
||||||
{
|
{
|
||||||
|
$url = str_replace('./', '', $url);
|
||||||
|
|
||||||
|
// Strip / from the beginning
|
||||||
|
if ($url && substr($url, 0, 1) == '/')
|
||||||
|
{
|
||||||
|
$url = substr($url, 1);
|
||||||
|
}
|
||||||
|
|
||||||
if ($user->page['page_dir'])
|
if ($user->page['page_dir'])
|
||||||
{
|
{
|
||||||
$url = generate_board_url() . '/' . $user->page['page_dir'] . '/' . str_replace('./', '', $url);
|
$url = generate_board_url() . '/' . $user->page['page_dir'] . '/' . $url;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$url = str_replace('./', '', $url);
|
|
||||||
|
|
||||||
if ($url && substr($url, -1, 1) == '/')
|
|
||||||
{
|
|
||||||
$url = substr($url, 0, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$url = generate_board_url() . '/' . $url;
|
$url = generate_board_url() . '/' . $url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1721,12 +1722,27 @@ function redirect($url, $return = false)
|
||||||
|
|
||||||
$dir = str_repeat('../', sizeof($root_dirs)) . implode('/', $page_dirs);
|
$dir = str_repeat('../', sizeof($root_dirs)) . implode('/', $page_dirs);
|
||||||
|
|
||||||
|
// Strip / from the end
|
||||||
if ($dir && substr($dir, -1, 1) == '/')
|
if ($dir && substr($dir, -1, 1) == '/')
|
||||||
{
|
{
|
||||||
$dir = substr($dir, 0, -1);
|
$dir = substr($dir, 0, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$url = $dir . '/' . str_replace($pathinfo['dirname'] . '/', '', $url);
|
// Strip / from the beginning
|
||||||
|
if ($dir && substr($dir, 0, 1) == '/')
|
||||||
|
{
|
||||||
|
$dir = substr($dir, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = str_replace($pathinfo['dirname'] . '/', '', $url);
|
||||||
|
|
||||||
|
// Strip / from the beginning
|
||||||
|
if (substr($url, 0, 1) == '/')
|
||||||
|
{
|
||||||
|
$url = substr($url, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = $dir . '/' . $url;
|
||||||
$url = generate_board_url() . '/' . $url;
|
$url = generate_board_url() . '/' . $url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3592,6 +3608,10 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
|
||||||
|
|
||||||
exit;
|
exit;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case E_RECOVERABLE_ERROR:
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,10 +77,22 @@ $result = $db->sql_query($sql);
|
||||||
$row = $db->sql_fetchrow($result);
|
$row = $db->sql_fetchrow($result);
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
|
$language = basename(request_var('language', ''));
|
||||||
|
|
||||||
|
if (!$language)
|
||||||
|
{
|
||||||
|
$language = $row['config_value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file_exists($phpbb_root_path . 'language/' . $language))
|
||||||
|
{
|
||||||
|
die('No language found!');
|
||||||
|
}
|
||||||
|
|
||||||
// And finally, load the relevant language files
|
// And finally, load the relevant language files
|
||||||
include($phpbb_root_path . 'language/' . $row['config_value'] . '/common.' . $phpEx);
|
include($phpbb_root_path . 'language/' . $language . '/common.' . $phpEx);
|
||||||
include($phpbb_root_path . 'language/' . $row['config_value'] . '/acp/common.' . $phpEx);
|
include($phpbb_root_path . 'language/' . $language . '/acp/common.' . $phpEx);
|
||||||
include($phpbb_root_path . 'language/' . $row['config_value'] . '/install.' . $phpEx);
|
include($phpbb_root_path . 'language/' . $language . '/install.' . $phpEx);
|
||||||
|
|
||||||
// Set PHP error handler to ours
|
// Set PHP error handler to ours
|
||||||
//set_error_handler('msg_handler');
|
//set_error_handler('msg_handler');
|
||||||
|
@ -285,73 +297,6 @@ $unsigned_types = array('UINT', 'UINT:', 'USINT', 'BOOL', 'TIMESTAMP');
|
||||||
|
|
||||||
// Only an example, but also commented out
|
// Only an example, but also commented out
|
||||||
$database_update_info = array(
|
$database_update_info = array(
|
||||||
// Changes from 3.0.b3 to the next version
|
|
||||||
'3.0.b3' => array(
|
|
||||||
// Change the following columns...
|
|
||||||
'change_columns' => array(
|
|
||||||
BBCODES_TABLE => array(
|
|
||||||
'bbcode_helpline' => array('VCHAR_UNI', ''),
|
|
||||||
),
|
|
||||||
USERS_TABLE => array(
|
|
||||||
'user_occ' => array('TEXT_UNI', ''),
|
|
||||||
),
|
|
||||||
CONFIG_TABLE => array(
|
|
||||||
'config_value' => array('VCHAR_UNI', ''),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Add the following columns
|
|
||||||
'add_columns' => array(
|
|
||||||
GROUPS_TABLE => array(
|
|
||||||
'group_founder_manage' => array('BOOL', 0),
|
|
||||||
),
|
|
||||||
USERS_TABLE => array(
|
|
||||||
'user_pass_convert' => array('BOOL', 0),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Changes from 3.0.b4 to the next version
|
|
||||||
'3.0.b4' => array(
|
|
||||||
// Add the following columns
|
|
||||||
'add_columns' => array(
|
|
||||||
CONFIRM_TABLE => array(
|
|
||||||
'seed' => array('UINT:10', 0),
|
|
||||||
),
|
|
||||||
SESSIONS_TABLE => array(
|
|
||||||
'session_forwarded_for' => array('VCHAR:255', ''),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Change the following columns...
|
|
||||||
'change_columns' => array(
|
|
||||||
USERS_TABLE => array(
|
|
||||||
'user_options' => array('UINT:11', 895),
|
|
||||||
),
|
|
||||||
FORUMS_TABLE => array(
|
|
||||||
'prune_days' => array('UINT', 0),
|
|
||||||
'prune_viewed' => array('UINT', 0),
|
|
||||||
'prune_freq' => array('UINT', 0),
|
|
||||||
),
|
|
||||||
PRIVMSGS_RULES_TABLE => array(
|
|
||||||
'rule_folder_id' => array('INT:11', 0),
|
|
||||||
),
|
|
||||||
PRIVMSGS_TO_TABLE => array(
|
|
||||||
'folder_id' => array('INT:11', 0),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Remove the following keys
|
|
||||||
'drop_keys' => array(
|
|
||||||
ZEBRA_TABLE => array(
|
|
||||||
'user_id',
|
|
||||||
'zebra_id',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Add the following primary keys
|
|
||||||
'add_primary_keys' => array(
|
|
||||||
ZEBRA_TABLE => array(
|
|
||||||
'user_id',
|
|
||||||
'zebra_id',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// Changes from 3.0.b5 to the next version
|
// Changes from 3.0.b5 to the next version
|
||||||
'3.0.b5' => array(
|
'3.0.b5' => array(
|
||||||
// Add the following columns
|
// Add the following columns
|
||||||
|
@ -630,115 +575,7 @@ flush();
|
||||||
$no_updates = true;
|
$no_updates = true;
|
||||||
|
|
||||||
// some code magic
|
// some code magic
|
||||||
if (version_compare($current_version, '3.0.b3', '<='))
|
if (version_compare($current_version, '3.0.b5', '<='))
|
||||||
{
|
|
||||||
// Set group_founder_manage for administrators group
|
|
||||||
$sql = 'SELECT group_id
|
|
||||||
FROM ' . GROUPS_TABLE . "
|
|
||||||
WHERE group_name = 'ADMINISTRATORS'
|
|
||||||
AND group_type = " . GROUP_SPECIAL;
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
$group_id = (int) $db->sql_fetchfield('group_id');
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
if ($group_id)
|
|
||||||
{
|
|
||||||
$sql = 'UPDATE ' . GROUPS_TABLE . ' SET group_founder_manage = 1 WHERE group_id = ' . $group_id;
|
|
||||||
_sql($sql, $errored, $error_ary);
|
|
||||||
}
|
|
||||||
|
|
||||||
add_bots();
|
|
||||||
|
|
||||||
$no_updates = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version_compare($current_version, '3.0.b4', '<='))
|
|
||||||
{
|
|
||||||
// Add config values
|
|
||||||
set_config('script_path', '/');
|
|
||||||
set_config('forwarded_for_check', '0');
|
|
||||||
set_config('ldap_password', '');
|
|
||||||
set_config('ldap_user', '');
|
|
||||||
set_config('fulltext_native_common_thres', '20');
|
|
||||||
|
|
||||||
// Remove config variables
|
|
||||||
$sql = 'DELETE FROM ' . CONFIG_TABLE . " WHERE config_name = 'send_encoding'";
|
|
||||||
_sql($sql, $errored, $error_ary);
|
|
||||||
|
|
||||||
$sql = 'SELECT user_colour
|
|
||||||
FROM ' . USERS_TABLE . '
|
|
||||||
WHERE user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')
|
|
||||||
ORDER BY user_id DESC';
|
|
||||||
$result = $db->sql_query_limit($sql, 1);
|
|
||||||
$row = $db->sql_fetchrow($result);
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
set_config('newest_user_colour', $row['user_colour'], true);
|
|
||||||
|
|
||||||
switch ($config['allow_name_chars'])
|
|
||||||
{
|
|
||||||
case '[\w]+':
|
|
||||||
set_config('allow_name_chars', '[a-z]+');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '[\w_\+\. \-\[\]]+':
|
|
||||||
set_config('allow_name_chars', '[-\]_+ [a-z]+');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ($config['pass_complex'])
|
|
||||||
{
|
|
||||||
case '.*':
|
|
||||||
set_config('pass_complex', 'PASS_TYPE_ANY');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '[a-zA-Z]':
|
|
||||||
set_config('pass_complex', 'PASS_TYPE_CASE');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '[a-zA-Z0-9]':
|
|
||||||
set_config('pass_complex', 'PASS_TYPE_ALPHA');
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '[a-zA-Z\W]':
|
|
||||||
set_config('pass_complex', 'PASS_TYPE_SYMBOL');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = 'UPDATE ' . USERS_TABLE . ' SET user_options = 895 WHERE user_options = 893';
|
|
||||||
_sql($sql, $errored, $error_ary);
|
|
||||||
|
|
||||||
$sql = 'UPDATE ' . MODULES_TABLE . " SET module_auth = 'acl_a_board'
|
|
||||||
WHERE module_class = 'acp' AND module_mode = 'version_check' AND module_auth = 'acl_a_'";
|
|
||||||
_sql($sql, $errored, $error_ary);
|
|
||||||
|
|
||||||
// Because the email hash could have been calculated wrongly as well as the clean string function changed,
|
|
||||||
// we will update it for every user.
|
|
||||||
|
|
||||||
// Since this is not used in a live environment there are not much... not used in a live environment, yes!
|
|
||||||
$sql = 'SELECT user_id, user_email, username
|
|
||||||
FROM ' . USERS_TABLE;
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
$sql = 'UPDATE ' . USERS_TABLE . "
|
|
||||||
SET username_clean = '" . $db->sql_escape(utf8_clean_string($row['username'])) . "'";
|
|
||||||
|
|
||||||
if ($row['user_email'])
|
|
||||||
{
|
|
||||||
$sql .= ', user_email_hash = ' . (crc32($row['user_email']) . strlen($row['user_email']));
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql .= ' WHERE user_id = ' . $row['user_id'];
|
|
||||||
_sql($sql, $errored, $error_ary);
|
|
||||||
}
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
|
|
||||||
$no_updates = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version_compare($current_version, '3.0.b6', '<='))
|
|
||||||
{
|
{
|
||||||
// sorting thang
|
// sorting thang
|
||||||
if ($map_dbms === 'mysql_41')
|
if ($map_dbms === 'mysql_41')
|
||||||
|
@ -852,9 +689,9 @@ else
|
||||||
{
|
{
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<p><?php echo ((isset($lang['CONTINUE_INLINE_UPDATE'])) ? $lang['CONTINUE_INLINE_UPDATE'] : 'The database update was successful. Now please close this window and continue the update process as explained.'); ?></p>
|
<p><?php echo ((isset($lang['INLINE_UPDATE_SUCCESSFUL'])) ? $lang['INLINE_UPDATE_SUCCESSFUL'] : 'The database update was successful. Now you need to continue the update process.'); ?></p>
|
||||||
|
|
||||||
<p><a href="#" onclick="window.close();">» <?php echo $lang['CLOSE_WINDOW']; ?></a></p>
|
<p><a href="<?php echo append_sid("{$phpbb_root_path}install/index.{$phpEx}", "mode=update&sub=file_check&lang=$language"); ?>">» <?php echo (isset($lang['CONTINUE_UPDATE_NOW'])) ? $lang['CONTINUE_UPDATE_NOW'] : 'Continue the update process now'; ?></a></p>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,7 @@ include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
|
||||||
require($phpbb_root_path . 'includes/functions_install.' . $phpEx);
|
require($phpbb_root_path . 'includes/functions_install.' . $phpEx);
|
||||||
|
|
||||||
// Try and load an appropriate language if required
|
// Try and load an appropriate language if required
|
||||||
$language = request_var('language', '');
|
$language = basename(request_var('language', ''));
|
||||||
|
|
||||||
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !$language)
|
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && !$language)
|
||||||
{
|
{
|
||||||
|
@ -171,6 +171,11 @@ if (!$language)
|
||||||
closedir($dir);
|
closedir($dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!file_exists($phpbb_root_path . 'language/' . $language))
|
||||||
|
{
|
||||||
|
die('No language found!');
|
||||||
|
}
|
||||||
|
|
||||||
// And finally, load the relevant language files
|
// And finally, load the relevant language files
|
||||||
include($phpbb_root_path . 'language/' . $language . '/common.' . $phpEx);
|
include($phpbb_root_path . 'language/' . $language . '/common.' . $phpEx);
|
||||||
include($phpbb_root_path . 'language/' . $language . '/acp/common.' . $phpEx);
|
include($phpbb_root_path . 'language/' . $language . '/acp/common.' . $phpEx);
|
||||||
|
|
|
@ -112,20 +112,6 @@ class install_update extends module
|
||||||
$user->session_begin();
|
$user->session_begin();
|
||||||
$auth->acl($user->data);
|
$auth->acl($user->data);
|
||||||
|
|
||||||
// Beta4 and below are having a bug displaying an error if the install directory is present.
|
|
||||||
// This bug got fixed, but we need to get around it by using a tiny 'hack'.
|
|
||||||
if (!defined('DEBUG_EXTRA'))
|
|
||||||
{
|
|
||||||
if (version_compare(strtolower($config['version']), '3.0.b4', '<='))
|
|
||||||
{
|
|
||||||
@define('DEBUG_EXTRA', true);
|
|
||||||
}
|
|
||||||
else if (!empty($config['version_update_from']) && version_compare(strtolower($config['version_update_from']), '3.0.b4', '<='))
|
|
||||||
{
|
|
||||||
@define('DEBUG_EXTRA', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$user->setup('install');
|
$user->setup('install');
|
||||||
|
|
||||||
// If we are within the intro page we need to make sure we get up-to-date version info
|
// If we are within the intro page we need to make sure we get up-to-date version info
|
||||||
|
@ -281,7 +267,7 @@ class install_update extends module
|
||||||
$template->assign_vars(array(
|
$template->assign_vars(array(
|
||||||
'S_DB_UPDATE' => true,
|
'S_DB_UPDATE' => true,
|
||||||
'S_DB_UPDATE_FINISHED' => ($config['version'] == $this->latest_version) ? true : false,
|
'S_DB_UPDATE_FINISHED' => ($config['version'] == $this->latest_version) ? true : false,
|
||||||
'U_DB_UPDATE' => $phpbb_root_path . 'install/database_update.' . $phpEx . '?type=1',
|
'U_DB_UPDATE' => append_sid($phpbb_root_path . 'install/database_update.' . $phpEx, 'type=1&language=' . $language),
|
||||||
'U_DB_UPDATE_ACTION' => append_sid($this->p_master->module_url, "mode=$mode&sub=update_db"),
|
'U_DB_UPDATE_ACTION' => append_sid($this->p_master->module_url, "mode=$mode&sub=update_db"),
|
||||||
'U_ACTION' => append_sid($this->p_master->module_url, "mode=$mode&sub=file_check"),
|
'U_ACTION' => append_sid($this->p_master->module_url, "mode=$mode&sub=file_check"),
|
||||||
));
|
));
|
||||||
|
@ -1190,7 +1176,7 @@ class install_update extends module
|
||||||
/* Get custom installed styles...
|
/* Get custom installed styles...
|
||||||
$sql = 'SELECT template_name, template_path
|
$sql = 'SELECT template_name, template_path
|
||||||
FROM ' . STYLES_TEMPLATE_TABLE . "
|
FROM ' . STYLES_TEMPLATE_TABLE . "
|
||||||
WHERE template_name NOT IN ('subSilver', 'BLABLA')";
|
WHERE LOWER(template_name) NOT IN ('subsilver', 'prosilver')";
|
||||||
$result = $db->sql_query($sql);
|
$result = $db->sql_query($sql);
|
||||||
|
|
||||||
$templates = array();
|
$templates = array();
|
||||||
|
@ -1205,7 +1191,7 @@ class install_update extends module
|
||||||
foreach ($info['files'] as $filename)
|
foreach ($info['files'] as $filename)
|
||||||
{
|
{
|
||||||
// Template update?
|
// Template update?
|
||||||
if (strpos($filename, 'styles/subSilver/template/') === 0)
|
if (strpos(strtolower($filename), 'styles/subsilver/template/') === 0)
|
||||||
{
|
{
|
||||||
foreach ($templates as $row)
|
foreach ($templates as $row)
|
||||||
{
|
{
|
||||||
|
|
|
@ -340,7 +340,7 @@ $lang = array_merge($lang, array(
|
||||||
'COLLECTED_INFORMATION' => 'Information on collected files',
|
'COLLECTED_INFORMATION' => 'Information on collected files',
|
||||||
'COLLECTED_INFORMATION_EXPLAIN' => 'The list below shows information about the files needing an update. Please read the information in front of every status block to see what they mean and what you may need to do to perform a successful update.',
|
'COLLECTED_INFORMATION_EXPLAIN' => 'The list below shows information about the files needing an update. Please read the information in front of every status block to see what they mean and what you may need to do to perform a successful update.',
|
||||||
'COMPLETE_LOGIN_TO_BOARD' => 'You should now <a href="../ucp.php?mode=login">login to your board</a> and check if everything is working fine. Do not forget to delete, rename or move your install directory!',
|
'COMPLETE_LOGIN_TO_BOARD' => 'You should now <a href="../ucp.php?mode=login">login to your board</a> and check if everything is working fine. Do not forget to delete, rename or move your install directory!',
|
||||||
'CONTINUE_INLINE_UPDATE' => 'The database update was successful. Now please close this window and continue the update process as explained.',
|
'CONTINUE_UPDATE_NOW' => 'Continue the update process now',
|
||||||
'CURRENT_FILE' => 'Current original file',
|
'CURRENT_FILE' => 'Current original file',
|
||||||
'CURRENT_VERSION' => 'Current version',
|
'CURRENT_VERSION' => 'Current version',
|
||||||
|
|
||||||
|
@ -381,6 +381,7 @@ $lang = array_merge($lang, array(
|
||||||
|
|
||||||
'INCOMPATIBLE_UPDATE_FILES' => 'The update files found are incompatible with your installed version. Your installed version is %1$s and the update file is for updating phpBB %2$s to %3$s.',
|
'INCOMPATIBLE_UPDATE_FILES' => 'The update files found are incompatible with your installed version. Your installed version is %1$s and the update file is for updating phpBB %2$s to %3$s.',
|
||||||
'INCOMPLETE_UPDATE_FILES' => 'The update files are incomplete',
|
'INCOMPLETE_UPDATE_FILES' => 'The update files are incomplete',
|
||||||
|
'INLINE_UPDATE_SUCCESSFUL' => 'The database update was successful. Now you need to continue the update process.',
|
||||||
|
|
||||||
'LATEST_VERSION' => 'Latest version',
|
'LATEST_VERSION' => 'Latest version',
|
||||||
'LINE' => 'Line',
|
'LINE' => 'Line',
|
||||||
|
|
Loading…
Add table
Reference in a new issue