diff --git a/phpBB/adm/images/file_conflict.gif b/phpBB/adm/images/file_conflict.gif
new file mode 100644
index 0000000000..8b42730474
Binary files /dev/null and b/phpBB/adm/images/file_conflict.gif differ
diff --git a/phpBB/adm/images/file_modified.gif b/phpBB/adm/images/file_modified.gif
new file mode 100644
index 0000000000..4728cb3d50
Binary files /dev/null and b/phpBB/adm/images/file_modified.gif differ
diff --git a/phpBB/adm/images/file_new.gif b/phpBB/adm/images/file_new.gif
new file mode 100644
index 0000000000..1d6e15b59d
Binary files /dev/null and b/phpBB/adm/images/file_new.gif differ
diff --git a/phpBB/adm/images/file_new_conflict.gif b/phpBB/adm/images/file_new_conflict.gif
new file mode 100644
index 0000000000..83fc598393
Binary files /dev/null and b/phpBB/adm/images/file_new_conflict.gif differ
diff --git a/phpBB/adm/images/file_not_modified.gif b/phpBB/adm/images/file_not_modified.gif
new file mode 100644
index 0000000000..98ed26db32
Binary files /dev/null and b/phpBB/adm/images/file_not_modified.gif differ
diff --git a/phpBB/adm/images/file_up_to_date.gif b/phpBB/adm/images/file_up_to_date.gif
new file mode 100644
index 0000000000..aff41a15c2
Binary files /dev/null and b/phpBB/adm/images/file_up_to_date.gif differ
diff --git a/phpBB/adm/images/icon_delete_disabled.gif b/phpBB/adm/images/icon_delete_disabled.gif
new file mode 100644
index 0000000000..da55bbbe44
Binary files /dev/null and b/phpBB/adm/images/icon_delete_disabled.gif differ
diff --git a/phpBB/adm/images/icon_down_disabled.gif b/phpBB/adm/images/icon_down_disabled.gif
new file mode 100644
index 0000000000..3ba36975b4
Binary files /dev/null and b/phpBB/adm/images/icon_down_disabled.gif differ
diff --git a/phpBB/adm/images/icon_edit_disabled.gif b/phpBB/adm/images/icon_edit_disabled.gif
new file mode 100644
index 0000000000..ac96b0e6dc
Binary files /dev/null and b/phpBB/adm/images/icon_edit_disabled.gif differ
diff --git a/phpBB/adm/images/icon_sync_disabled.gif b/phpBB/adm/images/icon_sync_disabled.gif
new file mode 100644
index 0000000000..39985045c8
Binary files /dev/null and b/phpBB/adm/images/icon_sync_disabled.gif differ
diff --git a/phpBB/adm/images/icon_up_disabled.gif b/phpBB/adm/images/icon_up_disabled.gif
new file mode 100644
index 0000000000..2797192574
Binary files /dev/null and b/phpBB/adm/images/icon_up_disabled.gif differ
diff --git a/phpBB/adm/index.php b/phpBB/adm/index.php
index 336afc0de1..6c142fde3f 100644
--- a/phpBB/adm/index.php
+++ b/phpBB/adm/index.php
@@ -136,21 +136,27 @@ function adm_page_header($page_title)
'T_RANKS_PATH' => "{$phpbb_root_path}{$config['ranks_path']}/",
'T_UPLOAD_PATH' => "{$phpbb_root_path}{$config['upload_path']}/",
- 'ICON_MOVE_UP' => '',
- 'ICON_MOVE_DOWN' => '
',
- 'ICON_EDIT' => '
',
- 'ICON_DELETE' => '
',
- 'ICON_SYNC' => '
',
+ 'ICON_MOVE_UP' => '
',
+ 'ICON_MOVE_UP_DISABLED' => '
',
+ 'ICON_MOVE_DOWN' => '
',
+ 'ICON_MOVE_DOWN_DISABLED' => '
',
+ 'ICON_EDIT' => '
',
+ 'ICON_EDIT_DISABLED' => '
',
+ 'ICON_DELETE' => '
',
+ 'ICON_DELETE_DISABLED' => '
',
+ 'ICON_SYNC' => '
',
+ 'ICON_SYNC_DISABLED' => '
',
+ 'S_USER_LANG' => $user->lang['USER_LANG'],
'S_CONTENT_DIRECTION' => $user->lang['DIRECTION'],
- 'S_CONTENT_ENCODING' => $user->lang['ENCODING'],
+ 'S_CONTENT_ENCODING' => 'UTF-8',
'S_CONTENT_DIR_LEFT' => $user->lang['LEFT'],
'S_CONTENT_DIR_RIGHT' => $user->lang['RIGHT'])
);
- if (!empty($config['send_encoding']))
+ if ($config['send_encoding'])
{
- header('Content-type: text/html; charset: ' . $user->lang['ENCODING']);
+ header('Content-type: text/html; charset=UTF-8');
}
header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
@@ -371,4 +377,102 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars)
return $tpl;
}
+/**
+* Going through a config array and validate values, writing errors to $error.
+*/
+function validate_config_vars($config_vars, &$cfg_array, &$error)
+{
+ global $phpbb_root_path, $user;
+
+ foreach ($config_vars as $config_name => $config_definition)
+ {
+ if (!isset($cfg_array[$config_name]) || strpos($config_name, 'legend') !== false)
+ {
+ continue;
+ }
+
+ if (!isset($config_definition['validate']))
+ {
+ continue;
+ }
+
+ // Validate a bit. ;) String is already checked through request_var(), therefore we do not check this again
+ switch ($config_definition['validate'])
+ {
+ case 'bool':
+ $cfg_array[$config_name] = ($cfg_array[$config_name]) ? 1 : 0;
+ break;
+
+ case 'int':
+ $cfg_array[$config_name] = (int) $cfg_array[$config_name];
+ break;
+
+ // Relative path (appended $phpbb_root_path)
+ case 'rpath':
+ case 'rwpath':
+ if (!$cfg_array[$config_name])
+ {
+ break;
+ }
+
+ $destination = $cfg_array[$config_name];
+
+ // Adjust destination path (no trailing slash)
+ if ($destination{(sizeof($destination)-1)} == '/' || $destination{(sizeof($destination)-1)} == '\\')
+ {
+ $destination = substr($destination, 0, sizeof($destination)-2);
+ }
+
+ $destination = str_replace(array('../', '..\\', './', '.\\'), '', $destination);
+ if ($destination && ($destination[0] == '/' || $destination[0] == "\\"))
+ {
+ $destination = '';
+ }
+
+ $cfg_array[$config_name] = trim($destination);
+
+ // Path being relative (still prefixed by phpbb_root_path), but with the ability to escape the root dir...
+ case 'path':
+ case 'wpath':
+
+ if (!$cfg_array[$config_name])
+ {
+ break;
+ }
+
+ $cfg_array[$config_name] = trim($cfg_array[$config_name]);
+
+ // Make sure no NUL byte is present...
+ if (strpos($cfg_array[$config_name], '\0') !== false || strpos($cfg_array[$config_name], '%00') !== false)
+ {
+ $cfg_array[$config_name] = '';
+ break;
+ }
+
+ if (!file_exists($phpbb_root_path . $cfg_array[$config_name]))
+ {
+ $error[] = sprintf($user->lang['DIRECTORY_DOES_NOT_EXIST'], $cfg_array[$config_name]);
+ }
+
+ if (file_exists($phpbb_root_path . $cfg_array[$config_name]) && !is_dir($phpbb_root_path . $cfg_array[$config_name]))
+ {
+ $error[] = sprintf($user->lang['DIRECTORY_NOT_DIR'], $cfg_array[$config_name]);
+ }
+
+ // Check if the path is writeable
+ if ($config_definition['validate'] == 'wpath' || $config_definition['validate'] == 'rwpath')
+ {
+ if (file_exists($phpbb_root_path . $cfg_array[$config_name]) && !is_writeable($phpbb_root_path . $cfg_array[$config_name]))
+ {
+ $error[] = sprintf($user->lang['DIRECTORY_NOT_WRITEABLE'], $cfg_array[$config_name]);
+ }
+ }
+
+ break;
+ }
+ }
+
+ return;
+}
+
?>
\ No newline at end of file
diff --git a/phpBB/adm/style/acp_attachments.html b/phpBB/adm/style/acp_attachments.html
index 964a07bf67..42de3e7060 100644
--- a/phpBB/adm/style/acp_attachments.html
+++ b/phpBB/adm/style/acp_attachments.html
@@ -295,10 +295,9 @@
{L_FORUM_ADMIN_EXPLAIN}
+ +{L_PROGRESS_EXPLAIN}
+ + +{L_FORUM_ADMIN_EXPLAIN}
@@ -297,12 +329,18 @@ + +{L_FORUM_RESYNCED}
{NAVIGATION} [{L_EDIT} | {L_DELETE} | {L_RESYNC}]
@@ -313,15 +351,31 @@{L_INACTIVE_USERS_EXPLAIN}
+ + + + \ No newline at end of file diff --git a/phpBB/adm/style/acp_language.html b/phpBB/adm/style/acp_language.html index 5f32855f48..22cbd3921c 100644 --- a/phpBB/adm/style/acp_language.html +++ b/phpBB/adm/style/acp_language.html @@ -44,7 +44,7 @@{L_ADMIN_INTRO}
+ - -{L_DEBUG_EXTRA_WARNING}
-{L_REMOVE_INSTALL}
-{L_PERMISSIONS_TRANSFERED_EXPLAIN}
-{L_STATISTIC} | -{L_VALUE} | -{L_STATISTIC} | -{L_VALUE} | -
---|---|---|---|
{L_NUMBER_POSTS}: | -{TOTAL_POSTS} | -{L_POSTS_PER_DAY}: | -{POSTS_PER_DAY} | -
{L_NUMBER_TOPICS}: | -{TOTAL_TOPICS} | -{L_TOPICS_PER_DAY}: | -{TOPICS_PER_DAY} | -
{L_NUMBER_USERS}: | -{TOTAL_USERS} | -{L_USERS_PER_DAY}: | -{USERS_PER_DAY} | -
{L_NUMBER_FILES}: | -{TOTAL_FILES} | -{L_FILES_PER_DAY}: | -{FILES_PER_DAY} | -
{L_BOARD_STARTED}: | -{START_DATE} | -{L_AVATAR_DIR_SIZE}: | -{AVATAR_DIR_SIZE} | -
{L_DATABASE_SIZE}: | -{DBSIZE} | -{L_UPLOAD_DIR_SIZE}: | -{UPLOAD_DIR_SIZE} | -
{L_DATABASE_SERVER_INFO}: | -{DATABASE_INFO} | -{L_GZIP_COMPRESSION}: | -{GZIP_COMPRESSION} | -
{L_ADMIN_INTRO}
- -{L_ADMIN_LOG_INDEX_EXPLAIN}
+ +{L_REMOVE_INSTALL}
+{L_USERNAME} | -{L_IP} | -{L_TIME} | -{L_ACTION} | +{L_STATISTIC} | +{L_VALUE} | +{L_STATISTIC} | +{L_VALUE} |
---|---|---|---|---|---|---|---|
{log.USERNAME} | -{log.IP} | -{log.DATE} | -{log.ACTION} | -
{L_INACTIVE_USERS_EXPLAIN}
- - - + +{L_ADMIN_LOG_INDEX_EXPLAIN}
+ +{L_USERNAME} | +{L_IP} | +{L_TIME} | +{L_ACTION} | +
---|---|---|---|
{log.USERNAME} | +{log.IP} | +{log.DATE} | +{log.ACTION} | +
{L_INACTIVE_USERS_EXPLAIN_INDEX}
+ + + +{L_USERNAME} | +{L_JOINED} | +{L_INACTIVE_DATE} | +{L_INACTIVE_REASON} | +{L_LAST_VISIT} | +
---|---|---|---|---|
{inactive.USERNAME} | +{inactive.JOINED} | +{inactive.INACTIVE_DATE} | +{inactive.REASON} | +{inactive.LAST_VISIT} | +
{L_NO_INACTIVE_USERS} | +