aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/acp
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/acp')
-rw-r--r--phpBB/includes/acp/acp_attachments.php257
-rw-r--r--phpBB/includes/acp/acp_ban.php9
-rw-r--r--phpBB/includes/acp/acp_bbcodes.php35
-rw-r--r--phpBB/includes/acp/acp_board.php374
-rw-r--r--phpBB/includes/acp/acp_bots.php15
-rw-r--r--phpBB/includes/acp/acp_captcha.php22
-rw-r--r--phpBB/includes/acp/acp_database.php91
-rw-r--r--phpBB/includes/acp/acp_disallow.php5
-rw-r--r--phpBB/includes/acp/acp_email.php5
-rw-r--r--phpBB/includes/acp/acp_extensions.php345
-rw-r--r--phpBB/includes/acp/acp_forums.php210
-rw-r--r--phpBB/includes/acp/acp_groups.php411
-rw-r--r--phpBB/includes/acp/acp_icons.php53
-rw-r--r--phpBB/includes/acp/acp_inactive.php28
-rw-r--r--phpBB/includes/acp/acp_jabber.php5
-rw-r--r--phpBB/includes/acp/acp_language.php147
-rw-r--r--phpBB/includes/acp/acp_logs.php16
-rw-r--r--phpBB/includes/acp/acp_main.php56
-rw-r--r--phpBB/includes/acp/acp_modules.php144
-rw-r--r--phpBB/includes/acp/acp_permission_roles.php49
-rw-r--r--phpBB/includes/acp/acp_permissions.php68
-rw-r--r--phpBB/includes/acp/acp_php_info.php5
-rw-r--r--phpBB/includes/acp/acp_profile.php38
-rw-r--r--phpBB/includes/acp/acp_prune.php214
-rw-r--r--phpBB/includes/acp/acp_ranks.php31
-rw-r--r--phpBB/includes/acp/acp_reasons.php13
-rw-r--r--phpBB/includes/acp/acp_search.php71
-rw-r--r--phpBB/includes/acp/acp_send_statistics.php11
-rw-r--r--phpBB/includes/acp/acp_styles.php4369
-rw-r--r--phpBB/includes/acp/acp_update.php5
-rw-r--r--phpBB/includes/acp/acp_users.php293
-rw-r--r--phpBB/includes/acp/acp_words.php5
-rw-r--r--phpBB/includes/acp/auth.php56
-rw-r--r--phpBB/includes/acp/info/acp_attachments.php8
-rw-r--r--phpBB/includes/acp/info/acp_ban.php5
-rw-r--r--phpBB/includes/acp/info/acp_bbcodes.php5
-rw-r--r--phpBB/includes/acp/info/acp_board.php5
-rw-r--r--phpBB/includes/acp/info/acp_bots.php6
-rw-r--r--phpBB/includes/acp/info/acp_captcha.php5
-rw-r--r--phpBB/includes/acp/info/acp_database.php5
-rw-r--r--phpBB/includes/acp/info/acp_disallow.php6
-rw-r--r--phpBB/includes/acp/info/acp_email.php6
-rw-r--r--phpBB/includes/acp/info/acp_extensions.php34
-rw-r--r--phpBB/includes/acp/info/acp_forums.php5
-rw-r--r--phpBB/includes/acp/info/acp_groups.php6
-rw-r--r--phpBB/includes/acp/info/acp_icons.php5
-rw-r--r--phpBB/includes/acp/info/acp_inactive.php5
-rw-r--r--phpBB/includes/acp/info/acp_jabber.php4
-rw-r--r--phpBB/includes/acp/info/acp_language.php7
-rw-r--r--phpBB/includes/acp/info/acp_logs.php5
-rw-r--r--phpBB/includes/acp/info/acp_main.php5
-rw-r--r--phpBB/includes/acp/info/acp_modules.php5
-rw-r--r--phpBB/includes/acp/info/acp_permission_roles.php5
-rw-r--r--phpBB/includes/acp/info/acp_permissions.php5
-rw-r--r--phpBB/includes/acp/info/acp_php_info.php5
-rw-r--r--phpBB/includes/acp/info/acp_profile.php5
-rw-r--r--phpBB/includes/acp/info/acp_prune.php5
-rw-r--r--phpBB/includes/acp/info/acp_ranks.php5
-rw-r--r--phpBB/includes/acp/info/acp_reasons.php5
-rw-r--r--phpBB/includes/acp/info/acp_search.php5
-rw-r--r--phpBB/includes/acp/info/acp_send_statistics.php5
-rw-r--r--phpBB/includes/acp/info/acp_styles.php12
-rw-r--r--phpBB/includes/acp/info/acp_update.php5
-rw-r--r--phpBB/includes/acp/info/acp_users.php5
-rw-r--r--phpBB/includes/acp/info/acp_words.php5
65 files changed, 3020 insertions, 4640 deletions
diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php
index fc5f44e14f..2282863746 100644
--- a/phpBB/includes/acp/acp_attachments.php
+++ b/phpBB/includes/acp/acp_attachments.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -61,6 +60,10 @@ class acp_attachments
$l_title = 'ACP_ORPHAN_ATTACHMENTS';
break;
+ case 'manage':
+ $l_title = 'ACP_MANAGE_ATTACHMENTS';
+ break;
+
default:
trigger_error('NO_MODE', E_USER_ERROR);
break;
@@ -95,7 +98,7 @@ class acp_attachments
}
$db->sql_freeresult($result);
- $l_legend_cat_images = $user->lang['SETTINGS_CAT_IMAGES'] . ' [' . $user->lang['ASSIGNED_GROUP'] . ': ' . ((!empty($s_assigned_groups[ATTACHMENT_CATEGORY_IMAGE])) ? implode(', ', $s_assigned_groups[ATTACHMENT_CATEGORY_IMAGE]) : $user->lang['NO_EXT_GROUP']) . ']';
+ $l_legend_cat_images = $user->lang['SETTINGS_CAT_IMAGES'] . ' [' . $user->lang['ASSIGNED_GROUP'] . ': ' . ((!empty($s_assigned_groups[ATTACHMENT_CATEGORY_IMAGE])) ? implode($user->lang['COMMA_SEPARATOR'], $s_assigned_groups[ATTACHMENT_CATEGORY_IMAGE]) : $user->lang['NO_EXT_GROUP']) . ']';
$display_vars = array(
'title' => 'ACP_ATTACHMENT_SETTINGS',
@@ -114,8 +117,8 @@ class acp_attachments
'attachment_quota' => array('lang' => 'ATTACH_QUOTA', 'validate' => 'string', 'type' => 'custom', 'method' => 'max_filesize', 'explain' => true),
'max_filesize' => array('lang' => 'ATTACH_MAX_FILESIZE', 'validate' => 'string', 'type' => 'custom', 'method' => 'max_filesize', 'explain' => true),
'max_filesize_pm' => array('lang' => 'ATTACH_MAX_PM_FILESIZE','validate' => 'string', 'type' => 'custom', 'method' => 'max_filesize', 'explain' => true),
- 'max_attachments' => array('lang' => 'MAX_ATTACHMENTS', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => false),
- 'max_attachments_pm' => array('lang' => 'MAX_ATTACHMENTS_PM', 'validate' => 'int', 'type' => 'text:3:3', 'explain' => false),
+ 'max_attachments' => array('lang' => 'MAX_ATTACHMENTS', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => false),
+ 'max_attachments_pm' => array('lang' => 'MAX_ATTACHMENTS_PM', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => false),
'secure_downloads' => array('lang' => 'SECURE_DOWNLOADS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'secure_allow_deny' => array('lang' => 'SECURE_ALLOW_DENY', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_allow_deny', 'explain' => true),
'secure_allow_empty_referer' => array('lang' => 'SECURE_EMPTY_REFERRER', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
@@ -125,11 +128,11 @@ class acp_attachments
'legend2' => $l_legend_cat_images,
'img_display_inlined' => array('lang' => 'DISPLAY_INLINED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'img_create_thumbnail' => array('lang' => 'CREATE_THUMBNAIL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'img_max_thumb_width' => array('lang' => 'MAX_THUMB_WIDTH', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
- 'img_min_thumb_filesize' => array('lang' => 'MIN_THUMB_FILESIZE', 'validate' => 'int', 'type' => 'text:7:15', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']),
+ 'img_max_thumb_width' => array('lang' => 'MAX_THUMB_WIDTH', 'validate' => 'int:0:999999999999999', 'type' => 'number:0:999999999999999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'img_min_thumb_filesize' => array('lang' => 'MIN_THUMB_FILESIZE', 'validate' => 'int:0:999999999999999', 'type' => 'number:0:999999999999999', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']),
'img_imagick' => array('lang' => 'IMAGICK_PATH', 'validate' => 'string', 'type' => 'text:20:200', 'explain' => true, 'append' => '&nbsp;&nbsp;<span>[ <a href="' . $this->u_action . '&amp;action=imgmagick">' . $user->lang['SEARCH_IMAGICK'] . '</a> ]</span>'),
- 'img_max' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
- 'img_link' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'img_max' => array('lang' => 'MAX_IMAGE_SIZE', 'validate' => 'int:0:9999', 'type' => 'dimension:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'img_link' => array('lang' => 'IMAGE_LINK_SIZE', 'validate' => 'int:0:9999', 'type' => 'dimension:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
)
);
@@ -745,7 +748,6 @@ class acp_attachments
}
$template->assign_vars(array(
- 'PHPBB_ROOT_PATH' => $phpbb_root_path,
'IMG_PATH' => $img_path,
'ACTION' => $action,
'GROUP_ID' => $group_id,
@@ -914,7 +916,7 @@ class acp_attachments
$db->sql_query($sql);
add_log('admin', 'LOG_ATTACH_ORPHAN_DEL', implode(', ', $delete_files));
- $notify[] = sprintf($user->lang['LOG_ATTACH_ORPHAN_DEL'], implode(', ', $delete_files));
+ $notify[] = sprintf($user->lang['LOG_ATTACH_ORPHAN_DEL'], implode($user->lang['COMMA_SEPARATOR'], $delete_files));
}
$upload_list = array();
@@ -1043,6 +1045,231 @@ class acp_attachments
$db->sql_freeresult($result);
break;
+
+ case 'manage':
+
+ if ($submit)
+ {
+ $delete_files = (isset($_POST['delete'])) ? array_keys(request_var('delete', array('' => 0))) : array();
+
+ if (sizeof($delete_files))
+ {
+ // Select those attachments we want to delete...
+ $sql = 'SELECT real_filename
+ FROM ' . ATTACHMENTS_TABLE . '
+ WHERE ' . $db->sql_in_set('attach_id', $delete_files) . '
+ AND is_orphan = 0';
+ $result = $db->sql_query($sql);
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $deleted_filenames[] = $row['real_filename'];
+ }
+ $db->sql_freeresult($result);
+
+ if ($num_deleted = delete_attachments('attach', $delete_files))
+ {
+ if (sizeof($delete_files) != $num_deleted)
+ {
+ $error[] = $user->lang['FILES_GONE'];
+ }
+ add_log('admin', 'LOG_ATTACHMENTS_DELETED', implode(', ', $deleted_filenames));
+ $notify[] = sprintf($user->lang['LOG_ATTACHMENTS_DELETED'], implode($user->lang['COMMA_SEPARATOR'], $deleted_filenames));
+ }
+ else
+ {
+ $error[] = $user->lang['NO_FILES_TO_DELETE'];
+ }
+ }
+ }
+
+ $template->assign_vars(array(
+ 'S_MANAGE' => true)
+ );
+
+ $start = request_var('start', 0);
+
+ // Sort keys
+ $sort_days = request_var('st', 0);
+ $sort_key = request_var('sk', 't');
+ $sort_dir = request_var('sd', 'd');
+
+ // Sorting
+ $limit_days = array(0 => $user->lang['ALL_ENTRIES'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
+ $sort_by_text = array('f' => $user->lang['FILENAME'], 't' => $user->lang['FILEDATE'], 's' => $user->lang['FILESIZE'], 'x' => $user->lang['EXTENSION'], 'd' => $user->lang['DOWNLOADS'],'p' => $user->lang['ATTACH_POST_TYPE'], 'u' => $user->lang['AUTHOR']);
+ $sort_by_sql = array('f' => 'a.real_filename', 't' => 'a.filetime', 's' => 'a.filesize', 'x' => 'a.extension', 'd' => 'a.download_count', 'p' => 'a.in_message', 'u' => 'u.username');
+
+ $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
+ gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
+
+ $min_filetime = ($sort_days) ? (time() - ($sort_days * 86400)) : '';
+ $limit_filetime = ($min_filetime) ? " AND a.filetime >= $min_filetime " : '';
+ $start = ($sort_days && isset($_POST['sort'])) ? 0 : $start;
+
+ $attachments_per_page = (int) $config['topics_per_page'];
+
+ // Handle files stats resync
+ $action = request_var('action', '');
+ $resync_files_stats = false;
+ if ($action && $action = 'stats')
+ {
+ if (!confirm_box(true))
+ {
+ confirm_box(false, $user->lang['RESYNC_FILES_STATS_CONFIRM'], build_hidden_fields(array(
+ 'i' => $id,
+ 'mode' => $mode,
+ 'action' => $action,
+ )));
+ }
+ else
+ {
+ $resync_files_stats = true;
+ add_log('admin', 'LOG_RESYNC_FILES_STATS');
+ }
+ }
+
+ // Check if files stats are accurate
+ $sql = 'SELECT COUNT(attach_id) as num_files
+ FROM ' . ATTACHMENTS_TABLE . '
+ WHERE is_orphan = 0';
+ $result = $db->sql_query($sql, 600);
+ $num_files_real = (int) $db->sql_fetchfield('num_files');
+ if ($resync_files_stats === true)
+ {
+ set_config('num_files', $num_files_real, true);
+ }
+ $db->sql_freeresult($result);
+
+ $sql = 'SELECT SUM(filesize) as upload_dir_size
+ FROM ' . ATTACHMENTS_TABLE . '
+ WHERE is_orphan = 0';
+ $result = $db->sql_query($sql, 600);
+ $total_size_real = (float) $db->sql_fetchfield('upload_dir_size');
+ if ($resync_files_stats === true)
+ {
+ set_config('upload_dir_size', $total_size_real, true);
+ }
+ $db->sql_freeresult($result);
+
+ // Get current files stats
+ $num_files = (int) $config['num_files'];
+ $total_size = (float) $config['upload_dir_size'];
+
+ // Issue warning message if files stats are inaccurate
+ if (($num_files != $num_files_real) || ($total_size != $total_size_real))
+ {
+ $error[] = $user->lang('FILES_STATS_WRONG', (int) $num_files_real, get_formatted_filesize($total_size_real));
+
+ $template->assign_vars(array(
+ 'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? true : false,
+ 'U_ACTION' => $this->u_action,)
+ );
+ }
+
+ // Make sure $start is set to the last page if it exceeds the amount
+ if ($start < 0 || $start > $num_files)
+ {
+ $start = ($start < 0) ? 0 : floor(($num_files - 1) / $attachments_per_page) * $attachments_per_page;
+ }
+
+ // If the user is trying to reach the second half of the attachments list, fetch it starting from the end
+ $store_reverse = false;
+ $sql_limit = $attachments_per_page;
+
+ if ($start > $num_files / 2)
+ {
+ $store_reverse = true;
+
+ if ($start + $attachments_per_page > $num_files)
+ {
+ $sql_limit = min($attachments_per_page, max(1, $num_files - $start));
+ }
+
+ // Select the sort order. Add time sort anchor for non-time sorting cases
+ $sql_sort_anchor = ($sort_key != 't') ? ', a.filetime ' . (($sort_dir == 'd') ? 'ASC' : 'DESC') : '';
+ $sql_sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'ASC' : 'DESC') . $sql_sort_anchor;
+ $sql_start = max(0, $num_files - $sql_limit - $start);
+ }
+ else
+ {
+ // Select the sort order. Add time sort anchor for non-time sorting cases
+ $sql_sort_anchor = ($sort_key != 't') ? ', a.filetime ' . (($sort_dir == 'd') ? 'DESC' : 'ASC') : '';
+ $sql_sort_order = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC') . $sql_sort_anchor;
+ $sql_start = $start;
+
+ }
+
+ $attachments_list = array();
+
+ // Just get the files
+ $sql = 'SELECT a.*, u.username, u.user_colour, t.topic_title
+ FROM ' . ATTACHMENTS_TABLE . ' a
+ LEFT JOIN ' . USERS_TABLE . ' u ON (u.user_id = a.poster_id)
+ LEFT JOIN ' . TOPICS_TABLE . " t ON (a.topic_id = t.topic_id)
+ WHERE a.is_orphan = 0
+ $limit_filetime
+ ORDER BY $sql_sort_order";
+ $result = $db->sql_query_limit($sql, $sql_limit, $sql_start);
+
+ $i = ($store_reverse) ? $sql_limit - 1 : 0;
+
+ // Store increment value in a variable to save some conditional calls
+ $i_increment = ($store_reverse) ? -1 : 1;
+ while ($attachment_row = $db->sql_fetchrow($result))
+ {
+ $attachments_list[$i] = $attachment_row;
+ $i = $i + $i_increment;
+ }
+ $db->sql_freeresult($result);
+
+ $base_url = $this->u_action . "&amp;$u_sort_param";
+ phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $num_files, $attachments_per_page, $start);
+
+ $template->assign_vars(array(
+ 'TOTAL_FILES' => $num_files,
+ 'TOTAL_SIZE' => get_formatted_filesize($total_size),
+
+ 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $num_files, $attachments_per_page, $start),
+ 'S_LIMIT_DAYS' => $s_limit_days,
+ 'S_SORT_KEY' => $s_sort_key,
+ 'S_SORT_DIR' => $s_sort_dir)
+ );
+
+ // Grab extensions
+ $extensions = $cache->obtain_attach_extensions(true);
+
+ for ($i = 0, $end = sizeof($attachments_list); $i < $end; ++$i)
+ {
+ $row = $attachments_list[$i];
+
+ $row['extension'] = strtolower(trim((string) $row['extension']));
+ $comment = ($row['attach_comment'] && !$row['in_message']) ? str_replace(array("\n", "\r"), array('<br />', "\n"), $row['attach_comment']) : '';
+ $display_cat = $extensions[$row['extension']]['display_cat'];
+ $l_downloaded_viewed = ($display_cat == ATTACHMENT_CATEGORY_NONE) ? 'DOWNLOAD_COUNTS' : 'VIEWED_COUNTS';
+
+ $template->assign_block_vars('attachments', array(
+ 'ATTACHMENT_POSTER' => get_username_string('full', (int) $row['poster_id'], (string) $row['username'], (string) $row['user_colour'], (string) $row['username']),
+ 'FILESIZE' => get_formatted_filesize((int) $row['filesize']),
+ 'FILETIME' => $user->format_date((int) $row['filetime']),
+ 'REAL_FILENAME' => (!$row['in_message']) ? utf8_wordwrap(utf8_basename((string) $row['real_filename']), 40, '<br />', true) : '',
+ 'PHYSICAL_FILENAME' => utf8_basename((string) $row['physical_filename']),
+ 'EXT_GROUP_NAME' => (!empty($extensions[$row['extension']]['group_name'])) ? $user->lang['EXT_GROUP_' . $extensions[$row['extension']]['group_name']] : '',
+ 'COMMENT' => $comment,
+ 'TOPIC_TITLE' => (!$row['in_message']) ? (string) $row['topic_title'] : '',
+ 'ATTACH_ID' => (int) $row['attach_id'],
+ 'POST_ID' => (int) $row['post_msg_id'],
+ 'TOPIC_ID' => (int) $row['topic_id'],
+ 'POST_IDS' => (!empty($post_ids[$row['attach_id']])) ? (int) $post_ids[$row['attach_id']] : '',
+
+ 'L_DOWNLOAD_COUNT' => $user->lang($l_downloaded_viewed, (int) $row['download_count']),
+
+ 'S_IN_MESSAGE' => (bool) $row['in_message'],
+
+ 'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "t={$row['topic_id']}&amp;p={$row['post_msg_id']}") . "#p{$row['post_msg_id']}",
+ 'U_FILE' => append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'mode=view&amp;id=' . $row['attach_id']))
+ );
+ }
+
+ break;
}
if (sizeof($error))
@@ -1235,6 +1462,7 @@ class acp_attachments
function perform_site_list()
{
global $db, $user;
+ global $request;
if (isset($_REQUEST['securesubmit']))
{
@@ -1243,7 +1471,7 @@ class acp_attachments
$ip_list = array_unique(explode("\n", $ips));
$ip_list_log = implode(', ', $ip_list);
- $ip_exclude = (!empty($_POST['ipexclude'])) ? 1 : 0;
+ $ip_exclude = (int) $request->variable('ipexclude', false, false, \phpbb\request\request_interface::POST);
$iplist = array();
$hostlist = array();
@@ -1441,7 +1669,8 @@ class acp_attachments
$size_var = $filesize['si_identifier'];
$value = $filesize['value'];
- return '<input type="text" id="' . $key . '" size="8" maxlength="15" name="config[' . $key . ']" value="' . $value . '" /> <select name="' . $key . '">' . size_select_options($size_var) . '</select>';
+ // size="8" and maxlength="15" attributes as a fallback for browsers that do not support type="number" yet.
+ return '<input type="number" id="' . $key . '" size="8" maxlength="15" min="0" name="config[' . $key . ']" value="' . $value . '" /> <select name="' . $key . '">' . size_select_options($size_var) . '</select>';
}
/**
@@ -1455,5 +1684,3 @@ class acp_attachments
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_ban.php b/phpBB/includes/acp/acp_ban.php
index f8af1b86e1..3ed9c225f5 100644
--- a/phpBB/includes/acp/acp_ban.php
+++ b/phpBB/includes/acp/acp_ban.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -98,7 +97,7 @@ class acp_ban
break;
}
- $this->display_ban_options($mode);
+ self::display_ban_options($mode);
$template->assign_vars(array(
'L_TITLE' => $this->page_title,
@@ -119,7 +118,7 @@ class acp_ban
/**
* Display ban options
*/
- function display_ban_options($mode)
+ static public function display_ban_options($mode)
{
global $user, $db, $template;
@@ -272,5 +271,3 @@ class acp_ban
));
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_bbcodes.php b/phpBB/includes/acp/acp_bbcodes.php
index 31166a56dc..575ac84012 100644
--- a/phpBB/includes/acp/acp_bbcodes.php
+++ b/phpBB/includes/acp/acp_bbcodes.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -25,7 +24,7 @@ class acp_bbcodes
function main($id, $mode)
{
- global $db, $user, $auth, $template, $cache;
+ global $db, $user, $auth, $template, $cache, $request;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/posting');
@@ -109,11 +108,12 @@ class acp_bbcodes
'DISPLAY_ON_POSTING' => $display_on_posting)
);
- foreach ($user->lang['tokens'] as $token => $token_explain)
+ $bbcode_tokens = array('TEXT', 'SIMPLETEXT', 'INTTEXT', 'IDENTIFIER', 'NUMBER', 'EMAIL', 'URL', 'LOCAL_URL', 'RELATIVE_URL', 'COLOR');
+ foreach ($bbcode_tokens as $token)
{
$template->assign_block_vars('token', array(
'TOKEN' => '{' . $token . '}',
- 'EXPLAIN' => ($token === 'LOCAL_URL') ? sprintf($token_explain, generate_board_url() . '/') : $token_explain,
+ 'EXPLAIN' => ($token === 'LOCAL_URL') ? $user->lang(array('tokens', $token), generate_board_url() . '/') : $user->lang(array('tokens', $token)),
));
}
@@ -273,6 +273,18 @@ class acp_bbcodes
$db->sql_query('DELETE FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id");
$cache->destroy('sql', BBCODES_TABLE);
add_log('admin', 'LOG_BBCODE_DELETE', $row['bbcode_tag']);
+
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array(
+ 'MESSAGE_TITLE' => $user->lang['INFORMATION'],
+ 'MESSAGE_TEXT' => $user->lang['BBCODE_DELETED'],
+ 'REFRESH_DATA' => array(
+ 'time' => 3
+ )
+ ));
+ }
}
else
{
@@ -317,16 +329,7 @@ class acp_bbcodes
$bbcode_tpl = trim($bbcode_tpl);
$utf8 = strpos($bbcode_match, 'INTTEXT') !== false;
- // make sure we have utf8 support
- $utf8_pcre_properties = false;
- if (version_compare(PHP_VERSION, '5.1.0', '>=') || (version_compare(PHP_VERSION, '5.0.0-dev', '<=') && version_compare(PHP_VERSION, '4.4.0', '>=')))
- {
- // While this is the proper range of PHP versions, PHP may not be linked with the bundled PCRE lib and instead with an older version
- if (@preg_match('/\p{L}/u', 'a') !== false)
- {
- $utf8_pcre_properties = true;
- }
- }
+ $utf8_pcre_properties = phpbb_pcre_utf8_support();
$fp_match = preg_quote($bbcode_match, '!');
$fp_replace = preg_replace('#^\[(.*?)\]#', '[$1:$uid]', $bbcode_match);
@@ -480,5 +483,3 @@ class acp_bbcodes
);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php
index ebbf66657e..10fbde8c9b 100644
--- a/phpBB/includes/acp/acp_board.php
+++ b/phpBB/includes/acp/acp_board.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
* @todo add cron intervals to server settings? (database_gc, queue_interval, session_gc, search_gc, cache_gc, warnings_gc)
*/
@@ -29,7 +28,7 @@ class acp_board
{
global $db, $user, $auth, $template;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
- global $cache;
+ global $cache, $phpbb_container;
$user->add_lang('acp/board');
@@ -54,17 +53,19 @@ class acp_board
'legend1' => 'ACP_BOARD_SETTINGS',
'sitename' => array('lang' => 'SITE_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false),
'site_desc' => array('lang' => 'SITE_DESC', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => false),
+ 'site_home_url' => array('lang' => 'SITE_HOME_URL', 'validate' => 'string', 'type' => 'url:40:255', 'explain' => true),
+ 'site_home_text' => array('lang' => 'SITE_HOME_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
+ 'board_index_text' => array('lang' => 'BOARD_INDEX_TEXT', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
'board_disable' => array('lang' => 'DISABLE_BOARD', 'validate' => 'bool', 'type' => 'custom', 'method' => 'board_disable', 'explain' => true),
'board_disable_msg' => false,
'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false),
'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true),
- 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true),
- 'board_dst' => array('lang' => 'SYSTEM_DST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
+ 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'timezone', 'type' => 'custom', 'method' => 'timezone_select', 'explain' => true),
'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false),
'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend2' => 'WARNINGS',
- 'warnings_expire_days' => array('lang' => 'WARNINGS_EXPIRE', 'validate' => 'int', 'type' => 'text:3:4', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
+ 'warnings_expire_days' => array('lang' => 'WARNINGS_EXPIRE', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
'legend3' => 'ACP_SUBMIT_CHANGES',
)
@@ -89,6 +90,7 @@ class acp_board
'allow_nocensors' => array('lang' => 'ALLOW_NO_CENSORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_bookmarks' => array('lang' => 'ALLOW_BOOKMARKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_birthdays' => array('lang' => 'ALLOW_BIRTHDAYS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'display_last_subject' => array('lang' => 'DISPLAY_LAST_SUBJECT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_quick_reply' => array('lang' => 'ALLOW_QUICK_REPLY', 'validate' => 'bool', 'type' => 'custom', 'method' => 'quick_reply', 'explain' => true),
'legend2' => 'ACP_LOAD_SETTINGS',
@@ -96,6 +98,7 @@ class acp_board
'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
+ 'load_cpf_pm' => array('lang' => 'LOAD_CPF_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
@@ -105,28 +108,43 @@ class acp_board
break;
case 'avatar':
+ $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
+ $avatar_drivers = $phpbb_avatar_manager->get_all_drivers();
+
+ $avatar_vars = array();
+ foreach ($avatar_drivers as $current_driver)
+ {
+ $driver = $phpbb_avatar_manager->get_driver($current_driver, false);
+
+ /*
+ * First grab the settings for enabling/disabling the avatar
+ * driver and afterwards grab additional settings the driver
+ * might have.
+ */
+ $avatar_vars += $phpbb_avatar_manager->get_avatar_settings($driver);
+ $avatar_vars += $driver->prepare_form_acp($user);
+ }
+
$display_vars = array(
'title' => 'ACP_AVATAR_SETTINGS',
'vars' => array(
'legend1' => 'ACP_AVATAR_SETTINGS',
- 'avatar_min_width' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
- 'avatar_min_height' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
- 'avatar_max_width' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
- 'avatar_max_height' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false,),
+ 'avatar_min_width' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false),
+ 'avatar_min_height' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false),
+ 'avatar_max_width' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false),
+ 'avatar_max_height' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => false, 'method' => false, 'explain' => false),
'allow_avatar' => array('lang' => 'ALLOW_AVATARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'allow_avatar_local' => array('lang' => 'ALLOW_LOCAL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
- 'allow_avatar_remote' => array('lang' => 'ALLOW_REMOTE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'allow_avatar_upload' => array('lang' => 'ALLOW_UPLOAD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
- 'allow_avatar_remote_upload'=> array('lang' => 'ALLOW_REMOTE_UPLOAD', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'avatar_filesize' => array('lang' => 'MAX_FILESIZE', 'validate' => 'int:0', 'type' => 'text:4:10', 'explain' => true, 'append' => ' ' . $user->lang['BYTES']),
- 'avatar_min' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
- 'avatar_max' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
- 'avatar_path' => array('lang' => 'AVATAR_STORAGE_PATH', 'validate' => 'rwpath', 'type' => 'text:20:255', 'explain' => true),
- 'avatar_gallery_path' => array('lang' => 'AVATAR_GALLERY_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true)
+ 'avatar_min' => array('lang' => 'MIN_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:0', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'avatar_max' => array('lang' => 'MAX_AVATAR_SIZE', 'validate' => 'int:0', 'type' => 'dimension:0', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
)
);
+
+ if (!empty($avatar_vars))
+ {
+ $display_vars['vars'] += $avatar_vars;
+ }
break;
case 'message':
@@ -136,11 +154,11 @@ class acp_board
'vars' => array(
'legend1' => 'GENERAL_SETTINGS',
'allow_privmsg' => array('lang' => 'BOARD_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'pm_max_boxes' => array('lang' => 'BOXES_MAX', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
- 'pm_max_msgs' => array('lang' => 'BOXES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
+ 'pm_max_boxes' => array('lang' => 'BOXES_MAX', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'pm_max_msgs' => array('lang' => 'BOXES_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
'full_folder_action' => array('lang' => 'FULL_FOLDER_ACTION', 'validate' => 'int', 'type' => 'select', 'method' => 'full_folder_select', 'explain' => true),
- 'pm_edit_time' => array('lang' => 'PM_EDIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
- 'pm_max_recipients' => array('lang' => 'PM_MAX_RECIPIENTS', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true),
+ 'pm_edit_time' => array('lang' => 'PM_EDIT_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
+ 'pm_max_recipients' => array('lang' => 'PM_MAX_RECIPIENTS', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true),
'legend2' => 'GENERAL_OPTIONS',
'allow_mass_pm' => array('lang' => 'ALLOW_MASS_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
@@ -177,24 +195,24 @@ class acp_board
'legend2' => 'POSTING',
'bump_type' => false,
- 'edit_time' => array('lang' => 'EDIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
- 'delete_time' => array('lang' => 'DELETE_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
+ 'edit_time' => array('lang' => 'EDIT_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
+ 'delete_time' => array('lang' => 'DELETE_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
'display_last_edited' => array('lang' => 'DISPLAY_LAST_EDITED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'flood_interval' => array('lang' => 'FLOOD_INTERVAL', 'validate' => 'int:0', 'type' => 'text:3:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
+ 'flood_interval' => array('lang' => 'FLOOD_INTERVAL', 'validate' => 'int:0:9999999999', 'type' => 'number:0:9999999999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
'bump_interval' => array('lang' => 'BUMP_INTERVAL', 'validate' => 'int:0', 'type' => 'custom', 'method' => 'bump_interval', 'explain' => true),
- 'topics_per_page' => array('lang' => 'TOPICS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false),
- 'posts_per_page' => array('lang' => 'POSTS_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false),
- 'smilies_per_page' => array('lang' => 'SMILIES_PER_PAGE', 'validate' => 'int:1', 'type' => 'text:3:4', 'explain' => false),
- 'hot_threshold' => array('lang' => 'HOT_THRESHOLD', 'validate' => 'int:0', 'type' => 'text:3:4', 'explain' => true),
- 'max_poll_options' => array('lang' => 'MAX_POLL_OPTIONS', 'validate' => 'int:2:127', 'type' => 'text:4:4', 'explain' => false),
- 'max_post_chars' => array('lang' => 'CHAR_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:6', 'explain' => true),
- 'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:1', 'type' => 'text:4:6', 'explain' => true),
- 'max_post_smilies' => array('lang' => 'SMILIES_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
- 'max_post_urls' => array('lang' => 'MAX_POST_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true),
- 'max_post_font_size' => array('lang' => 'MAX_POST_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
- 'max_quote_depth' => array('lang' => 'QUOTE_DEPTH_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
- 'max_post_img_width' => array('lang' => 'MAX_POST_IMG_WIDTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
- 'max_post_img_height' => array('lang' => 'MAX_POST_IMG_HEIGHT', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'topics_per_page' => array('lang' => 'TOPICS_PER_PAGE', 'validate' => 'int:1:9999', 'type' => 'number:1:9999', 'explain' => false),
+ 'posts_per_page' => array('lang' => 'POSTS_PER_PAGE', 'validate' => 'int:1:9999', 'type' => 'number:1:9999', 'explain' => false),
+ 'smilies_per_page' => array('lang' => 'SMILIES_PER_PAGE', 'validate' => 'int:1:9999', 'type' => 'number:1:9999', 'explain' => false),
+ 'hot_threshold' => array('lang' => 'HOT_THRESHOLD', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_poll_options' => array('lang' => 'MAX_POLL_OPTIONS', 'validate' => 'int:2:127', 'type' => 'number:2:127', 'explain' => false),
+ 'max_post_chars' => array('lang' => 'CHAR_LIMIT', 'validate' => 'int:0:999999', 'type' => 'number:0:999999', 'explain' => true),
+ 'min_post_chars' => array('lang' => 'MIN_CHAR_LIMIT', 'validate' => 'int:1:999999', 'type' => 'number:1:999999', 'explain' => true),
+ 'max_post_smilies' => array('lang' => 'SMILIES_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_post_urls' => array('lang' => 'MAX_POST_URLS', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_post_font_size' => array('lang' => 'MAX_POST_FONT_SIZE', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' %'),
+ 'max_quote_depth' => array('lang' => 'QUOTE_DEPTH_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_post_img_width' => array('lang' => 'MAX_POST_IMG_WIDTH', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'max_post_img_height' => array('lang' => 'MAX_POST_IMG_HEIGHT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
'legend3' => 'ACP_SUBMIT_CHANGES',
)
@@ -214,12 +232,12 @@ class acp_board
'allow_sig_links' => array('lang' => 'ALLOW_SIG_LINKS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend2' => 'GENERAL_SETTINGS',
- 'max_sig_chars' => array('lang' => 'MAX_SIG_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true),
- 'max_sig_urls' => array('lang' => 'MAX_SIG_URLS', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true),
- 'max_sig_font_size' => array('lang' => 'MAX_SIG_FONT_SIZE', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' %'),
- 'max_sig_smilies' => array('lang' => 'MAX_SIG_SMILIES', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true),
- 'max_sig_img_width' => array('lang' => 'MAX_SIG_IMG_WIDTH', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
- 'max_sig_img_height' => array('lang' => 'MAX_SIG_IMG_HEIGHT', 'validate' => 'int:0', 'type' => 'text:5:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'max_sig_chars' => array('lang' => 'MAX_SIG_LENGTH', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_sig_urls' => array('lang' => 'MAX_SIG_URLS', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_sig_font_size' => array('lang' => 'MAX_SIG_FONT_SIZE', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' %'),
+ 'max_sig_smilies' => array('lang' => 'MAX_SIG_SMILIES', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'max_sig_img_width' => array('lang' => 'MAX_SIG_IMG_WIDTH', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
+ 'max_sig_img_height' => array('lang' => 'MAX_SIG_IMG_HEIGHT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
'legend3' => 'ACP_SUBMIT_CHANGES',
)
@@ -235,20 +253,20 @@ class acp_board
'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'select', 'method' => 'select_acc_activation', 'explain' => true),
- 'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']),
+ 'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'number:0:255', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']),
'new_member_group_default'=> array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'min_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:1', 'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true),
'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true),
'allow_name_chars' => array('lang' => 'USERNAME_CHARS', 'validate' => 'string', 'type' => 'select', 'method' => 'select_username_chars', 'explain' => true),
'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
- 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
+ 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
'legend2' => 'GENERAL_OPTIONS',
'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_emailreuse' => array('lang' => 'ALLOW_EMAIL_REUSE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'enable_confirm' => array('lang' => 'VISUAL_CONFIRM_REG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
- 'max_reg_attempts' => array('lang' => 'REG_LIMIT', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
+ 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true),
+ 'max_reg_attempts' => array('lang' => 'REG_LIMIT', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
'legend3' => 'COPPA',
'coppa_enable' => array('lang' => 'ENABLE_COPPA', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
@@ -270,13 +288,13 @@ class acp_board
'feed_http_auth' => array('lang' => 'ACP_FEED_HTTP_AUTH', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
'legend2' => 'ACP_FEED_POST_BASED',
- 'feed_limit_post' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => true),
+ 'feed_limit_post' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5:9999', 'type' => 'number:5:9999', 'explain' => true),
'feed_overall' => array('lang' => 'ACP_FEED_OVERALL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true ),
'feed_forum' => array('lang' => 'ACP_FEED_FORUM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true ),
'feed_topic' => array('lang' => 'ACP_FEED_TOPIC', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true ),
'legend3' => 'ACP_FEED_TOPIC_BASED',
- 'feed_limit_topic' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5', 'type' => 'text:3:4', 'explain' => true),
+ 'feed_limit_topic' => array('lang' => 'ACP_FEED_LIMIT', 'validate' => 'int:5:9999', 'type' => 'number:5:9999', 'explain' => true),
'feed_topics_new' => array('lang' => 'ACP_FEED_TOPICS_NEW', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true ),
'feed_topics_active' => array('lang' => 'ACP_FEED_TOPICS_ACTIVE', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true ),
'feed_news_id' => array('lang' => 'ACP_FEED_NEWS', 'validate' => 'string', 'type' => 'custom', 'method' => 'select_news_forums', 'explain' => true),
@@ -296,7 +314,7 @@ class acp_board
'cookie_domain' => array('lang' => 'COOKIE_DOMAIN', 'validate' => 'string', 'type' => 'text::255', 'explain' => false),
'cookie_name' => array('lang' => 'COOKIE_NAME', 'validate' => 'string', 'type' => 'text::16', 'explain' => false),
'cookie_path' => array('lang' => 'COOKIE_PATH', 'validate' => 'string', 'type' => 'text::255', 'explain' => false),
- 'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true)
+ 'cookie_secure' => array('lang' => 'COOKIE_SECURE', 'validate' => 'bool', 'type' => 'radio:disabled_enabled', 'explain' => true),
)
);
break;
@@ -306,12 +324,14 @@ class acp_board
'title' => 'ACP_LOAD_SETTINGS',
'vars' => array(
'legend1' => 'GENERAL_SETTINGS',
- 'limit_load' => array('lang' => 'LIMIT_LOAD', 'validate' => 'string', 'type' => 'text:4:4', 'explain' => true),
- 'session_length' => array('lang' => 'SESSION_LENGTH', 'validate' => 'int:60', 'type' => 'text:5:10', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
- 'active_sessions' => array('lang' => 'LIMIT_SESSIONS', 'validate' => 'int:0', 'type' => 'text:4:4', 'explain' => true),
- 'load_online_time' => array('lang' => 'ONLINE_LENGTH', 'validate' => 'int:0', 'type' => 'text:4:3', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
+ 'limit_load' => array('lang' => 'LIMIT_LOAD', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'session_length' => array('lang' => 'SESSION_LENGTH', 'validate' => 'int:60:9999999999', 'type' => 'number:60:9999999999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
+ 'active_sessions' => array('lang' => 'LIMIT_SESSIONS', 'validate' => 'int:0:9999', 'type' => 'number:0:9999', 'explain' => true),
+ 'load_online_time' => array('lang' => 'ONLINE_LENGTH', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true, 'append' => ' ' . $user->lang['MINUTES']),
+ 'read_notification_expire_days' => array('lang' => 'READ_NOTIFICATION_EXPIRE_DAYS', 'validate' => 'int:0', 'type' => 'number:0', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
'legend2' => 'GENERAL_OPTIONS',
+ 'load_notifications' => array('lang' => 'LOAD_NOTIFICATIONS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'load_db_track' => array('lang' => 'YES_POST_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'load_db_lastread' => array('lang' => 'YES_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'load_anon_lastread' => array('lang' => 'YES_ANON_READ_MARKING', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
@@ -323,10 +343,12 @@ class acp_board
'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_user_activity' => array('lang' => 'LOAD_USER_ACTIVITY', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'load_tplcompile' => array('lang' => 'RECOMPILE_STYLES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'load_tplcompile' => array('lang' => 'RECOMPILE_STYLES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'allow_cdn' => array('lang' => 'ALLOW_CDN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend3' => 'CUSTOM_PROFILE_FIELDS',
'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
+ 'load_cpf_pm' => array('lang' => 'LOAD_CPF_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
@@ -340,7 +362,7 @@ class acp_board
'title' => 'ACP_AUTH_SETTINGS',
'vars' => array(
'legend1' => 'ACP_AUTH_SETTINGS',
- 'auth_method' => array('lang' => 'AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'select_auth_method', 'explain' => false)
+ 'auth_method' => array('lang' => 'AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'select_auth_method', 'explain' => false),
)
);
break;
@@ -351,8 +373,10 @@ class acp_board
'vars' => array(
'legend1' => 'ACP_SERVER_SETTINGS',
'gzip_compress' => array('lang' => 'ENABLE_GZIP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'use_system_cron' => array('lang' => 'USE_SYSTEM_CRON', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend2' => 'PATH_SETTINGS',
+ 'enable_mod_rewrite' => array('lang' => 'MOD_REWRITE_ENABLE', 'validate' => 'bool', 'type' => 'custom', 'method' => 'enable_mod_rewrite', 'explain' => true),
'smilies_path' => array('lang' => 'SMILIES_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true),
'icons_path' => array('lang' => 'ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true),
'upload_icons_path' => array('lang' => 'UPLOAD_ICONS_PATH', 'validate' => 'rpath', 'type' => 'text:20:255', 'explain' => true),
@@ -362,7 +386,7 @@ class acp_board
'force_server_vars' => array('lang' => 'FORCE_SERVER_VARS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'server_protocol' => array('lang' => 'SERVER_PROTOCOL', 'validate' => 'string', 'type' => 'text:10:10', 'explain' => true),
'server_name' => array('lang' => 'SERVER_NAME', 'validate' => 'string', 'type' => 'text:40:255', 'explain' => true),
- 'server_port' => array('lang' => 'SERVER_PORT', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true),
+ 'server_port' => array('lang' => 'SERVER_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true),
'script_path' => array('lang' => 'SCRIPT_PATH', 'validate' => 'script_path', 'type' => 'text::255', 'explain' => true),
'legend4' => 'ACP_SUBMIT_CHANGES',
@@ -376,7 +400,8 @@ class acp_board
'vars' => array(
'legend1' => 'ACP_SECURITY_SETTINGS',
'allow_autologin' => array('lang' => 'ALLOW_AUTOLOGIN', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
+ 'allow_password_reset' => array('lang' => 'ALLOW_PASSWORD_RESET', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
+ 'max_autologin_time' => array('lang' => 'AUTOLOGIN_LENGTH', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
'ip_check' => array('lang' => 'IP_VALID', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_ip_check', 'explain' => true),
'browser_check' => array('lang' => 'BROWSER_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'forwarded_for_check' => array('lang' => 'FORWARDED_FOR_VALID', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
@@ -386,13 +411,13 @@ class acp_board
'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,),
'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true),
'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true),
- 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
- 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
- 'ip_login_limit_max' => array('lang' => 'IP_LOGIN_LIMIT_MAX', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true),
- 'ip_login_limit_time' => array('lang' => 'IP_LOGIN_LIMIT_TIME', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
+ 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']),
+ 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true),
+ 'ip_login_limit_max' => array('lang' => 'IP_LOGIN_LIMIT_MAX', 'validate' => 'int:0:999', 'type' => 'number:0:999', 'explain' => true),
+ 'ip_login_limit_time' => array('lang' => 'IP_LOGIN_LIMIT_TIME', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
'ip_login_limit_use_forwarded' => array('lang' => 'IP_LOGIN_LIMIT_USE_FORWARDED', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'tpl_allow_php' => array('lang' => 'TPL_ALLOW_PHP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
- 'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1', 'type' => 'text:5:5', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
+ 'form_token_lifetime' => array('lang' => 'FORM_TIME_MAX', 'validate' => 'int:-1:99999', 'type' => 'number:-1:99999', 'explain' => true, 'append' => ' ' . $user->lang['SECONDS']),
'form_token_sid_guests' => array('lang' => 'FORM_SID_GUESTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
)
@@ -407,16 +432,16 @@ class acp_board
'email_enable' => array('lang' => 'ENABLE_EMAIL', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
'board_email_form' => array('lang' => 'BOARD_EMAIL_FORM', 'validate' => 'bool', 'type' => 'radio:enabled_disabled', 'explain' => true),
'email_function_name' => array('lang' => 'EMAIL_FUNCTION_NAME', 'validate' => 'string', 'type' => 'text:20:50', 'explain' => true),
- 'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'text:5:5', 'explain' => true),
- 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'email', 'type' => 'text:25:100', 'explain' => true),
- 'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'email', 'type' => 'text:25:100', 'explain' => true),
+ 'email_package_size' => array('lang' => 'EMAIL_PACKAGE_SIZE', 'validate' => 'int:0', 'type' => 'number:0:99999', 'explain' => true),
+ 'board_contact' => array('lang' => 'CONTACT_EMAIL', 'validate' => 'email', 'type' => 'email:25:100', 'explain' => true),
+ 'board_email' => array('lang' => 'ADMIN_EMAIL', 'validate' => 'email', 'type' => 'email:25:100', 'explain' => true),
'board_email_sig' => array('lang' => 'EMAIL_SIG', 'validate' => 'string', 'type' => 'textarea:5:30', 'explain' => true),
'board_hide_emails' => array('lang' => 'BOARD_HIDE_EMAILS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'legend2' => 'SMTP_SETTINGS',
'smtp_delivery' => array('lang' => 'USE_SMTP', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'smtp_host' => array('lang' => 'SMTP_SERVER', 'validate' => 'string', 'type' => 'text:25:50', 'explain' => false),
- 'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0', 'type' => 'text:4:5', 'explain' => true),
+ 'smtp_port' => array('lang' => 'SMTP_PORT', 'validate' => 'int:0:99999', 'type' => 'number:0:99999', 'explain' => true),
'smtp_auth_method' => array('lang' => 'SMTP_AUTH_METHOD', 'validate' => 'string', 'type' => 'select', 'method' => 'mail_auth_select', 'explain' => true),
'smtp_username' => array('lang' => 'SMTP_USERNAME', 'validate' => 'string', 'type' => 'text:25:255', 'explain' => true),
'smtp_password' => array('lang' => 'SMTP_PASSWORD', 'validate' => 'string', 'type' => 'password:25:255', 'explain' => true),
@@ -440,7 +465,7 @@ class acp_board
$cfg_array = (isset($_REQUEST['config'])) ? utf8_normalize_nfc(request_var('config', array('' => ''), true)) : $this->new_config;
$error = array();
- // We validate the complete config if whished
+ // We validate the complete config if wished
validate_config_vars($display_vars['vars'], $cfg_array, $error);
if ($submit && !check_form_key($form_key))
@@ -499,84 +524,54 @@ class acp_board
if ($mode == 'auth')
{
// Retrieve a list of auth plugins and check their config values
- $auth_plugins = array();
+ $auth_providers = $phpbb_container->get('auth.provider_collection');
- $dp = @opendir($phpbb_root_path . 'includes/auth');
-
- if ($dp)
+ $updated_auth_settings = false;
+ $old_auth_config = array();
+ foreach ($auth_providers as $provider)
{
- while (($file = readdir($dp)) !== false)
+ if ($fields = $provider->acp())
{
- if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
+ // Check if we need to create config fields for this plugin and save config when submit was pressed
+ foreach ($fields as $field)
{
- $auth_plugins[] = basename(preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file));
- }
- }
- closedir($dp);
+ if (!isset($config[$field]))
+ {
+ set_config($field, '');
+ }
- sort($auth_plugins);
- }
+ if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false)
+ {
+ continue;
+ }
- $updated_auth_settings = false;
- $old_auth_config = array();
- foreach ($auth_plugins as $method)
- {
- if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
- {
- include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
+ $old_auth_config[$field] = $this->new_config[$field];
+ $config_value = $cfg_array[$field];
+ $this->new_config[$field] = $config_value;
- $method = 'acp_' . $method;
- if (function_exists($method))
- {
- if ($fields = $method($this->new_config))
+ if ($submit)
{
- // Check if we need to create config fields for this plugin and save config when submit was pressed
- foreach ($fields['config'] as $field)
- {
- if (!isset($config[$field]))
- {
- set_config($field, '');
- }
-
- if (!isset($cfg_array[$field]) || strpos($field, 'legend') !== false)
- {
- continue;
- }
-
- $old_auth_config[$field] = $this->new_config[$field];
- $config_value = $cfg_array[$field];
- $this->new_config[$field] = $config_value;
-
- if ($submit)
- {
- $updated_auth_settings = true;
- set_config($field, $config_value);
- }
- }
+ $updated_auth_settings = true;
+ set_config($field, $config_value);
}
- unset($fields);
}
}
+ unset($fields);
}
if ($submit && (($cfg_array['auth_method'] != $this->new_config['auth_method']) || $updated_auth_settings))
{
$method = basename($cfg_array['auth_method']);
- if ($method && in_array($method, $auth_plugins))
+ if (array_key_exists('auth.provider.' . $method, $auth_providers))
{
- include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
-
- $method = 'init_' . $method;
- if (function_exists($method))
+ $provider = $auth_providers['auth.provider.' . $method];
+ if ($error = $provider->init())
{
- if ($error = $method())
+ foreach ($old_auth_config as $config_name => $config_value)
{
- foreach ($old_auth_config as $config_name => $config_value)
- {
- set_config($config_name, $config_value);
- }
- trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
+ set_config($config_name, $config_value);
}
+ trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
}
set_config('auth_method', basename($cfg_array['auth_method']));
}
@@ -660,23 +655,22 @@ class acp_board
{
$template->assign_var('S_AUTH', true);
- foreach ($auth_plugins as $method)
+ foreach ($auth_providers as $provider)
{
- if ($method && file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
+ $auth_tpl = $provider->get_acp_template($this->new_config);
+ if ($auth_tpl)
{
- $method = 'acp_' . $method;
- if (function_exists($method))
+ if (array_key_exists('BLOCK_VAR_NAME', $auth_tpl))
{
- $fields = $method($this->new_config);
-
- if ($fields['tpl'])
+ foreach ($auth_tpl['BLOCK_VARS'] as $block_vars)
{
- $template->assign_block_vars('auth_tpl', array(
- 'TPL' => $fields['tpl'])
- );
+ $template->assign_block_vars($auth_tpl['BLOCK_VAR_NAME'], $block_vars);
}
- unset($fields);
}
+ $template->assign_vars($auth_tpl['TEMPLATE_VARS']);
+ $template->assign_block_vars('auth_tpl', array(
+ 'TEMPLATE_FILE' => $auth_tpl['TEMPLATE_FILE'],
+ ));
}
}
}
@@ -687,25 +681,19 @@ class acp_board
*/
function select_auth_method($selected_method, $key = '')
{
- global $phpbb_root_path, $phpEx;
+ global $phpbb_root_path, $phpEx, $phpbb_container;
$auth_plugins = array();
+ $auth_providers = $phpbb_container->get('auth.provider_collection');
- $dp = @opendir($phpbb_root_path . 'includes/auth');
-
- if (!$dp)
- {
- return '';
- }
-
- while (($file = readdir($dp)) !== false)
+ foreach ($auth_providers as $key => $value)
{
- if (preg_match('#^auth_(.*?)\.' . $phpEx . '$#', $file))
+ if (!($value instanceof \phpbb\auth\provider\provider_interface))
{
- $auth_plugins[] = preg_replace('#^auth_(.*?)\.' . $phpEx . '$#', '\1', $file);
+ continue;
}
+ $auth_plugins[] = str_replace('auth.provider.', '', $key);
}
- closedir($dp);
sort($auth_plugins);
@@ -775,14 +763,14 @@ class acp_board
global $user, $config;
$act_ary = array(
- 'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
- 'ACC_NONE' => USER_ACTIVATION_NONE,
+ 'ACC_DISABLE' => USER_ACTIVATION_DISABLE,
+ 'ACC_NONE' => USER_ACTIVATION_NONE,
);
if ($config['email_enable'])
{
$act_ary['ACC_USER'] = USER_ACTIVATION_SELF;
$act_ary['ACC_ADMIN'] = USER_ACTIVATION_ADMIN;
- }
+ }
$act_options = '';
foreach ($act_ary as $key => $value)
@@ -801,7 +789,7 @@ class acp_board
{
global $user;
- return '<input id="' . $key . '" type="text" size="3" maxlength="3" name="config[min_name_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="text" size="3" maxlength="3" name="config[max_name_chars]" value="' . $this->new_config['max_name_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
+ return '<input id="' . $key . '" type="number" size="3" maxlength="3" min="1" max="999" name="config[min_name_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="number" size="3" maxlength="3" min="8" max="180" name="config[max_name_chars]" value="' . $this->new_config['max_name_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
}
/**
@@ -829,7 +817,7 @@ class acp_board
{
global $user;
- return '<input id="' . $key . '" type="text" size="3" maxlength="3" name="config[min_pass_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="text" size="3" maxlength="3" name="config[max_pass_chars]" value="' . $this->new_config['max_pass_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
+ return '<input id="' . $key . '" type="number" size="3" maxlength="3" min="1" max="999" name="config[min_pass_chars]" value="' . $value . '" /> ' . $user->lang['MIN_CHARS'] . '&nbsp;&nbsp;<input type="number" size="3" maxlength="3" min="8" max="255" name="config[max_pass_chars]" value="' . $this->new_config['max_pass_chars'] . '" /> ' . $user->lang['MAX_CHARS'];
}
/**
@@ -893,6 +881,18 @@ class acp_board
'<br /><br /><input class="button2" type="submit" id="' . $key . '_enable" name="' . $key . '_enable" value="' . $user->lang['ALLOW_QUICK_REPLY_BUTTON'] . '" />';
}
+ /**
+ * Select guest timezone
+ */
+ function timezone_select($value, $key)
+ {
+ global $user;
+
+ $timezone_select = phpbb_timezone_select($user, $value, true);
+ $timezone_select['tz_select'];
+
+ return '<select name="config[' . $key . ']" id="' . $key . '">' . $timezone_select['tz_select'] . '</select>';
+ }
/**
* Select default dateformat
@@ -903,10 +903,14 @@ class acp_board
// Let the format_date function operate with the acp values
$old_tz = $user->timezone;
- $old_dst = $user->dst;
-
- $user->timezone = $config['board_timezone'] * 3600;
- $user->dst = $config['board_dst'] * 3600;
+ try
+ {
+ $user->timezone = new DateTimeZone($config['board_timezone']);
+ }
+ catch (Exception $e)
+ {
+ // If the board timezone is invalid, we just use the users timezone.
+ }
$dateformat_options = '';
@@ -926,7 +930,6 @@ class acp_board
// Reset users date options
$user->timezone = $old_tz;
- $user->dst = $old_dst;
return "<select name=\"dateoptions\" id=\"dateoptions\" onchange=\"if (this.value == 'custom') { document.getElementById('" . addslashes($key) . "').value = '" . addslashes($value) . "'; } else { document.getElementById('" . addslashes($key) . "').value = this.value; }\">$dateformat_options</select>
<input type=\"text\" name=\"config[$key]\" id=\"$key\" value=\"$value\" maxlength=\"30\" />";
@@ -1000,6 +1003,51 @@ class acp_board
$cache->destroy('sql', FORUMS_TABLE);
}
-}
+ /**
+ * Option to enable/disable removal of 'app.php' from URLs
+ *
+ * Note that if mod_rewrite is on, URLs without app.php will still work,
+ * but any paths generated by the controller helper url() method will not
+ * contain app.php.
+ *
+ * @param int $value The current config value
+ * @param string $key The config key
+ * @return string The HTML for the form field
+ */
+ function enable_mod_rewrite($value, $key)
+ {
+ global $user, $config;
-?> \ No newline at end of file
+ // Determine whether mod_rewrite is enabled on the server
+ // NOTE: This only works on Apache servers on which PHP is NOT
+ // installed as CGI. In that case, there is no way for PHP to
+ // determine whether or not the Apache module is enabled.
+ //
+ // To be clear on the value of $mod_rewite:
+ // null = Cannot determine whether or not the server has mod_rewrite
+ // enabled
+ // false = Can determine that the server does NOT have mod_rewrite
+ // enabled
+ // true = Can determine that the server DOES have mod_rewrite_enabled
+ $mod_rewrite = null;
+ if (function_exists('apache_get_modules'))
+ {
+ $mod_rewrite = (bool) in_array('mod_rewrite', apache_get_modules());
+ }
+
+ // If $message is false, mod_rewrite is enabled.
+ // Otherwise, it is not and we need to:
+ // 1) disable the form field
+ // 2) make sure the config value is set to 0
+ // 3) append the message to the return
+ $value = ($mod_rewrite === false) ? 0 : $value;
+ $message = $mod_rewrite === null ? 'MOD_REWRITE_INFORMATION_UNAVAILABLE' : ($mod_rewrite === false ? 'MOD_REWRITE_DISABLED' : false);
+
+ // Let's do some friendly HTML injection if we want to disable the
+ // form field because h_radio() has no pretty way of doing so
+ $field_name = 'config[enable_mod_rewrite]' . ($message === 'MOD_REWRITE_DISABLED' ? '" disabled="disabled' : '');
+
+ return h_radio($field_name, array(1 => 'YES', 0 => 'NO'), $value) .
+ ($message !== false ? '<br /><span>' . $user->lang($message) . '</span>' : '');
+ }
+}
diff --git a/phpBB/includes/acp/acp_bots.php b/phpBB/includes/acp/acp_bots.php
index d08cabb062..e28a8d6451 100644
--- a/phpBB/includes/acp/acp_bots.php
+++ b/phpBB/includes/acp/acp_bots.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -25,7 +24,7 @@ class acp_bots
function main($id, $mode)
{
- global $config, $db, $user, $auth, $template, $cache;
+ global $config, $db, $user, $auth, $template, $cache, $request;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
$action = request_var('action', '');
@@ -353,6 +352,14 @@ class acp_bots
break;
}
+
+ if ($request->is_ajax() && ($action == 'activate' || $action == 'deactivate'))
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array(
+ 'text' => $user->lang['BOT_' . (($action == 'activate') ? 'DE' : '') . 'ACTIVATE'],
+ ));
+ }
$s_options = '';
$_options = array('activate' => 'BOT_ACTIVATE', 'deactivate' => 'BOT_DEACTIVATE', 'delete' => 'DELETE');
@@ -414,5 +421,3 @@ class acp_bots
return ($row) ? false : true;
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_captcha.php b/phpBB/includes/acp/acp_captcha.php
index bfec7c27d8..1a083c20ac 100644
--- a/phpBB/includes/acp/acp_captcha.php
+++ b/phpBB/includes/acp/acp_captcha.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*/
/**
@@ -30,7 +29,8 @@ class acp_captcha
$user->add_lang('acp/board');
include($phpbb_root_path . 'includes/captcha/captcha_factory.' . $phpEx);
- $captchas = phpbb_captcha_factory::get_captcha_types();
+ $factory = new phpbb_captcha_factory();
+ $captchas = $factory->get_captcha_types();
$selected = request_var('select_captcha', $config['captcha_plugin']);
$selected = (isset($captchas['available'][$selected]) || isset($captchas['unavailable'][$selected])) ? $selected : $config['captcha_plugin'];
@@ -46,7 +46,7 @@ class acp_captcha
// Delegate
if ($configure)
{
- $config_captcha =& phpbb_captcha_factory::get_instance($selected);
+ $config_captcha = phpbb_captcha_factory::get_instance($selected);
$config_captcha->acp_page($id, $this);
}
else
@@ -78,11 +78,11 @@ class acp_captcha
// sanity check
if (isset($captchas['available'][$selected]))
{
- $old_captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
+ $old_captcha = phpbb_captcha_factory::get_instance($config['captcha_plugin']);
$old_captcha->uninstall();
set_config('captcha_plugin', $selected);
- $new_captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
+ $new_captcha = phpbb_captcha_factory::get_instance($config['captcha_plugin']);
$new_captcha->install();
add_log('admin', 'LOG_CONFIG_VISUAL');
@@ -104,16 +104,16 @@ class acp_captcha
foreach ($captchas['available'] as $value => $title)
{
$current = ($selected !== false && $value == $selected) ? ' selected="selected"' : '';
- $captcha_select .= '<option value="' . $value . '"' . $current . '>' . $user->lang[$title] . '</option>';
+ $captcha_select .= '<option value="' . $value . '"' . $current . '>' . $user->lang($title) . '</option>';
}
foreach ($captchas['unavailable'] as $value => $title)
{
$current = ($selected !== false && $value == $selected) ? ' selected="selected"' : '';
- $captcha_select .= '<option value="' . $value . '"' . $current . ' class="disabled-option">' . $user->lang[$title] . '</option>';
+ $captcha_select .= '<option value="' . $value . '"' . $current . ' class="disabled-option">' . $user->lang($title) . '</option>';
}
- $demo_captcha =& phpbb_captcha_factory::get_instance($selected);
+ $demo_captcha = phpbb_captcha_factory::get_instance($selected);
foreach ($config_vars as $config_var => $options)
{
@@ -138,7 +138,7 @@ class acp_captcha
{
global $db, $user, $config;
- $captcha =& phpbb_captcha_factory::get_instance($selected);
+ $captcha = phpbb_captcha_factory::get_instance($selected);
$captcha->init(CONFIRM_REG);
$captcha->execute_demo();
@@ -146,5 +146,3 @@ class acp_captcha
exit_handler();
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php
index 758cd10434..8afc3709b9 100644
--- a/phpBB/includes/acp/acp_database.php
+++ b/phpBB/includes/acp/acp_database.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -29,11 +28,7 @@ class acp_database
global $cache, $db, $user, $auth, $template, $table_prefix;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
- if (!class_exists('phpbb_db_tools'))
- {
- require($phpbb_root_path . 'includes/db/db_tools.' . $phpEx);
- }
- $this->db_tools = new phpbb_db_tools($db);
+ $this->db_tools = new \phpbb\db\tools($db);
$user->add_lang('acp/database');
@@ -99,29 +94,29 @@ class acp_database
case 'mysqli':
case 'mysql4':
case 'mysql':
- $extractor = new mysql_extractor($download, $store, $format, $filename, $time);
+ $extractor = new mysql_extractor($format, $filename, $time, $download, $store);
break;
case 'sqlite':
- $extractor = new sqlite_extractor($download, $store, $format, $filename, $time);
+ $extractor = new sqlite_extractor($format, $filename, $time, $download, $store);
break;
case 'postgres':
- $extractor = new postgres_extractor($download, $store, $format, $filename, $time);
+ $extractor = new postgres_extractor($format, $filename, $time, $download, $store);
break;
case 'oracle':
- $extractor = new oracle_extractor($download, $store, $format, $filename, $time);
+ $extractor = new oracle_extractor($format, $filename, $time, $download, $store);
break;
case 'mssql':
case 'mssql_odbc':
case 'mssqlnative':
- $extractor = new mssql_extractor($download, $store, $format, $filename, $time);
+ $extractor = new mssql_extractor($format, $filename, $time, $download, $store);
break;
case 'firebird':
- $extractor = new firebird_extractor($download, $store, $format, $filename, $time);
+ $extractor = new firebird_extractor($format, $filename, $time, $download, $store);
break;
}
@@ -493,8 +488,10 @@ class base_extractor
var $format;
var $run_comp = false;
- function base_extractor($download = false, $store = false, $format, $filename, $time)
+ function base_extractor($format, $filename, $time, $download = false, $store = false)
{
+ global $request;
+
$this->download = $download;
$this->store = $store;
$this->time = $time;
@@ -539,7 +536,7 @@ class base_extractor
break;
case 'gzip':
- if ((isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) && strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'msie') === false)
+ if (strpos($request->header('Accept-Encoding'), 'gzip') !== false && strpos(strtolower($request->header('User-Agent')), 'msie') === false)
{
ob_start('ob_gzhandler');
}
@@ -1016,43 +1013,8 @@ class sqlite_extractor extends base_extractor
function write_data($table_name)
{
global $db;
- static $proper;
-
- if (is_null($proper))
- {
- $proper = version_compare(PHP_VERSION, '5.1.3', '>=');
- }
-
- if ($proper)
- {
- $col_types = sqlite_fetch_column_types($db->db_connect_id, $table_name);
- }
- else
- {
- $sql = "SELECT sql
- FROM sqlite_master
- WHERE type = 'table'
- AND name = '" . $table_name . "'";
- $table_data = sqlite_single_query($db->db_connect_id, $sql);
- $table_data = preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', '', $table_data);
- $table_data = trim($table_data);
-
- preg_match('#\((.*)\)#s', $table_data, $matches);
-
- $table_cols = explode(',', trim($matches[1]));
- foreach ($table_cols as $declaration)
- {
- $entities = preg_split('#\s+#', trim($declaration));
- $column_name = preg_replace('/"?([^"]+)"?/', '\1', $entities[0]);
- // Hit a primary key, those are not what we need :D
- if (empty($entities[1]) || (strtolower($entities[0]) === 'primary' && strtolower($entities[1]) === 'key'))
- {
- continue;
- }
- $col_types[$column_name] = $entities[1];
- }
- }
+ $col_types = sqlite_fetch_column_types($db->db_connect_id, $table_name);
$sql = "SELECT *
FROM $table_name";
@@ -1624,7 +1586,7 @@ class mssql_extractor extends base_extractor
}
$this->flush($sql_data);
}
-
+
function write_data_mssqlnative($table_name)
{
global $db;
@@ -1645,16 +1607,17 @@ class mssql_extractor extends base_extractor
return;
}
- $sql = "SELECT * FROM $table_name";
- $result_fields = $db->sql_query_limit($sql, 1);
+ $sql = "SELECT COLUMN_NAME, DATA_TYPE
+ FROM INFORMATION_SCHEMA.COLUMNS
+ WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = '" . $db->sql_escape($table_name) . "'";
+ $result_fields = $db->sql_query($sql);
- $row = new result_mssqlnative($result_fields);
- $i_num_fields = $row->num_fields();
-
- for ($i = 0; $i < $i_num_fields; $i++)
+ $i_num_fields = 0;
+ while ($row = $db->sql_fetchrow($result_fields))
{
- $ary_type[$i] = $row->field_type($i);
- $ary_name[$i] = $row->field_name($i);
+ $ary_type[$i_num_fields] = $row['DATA_TYPE'];
+ $ary_name[$i_num_fields] = $row['COLUMN_NAME'];
+ $i_num_fields++;
}
$db->sql_freeresult($result_fields);
@@ -1663,7 +1626,7 @@ class mssql_extractor extends base_extractor
WHERE COLUMNPROPERTY(object_id('$table_name'), COLUMN_NAME, 'IsIdentity') = 1";
$result2 = $db->sql_query($sql);
$row2 = $db->sql_fetchrow($result2);
-
+
if (!empty($row2['has_identity']))
{
$sql_data .= "\nSET IDENTITY_INSERT $table_name ON\nGO\n";
@@ -1727,8 +1690,8 @@ class mssql_extractor extends base_extractor
$sql_data .= "\nSET IDENTITY_INSERT $table_name OFF\nGO\n";
}
$this->flush($sql_data);
- }
-
+ }
+
function write_data_odbc($table_name)
{
global $db;
@@ -2464,5 +2427,3 @@ function fgetd_seekless(&$fp, $delim, $read, $seek, $eof, $buffer = 8192)
return false;
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_disallow.php b/phpBB/includes/acp/acp_disallow.php
index e2176b7bcd..f613fa325d 100644
--- a/phpBB/includes/acp/acp_disallow.php
+++ b/phpBB/includes/acp/acp_disallow.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -116,5 +115,3 @@ class acp_disallow
);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_email.php b/phpBB/includes/acp/acp_email.php
index df0d44c0c5..c9d149b6d7 100644
--- a/phpBB/includes/acp/acp_email.php
+++ b/phpBB/includes/acp/acp_email.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -281,5 +280,3 @@ class acp_email
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
new file mode 100644
index 0000000000..c21c9f4e9d
--- /dev/null
+++ b/phpBB/includes/acp/acp_extensions.php
@@ -0,0 +1,345 @@
+<?php
+/**
+*
+* @package acp
+* @copyright (c) 2012 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+/**
+* @ignore
+*/
+if (!defined('IN_PHPBB'))
+{
+ exit;
+}
+
+/**
+* @package acp
+*/
+class acp_extensions
+{
+ var $u_action;
+
+ private $db;
+ private $config;
+ private $template;
+ private $user;
+
+ function main()
+ {
+ // Start the page
+ global $config, $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx;
+
+ $this->db = $db;
+ $this->config = $config;
+ $this->template = $template;
+ $this->user = $user;
+
+ $user->add_lang(array('install', 'acp/extensions', 'migrator'));
+
+ $this->page_title = 'ACP_EXTENSIONS';
+
+ $action = $request->variable('action', 'list');
+ $ext_name = $request->variable('ext_name', '');
+
+ // What is a safe limit of execution time? Half the max execution time should be safe.
+ $safe_time_limit = (ini_get('max_execution_time') / 2);
+ $start_time = time();
+
+ // Cancel action
+ if ($request->is_set_post('cancel'))
+ {
+ $action = 'list';
+ $ext_name = '';
+ }
+
+ if (in_array($action, array('enable', 'disable', 'delete_data')) && !check_link_hash($request->variable('hash', ''), $action . '.' . $ext_name))
+ {
+ trigger_error('FORM_INVALID', E_USER_WARNING);
+ }
+
+ // If they've specified an extension, let's load the metadata manager and validate it.
+ if ($ext_name)
+ {
+ $md_manager = new \phpbb\extension\metadata_manager($ext_name, $config, $phpbb_extension_manager, $template, $phpbb_root_path);
+
+ try
+ {
+ $md_manager->get_metadata('all');
+ }
+ catch(\phpbb\extension\exception $e)
+ {
+ trigger_error($e, E_USER_WARNING);
+ }
+ }
+
+ // What are we doing?
+ switch ($action)
+ {
+ case 'list':
+ default:
+ $this->list_enabled_exts($phpbb_extension_manager);
+ $this->list_disabled_exts($phpbb_extension_manager);
+ $this->list_available_exts($phpbb_extension_manager);
+
+ $this->tpl_name = 'acp_ext_list';
+ break;
+
+ case 'enable_pre':
+ if (!$md_manager->validate_enable())
+ {
+ trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
+
+ if ($phpbb_extension_manager->enabled($ext_name))
+ {
+ redirect($this->u_action);
+ }
+
+ $this->tpl_name = 'acp_ext_enable';
+
+ $template->assign_vars(array(
+ 'PRE' => true,
+ 'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_ENABLE_CONFIRM', $md_manager->get_metadata('display-name')),
+ 'U_ENABLE' => $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name),
+ ));
+ break;
+
+ case 'enable':
+ if (!$md_manager->validate_enable())
+ {
+ trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
+
+ try
+ {
+ while ($phpbb_extension_manager->enable_step($ext_name))
+ {
+ // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
+ if ((time() - $start_time) >= $safe_time_limit)
+ {
+ $template->assign_var('S_NEXT_STEP', true);
+
+ meta_refresh(0, $this->u_action . '&amp;action=enable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('enable.' . $ext_name));
+ }
+ }
+ }
+ catch (\phpbb\db\migration\exception $e)
+ {
+ $template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
+ }
+
+ $this->tpl_name = 'acp_ext_enable';
+
+ $template->assign_vars(array(
+ 'U_RETURN' => $this->u_action . '&amp;action=list',
+ ));
+ break;
+
+ case 'disable_pre':
+ if (!$phpbb_extension_manager->enabled($ext_name))
+ {
+ redirect($this->u_action);
+ }
+
+ $this->tpl_name = 'acp_ext_disable';
+
+ $template->assign_vars(array(
+ 'PRE' => true,
+ 'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DISABLE_CONFIRM', $md_manager->get_metadata('display-name')),
+ 'U_DISABLE' => $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name),
+ ));
+ break;
+
+ case 'disable':
+ while ($phpbb_extension_manager->disable_step($ext_name))
+ {
+ // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
+ if ((time() - $start_time) >= $safe_time_limit)
+ {
+ $template->assign_var('S_NEXT_STEP', true);
+
+ meta_refresh(0, $this->u_action . '&amp;action=disable&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('disable.' . $ext_name));
+ }
+ }
+
+ $this->tpl_name = 'acp_ext_disable';
+
+ $template->assign_vars(array(
+ 'U_RETURN' => $this->u_action . '&amp;action=list',
+ ));
+ break;
+
+ case 'delete_data_pre':
+ if ($phpbb_extension_manager->enabled($ext_name))
+ {
+ redirect($this->u_action);
+ }
+ $this->tpl_name = 'acp_ext_delete_data';
+
+ $template->assign_vars(array(
+ 'PRE' => true,
+ 'L_CONFIRM_MESSAGE' => $this->user->lang('EXTENSION_DELETE_DATA_CONFIRM', $md_manager->get_metadata('display-name')),
+ 'U_PURGE' => $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name),
+ ));
+ break;
+
+ case 'delete_data':
+ try
+ {
+ while ($phpbb_extension_manager->purge_step($ext_name))
+ {
+ // Are we approaching the time limit? If so we want to pause the update and continue after refreshing
+ if ((time() - $start_time) >= $safe_time_limit)
+ {
+ $template->assign_var('S_NEXT_STEP', true);
+
+ meta_refresh(0, $this->u_action . '&amp;action=delete_data&amp;ext_name=' . urlencode($ext_name) . '&amp;hash=' . generate_link_hash('delete_data.' . $ext_name));
+ }
+ }
+ }
+ catch (\phpbb\db\migration\exception $e)
+ {
+ $template->assign_var('MIGRATOR_ERROR', $e->getLocalisedMessage($user));
+ }
+
+ $this->tpl_name = 'acp_ext_delete_data';
+
+ $template->assign_vars(array(
+ 'U_RETURN' => $this->u_action . '&amp;action=list',
+ ));
+ break;
+
+ case 'details':
+ // Output it to the template
+ $md_manager->output_template_data();
+
+ $template->assign_var('U_BACK', $this->u_action . '&amp;action=list');
+
+ $this->tpl_name = 'acp_ext_details';
+ break;
+ }
+ }
+
+ /**
+ * Lists all the enabled extensions and dumps to the template
+ *
+ * @param $phpbb_extension_manager An instance of the extension manager
+ * @return null
+ */
+ public function list_enabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
+ {
+ foreach ($phpbb_extension_manager->all_enabled() as $name => $location)
+ {
+ $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
+
+ try
+ {
+ $this->template->assign_block_vars('enabled', array(
+ 'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'),
+
+ 'U_DETAILS' => $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name),
+ ));
+
+ $this->output_actions('enabled', array(
+ 'DISABLE' => $this->u_action . '&amp;action=disable_pre&amp;ext_name=' . urlencode($name),
+ ));
+ }
+ catch(\phpbb\extension\exception $e)
+ {
+ $this->template->assign_block_vars('disabled', array(
+ 'META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e),
+ ));
+ }
+ }
+ }
+
+ /**
+ * Lists all the disabled extensions and dumps to the template
+ *
+ * @param $phpbb_extension_manager An instance of the extension manager
+ * @return null
+ */
+ public function list_disabled_exts(\phpbb\extension\manager $phpbb_extension_manager)
+ {
+ foreach ($phpbb_extension_manager->all_disabled() as $name => $location)
+ {
+ $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
+
+ try
+ {
+ $this->template->assign_block_vars('disabled', array(
+ 'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'),
+
+ 'U_DETAILS' => $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name),
+ ));
+
+ $this->output_actions('disabled', array(
+ 'ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name),
+ 'DELETE_DATA' => $this->u_action . '&amp;action=delete_data_pre&amp;ext_name=' . urlencode($name),
+ ));
+ }
+ catch(\phpbb\extension\exception $e)
+ {
+ $this->template->assign_block_vars('disabled', array(
+ 'META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e),
+ ));
+ }
+ }
+ }
+
+ /**
+ * Lists all the available extensions and dumps to the template
+ *
+ * @param $phpbb_extension_manager An instance of the extension manager
+ * @return null
+ */
+ public function list_available_exts(\phpbb\extension\manager $phpbb_extension_manager)
+ {
+ $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured());
+
+ foreach ($uninstalled as $name => $location)
+ {
+ $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template);
+
+ try
+ {
+ $this->template->assign_block_vars('disabled', array(
+ 'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'),
+
+ 'U_DETAILS' => $this->u_action . '&amp;action=details&amp;ext_name=' . urlencode($name),
+ ));
+
+ $this->output_actions('disabled', array(
+ 'ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name),
+ ));
+ }
+ catch(\phpbb\extension\exception $e)
+ {
+ $this->template->assign_block_vars('disabled', array(
+ 'META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e),
+ ));
+ }
+ }
+ }
+
+ /**
+ * Output actions to a block
+ *
+ * @param string $block
+ * @param array $actions
+ */
+ private function output_actions($block, $actions)
+ {
+ foreach ($actions as $lang => $url)
+ {
+ $this->template->assign_block_vars($block . '.actions', array(
+ 'L_ACTION' => $this->user->lang('EXTENSION_' . $lang),
+ 'L_ACTION_EXPLAIN' => (isset($this->user->lang['EXTENSION_' . $lang . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $lang . '_EXPLAIN') : '',
+ 'U_ACTION' => $url,
+ ));
+ }
+ }
+}
diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php
index dc2e6b75fb..029f4b23c9 100644
--- a/phpBB/includes/acp/acp_forums.php
+++ b/phpBB/includes/acp/acp_forums.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -26,7 +25,7 @@ class acp_forums
function main($id, $mode)
{
- global $db, $user, $auth, $template, $cache;
+ global $db, $user, $auth, $template, $cache, $request, $phpbb_dispatcher;
global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
$user->add_lang('acp/forums');
@@ -150,6 +149,17 @@ class acp_forums
'forum_password_unset' => request_var('forum_password_unset', false),
);
+ /**
+ * Request forum data and operate on it (parse texts, etc.)
+ *
+ * @event core.acp_manage_forums_request_data
+ * @var string action Type of the action: add|edit
+ * @var array forum_data Array with new forum data
+ * @since 3.1-A1
+ */
+ $vars = array('action', 'forum_data');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_request_data', compact($vars)));
+
// On add, add empty forum_options... else do not consider it (not updating it)
if ($action == 'add')
{
@@ -195,7 +205,7 @@ class acp_forums
($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))))
{
copy_forum_permissions($forum_perm_from, $forum_data['forum_id'], ($action == 'edit') ? true : false);
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
$copied_permissions = true;
}
/* Commented out because of questionable UI workflow - re-visit for 3.0.7
@@ -256,6 +266,12 @@ class acp_forums
$cache->destroy('sql', FORUMS_TABLE);
}
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array('success' => ($move_forum_name !== false)));
+ }
+
break;
case 'sync':
@@ -266,7 +282,7 @@ class acp_forums
@set_time_limit(0);
- $sql = 'SELECT forum_name, forum_topics_real
+ $sql = 'SELECT forum_name, (forum_topics_approved + forum_topics_unapproved + forum_topics_softdeleted) AS total_topics
FROM ' . FORUMS_TABLE . "
WHERE forum_id = $forum_id";
$result = $db->sql_query($sql);
@@ -278,7 +294,7 @@ class acp_forums
trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
- if ($row['forum_topics_real'])
+ if ($row['total_topics'])
{
$sql = 'SELECT MIN(topic_id) as min_topic_id, MAX(topic_id) as max_topic_id
FROM ' . TOPICS_TABLE . '
@@ -297,7 +313,6 @@ class acp_forums
$end = $start + $batch_size;
// Sync all topics in batch mode...
- sync('topic_approved', 'range', 'topic_id BETWEEN ' . $start . ' AND ' . $end, true, false);
sync('topic', 'range', 'topic_id BETWEEN ' . $start . ' AND ' . $end, true, true);
if ($end < $row2['max_topic_id'])
@@ -313,15 +328,15 @@ class acp_forums
$start += $batch_size;
- $url = $this->u_action . "&amp;parent_id={$this->parent_id}&amp;f=$forum_id&amp;action=sync&amp;start=$start&amp;topics_done=$topics_done&amp;total={$row['forum_topics_real']}";
+ $url = $this->u_action . "&amp;parent_id={$this->parent_id}&amp;f=$forum_id&amp;action=sync&amp;start=$start&amp;topics_done=$topics_done&amp;total={$row['total_topics']}";
meta_refresh(0, $url);
$template->assign_vars(array(
- 'U_PROGRESS_BAR' => $this->u_action . "&amp;action=progress_bar&amp;start=$topics_done&amp;total={$row['forum_topics_real']}",
- 'UA_PROGRESS_BAR' => addslashes($this->u_action . "&amp;action=progress_bar&amp;start=$topics_done&amp;total={$row['forum_topics_real']}"),
+ 'U_PROGRESS_BAR' => $this->u_action . "&amp;action=progress_bar&amp;start=$topics_done&amp;total={$row['total_topics']}",
+ 'UA_PROGRESS_BAR' => addslashes($this->u_action . "&amp;action=progress_bar&amp;start=$topics_done&amp;total={$row['total_topics']}"),
'S_CONTINUE_SYNC' => true,
- 'L_PROGRESS_EXPLAIN' => sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], $topics_done, $row['forum_topics_real']))
+ 'L_PROGRESS_EXPLAIN' => sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], $topics_done, $row['total_topics']))
);
return;
@@ -335,7 +350,7 @@ class acp_forums
'U_PROGRESS_BAR' => $this->u_action . '&amp;action=progress_bar',
'UA_PROGRESS_BAR' => addslashes($this->u_action . '&amp;action=progress_bar'),
'S_CONTINUE_SYNC' => true,
- 'L_PROGRESS_EXPLAIN' => sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], 0, $row['forum_topics_real']))
+ 'L_PROGRESS_EXPLAIN' => sprintf($user->lang['SYNC_IN_PROGRESS_EXPLAIN'], 0, $row['total_topics']))
);
return;
@@ -380,6 +395,9 @@ class acp_forums
$forum_data['forum_flags'] += (request_var('enable_quick_reply', false)) ? FORUM_FLAG_QUICK_REPLY : 0;
}
+ // Initialise $row, so we always have it in the event
+ $row = array();
+
// Show form to create/modify a forum
if ($action == 'edit')
{
@@ -447,6 +465,24 @@ class acp_forums
}
}
+ /**
+ * Initialise data before we display the add/edit form
+ *
+ * @event core.acp_manage_forums_initialise_data
+ * @var string action Type of the action: add|edit
+ * @var bool update Do we display the form only
+ * or did the user press submit
+ * @var int forum_id When editing: the forum id,
+ * when creating: the parent forum id
+ * @var array row Array with current forum data
+ * empty when creating new forum
+ * @var array forum_data Array with new forum data
+ * @var string parents_list List of parent options
+ * @since 3.1-A1
+ */
+ $vars = array('action', 'update', 'forum_id', 'row', 'forum_data', 'parents_list');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_initialise_data', compact($vars)));
+
$forum_rules_data = array(
'text' => $forum_data['forum_rules'],
'allow_bbcode' => true,
@@ -576,7 +612,7 @@ class acp_forums
$errors[] = $user->lang['FORUM_PASSWORD_OLD'];
}
- $template->assign_vars(array(
+ $template_data = array(
'S_EDIT_FORUM' => true,
'S_ERROR' => (sizeof($errors)) ? true : false,
'S_PARENT_ID' => $this->parent_id,
@@ -641,7 +677,31 @@ class acp_forums
'S_ENABLE_POST_REVIEW' => ($forum_data['forum_flags'] & FORUM_FLAG_POST_REVIEW) ? true : false,
'S_ENABLE_QUICK_REPLY' => ($forum_data['forum_flags'] & FORUM_FLAG_QUICK_REPLY) ? true : false,
'S_CAN_COPY_PERMISSIONS' => ($action != 'edit' || empty($forum_id) || ($auth->acl_get('a_fauth') && $auth->acl_get('a_authusers') && $auth->acl_get('a_authgroups') && $auth->acl_get('a_mauth'))) ? true : false,
- ));
+ );
+
+ /**
+ * Modify forum template data before we display the form
+ *
+ * @event core.acp_manage_forums_display_form
+ * @var string action Type of the action: add|edit
+ * @var bool update Do we display the form only
+ * or did the user press submit
+ * @var int forum_id When editing: the forum id,
+ * when creating: the parent forum id
+ * @var array row Array with current forum data
+ * empty when creating new forum
+ * @var array forum_data Array with new forum data
+ * @var string parents_list List of parent options
+ * @var array errors Array of errors, if you add errors
+ * ensure to update the template variables
+ * S_ERROR and ERROR_MSG to display it
+ * @var array template_data Array with new forum data
+ * @since 3.1-A1
+ */
+ $vars = array('action', 'update', 'forum_id', 'row', 'forum_data', 'parents_list', 'errors', 'template_data');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_display_form', compact($vars)));
+
+ $template->assign_vars($template_data);
return;
@@ -706,7 +766,7 @@ class acp_forums
if (!empty($forum_perm_from) && $forum_perm_from != $forum_id)
{
copy_forum_permissions($forum_perm_from, $forum_id, true);
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
$auth->acl_clear_prefetch();
$cache->destroy('sql', FORUMS_TABLE);
@@ -795,8 +855,8 @@ class acp_forums
'FORUM_IMAGE_SRC' => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '',
'FORUM_NAME' => $row['forum_name'],
'FORUM_DESCRIPTION' => generate_text_for_display($row['forum_desc'], $row['forum_desc_uid'], $row['forum_desc_bitfield'], $row['forum_desc_options']),
- 'FORUM_TOPICS' => $row['forum_topics'],
- 'FORUM_POSTS' => $row['forum_posts'],
+ 'FORUM_TOPICS' => $row['forum_topics_approved'],
+ 'FORUM_POSTS' => $row['forum_posts_approved'],
'S_FORUM_LINK' => ($forum_type == FORUM_LINK) ? true : false,
'S_FORUM_POST' => ($forum_type == FORUM_POST) ? true : false,
@@ -866,10 +926,22 @@ class acp_forums
*/
function update_forum_data(&$forum_data)
{
- global $db, $user, $cache, $phpbb_root_path;
+ global $db, $user, $cache, $phpbb_root_path, $phpbb_dispatcher;
$errors = array();
+ /**
+ * Validate the forum data before we create/update the forum
+ *
+ * @event core.acp_manage_forums_validate_data
+ * @var array forum_data Array with new forum data
+ * @var array errors Array of errors, should be strings and not
+ * language key.
+ * @since 3.1-A1
+ */
+ $vars = array('forum_data', 'errors');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_validate_data', compact($vars)));
+
if ($forum_data['forum_name'] == '')
{
$errors[] = $user->lang['FORUM_NAME_EMPTY'];
@@ -962,7 +1034,22 @@ class acp_forums
}
unset($forum_data_sql['forum_password_unset']);
- if (!isset($forum_data_sql['forum_id']))
+ /**
+ * Remove invalid values from forum_data_sql that should not be updated
+ *
+ * @event core.acp_manage_forums_update_data_before
+ * @var array forum_data Array with forum data
+ * @var array forum_data_sql Array with data we are going to update
+ * If forum_data_sql[forum_id] is set, we update
+ * that forum, otherwise a new one is created.
+ * @since 3.1-A1
+ */
+ $vars = array('forum_data', 'forum_data_sql');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_update_data_before', compact($vars)));
+
+ $is_new_forum = !isset($forum_data_sql['forum_id']);
+
+ if ($is_new_forum)
{
// no forum_id means we're creating a new forum
unset($forum_data_sql['type_action']);
@@ -1055,7 +1142,8 @@ class acp_forums
return array($user->lang['NO_FORUM_ACTION']);
}
- $forum_data_sql['forum_posts'] = $forum_data_sql['forum_topics'] = $forum_data_sql['forum_topics_real'] = $forum_data_sql['forum_last_post_id'] = $forum_data_sql['forum_last_poster_id'] = $forum_data_sql['forum_last_post_time'] = 0;
+ $forum_data_sql['forum_posts_approved'] = $forum_data_sql['forum_posts_unapproved'] = $forum_data_sql['forum_posts_softdeleted'] = $forum_data_sql['forum_topics_approved'] = $forum_data_sql['forum_topics_unapproved'] = $forum_data_sql['forum_topics_softdeleted'] = 0;
+ $forum_data_sql['forum_last_post_id'] = $forum_data_sql['forum_last_poster_id'] = $forum_data_sql['forum_last_post_time'] = 0;
$forum_data_sql['forum_last_poster_name'] = $forum_data_sql['forum_last_poster_colour'] = '';
}
else if ($row['forum_type'] == FORUM_CAT && $forum_data_sql['forum_type'] == FORUM_LINK)
@@ -1175,9 +1263,12 @@ class acp_forums
else if ($row['forum_type'] == FORUM_CAT && $forum_data_sql['forum_type'] == FORUM_POST)
{
// Changing a category to a forum? Reset the data (you can't post directly in a cat, you must use a forum)
- $forum_data_sql['forum_posts'] = 0;
- $forum_data_sql['forum_topics'] = 0;
- $forum_data_sql['forum_topics_real'] = 0;
+ $forum_data_sql['forum_posts_approved'] = 0;
+ $forum_data_sql['forum_posts_unapproved'] = 0;
+ $forum_data_sql['forum_posts_softdeleted'] = 0;
+ $forum_data_sql['forum_topics_approved'] = 0;
+ $forum_data_sql['forum_topics_unapproved'] = 0;
+ $forum_data_sql['forum_topics_softdeleted'] = 0;
$forum_data_sql['forum_last_post_id'] = 0;
$forum_data_sql['forum_last_post_subject'] = '';
$forum_data_sql['forum_last_post_time'] = 0;
@@ -1233,6 +1324,22 @@ class acp_forums
add_log('admin', 'LOG_FORUM_EDIT', $forum_data['forum_name']);
}
+ /**
+ * Event after a forum was updated or created
+ *
+ * @event core.acp_manage_forums_update_data_after
+ * @var array forum_data Array with forum data
+ * @var array forum_data_sql Array with data we updated
+ * @var bool is_new_forum Did we create a forum or update one
+ * If you want to overwrite this value,
+ * ensure to set forum_data_sql[forum_id]
+ * @var array errors Array of errors, should be strings and not
+ * language key.
+ * @since 3.1-A1
+ */
+ $vars = array('forum_data', 'forum_data_sql', 'is_new_forum', 'errors');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_update_data_after', compact($vars)));
+
return $errors;
}
@@ -1241,7 +1348,7 @@ class acp_forums
*/
function move_forum($from_id, $to_id)
{
- global $db, $user;
+ global $db, $user, $phpbb_dispatcher;
$to_data = $moved_ids = $errors = array();
@@ -1253,10 +1360,30 @@ class acp_forums
if ($to_data['forum_type'] == FORUM_LINK)
{
$errors[] = $user->lang['PARENT_IS_LINK_FORUM'];
- return $errors;
}
}
+ /**
+ * Event when we move all children of one forum to another
+ *
+ * This event may be triggered, when a forum is deleted
+ *
+ * @event core.acp_manage_forums_move_children
+ * @var int from_id If of the current parent forum
+ * @var int to_id If of the new parent forum
+ * @var array errors Array of errors, should be strings and not
+ * language key.
+ * @since 3.1-A1
+ */
+ $vars = array('from_id', 'to_id', 'errors');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_move_children', compact($vars)));
+
+ // Return if there were errors
+ if (!empty($errors))
+ {
+ return $errors;
+ }
+
$moved_forums = get_forum_branch($from_id, 'children', 'descending');
$from_data = $moved_forums[0];
$diff = sizeof($moved_forums) * 2;
@@ -1336,7 +1463,30 @@ class acp_forums
*/
function move_forum_content($from_id, $to_id, $sync = true)
{
- global $db;
+ global $db, $phpbb_dispatcher;
+
+ $errors = array();
+
+ /**
+ * Event when we move content from one forum to another
+ *
+ * @event core.acp_manage_forums_move_content
+ * @var int from_id If of the current parent forum
+ * @var int to_id If of the new parent forum
+ * @var bool sync Shall we sync the "to"-forum's data
+ * @var array errors Array of errors, should be strings and not
+ * language key. If this array is not empty,
+ * The content will not be moved.
+ * @since 3.1-A1
+ */
+ $vars = array('from_id', 'to_id', 'sync', 'errors');
+ extract($phpbb_dispatcher->trigger_event('core.acp_manage_forums_move_content', compact($vars)));
+
+ // Return if there were errors
+ if (!empty($errors))
+ {
+ return $errors;
+ }
$table_ary = array(LOG_TABLE, POSTS_TABLE, TOPICS_TABLE, DRAFTS_TABLE, TOPICS_TRACK_TABLE);
@@ -1645,7 +1795,7 @@ class acp_forums
FROM ' . POSTS_TABLE . '
WHERE forum_id = ' . $forum_id . '
AND post_postcount = 1
- AND post_approved = 1';
+ AND post_visibility = ' . ITEM_APPROVED;
$result = $db->sql_query($sql);
$post_counts = array();
@@ -1783,7 +1933,7 @@ class acp_forums
// Make sure the overall post/topic count is correct...
$sql = 'SELECT COUNT(post_id) AS stat
FROM ' . POSTS_TABLE . '
- WHERE post_approved = 1';
+ WHERE post_visibility = ' . ITEM_APPROVED;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
@@ -1792,7 +1942,7 @@ class acp_forums
$sql = 'SELECT COUNT(topic_id) AS stat
FROM ' . TOPICS_TABLE . '
- WHERE topic_approved = 1';
+ WHERE topic_visibility = ' . ITEM_APPROVED;
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
@@ -1945,5 +2095,3 @@ class acp_forums
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php
index c9d476b8ae..c170c67d49 100644
--- a/phpBB/includes/acp/acp_groups.php
+++ b/phpBB/includes/acp/acp_groups.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -27,6 +26,7 @@ class acp_groups
{
global $config, $db, $user, $auth, $template, $cache;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
+ global $request, $phpbb_container;
$user->add_lang('acp/groups');
$this->tpl_name = 'acp_groups';
@@ -35,6 +35,12 @@ class acp_groups
$form_key = 'acp_groups';
add_form_key($form_key);
+ if ($mode == 'position')
+ {
+ $this->manage_position();
+ return;
+ }
+
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
// Check and set some common vars
@@ -49,15 +55,16 @@ class acp_groups
// Clear some vars
- $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && phpbb_is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
$group_row = array();
// Grab basic data for group, if group_id is set and exists
if ($group_id)
{
- $sql = 'SELECT *
- FROM ' . GROUPS_TABLE . "
- WHERE group_id = $group_id";
+ $sql = 'SELECT g.*, t.teampage_position AS group_teampage
+ FROM ' . GROUPS_TABLE . ' g
+ LEFT JOIN ' . TEAMPAGE_TABLE . ' t
+ ON (t.group_id = g.group_id)
+ WHERE g.group_id = ' . $group_id;
$result = $db->sql_query($sql);
$group_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
@@ -305,8 +312,21 @@ class acp_groups
$error = array();
$user->add_lang('ucp');
- $avatar_select = basename(request_var('avatar_select', ''));
- $category = basename(request_var('category', ''));
+ // Setup avatar data for later
+ $avatars_enabled = false;
+ $avatar_drivers = null;
+ $avatar_data = null;
+ $avatar_error = array();
+
+ if ($config['allow_avatar'])
+ {
+ $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
+ $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
+
+ // This is normalised data, without the group_ prefix
+ $avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group');
+ }
+
// Did we submit?
if ($update)
@@ -324,17 +344,12 @@ class acp_groups
$allow_desc_urls = request_var('desc_parse_urls', false);
$allow_desc_smilies = request_var('desc_parse_smilies', false);
- $data['uploadurl'] = request_var('uploadurl', '');
- $data['remotelink'] = request_var('remotelink', '');
- $data['width'] = request_var('width', '');
- $data['height'] = request_var('height', '');
- $delete = request_var('delete', '');
-
$submit_ary = array(
'colour' => request_var('group_colour', ''),
'rank' => request_var('group_rank', 0),
'receive_pm' => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
'legend' => isset($_REQUEST['group_legend']) ? 1 : 0,
+ 'teampage' => isset($_REQUEST['group_teampage']) ? 1 : 0,
'message_limit' => request_var('group_message_limit', 0),
'max_recipients' => request_var('group_max_recipients', 0),
'founder_manage' => 0,
@@ -346,81 +361,39 @@ class acp_groups
$submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
}
- if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
+ if ($config['allow_avatar'])
{
- // Avatar stuff
- $var_ary = array(
- 'uploadurl' => array('string', true, 5, 255),
- 'remotelink' => array('string', true, 5, 255),
- 'width' => array('string', true, 1, 3),
- 'height' => array('string', true, 1, 3),
- );
-
- if (!($error = validate_data($data, $var_ary)))
- {
- $data['user_id'] = "g$group_id";
+ // Handle avatar
+ $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
- if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
- {
- list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
- }
- else if ($data['remotelink'])
- {
- list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
- }
- }
- }
- else if ($avatar_select && $config['allow_avatar_local'])
- {
- // check avatar gallery
- if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
+ if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))
{
- $submit_ary['avatar_type'] = AVATAR_GALLERY;
+ $driver = $phpbb_avatar_manager->get_driver($driver_name);
+ $result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error);
- list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
- $submit_ary['avatar'] = $category . '/' . $avatar_select;
- }
- }
- else if ($delete)
- {
- $submit_ary['avatar'] = '';
- $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
- }
- else if ($data['width'] && $data['height'])
- {
- // Only update the dimensions?
- if ($config['avatar_max_width'] || $config['avatar_max_height'])
- {
- if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height'])
+ if ($result && empty($avatar_error))
{
- $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
+ $result['avatar_type'] = $driver_name;
+ $submit_ary = array_merge($submit_ary, $result);
}
}
-
- if (!sizeof($error))
+ else
{
- if ($config['avatar_min_width'] || $config['avatar_min_height'])
+ $driver = $phpbb_avatar_manager->get_driver($user->data['user_avatar_type']);
+ if ($driver)
{
- if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height'])
- {
- $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
- }
+ $driver->delete($avatar_data);
}
- }
- if (!sizeof($error))
- {
- $submit_ary['avatar_width'] = $data['width'];
- $submit_ary['avatar_height'] = $data['height'];
+ // Removing the avatar
+ $submit_ary['avatar_type'] = '';
+ $submit_ary['avatar'] = '';
+ $submit_ary['avatar_width'] = 0;
+ $submit_ary['avatar_height'] = 0;
}
- }
- if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
- {
- if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
- {
- avatar_delete('group', $group_row, true);
- }
+ // Merge any avatar errors into the primary error array
+ $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
}
/*
@@ -445,17 +418,21 @@ class acp_groups
// Only set the rank, colour, etc. if it's changed or if we're adding a new
// group. This prevents existing group members being updated if no changes
// were made.
+ // However there are some attributes that need to be set everytime,
+ // otherwise the group gets removed from the feature.
+ $set_attributes = array('legend', 'teampage');
$group_attributes = array();
$test_variables = array(
'rank' => 'int',
'colour' => 'string',
'avatar' => 'string',
- 'avatar_type' => 'int',
+ 'avatar_type' => 'string',
'avatar_width' => 'int',
'avatar_height' => 'int',
'receive_pm' => 'int',
'legend' => 'int',
+ 'teampage' => 'int',
'message_limit' => 'int',
'max_recipients'=> 'int',
'founder_manage'=> 'int',
@@ -464,7 +441,7 @@ class acp_groups
foreach ($test_variables as $test => $type)
{
- if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
+ if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test] || isset($group_attributes['group_avatar']) && strpos($test, 'avatar') === 0 || in_array($test, $set_attributes)))
{
settype($submit_ary[$test], $type);
$group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
@@ -521,7 +498,7 @@ class acp_groups
}
}
- $cache->destroy('sql', GROUPS_TABLE);
+ $cache->destroy('sql', array(GROUPS_TABLE, TEAMPAGE_TABLE));
$message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
trigger_error($user->lang[$message] . adm_back_link($this->u_action));
@@ -581,13 +558,44 @@ class acp_groups
$type_closed = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
$type_hidden = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
- $avatar_img = (!empty($group_row['group_avatar'])) ? get_user_avatar($group_row['group_avatar'], $group_row['group_avatar_type'], $group_row['group_avatar_width'], $group_row['group_avatar_height'], 'GROUP_AVATAR') : '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />';
+ // Load up stuff for avatars
+ if ($config['allow_avatar'])
+ {
+ $avatars_enabled = false;
+ $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type']));
- $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
+ foreach ($avatar_drivers as $current_driver)
+ {
+ $driver = $phpbb_avatar_manager->get_driver($current_driver);
+
+ $avatars_enabled = true;
+ $config_name = $phpbb_avatar_manager->get_driver_config_name($driver);
+ $template->set_filenames(array(
+ 'avatar' => "acp_avatar_options_{$config_name}.html",
+ ));
- if ($config['allow_avatar_local'] && $display_gallery)
+ if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error))
+ {
+ $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
+ $driver_upper = strtoupper($driver_name);
+ $template->assign_block_vars('avatar_drivers', array(
+ 'L_TITLE' => $user->lang($driver_upper . '_TITLE'),
+ 'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'),
+
+ 'DRIVER' => $driver_name,
+ 'SELECTED' => $current_driver == $selected_driver,
+ 'OUTPUT' => $template->assign_display('avatar'),
+ ));
+ }
+ }
+ }
+
+ $avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);
+
+ if (isset($phpbb_avatar_manager) && !$update)
{
- avatar_gallery($category, $avatar_select, 4);
+ // Merge any avatar errors into the primary error array
+ $error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));
}
$back_link = request_var('back_link', '');
@@ -608,12 +616,10 @@ class acp_groups
'S_ADD_GROUP' => ($action == 'add') ? true : false,
'S_GROUP_PERM' => ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
'S_INCLUDE_SWATCH' => true,
- 'S_CAN_UPLOAD' => $can_upload,
'S_ERROR' => (sizeof($error)) ? true : false,
'S_SPECIAL_GROUP' => ($group_type == GROUP_SPECIAL) ? true : false,
- 'S_DISPLAY_GALLERY' => ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
- 'S_IN_GALLERY' => ($config['allow_avatar_local'] && $display_gallery) ? true : false,
'S_USER_FOUNDER' => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
+ 'S_AVATARS_ENABLED' => ($config['allow_avatar'] && $avatars_enabled),
'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
'GROUP_NAME' => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
@@ -622,6 +628,7 @@ class acp_groups
'GROUP_RECEIVE_PM' => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
'GROUP_FOUNDER_MANAGE' => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
'GROUP_LEGEND' => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
+ 'GROUP_TEAMPAGE' => (isset($group_row['group_teampage']) && $group_row['group_teampage']) ? ' checked="checked"' : '',
'GROUP_MESSAGE_LIMIT' => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
'GROUP_MAX_RECIPIENTS' => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
'GROUP_COLOUR' => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
@@ -633,8 +640,7 @@ class acp_groups
'S_RANK_OPTIONS' => $rank_options,
'S_GROUP_OPTIONS' => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
- 'AVATAR' => $avatar_img,
- 'AVATAR_IMAGE' => $avatar_img,
+ 'AVATAR' => empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar,
'AVATAR_MAX_FILESIZE' => $config['avatar_filesize'],
'AVATAR_WIDTH' => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
'AVATAR_HEIGHT' => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
@@ -651,9 +657,8 @@ class acp_groups
'GROUP_HIDDEN' => $type_hidden,
'U_BACK' => $u_back,
- 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
'U_ACTION' => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
- 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
+ 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(),
));
return;
@@ -709,13 +714,15 @@ class acp_groups
$s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
}
+ $base_url = $this->u_action . "&amp;action=$action&amp;g=$group_id";
+ phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start);
+
$template->assign_vars(array(
'S_LIST' => true,
'S_GROUP_SPECIAL' => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
'S_ACTION_OPTIONS' => $s_action_options,
- 'S_ON_PAGE' => on_page($total_members, $config['topics_per_page'], $start),
- 'PAGINATION' => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start, true),
+ 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $total_members, $config['topics_per_page'], $start),
'GROUP_NAME' => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
'U_ACTION' => $this->u_action . "&amp;g=$group_id",
@@ -831,6 +838,222 @@ class acp_groups
}
}
}
-}
-?>
+ public function manage_position()
+ {
+ global $config, $db, $template, $user, $request, $phpbb_container;
+
+ $this->tpl_name = 'acp_groups_position';
+ $this->page_title = 'ACP_GROUPS_POSITION';
+
+ $field = $request->variable('field', '');
+ $action = $request->variable('action', '');
+ $group_id = $request->variable('g', 0);
+ $teampage_id = $request->variable('t', 0);
+ $category_id = $request->variable('c', 0);
+
+ if ($field && !in_array($field, array('legend', 'teampage')))
+ {
+ // Invalid mode
+ trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
+ else if ($field && in_array($field, array('legend', 'teampage')))
+ {
+
+ $group_position = $phpbb_container->get('groupposition.' . $field);
+ }
+
+ if ($field == 'teampage')
+ {
+ try
+ {
+ switch ($action)
+ {
+ case 'add':
+ $group_position->add_group_teampage($group_id, $category_id);
+ break;
+
+ case 'add_category':
+ $group_position->add_category_teampage($request->variable('category_name', '', true));
+ break;
+
+ case 'delete':
+ $group_position->delete_teampage($teampage_id);
+ break;
+
+ case 'move_up':
+ $group_position->move_up_teampage($teampage_id);
+ break;
+
+ case 'move_down':
+ $group_position->move_down_teampage($teampage_id);
+ break;
+ }
+ }
+ catch (\phpbb\groupposition\exception $exception)
+ {
+ trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
+ }
+ }
+ else if ($field == 'legend')
+ {
+ try
+ {
+ switch ($action)
+ {
+ case 'add':
+ $group_position->add_group($group_id);
+ break;
+
+ case 'delete':
+ $group_position->delete_group($group_id);
+ break;
+
+ case 'move_up':
+ $group_position->move_up($group_id);
+ break;
+
+ case 'move_down':
+ $group_position->move_down($group_id);
+ break;
+ }
+ }
+ catch (\phpbb\groupposition\exception $exception)
+ {
+ trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
+ }
+ }
+ else
+ {
+ switch ($action)
+ {
+ case 'set_config_teampage':
+ $config->set('teampage_forums', $request->variable('teampage_forums', 0));
+ $config->set('teampage_memberships', $request->variable('teampage_memberships', 0));
+ trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
+ break;
+
+ case 'set_config_legend':
+ $config->set('legend_sort_groupname', $request->variable('legend_sort_groupname', 0));
+ trigger_error($user->lang['CONFIG_UPDATED'] . adm_back_link($this->u_action));
+ break;
+ }
+ }
+
+ if (($action == 'move_up' || $action == 'move_down') && $request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array('success' => true));
+ }
+
+ $sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend
+ FROM ' . GROUPS_TABLE . '
+ ORDER BY group_legend ASC, group_type DESC, group_name ASC';
+ $result = $db->sql_query($sql);
+
+ $s_group_select_legend = '';
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
+ if ($row['group_legend'])
+ {
+ $template->assign_block_vars('legend', array(
+ 'GROUP_NAME' => $group_name,
+ 'GROUP_COLOUR' => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
+ 'GROUP_TYPE' => $user->lang[\phpbb\groupposition\legend::group_type_language($row['group_type'])],
+
+ 'U_MOVE_DOWN' => "{$this->u_action}&amp;field=legend&amp;action=move_down&amp;g=" . $row['group_id'],
+ 'U_MOVE_UP' => "{$this->u_action}&amp;field=legend&amp;action=move_up&amp;g=" . $row['group_id'],
+ 'U_DELETE' => "{$this->u_action}&amp;field=legend&amp;action=delete&amp;g=" . $row['group_id'],
+ ));
+ }
+ else
+ {
+ $template->assign_block_vars('add_legend', array(
+ 'GROUP_ID' => (int) $row['group_id'],
+ 'GROUP_NAME' => $group_name,
+ 'GROUP_SPECIAL' => ($row['group_type'] == GROUP_SPECIAL),
+ ));
+ }
+ }
+ $db->sql_freeresult($result);
+
+ $category_url_param = (($category_id) ? '&amp;c=' . $category_id : '');
+
+ $sql = 'SELECT t.*, g.group_name, g.group_colour, g.group_type
+ FROM ' . TEAMPAGE_TABLE . ' t
+ LEFT JOIN ' . GROUPS_TABLE . ' g
+ ON (t.group_id = g.group_id)
+ WHERE t.teampage_parent = ' . $category_id . '
+ OR t.teampage_id = ' . $category_id . '
+ ORDER BY t.teampage_position ASC';
+ $result = $db->sql_query($sql);
+
+ $category_data = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if ($row['teampage_id'] == $category_id)
+ {
+ $template->assign_vars(array(
+ 'CURRENT_CATEGORY_NAME' => $row['teampage_name'],
+ ));
+ continue;
+ }
+
+ if ($row['group_id'])
+ {
+ $group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
+ $group_type = $user->lang[\phpbb\groupposition\teampage::group_type_language($row['group_type'])];
+ }
+ else
+ {
+ $group_name = $row['teampage_name'];
+ $group_type = '';
+ }
+
+ $template->assign_block_vars('teampage', array(
+ 'GROUP_NAME' => $group_name,
+ 'GROUP_COLOUR' => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
+ 'GROUP_TYPE' => $group_type,
+
+ 'U_CATEGORY' => (!$row['group_id']) ? "{$this->u_action}&amp;c=" . $row['teampage_id'] : '',
+ 'U_MOVE_DOWN' => "{$this->u_action}&amp;field=teampage&amp;action=move_down{$category_url_param}&amp;t=" . $row['teampage_id'],
+ 'U_MOVE_UP' => "{$this->u_action}&amp;field=teampage&amp;action=move_up{$category_url_param}&amp;t=" . $row['teampage_id'],
+ 'U_DELETE' => "{$this->u_action}&amp;field=teampage&amp;action=delete{$category_url_param}&amp;t=" . $row['teampage_id'],
+ ));
+ }
+ $db->sql_freeresult($result);
+
+ $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
+ FROM ' . GROUPS_TABLE . ' g
+ LEFT JOIN ' . TEAMPAGE_TABLE . ' t
+ ON (t.group_id = g.group_id)
+ WHERE t.teampage_id IS NULL
+ ORDER BY g.group_type DESC, g.group_name ASC';
+ $result = $db->sql_query($sql);
+
+ $s_group_select_teampage = '';
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
+ $template->assign_block_vars('add_teampage', array(
+ 'GROUP_ID' => (int) $row['group_id'],
+ 'GROUP_NAME' => $group_name,
+ 'GROUP_SPECIAL' => ($row['group_type'] == GROUP_SPECIAL),
+ ));
+ }
+ $db->sql_freeresult($result);
+
+ $template->assign_vars(array(
+ 'U_ACTION' => $this->u_action,
+ 'U_ACTION_LEGEND' => $this->u_action . '&amp;field=legend',
+ 'U_ACTION_TEAMPAGE' => $this->u_action . '&amp;field=teampage' . $category_url_param,
+ 'U_ACTION_TEAMPAGE_CAT' => $this->u_action . '&amp;field=teampage_cat',
+
+ 'S_TEAMPAGE_CATEGORY' => $category_id,
+ 'DISPLAY_FORUMS' => ($config['teampage_forums']) ? true : false,
+ 'DISPLAY_MEMBERSHIPS' => $config['teampage_memberships'],
+ 'LEGEND_SORT_GROUPNAME' => ($config['legend_sort_groupname']) ? true : false,
+ ));
+ }
+}
diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php
index 24f6cbbcbf..658be4cc6b 100644
--- a/phpBB/includes/acp/acp_icons.php
+++ b/phpBB/includes/acp/acp_icons.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -28,6 +27,7 @@ class acp_icons
{
global $db, $user, $auth, $template, $cache;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
+ global $request;
$user->add_lang('acp/posting');
@@ -307,7 +307,6 @@ class acp_icons
'IMG_SRC' => $phpbb_root_path . $img_path . '/' . $default_row['smiley_url'],
'IMG_PATH' => $img_path,
- 'PHPBB_ROOT_PATH' => $phpbb_root_path,
'CODE' => $default_row['code'],
'EMOTION' => $default_row['emotion'],
@@ -338,7 +337,7 @@ class acp_icons
$image_display_on_posting = (isset($_POST['display_on_posting'])) ? request_var('display_on_posting', array('' => 0)) : array();
// Ok, add the relevant bits if we are adding new codes to existing emoticons...
- if (!empty($_POST['add_additional_code']))
+ if ($request->variable('add_additional_code', false, false, \phpbb\request\request_interface::POST))
{
$add_image = request_var('add_image', '');
$add_code = utf8_normalize_nfc(request_var('add_code', '', true));
@@ -354,7 +353,7 @@ class acp_icons
$image_width[$add_image] = request_var('add_width', 0);
$image_height[$add_image] = request_var('add_height', 0);
- if (!empty($_POST['add_display_on_posting']))
+ if ($request->variable('add_display_on_posting', false, false, \phpbb\request\request_interface::POST))
{
$image_display_on_posting[$add_image] = 1;
}
@@ -378,7 +377,7 @@ class acp_icons
if ($smiley_count + $addable_smileys_count > SMILEY_LIMIT)
{
- trigger_error(sprintf($user->lang['TOO_MANY_SMILIES'], SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING);
+ trigger_error($user->lang('TOO_MANY_SMILIES', SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING);
}
}
@@ -480,27 +479,13 @@ class acp_icons
$icons_updated++;
}
- }
+ }
}
$cache->destroy('_icons');
$cache->destroy('sql', $table);
- $level = E_USER_NOTICE;
- switch ($icons_updated)
- {
- case 0:
- $suc_lang = "{$lang}_NONE";
- $level = E_USER_WARNING;
- break;
-
- case 1:
- $suc_lang = "{$lang}_ONE";
- break;
-
- default:
- $suc_lang = $lang;
- }
+ $level = ($icons_updated) ? E_USER_NOTICE : E_USER_WARNING;
$errormsgs = '';
foreach ($errors as $img => $error)
{
@@ -508,11 +493,11 @@ class acp_icons
}
if ($action == 'modify')
{
- trigger_error($user->lang[$suc_lang . '_EDITED'] . $errormsgs . adm_back_link($this->u_action), $level);
+ trigger_error($user->lang($lang . '_EDITED', $icons_updated) . $errormsgs . adm_back_link($this->u_action), $level);
}
else
{
- trigger_error($user->lang[$suc_lang . '_ADDED'] . $errormsgs . adm_back_link($this->u_action), $level);
+ trigger_error($user->lang($lang . '_ADDED', $icons_updated) . $errormsgs . adm_back_link($this->u_action), $level);
}
break;
@@ -598,7 +583,7 @@ class acp_icons
$smiley_count = $this->item_count($table);
if ($smiley_count + sizeof($pak_ary) > SMILEY_LIMIT)
{
- trigger_error(sprintf($user->lang['TOO_MANY_SMILIES'], SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING);
+ trigger_error($user->lang('TOO_MANY_SMILIES', SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING);
}
}
@@ -796,6 +781,18 @@ class acp_icons
$cache->destroy('_icons');
$cache->destroy('sql', $table);
+
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array(
+ 'MESSAGE_TITLE' => $user->lang['INFORMATION'],
+ 'MESSAGE_TEXT' => $notice,
+ 'REFRESH_DATA' => array(
+ 'time' => 3
+ )
+ ));
+ }
}
else
{
@@ -930,9 +927,7 @@ class acp_icons
}
$db->sql_freeresult($result);
- $template->assign_var('PAGINATION',
- generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start, true)
- );
+ phpbb_generate_template_pagination($template, $this->u_action, 'pagination', 'start', $item_count, $config['smilies_per_page'], $pagination_start);
}
/**
@@ -954,5 +949,3 @@ class acp_icons
return $item_count;
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_inactive.php b/phpBB/includes/acp/acp_inactive.php
index f3f332d707..de4679b58d 100644
--- a/phpBB/includes/acp/acp_inactive.php
+++ b/phpBB/includes/acp/acp_inactive.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2006 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -116,7 +115,7 @@ class acp_inactive
{
$messenger->template('admin_welcome_activated', $row['user_lang']);
- $messenger->to($row['user_email'], $row['username']);
+ $messenger->set_addresses($row);
$messenger->anti_abuse_headers($config, $user);
@@ -137,6 +136,8 @@ class acp_inactive
add_log('admin', 'LOG_USER_ACTIVE', $row['username']);
add_log('user', $row['user_id'], 'LOG_USER_ACTIVE_USER');
}
+
+ trigger_error(sprintf($user->lang['LOG_INACTIVE_ACTIVATE'], implode($user->lang['COMMA_SEPARATOR'], $user_affected) . ' ' . adm_back_link($this->u_action)));
}
// For activate we really need to redirect, else a refresh can result in users being deactivated again
@@ -154,12 +155,11 @@ class acp_inactive
trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- foreach ($mark as $user_id)
- {
- user_delete('retain', $user_id, $user_affected[$user_id]);
- }
+ user_delete('retain', $mark, true);
add_log('admin', 'LOG_INACTIVE_' . strtoupper($action), implode(', ', $user_affected));
+
+ trigger_error(sprintf($user->lang['LOG_INACTIVE_DELETE'], implode($user->lang['COMMA_SEPARATOR'], $user_affected) . ' ' . adm_back_link($this->u_action)));
}
else
{
@@ -203,8 +203,7 @@ class acp_inactive
{
$messenger->template('user_remind_inactive', $row['user_lang']);
- $messenger->to($row['user_email'], $row['username']);
- $messenger->im($row['user_jabber'], $row['username']);
+ $messenger->set_addresses($row);
$messenger->anti_abuse_headers($config, $user);
@@ -231,7 +230,8 @@ class acp_inactive
$db->sql_query($sql);
add_log('admin', 'LOG_INACTIVE_REMIND', implode(', ', $usernames));
- unset($usernames);
+
+ trigger_error(sprintf($user->lang['LOG_INACTIVE_REMIND'], implode($user->lang['COMMA_SEPARATOR'], $usernames) . ' ' . adm_back_link($this->u_action)));
}
$db->sql_freeresult($result);
@@ -284,6 +284,9 @@ class acp_inactive
$option_ary += array('remind' => 'REMIND');
}
+ $base_url = $this->u_action . "&amp;$u_sort_param&amp;users_per_page=$per_page";
+ phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $inactive_count, $per_page, $start);
+
$template->assign_vars(array(
'S_INACTIVE_USERS' => true,
'S_INACTIVE_OPTIONS' => build_select($option_ary),
@@ -291,8 +294,7 @@ class acp_inactive
'S_LIMIT_DAYS' => $s_limit_days,
'S_SORT_KEY' => $s_sort_key,
'S_SORT_DIR' => $s_sort_dir,
- 'S_ON_PAGE' => on_page($inactive_count, $per_page, $start),
- 'PAGINATION' => generate_pagination($this->u_action . "&amp;$u_sort_param&amp;users_per_page=$per_page", $inactive_count, $per_page, $start, true),
+ 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $inactive_count, $per_page, $start),
'USERS_PER_PAGE' => $per_page,
'U_ACTION' => $this->u_action . "&amp;$u_sort_param&amp;users_per_page=$per_page&amp;start=$start",
@@ -302,5 +304,3 @@ class acp_inactive
$this->page_title = 'ACP_INACTIVE_USERS';
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_jabber.php b/phpBB/includes/acp/acp_jabber.php
index 9925527b34..96371075d6 100644
--- a/phpBB/includes/acp/acp_jabber.php
+++ b/phpBB/includes/acp/acp_jabber.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
* @todo Check/enter/update transport info
*/
@@ -127,5 +126,3 @@ class acp_jabber
));
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_language.php b/phpBB/includes/acp/acp_language.php
index d560cdd0c5..013aab670f 100644
--- a/phpBB/includes/acp/acp_language.php
+++ b/phpBB/includes/acp/acp_language.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -34,6 +33,7 @@ class acp_language
global $config, $db, $user, $auth, $template, $cache;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
global $safe_mode, $file_uploads;
+ global $request;
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@@ -58,7 +58,7 @@ class acp_language
if (isset($_POST['missing_file']))
{
$missing_file = request_var('missing_file', array('' => 0));
- list($_REQUEST['language_file'], ) = array_keys($missing_file);
+ $request->overwrite('language_file', array_shift(array_keys($missing_file)));
}
$selected_lang_file = request_var('language_file', '|common.' . $phpEx);
@@ -68,6 +68,23 @@ class acp_language
$this->language_directory = basename($this->language_directory);
$this->language_file = basename($this->language_file);
+ // detect language file type
+ if ($this->language_directory == 'email')
+ {
+ $language_file_type = 'email';
+ $request_default = '';
+ }
+ else if (strpos($this->language_file, 'help_') === 0)
+ {
+ $language_file_type = 'help';
+ $request_default = array(0 => array(0 => ''));
+ }
+ else
+ {
+ $language_file_type = 'normal';
+ $request_default = array('' => '');
+ }
+
$user->add_lang('acp/language');
$this->tpl_name = 'acp_language';
$this->page_title = 'ACP_LANGUAGE_PACKS';
@@ -83,11 +100,25 @@ class acp_language
switch ($method)
{
case 'ftp':
- $transfer = new ftp(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));
+ $transfer = new ftp(
+ request_var('host', ''),
+ request_var('username', ''),
+ htmlspecialchars_decode($request->untrimmed_variable('password', '')),
+ request_var('root_path', ''),
+ request_var('port', ''),
+ request_var('timeout', '')
+ );
break;
case 'ftp_fsock':
- $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));
+ $transfer = new ftp_fsock(
+ request_var('host', ''),
+ request_var('username', ''),
+ htmlspecialchars_decode($request->untrimmed_variable('password', '')),
+ request_var('root_path', ''),
+ request_var('port', ''),
+ request_var('timeout', '')
+ );
break;
default:
@@ -119,7 +150,7 @@ class acp_language
'DATA' => $data,
'NAME' => $user->lang[strtoupper($method . '_' . $data)],
'EXPLAIN' => $user->lang[strtoupper($method . '_' . $data) . '_EXPLAIN'],
- 'DEFAULT' => (!empty($_REQUEST[$data])) ? request_var($data, '') : $default
+ 'DEFAULT' => $request->variable($data, (string) $default),
));
}
@@ -130,7 +161,7 @@ class acp_language
'method' => $method)
);
- $hidden_data .= build_hidden_fields(array('entry' => $_POST['entry']), true, STRIP);
+ $hidden_data .= build_hidden_fields(array('entry' => $request->variable('entry', $request_default, true, \phpbb\request\request_interface::POST)));
$template->assign_vars(array(
'S_UPLOAD' => true,
@@ -187,12 +218,9 @@ class acp_language
trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
}
- if (!$lang_id || empty($_POST['entry']))
- {
- trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
+ $entry_value = $request->variable('entry', $request_default, true, \phpbb\request\request_interface::POST);
- if ($this->language_directory != 'email' && !is_array($_POST['entry']))
+ if (!$lang_id || !$entry_value)
{
trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
@@ -291,10 +319,10 @@ class acp_language
trigger_error(sprintf($user->lang['UNABLE_TO_WRITE_FILE'], $filename) . adm_back_link($this->u_action . '&amp;id=' . $lang_id . '&amp;action=details&amp;language_file=' . urlencode($selected_lang_file)), E_USER_WARNING);
}
- if ($this->language_directory == 'email')
+ if ($language_file_type == 'email')
{
// Email Template
- $entry = $this->prepare_lang_entry($_POST['entry'], false);
+ $entry = $this->prepare_lang_entry(htmlspecialchars_decode($entry_value), false);
fwrite($fp, $entry);
}
else
@@ -302,13 +330,13 @@ class acp_language
$name = (($this->language_directory) ? $this->language_directory . '_' : '') . $this->language_file;
$header = str_replace(array('{FILENAME}', '{LANG_NAME}', '{CHANGED}', '{AUTHOR}'), array($name, $row['lang_english_name'], date('Y-m-d', time()), $row['lang_author']), $this->language_file_header);
- if (strpos($this->language_file, 'help_') === 0)
+ if ($language_file_type == 'help')
{
// Help File
$header .= '$help = array(' . "\n";
fwrite($fp, $header);
- foreach ($_POST['entry'] as $key => $value)
+ foreach ($entry_value as $key => $value)
{
if (!is_array($value))
{
@@ -319,7 +347,7 @@ class acp_language
foreach ($value as $_key => $_value)
{
- $entry .= "\t\t" . (int) $_key . "\t=> '" . $this->prepare_lang_entry($_value) . "',\n";
+ $entry .= "\t\t" . (int) $_key . "\t=> '" . $this->prepare_lang_entry(htmlspecialchars_decode($_value)) . "',\n";
}
$entry .= "\t),\n";
@@ -329,15 +357,15 @@ class acp_language
$footer = ");\n\n?>";
fwrite($fp, $footer);
}
- else
+ else if ($language_file_type == 'normal')
{
// Language File
$header .= $this->lang_header;
fwrite($fp, $header);
- foreach ($_POST['entry'] as $key => $value)
+ foreach ($entry_value as $key => $value)
{
- $entry = $this->format_lang_array($key, $value);
+ $entry = $this->format_lang_array(htmlspecialchars_decode($key), htmlspecialchars_decode($value));
fwrite($fp, $entry);
}
@@ -390,7 +418,14 @@ class acp_language
trigger_error($user->lang['INVALID_UPLOAD_METHOD'], E_USER_ERROR);
}
- $transfer = new $method(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));
+ $transfer = new $method(
+ request_var('host', ''),
+ request_var('username', ''),
+ htmlspecialchars_decode($request->untrimmed_variable('password', '')),
+ request_var('root_path', ''),
+ request_var('port', ''),
+ request_var('timeout', '')
+ );
if (($result = $transfer->open_session()) !== true)
{
@@ -782,11 +817,6 @@ class acp_language
$sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . ' WHERE lang_id = ' . $lang_id;
$db->sql_query($sql);
- $sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . " WHERE image_lang = '" . $db->sql_escape($row['lang_iso']) . "'";
- $result = $db->sql_query($sql);
-
- $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
-
add_log('admin', 'LOG_LANGUAGE_PACK_DELETED', $row['lang_english_name']);
trigger_error(sprintf($user->lang['LANGUAGE_PACK_DELETED'], $row['lang_english_name']) . adm_back_link($this->u_action));
@@ -851,66 +881,6 @@ class acp_language
$db->sql_query('INSERT INTO ' . LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
$lang_id = $db->sql_nextid();
- $valid_localized = array(
- 'icon_back_top', 'icon_contact_aim', 'icon_contact_email', 'icon_contact_icq', 'icon_contact_jabber', 'icon_contact_msnm', 'icon_contact_pm', 'icon_contact_yahoo', 'icon_contact_www', 'icon_post_delete', 'icon_post_edit', 'icon_post_info', 'icon_post_quote', 'icon_post_report', 'icon_user_online', 'icon_user_offline', 'icon_user_profile', 'icon_user_search', 'icon_user_warn', 'button_pm_forward', 'button_pm_new', 'button_pm_reply', 'button_topic_locked', 'button_topic_new', 'button_topic_reply',
- );
-
- $sql_ary = array();
-
- $sql = 'SELECT *
- FROM ' . STYLES_IMAGESET_TABLE;
- $result = $db->sql_query($sql);
- while ($imageset_row = $db->sql_fetchrow($result))
- {
- if (@file_exists("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$lang_pack['iso']}/imageset.cfg"))
- {
- $cfg_data_imageset_data = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$lang_pack['iso']}/imageset.cfg");
- foreach ($cfg_data_imageset_data as $image_name => $value)
- {
- if (strpos($value, '*') !== false)
- {
- if (substr($value, -1, 1) === '*')
- {
- list($image_filename, $image_height) = explode('*', $value);
- $image_width = 0;
- }
- else
- {
- list($image_filename, $image_height, $image_width) = explode('*', $value);
- }
- }
- else
- {
- $image_filename = $value;
- $image_height = $image_width = 0;
- }
-
- if (strpos($image_name, 'img_') === 0 && $image_filename)
- {
- $image_name = substr($image_name, 4);
- if (in_array($image_name, $valid_localized))
- {
- $sql_ary[] = array(
- 'image_name' => (string) $image_name,
- 'image_filename' => (string) $image_filename,
- 'image_height' => (int) $image_height,
- 'image_width' => (int) $image_width,
- 'imageset_id' => (int) $imageset_row['imageset_id'],
- 'image_lang' => (string) $lang_pack['iso'],
- );
- }
- }
- }
- }
- }
- $db->sql_freeresult($result);
-
- if (sizeof($sql_ary))
- {
- $db->sql_multi_insert(STYLES_IMAGESET_DATA_TABLE, $sql_ary);
- $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
- }
-
// Now let's copy the default language entries for custom profile fields for this new language - makes admin's life easier.
$sql = 'SELECT lang_id
FROM ' . LANG_TABLE . "
@@ -1186,10 +1156,9 @@ class acp_language
* {FILENAME} [{LANG_NAME}]
*
* @package language
-* @version $' . 'Id: ' . '$
* @copyright (c) ' . date('Y') . ' phpBB Group
* @author {CHANGED} - {AUTHOR}
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -1461,5 +1430,3 @@ $lang = array_merge($lang, array(
return $entry;
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_logs.php b/phpBB/includes/acp/acp_logs.php
index 2fc86e325f..229bf135ff 100644
--- a/phpBB/includes/acp/acp_logs.php
+++ b/phpBB/includes/acp/acp_logs.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -27,6 +26,7 @@ class acp_logs
{
global $db, $user, $auth, $template, $cache;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
+ global $request;
$user->add_lang('mcp');
@@ -35,8 +35,8 @@ class acp_logs
$forum_id = request_var('f', 0);
$topic_id = request_var('t', 0);
$start = request_var('start', 0);
- $deletemark = (!empty($_POST['delmarked'])) ? true : false;
- $deleteall = (!empty($_POST['delall'])) ? true : false;
+ $deletemark = $request->variable('delmarked', false, false, \phpbb\request\request_interface::POST);
+ $deleteall = $request->variable('delall', false, false, \phpbb\request\request_interface::POST);
$marked = request_var('mark', array(0));
// Sort keys
@@ -129,13 +129,15 @@ class acp_logs
$log_count = 0;
$start = view_log($mode, $log_data, $log_count, $config['topics_per_page'], $start, $forum_id, 0, 0, $sql_where, $sql_sort, $keywords);
+ $base_url = $this->u_action . "&amp;$u_sort_param$keywords_param";
+ phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start);
+
$template->assign_vars(array(
'L_TITLE' => $l_title,
'L_EXPLAIN' => $l_title_explain,
'U_ACTION' => $this->u_action . "&amp;$u_sort_param$keywords_param&amp;start=$start",
- 'S_ON_PAGE' => on_page($log_count, $config['topics_per_page'], $start),
- 'PAGINATION' => generate_pagination($this->u_action . "&amp;$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start, true),
+ 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $log_count, $config['topics_per_page'], $start),
'S_LIMIT_DAYS' => $s_limit_days,
'S_SORT_KEY' => $s_sort_key,
@@ -172,5 +174,3 @@ class acp_logs
}
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_main.php b/phpBB/includes/acp/acp_main.php
index d80b0d1532..eecd8c72dc 100644
--- a/phpBB/includes/acp/acp_main.php
+++ b/phpBB/includes/acp/acp_main.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -25,7 +24,7 @@ class acp_main
function main($id, $mode)
{
- global $config, $db, $user, $auth, $template;
+ global $config, $db, $cache, $user, $auth, $template, $request;
global $phpbb_root_path, $phpbb_admin_path, $phpEx;
// Show restore permissions notice
@@ -64,9 +63,7 @@ class acp_main
if ($action === 'admlogout')
{
$user->unset_admin();
- $redirect_url = append_sid("{$phpbb_root_path}index.$phpEx");
- meta_refresh(3, $redirect_url);
- trigger_error($user->lang['ADM_LOGGED_OUT'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . $redirect_url . '">', '</a>'));
+ redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}
if (!confirm_box(true))
@@ -130,6 +127,11 @@ class acp_main
set_config('record_online_users', 1, true);
set_config('record_online_date', time(), true);
add_log('admin', 'LOG_RESET_ONLINE');
+
+ if ($request->is_ajax())
+ {
+ trigger_error('RESET_ONLINE_SUCCESS');
+ }
break;
case 'stats':
@@ -140,14 +142,14 @@ class acp_main
$sql = 'SELECT COUNT(post_id) AS stat
FROM ' . POSTS_TABLE . '
- WHERE post_approved = 1';
+ WHERE post_visibility = ' . ITEM_APPROVED;
$result = $db->sql_query($sql);
set_config('num_posts', (int) $db->sql_fetchfield('stat'), true);
$db->sql_freeresult($result);
$sql = 'SELECT COUNT(topic_id) AS stat
FROM ' . TOPICS_TABLE . '
- WHERE topic_approved = 1';
+ WHERE topic_visibility = ' . ITEM_APPROVED;
$result = $db->sql_query($sql);
set_config('num_topics', (int) $db->sql_fetchfield('stat'), true);
$db->sql_freeresult($result);
@@ -180,6 +182,11 @@ class acp_main
update_last_username();
add_log('admin', 'LOG_RESYNC_STATS');
+
+ if ($request->is_ajax())
+ {
+ trigger_error('RESYNC_STATS_SUCCESS');
+ }
break;
case 'user':
@@ -223,7 +230,7 @@ class acp_main
$sql = 'SELECT COUNT(post_id) AS num_posts, poster_id
FROM ' . POSTS_TABLE . '
WHERE post_id BETWEEN ' . ($start + 1) . ' AND ' . ($start + $step) . '
- AND post_postcount = 1 AND post_approved = 1
+ AND post_postcount = 1 AND post_visibility = ' . ITEM_APPROVED . '
GROUP BY poster_id';
$result = $db->sql_query($sql);
@@ -243,6 +250,10 @@ class acp_main
add_log('admin', 'LOG_RESYNC_POSTCOUNTS');
+ if ($request->is_ajax())
+ {
+ trigger_error('RESYNC_POSTCOUNTS_SUCCESS');
+ }
break;
case 'date':
@@ -253,6 +264,11 @@ class acp_main
set_config('board_startdate', time() - 1);
add_log('admin', 'LOG_RESET_DATE');
+
+ if ($request->is_ajax())
+ {
+ trigger_error('RESET_DATE_SUCCESS');
+ }
break;
case 'db_track':
@@ -328,22 +344,27 @@ class acp_main
}
add_log('admin', 'LOG_RESYNC_POST_MARKING');
- break;
- case 'purge_cache':
- if ((int) $user->data['user_type'] !== USER_FOUNDER)
+ if ($request->is_ajax())
{
- trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
+ trigger_error('RESYNC_POST_MARKING_SUCCESS');
}
+ break;
+ case 'purge_cache':
global $cache;
$cache->purge();
// Clear permissions
$auth->acl_clear_prefetch();
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
add_log('admin', 'LOG_PURGE_CACHE');
+
+ if ($request->is_ajax())
+ {
+ trigger_error('PURGE_CACHE_SUCCESS');
+ }
break;
case 'purge_sessions':
@@ -390,6 +411,11 @@ class acp_main
$db->sql_query($sql);
add_log('admin', 'LOG_PURGE_SESSIONS');
+
+ if ($request->is_ajax())
+ {
+ trigger_error('PURGE_SESSIONS_SUCCESS');
+ }
break;
}
}
@@ -621,5 +647,3 @@ class acp_main
$this->page_title = 'ACP_MAIN';
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_modules.php b/phpBB/includes/acp/acp_modules.php
index 75bc5766a9..100e33044b 100644
--- a/phpBB/includes/acp/acp_modules.php
+++ b/phpBB/includes/acp/acp_modules.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -37,7 +36,7 @@ class acp_modules
function main($id, $mode)
{
- global $db, $user, $auth, $template, $module;
+ global $db, $user, $auth, $template, $module, $request;
global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx;
// Set a global define for modules we might include (the author is able to prevent execution of code by checking this constant)
@@ -111,7 +110,7 @@ class acp_modules
}
break;
-
+
case 'enable':
case 'disable':
if (!$module_id)
@@ -170,7 +169,7 @@ class acp_modules
add_log('admin', 'LOG_MODULE_' . strtoupper($action), $this->lang_name($row['module_langname']), $move_module_name);
$this->remove_cache_file();
}
-
+
break;
case 'quickadd':
@@ -207,7 +206,7 @@ class acp_modules
if (!sizeof($errors))
{
$this->remove_cache_file();
-
+
trigger_error($user->lang['MODULE_ADDED'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
}
}
@@ -231,7 +230,7 @@ class acp_modules
{
trigger_error($user->lang['NO_MODULE_ID'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
}
-
+
$module_row = $this->get_module_row($module_id);
// no break
@@ -250,7 +249,7 @@ class acp_modules
'module_auth' => '',
);
}
-
+
$module_data = array();
$module_data['module_basename'] = request_var('module_basename', (string) $module_row['module_basename']);
@@ -295,7 +294,7 @@ class acp_modules
if (!sizeof($errors))
{
$this->remove_cache_file();
-
+
trigger_error((($action == 'add') ? $user->lang['MODULE_ADDED'] : $user->lang['MODULE_EDITED']) . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id));
}
}
@@ -316,7 +315,7 @@ class acp_modules
}
// Name options
- $s_name_options .= '<option value="' . $option . '"' . (($option == $module_data['module_basename']) ? ' selected="selected"' : '') . '>' . $this->lang_name($values['title']) . ' [' . $this->module_class . '_' . $option . ']</option>';
+ $s_name_options .= '<option value="' . $option . '"' . (($option == $module_data['module_basename']) ? ' selected="selected"' : '') . '>' . $this->lang_name($values['title']) . ' [' . $option . ']</option>';
$template->assign_block_vars('m_names', array('NAME' => $option, 'A_NAME' => addslashes($option)));
@@ -327,7 +326,7 @@ class acp_modules
{
$s_mode_options .= '<option value="' . $m_mode . '"' . (($m_mode == $module_data['module_mode']) ? ' selected="selected"' : '') . '>' . $this->lang_name($m_values['title']) . '</option>';
}
-
+
$template->assign_block_vars('m_names.modes', array(
'OPTION' => $m_mode,
'VALUE' => $this->lang_name($m_values['title']),
@@ -336,7 +335,7 @@ class acp_modules
);
}
}
-
+
$s_cat_option = '<option value="0"' . (($module_data['parent_id'] == 0) ? ' selected="selected"' : '') . '>' . $user->lang['NO_PARENT'] . '</option>';
$template->assign_vars(array_merge(array(
@@ -349,7 +348,7 @@ class acp_modules
'U_EDIT_ACTION' => $this->u_action . '&amp;parent_id=' . $this->parent_id,
'L_TITLE' => $user->lang[strtoupper($action) . '_MODULE'],
-
+
'MODULENAME' => $this->lang_name($module_data['module_langname']),
'ACTION' => $action,
'MODULE_ID' => $module_id,
@@ -374,6 +373,16 @@ class acp_modules
// Default management page
if (sizeof($errors))
{
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array(
+ 'MESSAGE_TITLE' => $user->lang('ERROR'),
+ 'MESSAGE_TEXT' => implode('<br />', $errors),
+ 'SUCCESS' => false,
+ ));
+ }
+
$template->assign_vars(array(
'S_ERROR' => true,
'ERROR_MSG' => implode('<br />', $errors))
@@ -480,7 +489,7 @@ class acp_modules
foreach ($module_infos as $option => $values)
{
// Name options
- $s_install_options .= '<optgroup label="' . $this->lang_name($values['title']) . ' [' . $this->module_class . '_' . $option . ']">';
+ $s_install_options .= '<optgroup label="' . $this->lang_name($values['title']) . ' [' . $option . ']">';
// Build module modes
foreach ($values['modes'] as $m_mode => $m_values)
@@ -516,7 +525,7 @@ class acp_modules
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
-
+
if (!$row)
{
trigger_error($user->lang['NO_MODULE'] . adm_back_link($this->u_action . '&amp;parent_id=' . $this->parent_id), E_USER_WARNING);
@@ -524,72 +533,79 @@ class acp_modules
return $row;
}
-
+
/**
* Get available module information from module files
+ *
+ * @param string $module
+ * @param bool|string $module_class
+ * @param bool $use_all_available Use all available instead of just all
+ * enabled extensions
+ * @return array
*/
- function get_module_infos($module = '', $module_class = false)
+ function get_module_infos($module = '', $module_class = false, $use_all_available = false)
{
- global $phpbb_root_path, $phpEx;
-
+ global $phpbb_extension_manager, $phpbb_root_path, $phpEx;
+
$module_class = ($module_class === false) ? $this->module_class : $module_class;
$directory = $phpbb_root_path . 'includes/' . $module_class . '/info/';
$fileinfo = array();
- if (!$module)
- {
- $dh = @opendir($directory);
+ $finder = $phpbb_extension_manager->get_finder();
+
+ $modules = $finder
+ ->extension_suffix('_module')
+ ->extension_directory("/$module_class")
+ ->core_path("includes/$module_class/info/")
+ ->core_prefix($module_class . '_')
+ ->get_classes(true, $use_all_available);
- if (!$dh)
+ foreach ($modules as $cur_module)
+ {
+ // Skip entries we do not need if we know the module we are
+ // looking for
+ if ($module && strpos(str_replace('\\', '_', $cur_module), $module) === false && $module !== $cur_module)
{
- return $fileinfo;
+ continue;
}
- while (($file = readdir($dh)) !== false)
- {
- // Is module?
- if (preg_match('/^' . $module_class . '_.+\.' . $phpEx . '$/', $file))
- {
- $class = str_replace(".$phpEx", '', $file) . '_info';
+ $info_class = preg_replace('/_module$/', '_info', $cur_module);
- if (!class_exists($class))
- {
- include($directory . $file);
- }
+ // If the class does not exist it might be following the old
+ // format. phpbb_acp_info_acp_foo needs to be turned into
+ // acp_foo_info and the respective file has to be included
+ // manually because it does not support auto loading
+ $old_info_class_file = str_replace("phpbb_{$module_class}_info_", '', $cur_module);
+ $old_info_class = $old_info_class_file . '_info';
- // Get module title tag
- if (class_exists($class))
- {
- $c_class = new $class();
- $module_info = $c_class->module();
- $fileinfo[str_replace($module_class . '_', '', $module_info['filename'])] = $module_info;
- }
- }
+ if (class_exists($old_info_class))
+ {
+ $info_class = $old_info_class;
}
- closedir($dh);
-
- ksort($fileinfo);
- }
- else
- {
- $filename = $module_class . '_' . basename($module);
- $class = $module_class . '_' . basename($module) . '_info';
-
- if (!class_exists($class))
+ else if (!class_exists($info_class))
{
- include($directory . $filename . '.' . $phpEx);
+ $info_class = $old_info_class;
+ // need to check class exists again because previous checks triggered autoloading
+ if (!class_exists($info_class) && file_exists($directory . $old_info_class_file . '.' . $phpEx))
+ {
+ include($directory . $old_info_class_file . '.' . $phpEx);
+ }
}
- // Get module title tag
- if (class_exists($class))
+ if (class_exists($info_class))
{
- $c_class = new $class();
- $module_info = $c_class->module();
- $fileinfo[str_replace($module_class . '_', '', $module_info['filename'])] = $module_info;
+ $info = new $info_class();
+ $module_info = $info->module();
+
+ $main_class = (isset($module_info['filename'])) ? $module_info['filename'] : $cur_module;
+
+ $fileinfo[$main_class] = $module_info;
}
}
-
+
+ ksort($fileinfo);
+
return $fileinfo;
}
@@ -717,15 +733,15 @@ class acp_modules
*/
function remove_cache_file()
{
- global $cache;
+ global $phpbb_container;
// Sanitise for future path use, it's escaped as appropriate for queries
$p_class = str_replace(array('.', '/', '\\'), '', basename($this->module_class));
-
- $cache->destroy('_modules_' . $p_class);
+
+ $phpbb_container->get('cache.driver')->destroy('_modules_' . $p_class);
// Additionally remove sql cache
- $cache->destroy('sql', MODULES_TABLE);
+ $phpbb_container->get('cache.driver')->destroy('sql', MODULES_TABLE);
}
/**
@@ -1061,5 +1077,3 @@ class acp_modules
return $this->lang_name($target['module_langname']);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_permission_roles.php b/phpBB/includes/acp/acp_permission_roles.php
index 03ea5a39dd..17e48d6576 100644
--- a/phpBB/includes/acp/acp_permission_roles.php
+++ b/phpBB/includes/acp/acp_permission_roles.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -22,16 +21,17 @@ if (!defined('IN_PHPBB'))
class acp_permission_roles
{
var $u_action;
+ protected $auth_admin;
function main($id, $mode)
{
- global $db, $user, $auth, $template, $cache;
+ global $db, $user, $auth, $template, $cache, $phpbb_container;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
- $auth_admin = new auth_admin();
+ $this->auth_admin = new auth_admin();
$user->add_lang('acp/permissions');
add_permission_language();
@@ -211,7 +211,7 @@ class acp_permission_roles
}
// Now add the auth settings
- $auth_admin->acl_set_role($role_id, $auth_settings);
+ $this->auth_admin->acl_set_role($role_id, $auth_settings);
$role_name = (!empty($user->lang[$role_name])) ? $user->lang[$role_name] : $role_name;
add_log('admin', 'LOG_' . strtoupper($permission_type) . 'ROLE_' . strtoupper($action), $role_name);
@@ -306,6 +306,8 @@ class acp_permission_roles
trigger_error($user->lang['NO_ROLE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
}
+ $phpbb_permissions = $phpbb_container->get('acl.permissions');
+
$template->assign_vars(array(
'S_EDIT' => true,
@@ -314,9 +316,8 @@ class acp_permission_roles
'ROLE_NAME' => $role_row['role_name'],
'ROLE_DESCRIPTION' => $role_row['role_description'],
- 'L_ACL_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
- )
- );
+ 'L_ACL_TYPE' => $phpbb_permissions->get_type_lang($permission_type),
+ ));
// We need to fill the auth options array with ACL_NO options ;)
$sql = 'SELECT auth_option_id, auth_option
@@ -344,7 +345,7 @@ class acp_permission_roles
// Get users/groups/forums using this preset...
if ($action == 'edit')
{
- $hold_ary = $auth_admin->get_role_mask($role_id);
+ $hold_ary = $this->auth_admin->get_role_mask($role_id);
if (sizeof($hold_ary))
{
@@ -355,7 +356,7 @@ class acp_permission_roles
'L_ROLE_ASSIGNED_TO' => sprintf($user->lang['ROLE_ASSIGNED_TO'], $role_name))
);
- $auth_admin->display_role_mask($hold_ary);
+ $this->auth_admin->display_role_mask($hold_ary);
}
}
@@ -446,8 +447,8 @@ class acp_permission_roles
'S_DISPLAY_ROLE_MASK' => true)
);
- $hold_ary = $auth_admin->get_role_mask($display_item);
- $auth_admin->display_role_mask($hold_ary);
+ $hold_ary = $this->auth_admin->get_role_mask($display_item);
+ $this->auth_admin->display_role_mask($hold_ary);
}
}
@@ -456,14 +457,16 @@ class acp_permission_roles
*/
function display_auth_options($auth_options)
{
- global $template, $user;
+ global $template, $user, $phpbb_container;
+
+ $phpbb_permissions = $phpbb_container->get('acl.permissions');
$content_array = $categories = array();
$key_sort_array = array(0);
$auth_options = array(0 => $auth_options);
// Making use of auth_admin method here (we do not really want to change two similar code fragments)
- auth_admin::build_permission_array($auth_options, $content_array, $categories, $key_sort_array);
+ $this->auth_admin->build_permission_array($auth_options, $content_array, $categories, $key_sort_array);
$content_array = $content_array[0];
@@ -473,7 +476,7 @@ class acp_permission_roles
foreach ($content_array as $cat => $cat_array)
{
$template->assign_block_vars('auth', array(
- 'CAT_NAME' => $user->lang['permission_cat'][$cat],
+ 'CAT_NAME' => $phpbb_permissions->get_category_lang($cat),
'S_YES' => ($cat_array['S_YES'] && !$cat_array['S_NEVER'] && !$cat_array['S_NO']) ? true : false,
'S_NEVER' => ($cat_array['S_NEVER'] && !$cat_array['S_YES'] && !$cat_array['S_NO']) ? true : false,
@@ -488,8 +491,8 @@ class acp_permission_roles
'S_NO' => ($allowed == ACL_NO) ? true : false,
'FIELD_NAME' => $permission,
- 'PERMISSION' => $user->lang['acl_' . $permission]['lang'])
- );
+ 'PERMISSION' => $phpbb_permissions->get_permission_lang($permission),
+ ));
}
}
}
@@ -501,8 +504,6 @@ class acp_permission_roles
{
global $db;
- $auth_admin = new auth_admin();
-
// Get complete auth array
$sql = 'SELECT auth_option, auth_option_id
FROM ' . ACL_OPTIONS_TABLE . "
@@ -530,19 +531,19 @@ class acp_permission_roles
$db->sql_freeresult($result);
// Get role assignments
- $hold_ary = $auth_admin->get_role_mask($role_id);
+ $hold_ary = $this->auth_admin->get_role_mask($role_id);
// Re-assign permissions
foreach ($hold_ary as $forum_id => $forum_ary)
{
if (isset($forum_ary['users']))
{
- $auth_admin->acl_set('user', $forum_id, $forum_ary['users'], $auth_settings, 0, false);
+ $this->auth_admin->acl_set('user', $forum_id, $forum_ary['users'], $auth_settings, 0, false);
}
if (isset($forum_ary['groups']))
{
- $auth_admin->acl_set('group', $forum_id, $forum_ary['groups'], $auth_settings, 0, false);
+ $this->auth_admin->acl_set('group', $forum_id, $forum_ary['groups'], $auth_settings, 0, false);
}
}
@@ -564,8 +565,6 @@ class acp_permission_roles
WHERE role_id = ' . $role_id;
$db->sql_query($sql);
- $auth_admin->acl_clear_prefetch();
+ $this->auth_admin->acl_clear_prefetch();
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_permissions.php b/phpBB/includes/acp/acp_permissions.php
index e9f0af5071..e7dc03db5c 100644
--- a/phpBB/includes/acp/acp_permissions.php
+++ b/phpBB/includes/acp/acp_permissions.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -23,15 +22,18 @@ class acp_permissions
{
var $u_action;
var $permission_dropdown;
+ protected $permissions;
function main($id, $mode)
{
- global $db, $user, $auth, $template, $cache;
+ global $db, $user, $auth, $template, $cache, $phpbb_container;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include_once($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
+ $this->permissions = $phpbb_container->get('acl.permissions');
+
$auth_admin = new auth_admin();
$user->add_lang('acp/permissions');
@@ -50,7 +52,7 @@ class acp_permissions
if ($user_id && isset($auth_admin->acl_options['id'][$permission]) && $auth->acl_get('a_viewauth'))
{
- $this->page_title = sprintf($user->lang['TRACE_PERMISSION'], $user->lang['acl_' . $permission]['lang']);
+ $this->page_title = sprintf($user->lang['TRACE_PERMISSION'], $this->permissions->get_permission_lang($permission));
$this->permission_trace($user_id, $forum_id, $permission);
return;
}
@@ -498,7 +500,7 @@ class acp_permissions
$template->assign_vars(array(
'S_FORUM_NAMES' => (sizeof($forum_names)) ? true : false,
- 'FORUM_NAMES' => implode(', ', $forum_names))
+ 'FORUM_NAMES' => implode($user->lang['COMMA_SEPARATOR'], $forum_names))
);
}
@@ -513,7 +515,7 @@ class acp_permissions
$template->assign_vars(array(
'S_PERMISSION_DROPDOWN' => (sizeof($this->permission_dropdown) > 1) ? $this->build_permission_dropdown($this->permission_dropdown, $permission_type, $permission_scope) : false,
- 'L_PERMISSION_TYPE' => $user->lang['ACL_TYPE_' . strtoupper($permission_type)],
+ 'L_PERMISSION_TYPE' => $this->permissions->get_type_lang($permission_type),
'U_ACTION' => $this->u_action,
'S_HIDDEN_FIELDS' => $s_hidden_fields)
@@ -588,7 +590,7 @@ class acp_permissions
*/
function build_permission_dropdown($options, $default_option, $permission_scope)
{
- global $user, $auth;
+ global $auth;
$s_dropdown_options = '';
foreach ($options as $setting)
@@ -599,7 +601,7 @@ class acp_permissions
}
$selected = ($setting == $default_option) ? ' selected="selected"' : '';
- $l_setting = (isset($user->lang['permission_type'][$permission_scope][$setting])) ? $user->lang['permission_type'][$permission_scope][$setting] : $user->lang['permission_type'][$setting];
+ $l_setting = $this->permissions->get_type_lang($setting, $permission_scope);
$s_dropdown_options .= '<option value="' . $setting . '"' . $selected . '>' . $l_setting . '</option>';
}
@@ -657,7 +659,8 @@ class acp_permissions
*/
function set_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
{
- global $user, $auth;
+ global $db, $cache, $user, $auth;
+ global $request;
$psubmit = request_var('psubmit', array(0 => array(0 => 0)));
@@ -676,18 +679,17 @@ class acp_permissions
list($ug_id, ) = each($psubmit);
list($forum_id, ) = each($psubmit[$ug_id]);
- if (empty($_POST['setting']) || empty($_POST['setting'][$ug_id]) || empty($_POST['setting'][$ug_id][$forum_id]) || !is_array($_POST['setting'][$ug_id][$forum_id]))
+ $settings = $request->variable('setting', array(0 => array(0 => array('' => 0))), false, \phpbb\request\request_interface::POST);
+ if (empty($settings) || empty($settings[$ug_id]) || empty($settings[$ug_id][$forum_id]))
{
trigger_error('WRONG_PERMISSION_SETTING_FORMAT', E_USER_WARNING);
}
- // We obtain and check $_POST['setting'][$ug_id][$forum_id] directly and not using request_var() because request_var()
- // currently does not support the amount of dimensions required. ;)
- // $auth_settings = request_var('setting', array(0 => array(0 => array('' => 0))));
- $auth_settings = array_map('intval', $_POST['setting'][$ug_id][$forum_id]);
+ $auth_settings = $settings[$ug_id][$forum_id];
// Do we have a role we want to set?
- $assigned_role = (isset($_POST['role'][$ug_id][$forum_id])) ? (int) $_POST['role'][$ug_id][$forum_id] : 0;
+ $roles = $request->variable('role', array(0 => array(0 => 0)), false, \phpbb\request\request_interface::POST);
+ $assigned_role = (isset($roles[$ug_id][$forum_id])) ? (int) $roles[$ug_id][$forum_id] : 0;
// Do the admin want to set these permissions to other items too?
$inherit = request_var('inherit', array(0 => array(0)));
@@ -727,13 +729,13 @@ class acp_permissions
// Do we need to recache the moderator lists?
if ($permission_type == 'm_')
{
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
}
// Remove users who are now moderators or admins from everyones foes list
if ($permission_type == 'm_' || $permission_type == 'a_')
{
- update_foes($group_id, $user_id);
+ phpbb_update_foes($db, $auth, $group_id, $user_id);
}
$this->log_action($mode, 'add', $permission_type, $ug_type, $ug_id, $forum_id);
@@ -746,7 +748,8 @@ class acp_permissions
*/
function set_all_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id)
{
- global $user, $auth;
+ global $db, $cache, $user, $auth;
+ global $request;
// User or group to be set?
$ug_type = (sizeof($user_id)) ? 'user' : 'group';
@@ -757,8 +760,8 @@ class acp_permissions
trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- $auth_settings = (isset($_POST['setting'])) ? $_POST['setting'] : array();
- $auth_roles = (isset($_POST['role'])) ? $_POST['role'] : array();
+ $auth_settings = $request->variable('setting', array(0 => array(0 => array('' => 0))), false, \phpbb\request\request_interface::POST);
+ $auth_roles = $request->variable('role', array(0 => array(0 => 0)), false, \phpbb\request\request_interface::POST);
$ug_ids = $forum_ids = array();
// We need to go through the auth settings
@@ -794,13 +797,13 @@ class acp_permissions
// Do we need to recache the moderator lists?
if ($permission_type == 'm_')
{
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
}
// Remove users who are now moderators or admins from everyones foes list
if ($permission_type == 'm_' || $permission_type == 'a_')
{
- update_foes($group_id, $user_id);
+ phpbb_update_foes($db, $auth, $group_id, $user_id);
}
$this->log_action($mode, 'add', $permission_type, $ug_type, $ug_ids, $forum_ids);
@@ -858,7 +861,7 @@ class acp_permissions
*/
function remove_permissions($mode, $permission_type, &$auth_admin, &$user_id, &$group_id, &$forum_id)
{
- global $user, $db, $auth;
+ global $user, $db, $cache, $auth;
// User or group to be set?
$ug_type = (sizeof($user_id)) ? 'user' : 'group';
@@ -874,7 +877,7 @@ class acp_permissions
// Do we need to recache the moderator lists?
if ($permission_type == 'm_')
{
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
}
$this->log_action($mode, 'del', $permission_type, $ug_type, (($ug_type == 'user') ? $user_id : $group_id), (sizeof($forum_id) ? $forum_id : array(0 => 0)));
@@ -952,12 +955,7 @@ class acp_permissions
if ($user_id != $user->data['user_id'])
{
- $sql = 'SELECT user_id, username, user_permissions, user_type
- FROM ' . USERS_TABLE . '
- WHERE user_id = ' . $user_id;
- $result = $db->sql_query($sql);
- $userdata = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
+ $userdata = $auth->obtain_user_data($user_id);
}
else
{
@@ -984,7 +982,7 @@ class acp_permissions
$back = request_var('back', 0);
$template->assign_vars(array(
- 'PERMISSION' => $user->lang['acl_' . $permission]['lang'],
+ 'PERMISSION' => $this->permissions->get_permission_lang($permission),
'PERMISSION_USERNAME' => $userdata['username'],
'FORUM_NAME' => $forum_name,
@@ -1105,7 +1103,7 @@ class acp_permissions
{
if ($user_id != $user->data['user_id'])
{
- $auth2 = new auth();
+ $auth2 = new \phpbb\auth\auth();
$auth2->acl($userdata);
$auth_setting = $auth2->acl_get($permission);
}
@@ -1172,7 +1170,7 @@ class acp_permissions
*/
function copy_forum_permissions()
{
- global $auth, $cache, $template, $user;
+ global $db, $auth, $cache, $template, $user;
$user->add_lang('acp/forums');
@@ -1187,7 +1185,7 @@ class acp_permissions
{
if (copy_forum_permissions($src, $dest))
{
- cache_moderators();
+ phpbb_cache_moderators($db, $cache, $auth);
$auth->acl_clear_prefetch();
$cache->destroy('sql', FORUMS_TABLE);
@@ -1311,5 +1309,3 @@ class acp_permissions
);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_php_info.php b/phpBB/includes/acp/acp_php_info.php
index 7dd345971a..125b77529f 100644
--- a/phpBB/includes/acp/acp_php_info.php
+++ b/phpBB/includes/acp/acp_php_info.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -88,5 +87,3 @@ class acp_php_info
return '<a name="' . str_replace(' ', '_', $matches[1]) . '">';
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_profile.php b/phpBB/includes/acp/acp_profile.php
index 19223847f0..4e8145009f 100644
--- a/phpBB/includes/acp/acp_profile.php
+++ b/phpBB/includes/acp/acp_profile.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -30,6 +29,7 @@ class acp_profile
{
global $config, $db, $user, $auth, $template, $cache;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
+ global $request;
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
@@ -242,6 +242,15 @@ class acp_profile
$db->sql_freeresult($result);
add_log('admin', 'LOG_PROFILE_FIELD_ACTIVATE', $field_ident);
+
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response();
+ $json_response->send(array(
+ 'text' => $user->lang('DEACTIVATE'),
+ ));
+ }
+
trigger_error($user->lang['PROFILE_FIELD_ACTIVATED'] . adm_back_link($this->u_action));
break;
@@ -266,7 +275,16 @@ class acp_profile
$field_ident = (string) $db->sql_fetchfield('field_ident');
$db->sql_freeresult($result);
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response();
+ $json_response->send(array(
+ 'text' => $user->lang('ACTIVATE'),
+ ));
+ }
+
add_log('admin', 'LOG_PROFILE_FIELD_DEACTIVATE', $field_ident);
+
trigger_error($user->lang['PROFILE_FIELD_DEACTIVATED'] . adm_back_link($this->u_action));
break;
@@ -370,6 +388,7 @@ class acp_profile
'field_show_profile'=> 0,
'field_no_view' => 0,
'field_show_on_reg' => 0,
+ 'field_show_on_pm' => 0,
'field_show_on_vt' => 0,
'lang_name' => utf8_normalize_nfc(request_var('field_ident', '', true)),
'lang_explain' => '',
@@ -381,7 +400,7 @@ class acp_profile
// $exclude contains the data we gather in each step
$exclude = array(
- 1 => array('field_ident', 'lang_name', 'lang_explain', 'field_option_none', 'field_show_on_reg', 'field_show_on_vt', 'field_required', 'field_show_novalue', 'field_hide', 'field_show_profile', 'field_no_view'),
+ 1 => array('field_ident', 'lang_name', 'lang_explain', 'field_option_none', 'field_show_on_reg', 'field_show_on_pm', 'field_show_on_vt', 'field_required', 'field_show_novalue', 'field_hide', 'field_show_profile', 'field_no_view'),
2 => array('field_length', 'field_maxlen', 'field_minlen', 'field_validation', 'field_novalue', 'field_default_value'),
3 => array('l_lang_name', 'l_lang_explain', 'l_lang_default_value', 'l_lang_options')
);
@@ -408,6 +427,7 @@ class acp_profile
'field_required',
'field_show_novalue',
'field_show_on_reg',
+ 'field_show_on_pm',
'field_show_on_vt',
'field_show_profile',
'field_hide',
@@ -489,7 +509,8 @@ class acp_profile
$cp->vars['field_default_value_day'] = $now['mday'];
$cp->vars['field_default_value_month'] = $now['mon'];
$cp->vars['field_default_value_year'] = $now['year'];
- $var = $_POST['field_default_value'] = 'now';
+ $var = 'now';
+ $request->overwrite('field_default_value', $var, \phpbb\request\request_interface::POST);
}
else
{
@@ -498,7 +519,8 @@ class acp_profile
$cp->vars['field_default_value_day'] = request_var('field_default_value_day', 0);
$cp->vars['field_default_value_month'] = request_var('field_default_value_month', 0);
$cp->vars['field_default_value_year'] = request_var('field_default_value_year', 0);
- $var = $_POST['field_default_value'] = sprintf('%2d-%2d-%4d', $cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']);
+ $var = sprintf('%2d-%2d-%4d', $cp->vars['field_default_value_day'], $cp->vars['field_default_value_month'], $cp->vars['field_default_value_year']);
+ $request->overwrite('field_default_value', $var, \phpbb\request\request_interface::POST);
}
else
{
@@ -717,7 +739,7 @@ class acp_profile
}
else
{
- $_new_key_ary[$key] = (is_array($_REQUEST[$key])) ? utf8_normalize_nfc(request_var($key, array(''), true)) : utf8_normalize_nfc(request_var($key, '', true));
+ $_new_key_ary[$key] = ($field_type == FIELD_BOOL && $key == 'lang_options') ? utf8_normalize_nfc(request_var($key, array(''), true)) : utf8_normalize_nfc(request_var($key, '', true));
}
}
}
@@ -761,6 +783,7 @@ class acp_profile
'S_FIELD_REQUIRED' => ($cp->vars['field_required']) ? true : false,
'S_FIELD_SHOW_NOVALUE'=> ($cp->vars['field_show_novalue']) ? true : false,
'S_SHOW_ON_REG' => ($cp->vars['field_show_on_reg']) ? true : false,
+ 'S_SHOW_ON_PM' => ($cp->vars['field_show_on_pm']) ? true : false,
'S_SHOW_ON_VT' => ($cp->vars['field_show_on_vt']) ? true : false,
'S_FIELD_HIDE' => ($cp->vars['field_hide']) ? true : false,
'S_SHOW_PROFILE' => ($cp->vars['field_show_profile']) ? true : false,
@@ -1078,6 +1101,7 @@ class acp_profile
'field_required' => $cp->vars['field_required'],
'field_show_novalue' => $cp->vars['field_show_novalue'],
'field_show_on_reg' => $cp->vars['field_show_on_reg'],
+ 'field_show_on_pm' => $cp->vars['field_show_on_pm'],
'field_show_on_vt' => $cp->vars['field_show_on_vt'],
'field_hide' => $cp->vars['field_hide'],
'field_show_profile' => $cp->vars['field_show_profile'],
@@ -1653,5 +1677,3 @@ class acp_profile
return $sql;
}
}
-
-?>
diff --git a/phpBB/includes/acp/acp_prune.php b/phpBB/includes/acp/acp_prune.php
index ffe20f86f5..5d9080b55b 100644
--- a/phpBB/includes/acp/acp_prune.php
+++ b/phpBB/includes/acp/acp_prune.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -243,8 +242,8 @@ class acp_prune
if (confirm_box(true))
{
$user_ids = $usernames = array();
- $this->get_prune_users($user_ids, $usernames);
+ $this->get_prune_users($user_ids, $usernames);
if (sizeof($user_ids))
{
if ($action == 'deactivate')
@@ -256,19 +255,13 @@ class acp_prune
{
if ($deleteposts)
{
- foreach ($user_ids as $user_id)
- {
- user_delete('remove', $user_id);
- }
+ user_delete('remove', $user_ids);
$l_log = 'LOG_PRUNE_USER_DEL_DEL';
}
else
{
- foreach ($user_ids as $user_id)
- {
- user_delete('retain', $user_id, $usernames[$user_id]);
- }
+ user_delete('retain', $user_ids, true);
$l_log = 'LOG_PRUNE_USER_DEL_ANON';
}
@@ -300,6 +293,7 @@ class acp_prune
{
$template->assign_block_vars('users', array(
'USERNAME' => $usernames[$user_id],
+ 'USER_ID' => $user_id,
'U_PROFILE' => append_sid($phpbb_root_path . 'memberlist.' . $phpEx, 'mode=viewprofile&amp;u=' . $user_id),
'U_USER_ADMIN' => ($auth->acl_get('a_user')) ? append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=overview&amp;u=' . $user_id, true, $user->session_id) : '',
));
@@ -315,17 +309,7 @@ class acp_prune
'mode' => $mode,
'prune' => 1,
- 'users' => utf8_normalize_nfc(request_var('users', '', true)),
- 'username' => utf8_normalize_nfc(request_var('username', '', true)),
- 'email' => request_var('email', ''),
- 'joined_select' => request_var('joined_select', ''),
- 'joined' => request_var('joined', ''),
- 'active_select' => request_var('active_select', ''),
- 'active' => request_var('active', ''),
- 'count_select' => request_var('count_select', ''),
- 'count' => request_var('count', ''),
'deleteposts' => request_var('deleteposts', 0),
-
'action' => request_var('action', ''),
)), 'confirm_body_prune.html');
}
@@ -341,22 +325,36 @@ class acp_prune
}
$find_time = array('lt' => $user->lang['BEFORE'], 'gt' => $user->lang['AFTER']);
- $s_find_join_time = '';
- foreach ($find_time as $key => $value)
- {
- $s_find_join_time .= '<option value="' . $key . '">' . $value . '</option>';
- }
-
$s_find_active_time = '';
foreach ($find_time as $key => $value)
{
$s_find_active_time .= '<option value="' . $key . '">' . $value . '</option>';
}
+ $sql = 'SELECT group_id, group_name
+ FROM ' . GROUPS_TABLE . '
+ WHERE group_type <> ' . GROUP_SPECIAL . '
+ ORDER BY group_name ASC';
+ $result = $db->sql_query($sql);
+
+ $s_group_list = '';
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $s_group_list .= '<option value="' . $row['group_id'] . '">' . $row['group_name'] . '</option>';
+ }
+ $db->sql_freeresult($result);
+
+ if ($s_group_list)
+ {
+ // Only prepend the "All groups" option if there are groups,
+ // otherwise we don't want to display this option at all.
+ $s_group_list = '<option value="0">' . $user->lang['PRUNE_USERS_GROUP_NONE'] . '</option>' . $s_group_list;
+ }
+
$template->assign_vars(array(
'U_ACTION' => $this->u_action,
- 'S_JOINED_OPTIONS' => $s_find_join_time,
'S_ACTIVE_OPTIONS' => $s_find_active_time,
+ 'S_GROUP_LIST' => $s_group_list,
'S_COUNT_OPTIONS' => $s_find_count,
'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_prune&amp;field=users'),
));
@@ -367,35 +365,72 @@ class acp_prune
*/
function get_prune_users(&$user_ids, &$usernames)
{
- global $user, $db;
+ global $user, $db, $request;
- $users = utf8_normalize_nfc(request_var('users', '', true));
-
- if ($users)
+ $users_by_name = request_var('users', '', true);
+ $users_by_id = request_var('user_ids', array(0));
+ $group_id = request_var('group_id', 0);
+ $posts_on_queue = (trim($request->variable('posts_on_queue', '')) === '') ? false : $request->variable('posts_on_queue', 0);
+
+ if ($users_by_name)
{
- $users = explode("\n", $users);
+ $users = explode("\n", $users_by_name);
$where_sql = ' AND ' . $db->sql_in_set('username_clean', array_map('utf8_clean_string', $users));
}
+ else if (!empty($users_by_id))
+ {
+ $user_ids = $users_by_id;
+ user_get_id_name($user_ids, $usernames);
+
+ $where_sql = ' AND ' . $db->sql_in_set('user_id', $user_ids);
+ }
else
{
- $username = utf8_normalize_nfc(request_var('username', '', true));
+ $username = request_var('username', '', true);
$email = request_var('email', '');
+ $website = request_var('website', '');
- $joined_select = request_var('joined_select', 'lt');
$active_select = request_var('active_select', 'lt');
$count_select = request_var('count_select', 'eq');
- $joined = request_var('joined', '');
+ $queue_select = request_var('queue_select', 'gt');
+ $joined_before = request_var('joined_before', '');
+ $joined_after = request_var('joined_after', '');
$active = request_var('active', '');
+ $count = request_var('count', 0);
+
$active = ($active) ? explode('-', $active) : array();
- $joined = ($joined) ? explode('-', $joined) : array();
+ $joined_before = ($joined_before) ? explode('-', $joined_before) : array();
+ $joined_after = ($joined_after) ? explode('-', $joined_after) : array();
- if ((sizeof($active) && sizeof($active) != 3) || (sizeof($joined) && sizeof($joined) != 3))
+ // calculate the conditions required by the join time criteria
+ $joined_sql = '';
+ if (!empty($joined_before) && !empty($joined_after))
{
- trigger_error($user->lang['WRONG_ACTIVE_JOINED_DATE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ // if the two entered dates are equal, we need to adjust
+ // so that our time range is a full day instead of 1 second
+ if ($joined_after == $joined_before)
+ {
+ $joined_after[2] += 1;
+ }
+
+ $joined_sql = ' AND user_regdate BETWEEN ' . gmmktime(0, 0, 0, (int) $joined_after[1], (int) $joined_after[2], (int) $joined_after[0]) .
+ ' AND ' . gmmktime(0, 0, 0, (int) $joined_before[1], (int) $joined_before[2], (int) $joined_before[0]);
}
+ else if (empty($joined_before) && !empty($joined_after))
+ {
+ $joined_sql = ' AND user_regdate > ' . gmmktime(0, 0, 0, (int) $joined_after[1], (int) $joined_after[2], (int) $joined_after[0]);
+ }
+ else if (empty($joined_after) && !empty($joined_before))
+ {
+ $joined_sql = ' AND user_regdate < ' . gmmktime(0, 0, 0, (int) $joined_before[1], (int) $joined_before[2], (int) $joined_before[0]);
+ }
+ // implicit else when both arrays are empty do nothing
- $count = request_var('count', '');
+ if ((sizeof($active) && sizeof($active) != 3) || (sizeof($joined_before) && sizeof($joined_before) != 3) || (sizeof($joined_after) && sizeof($joined_after) != 3))
+ {
+ trigger_error($user->lang['WRONG_ACTIVE_JOINED_DATE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
$key_match = array('lt' => '<', 'gt' => '>', 'eq' => '=');
$sort_by_types = array('username', 'user_email', 'user_posts', 'user_regdate', 'user_lastvisit');
@@ -403,8 +438,9 @@ class acp_prune
$where_sql = '';
$where_sql .= ($username) ? ' AND username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($username))) : '';
$where_sql .= ($email) ? ' AND user_email ' . $db->sql_like_expression(str_replace('*', $db->any_char, $email)) . ' ' : '';
- $where_sql .= (sizeof($joined)) ? " AND user_regdate " . $key_match[$joined_select] . ' ' . gmmktime(0, 0, 0, (int) $joined[1], (int) $joined[2], (int) $joined[0]) : '';
- $where_sql .= ($count !== '') ? " AND user_posts " . $key_match[$count_select] . ' ' . (int) $count . ' ' : '';
+ $where_sql .= ($website) ? ' AND user_website ' . $db->sql_like_expression(str_replace('*', $db->any_char, $website)) . ' ' : '';
+ $where_sql .= $joined_sql;
+ $where_sql .= ($count) ? " AND user_posts " . $key_match[$count_select] . ' ' . (int) $count . ' ' : '';
// First handle pruning of users who never logged in, last active date is 0000-00-00
if (sizeof($active) && (int) $active[0] == 0 && (int) $active[1] == 0 && (int) $active[2] == 0)
@@ -421,8 +457,8 @@ class acp_prune
}
}
- // Protect the admin, do not prune if no options are given...
- if (!$where_sql)
+ // If no search criteria were provided, go no further.
+ if (!$where_sql && !$group_id && $posts_on_queue === false)
{
return;
}
@@ -439,28 +475,84 @@ class acp_prune
}
$db->sql_freeresult($result);
- // Do not prune founder members
- $sql = 'SELECT user_id, username
- FROM ' . USERS_TABLE . '
- WHERE user_id <> ' . ANONYMOUS . '
- AND user_type <> ' . USER_FOUNDER . "
- $where_sql";
- $result = $db->sql_query($sql);
+ // Protect the admin, do not prune if no options are given...
+ if ($where_sql)
+ {
+ // Do not prune founder members
+ $sql = 'SELECT user_id, username
+ FROM ' . USERS_TABLE . '
+ WHERE user_id <> ' . ANONYMOUS . '
+ AND user_type <> ' . USER_FOUNDER . "
+ $where_sql";
+ $result = $db->sql_query($sql);
- $where_sql = '';
- $user_ids = $usernames = array();
+ $user_ids = $usernames = array();
- while ($row = $db->sql_fetchrow($result))
+ while ($row = $db->sql_fetchrow($result))
+ {
+ // Do not prune bots and the user currently pruning.
+ if ($row['user_id'] != $user->data['user_id'] && !in_array($row['user_id'], $bot_ids))
+ {
+ $user_ids[] = $row['user_id'];
+ $usernames[$row['user_id']] = $row['username'];
+ }
+ }
+ $db->sql_freeresult($result);
+ }
+
+ if ($group_id)
{
- // Do not prune bots and the user currently pruning.
- if ($row['user_id'] != $user->data['user_id'] && !in_array($row['user_id'], $bot_ids))
+ $sql = 'SELECT u.user_id, u.username
+ FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
+ WHERE ug.group_id = ' . (int) $group_id . '
+ AND ug.user_id <> ' . ANONYMOUS . '
+ AND u.user_type <> ' . USER_FOUNDER . '
+ AND ug.user_pending = 0 ' .
+ ((!empty($user_ids)) ? 'AND ' . $db->sql_in_set('ug.user_id', $user_ids) : '') . '
+ AND u.user_id = ug.user_id';
+ $result = $db->sql_query($sql);
+
+ // we're performing an intersection operation, so all the relevant users
+ // come from this most recent query (which was limited to the results of the
+ // previous query)
+ $user_ids = $usernames = array();
+ while ($row = $db->sql_fetchrow($result))
{
- $user_ids[] = $row['user_id'];
- $usernames[$row['user_id']] = $row['username'];
+ // Do not prune bots and the user currently pruning.
+ if ($row['user_id'] != $user->data['user_id'] && !in_array($row['user_id'], $bot_ids))
+ {
+ $user_ids[] = $row['user_id'];
+ $usernames[$row['user_id']] = $row['username'];
+ }
}
+ $db->sql_freeresult($result);
+ }
+
+ if ($posts_on_queue !== false)
+ {
+ $sql = 'SELECT u.user_id, u.username, COUNT(p.post_id) AS queue_posts
+ FROM ' . POSTS_TABLE . ' p, ' . USERS_TABLE . ' u
+ WHERE u.user_id <> ' . ANONYMOUS . '
+ AND u.user_type <> ' . USER_FOUNDER .
+ ((!empty($user_ids)) ? 'AND ' . $db->sql_in_set('p.poster_id', $user_ids) : '') . '
+ AND p.post_visibility = ' . ITEM_UNAPPROVED . '
+ AND u.user_id = p.poster_id
+ GROUP BY p.poster_id
+ HAVING queue_posts ' . $key_match[$queue_select] . ' ' . $posts_on_queue;
+ $result = $db->sql_query($sql);
+
+ // same intersection logic as the above group ID portion
+ $user_ids = $usernames = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ // Do not prune bots and the user currently pruning.
+ if ($row['user_id'] != $user->data['user_id'] && !in_array($row['user_id'], $bot_ids))
+ {
+ $user_ids[] = $row['user_id'];
+ $usernames[$row['user_id']] = $row['username'];
+ }
+ }
+ $db->sql_freeresult($result);
}
- $db->sql_freeresult($result);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_ranks.php b/phpBB/includes/acp/acp_ranks.php
index ea057cd84c..73e1de44d9 100644
--- a/phpBB/includes/acp/acp_ranks.php
+++ b/phpBB/includes/acp/acp_ranks.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -25,7 +24,7 @@ class acp_ranks
function main($id, $mode)
{
- global $db, $user, $auth, $template, $cache;
+ global $db, $user, $auth, $template, $cache, $request;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
$user->add_lang('acp/posting');
@@ -72,7 +71,7 @@ class acp_ranks
'rank_min' => $min_posts,
'rank_image' => htmlspecialchars_decode($rank_image)
);
-
+
if ($rank_id)
{
$sql = 'UPDATE ' . RANKS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . " WHERE rank_id = $rank_id";
@@ -123,6 +122,18 @@ class acp_ranks
$cache->destroy('_ranks');
add_log('admin', 'LOG_RANK_REMOVED', $rank_title);
+
+ if ($request->is_ajax())
+ {
+ $json_response = new \phpbb\json_response;
+ $json_response->send(array(
+ 'MESSAGE_TITLE' => $user->lang['INFORMATION'],
+ 'MESSAGE_TEXT' => $user->lang['RANK_REMOVED'],
+ 'REFRESH_DATA' => array(
+ 'time' => 3
+ )
+ ));
+ }
}
else
{
@@ -140,7 +151,7 @@ class acp_ranks
case 'add':
$data = $ranks = $existing_imgs = array();
-
+
$sql = 'SELECT *
FROM ' . RANKS_TABLE . '
ORDER BY rank_min ASC, rank_special ASC';
@@ -198,17 +209,17 @@ class acp_ranks
'RANK_TITLE' => (isset($ranks['rank_title'])) ? $ranks['rank_title'] : '',
'S_FILENAME_LIST' => $filename_list,
- 'RANK_IMAGE' => ($edit_img) ? $phpbb_root_path . $config['ranks_path'] . '/' . $edit_img : $phpbb_admin_path . 'images/spacer.gif',
+ 'RANK_IMAGE' => ($edit_img) ? $phpbb_root_path . $config['ranks_path'] . '/' . $edit_img : htmlspecialchars($phpbb_admin_path) . 'images/spacer.gif',
'S_SPECIAL_RANK' => (isset($ranks['rank_special']) && $ranks['rank_special']) ? true : false,
'MIN_POSTS' => (isset($ranks['rank_min']) && !$ranks['rank_special']) ? $ranks['rank_min'] : 0)
);
-
+
return;
break;
}
-
+
$template->assign_vars(array(
'U_ACTION' => $this->u_action)
);
@@ -230,11 +241,9 @@ class acp_ranks
'U_EDIT' => $this->u_action . '&amp;action=edit&amp;id=' . $row['rank_id'],
'U_DELETE' => $this->u_action . '&amp;action=delete&amp;id=' . $row['rank_id'])
- );
+ );
}
$db->sql_freeresult($result);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_reasons.php b/phpBB/includes/acp/acp_reasons.php
index dbc9fcb6cc..71e9108c2c 100644
--- a/phpBB/includes/acp/acp_reasons.php
+++ b/phpBB/includes/acp/acp_reasons.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -114,7 +113,7 @@ class acp_reasons
$result = $db->sql_query($sql);
$max_order = (int) $db->sql_fetchfield('max_reason_order');
$db->sql_freeresult($result);
-
+
$sql_ary = array(
'reason_title' => (string) $reason_row['reason_title'],
'reason_description' => (string) $reason_row['reason_description'],
@@ -172,14 +171,14 @@ class acp_reasons
'U_ACTION' => $this->u_action . "&amp;id=$reason_id&amp;action=$action",
'U_BACK' => $this->u_action,
'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
-
+
'REASON_TITLE' => $reason_row['reason_title'],
'REASON_DESCRIPTION' => $reason_row['reason_description'],
'TRANSLATED_TITLE' => ($translated) ? $user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])] : '',
'TRANSLATED_DESCRIPTION'=> ($translated) ? $user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])] : '',
- 'S_AVAILABLE_TITLES' => implode(', ', array_map('htmlspecialchars', array_keys($user->lang['report_reasons']['TITLE']))),
+ 'S_AVAILABLE_TITLES' => implode($user->lang['COMMA_SEPARATOR'], array_map('htmlspecialchars', array_keys($user->lang['report_reasons']['TITLE']))),
'S_EDIT_REASON' => true,
'S_TRANSLATED' => $translated,
'S_ERROR' => (sizeof($error)) ? true : false,
@@ -304,7 +303,7 @@ class acp_reasons
do
{
++$order;
-
+
if ($row['reason_order'] != $order)
{
$sql = 'UPDATE ' . REPORTS_REASONS_TABLE . "
@@ -371,5 +370,3 @@ class acp_reasons
$db->sql_freeresult($result);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_search.php b/phpBB/includes/acp/acp_search.php
index 0cd67b1c34..11a2511aee 100644
--- a/phpBB/includes/acp/acp_search.php
+++ b/phpBB/includes/acp/acp_search.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -77,7 +76,8 @@ class acp_search
continue;
}
- $name = ucfirst(strtolower(str_replace('_', ' ', $type)));
+ $name = $search->get_name();
+
$selected = ($config['search_type'] == $type) ? ' selected="selected"' : '';
$search_options .= '<option value="' . $type . '"' . $selected . '>' . $name . '</option>';
@@ -232,15 +232,7 @@ class acp_search
global $db, $user, $auth, $template, $cache;
global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
- if (isset($_REQUEST['action']) && is_array($_REQUEST['action']))
- {
- $action = request_var('action', array('' => false));
- $action = key($action);
- }
- else
- {
- $action = request_var('action', '');
- }
+ $action = request_var('action', '');
$this->state = explode(',', $config['search_indexing_state']);
if (isset($_POST['cancel']))
@@ -283,7 +275,7 @@ class acp_search
{
trigger_error($error . adm_back_link($this->u_action), E_USER_WARNING);
}
- $name = ucfirst(strtolower(str_replace('_', ' ', $this->state[0])));
+ $name = $this->search->get_name();
$action = &$this->state[1];
@@ -345,7 +337,7 @@ class acp_search
$totaltime = $mtime[0] + $mtime[1] - $starttime;
$rows_per_second = $row_count / $totaltime;
meta_refresh(1, append_sid($this->u_action . '&amp;action=delete&amp;skip_rows=' . $post_counter));
- trigger_error(sprintf($user->lang['SEARCH_INDEX_DELETE_REDIRECT'], $post_counter, $row_count, $rows_per_second));
+ trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $row_count, $post_counter, $rows_per_second));
}
}
@@ -405,9 +397,8 @@ class acp_search
$i = 0;
while ($row = ($buffer ? $rows[$i++] : $db->sql_fetchrow($result)))
{
- // Indexing enabled for this forum or global announcement?
- // Global announcements get indexed by default.
- if (!$row['forum_id'] || (isset($forums[$row['forum_id']]) && $forums[$row['forum_id']]))
+ // Indexing enabled for this forum
+ if (isset($forums[$row['forum_id']]) && $forums[$row['forum_id']])
{
$this->search->index('post', $row['post_id'], $row['post_text'], $row['post_subject'], $row['poster_id'], $row['forum_id']);
}
@@ -436,7 +427,7 @@ class acp_search
$totaltime = $mtime[0] + $mtime[1] - $starttime;
$rows_per_second = $row_count / $totaltime;
meta_refresh(1, append_sid($this->u_action . '&amp;action=create&amp;skip_rows=' . $post_counter));
- trigger_error(sprintf($user->lang['SEARCH_INDEX_CREATE_REDIRECT'], $post_counter, $row_count, $rows_per_second));
+ trigger_error($user->lang('SEARCH_INDEX_CREATE_REDIRECT', (int) $row_count, $post_counter) . $user->lang('SEARCH_INDEX_CREATE_REDIRECT_RATE', $rows_per_second));
}
}
@@ -463,7 +454,7 @@ class acp_search
continue;
}
- $name = ucfirst(strtolower(str_replace('_', ' ', $type)));
+ $name = $search->get_name();
$data = array();
if (method_exists($search, 'index_stats'))
@@ -562,27 +553,15 @@ class acp_search
function get_search_types()
{
- global $phpbb_root_path, $phpEx;
-
- $search_types = array();
+ global $phpbb_root_path, $phpEx, $phpbb_extension_manager;
- $dp = @opendir($phpbb_root_path . 'includes/search');
+ $finder = $phpbb_extension_manager->get_finder();
- if ($dp)
- {
- while (($file = readdir($dp)) !== false)
- {
- if ((preg_match('#\.' . $phpEx . '$#', $file)) && ($file != "search.$phpEx"))
- {
- $search_types[] = preg_replace('#^(.*?)\.' . $phpEx . '$#', '\1', $file);
- }
- }
- closedir($dp);
-
- sort($search_types);
- }
-
- return $search_types;
+ return $finder
+ ->extension_suffix('_backend')
+ ->extension_directory('/search')
+ ->core_path('phpbb/search/')
+ ->get_classes();
}
function get_max_post_id()
@@ -617,27 +596,17 @@ class acp_search
*/
function init_search($type, &$search, &$error)
{
- global $phpbb_root_path, $phpEx, $user;
-
- if (!preg_match('#^\w+$#', $type) || !file_exists("{$phpbb_root_path}includes/search/$type.$phpEx"))
- {
- $error = $user->lang['NO_SUCH_SEARCH_MODULE'];
- return $error;
- }
+ global $phpbb_root_path, $phpEx, $user, $auth, $config, $db;
- include_once("{$phpbb_root_path}includes/search/$type.$phpEx");
-
- if (!class_exists($type))
+ if (!class_exists($type) || !method_exists($type, 'keyword_search'))
{
$error = $user->lang['NO_SUCH_SEARCH_MODULE'];
return $error;
}
$error = false;
- $search = new $type($error);
+ $search = new $type($error, $phpbb_root_path, $phpEx, $auth, $config, $db, $user);
return $error;
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_send_statistics.php b/phpBB/includes/acp/acp_send_statistics.php
index b8fc2d2c45..39140b8da4 100644
--- a/phpBB/includes/acp/acp_send_statistics.php
+++ b/phpBB/includes/acp/acp_send_statistics.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -16,8 +15,6 @@ if (!defined('IN_PHPBB'))
exit;
}
-include($phpbb_root_path . 'includes/questionnaire/questionnaire.' . $phpEx);
-
/**
* @package acp
*/
@@ -27,7 +24,9 @@ class acp_send_statistics
function main($id, $mode)
{
- global $config, $template, $phpbb_admin_path, $phpEx;
+ global $config, $template, $phpbb_admin_path, $phpbb_root_path, $phpEx;
+
+ include($phpbb_root_path . 'includes/questionnaire/questionnaire.' . $phpEx);
$collect_url = "https://www.phpbb.com/stats/receive_stats.php";
@@ -86,5 +85,3 @@ class acp_send_statistics
}
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php
index 47cd02bca7..d5492d85a3 100644
--- a/phpBB/includes/acp/acp_styles.php
+++ b/phpBB/includes/acp/acp_styles.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -21,3956 +20,1300 @@ if (!defined('IN_PHPBB'))
*/
class acp_styles
{
- var $u_action;
-
- var $style_cfg;
- var $template_cfg;
- var $theme_cfg;
- var $imageset_cfg;
- var $imageset_keys;
-
- function main($id, $mode)
+ public $u_action;
+
+ protected $u_base_action;
+ protected $s_hidden_fields;
+ protected $mode;
+ protected $styles_path;
+ protected $styles_path_absolute = 'styles';
+ protected $default_style = 0;
+
+ protected $db;
+ protected $user;
+ protected $template;
+ protected $request;
+ protected $cache;
+ protected $auth;
+ protected $phpbb_root_path;
+ protected $php_ext;
+
+ public function main($id, $mode)
{
- global $db, $user, $auth, $template, $cache;
- global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
-
- // Hardcoded template bitfield to add for new templates
- $bitfield = new bitfield();
- $bitfield->set(0);
- $bitfield->set(1);
- $bitfield->set(2);
- $bitfield->set(3);
- $bitfield->set(4);
- $bitfield->set(8);
- $bitfield->set(9);
- $bitfield->set(11);
- $bitfield->set(12);
- define('TEMPLATE_BITFIELD', $bitfield->get_base64());
- unset($bitfield);
+ global $db, $user, $phpbb_admin_path, $phpbb_root_path, $phpEx, $template, $request, $cache, $auth, $config;
+
+ $this->db = $db;
+ $this->user = $user;
+ $this->template = $template;
+ $this->request = $request;
+ $this->cache = $cache;
+ $this->auth = $auth;
+ $this->config = $config;
+ $this->phpbb_root_path = $phpbb_root_path;
+ $this->php_ext = $phpEx;
+
+ $this->default_style = $config['default_style'];
+ $this->styles_path = $this->phpbb_root_path . $this->styles_path_absolute . '/';
+
+ $this->u_base_action = append_sid("{$phpbb_admin_path}index.{$this->php_ext}", "i={$id}");
+ $this->s_hidden_fields = array(
+ 'mode' => $mode,
+ );
- $user->add_lang('acp/styles');
+ $this->user->add_lang('acp/styles');
$this->tpl_name = 'acp_styles';
$this->page_title = 'ACP_CAT_STYLES';
+ $this->mode = $mode;
- $action = request_var('action', '');
- $action = (isset($_POST['add'])) ? 'add' : $action;
- $style_id = request_var('id', 0);
-
- // Fill the configuration variables
- $this->style_cfg = $this->template_cfg = $this->theme_cfg = $this->imageset_cfg = '
-#
-# phpBB {MODE} configuration file
-#
-# @package phpBB3
-# @copyright (c) 2005 phpBB Group
-# @license http://opensource.org/licenses/gpl-license.php GNU Public License
-#
-#
-# At the left is the name, please do not change this
-# At the right the value is entered
-# For on/off options the valid values are on, off, 1, 0, true and false
-#
-# Values get trimmed, if you want to add a space in front or at the end of
-# the value, then enclose the value with single or double quotes.
-# Single and double quotes do not need to be escaped.
-#
-#
-
-# General Information about this {MODE}
-name = {NAME}
-copyright = {COPYRIGHT}
-version = {VERSION}
-';
-
- $this->theme_cfg .= '
-# Some configuration options
-
-#
-# You have to turn this option on if you want to use the
-# path template variables ({T_IMAGESET_PATH} for example) within
-# your css file.
-# This is mostly the case if you want to use language specific
-# images within your css file.
-#
-parse_css_file = {PARSE_CSS_FILE}
-';
-
- $this->template_cfg .= '
-# Some configuration options
-
-# Template inheritance
-# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/
-# Set value to empty or this template name to ignore template inheritance.
-inherit_from = {INHERIT_FROM}
-';
-
- $this->imageset_keys = array(
- 'logos' => array(
- 'site_logo',
- ),
- 'buttons' => array(
- 'icon_back_top', 'icon_contact_aim', 'icon_contact_email', 'icon_contact_icq', 'icon_contact_jabber', 'icon_contact_msnm', 'icon_contact_pm', 'icon_contact_yahoo', 'icon_contact_www', 'icon_post_delete', 'icon_post_edit', 'icon_post_info', 'icon_post_quote', 'icon_post_report', 'icon_user_online', 'icon_user_offline', 'icon_user_profile', 'icon_user_search', 'icon_user_warn', 'button_pm_forward', 'button_pm_new', 'button_pm_reply', 'button_topic_locked', 'button_topic_new', 'button_topic_reply',
- ),
- 'icons' => array(
- 'icon_post_target', 'icon_post_target_unread', 'icon_topic_attach', 'icon_topic_latest', 'icon_topic_newest', 'icon_topic_reported', 'icon_topic_unapproved', 'icon_friend', 'icon_foe',
- ),
- 'forums' => array(
- 'forum_link', 'forum_read', 'forum_read_locked', 'forum_read_subforum', 'forum_unread', 'forum_unread_locked', 'forum_unread_subforum', 'subforum_read', 'subforum_unread'
- ),
- 'folders' => array(
- 'topic_moved', 'topic_read', 'topic_read_mine', 'topic_read_hot', 'topic_read_hot_mine', 'topic_read_locked', 'topic_read_locked_mine', 'topic_unread', 'topic_unread_mine', 'topic_unread_hot', 'topic_unread_hot_mine', 'topic_unread_locked', 'topic_unread_locked_mine', 'sticky_read', 'sticky_read_mine', 'sticky_read_locked', 'sticky_read_locked_mine', 'sticky_unread', 'sticky_unread_mine', 'sticky_unread_locked', 'sticky_unread_locked_mine', 'announce_read', 'announce_read_mine', 'announce_read_locked', 'announce_read_locked_mine', 'announce_unread', 'announce_unread_mine', 'announce_unread_locked', 'announce_unread_locked_mine', 'global_read', 'global_read_mine', 'global_read_locked', 'global_read_locked_mine', 'global_unread', 'global_unread_mine', 'global_unread_locked', 'global_unread_locked_mine', 'pm_read', 'pm_unread',
- ),
- 'polls' => array(
- 'poll_left', 'poll_center', 'poll_right',
- ),
- 'ui' => array(
- 'upload_bar',
- ),
- 'user' => array(
- 'user_icon1', 'user_icon2', 'user_icon3', 'user_icon4', 'user_icon5', 'user_icon6', 'user_icon7', 'user_icon8', 'user_icon9', 'user_icon10',
- ),
- );
-
- // Execute overall actions
- switch ($action)
- {
- case 'delete':
- if ($style_id)
- {
- $this->remove($mode, $style_id);
- return;
- }
- break;
-
- case 'export':
- if ($style_id)
- {
- $this->export($mode, $style_id);
- return;
- }
- break;
-
- case 'install':
- $this->install($mode);
- return;
- break;
-
- case 'add':
- $this->add($mode);
- return;
- break;
-
- case 'details':
- if ($style_id)
- {
- $this->details($mode, $style_id);
- return;
- }
- break;
-
- case 'edit':
- if ($style_id)
- {
- switch ($mode)
- {
- case 'imageset':
- return $this->edit_imageset($style_id);
- case 'template':
- return $this->edit_template($style_id);
- case 'theme':
- return $this->edit_theme($style_id);
- }
- }
- break;
-
- case 'cache':
- if ($style_id)
- {
- switch ($mode)
- {
- case 'template':
- return $this->template_cache($style_id);
- }
- }
- break;
- }
-
- switch ($mode)
- {
- case 'style':
-
- switch ($action)
- {
- case 'activate':
- case 'deactivate':
-
- if ($style_id == $config['default_style'])
- {
- trigger_error($user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- if (($action == 'deactivate' && confirm_box(true)) || $action == 'activate')
- {
- $sql = 'UPDATE ' . STYLES_TABLE . '
- SET style_active = ' . (($action == 'activate') ? 1 : 0) . '
- WHERE style_id = ' . $style_id;
- $db->sql_query($sql);
-
- // Set style to default for any member using deactivated style
- if ($action == 'deactivate')
- {
- $sql = 'UPDATE ' . USERS_TABLE . '
- SET user_style = ' . $config['default_style'] . "
- WHERE user_style = $style_id";
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . FORUMS_TABLE . '
- SET forum_style = 0
- WHERE forum_style = ' . $style_id;
- $db->sql_query($sql);
- }
- }
- else if ($action == 'deactivate')
- {
- $s_hidden_fields = array(
- 'i' => $id,
- 'mode' => $mode,
- 'action' => $action,
- 'style_id' => $style_id,
- );
- confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields));
- }
- break;
- }
-
- $this->frontend('style', array('details'), array('export', 'delete'));
- break;
-
- case 'template':
-
- switch ($action)
- {
- // Refresh template data stored in db and clear cache
- case 'refresh':
-
- $sql = 'SELECT *
- FROM ' . STYLES_TEMPLATE_TABLE . "
- WHERE template_id = $style_id";
- $result = $db->sql_query($sql);
- $template_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$template_row)
- {
- trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- if (confirm_box(true))
- {
- $template_refreshed = '';
-
- // Only refresh database if the template is stored in the database
- if ($template_row['template_storedb'] && file_exists("{$phpbb_root_path}styles/{$template_row['template_path']}/template/"))
- {
- $filelist = array('' => array());
-
- $sql = 'SELECT template_filename, template_mtime
- FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = $style_id";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
-// if (@filemtime("{$phpbb_root_path}styles/{$template_row['template_path']}/template/" . $row['template_filename']) > $row['template_mtime'])
-// {
- // get folder info from the filename
- if (($slash_pos = strrpos($row['template_filename'], '/')) === false)
- {
- $filelist[''][] = $row['template_filename'];
- }
- else
- {
- $filelist[substr($row['template_filename'], 0, $slash_pos + 1)][] = substr($row['template_filename'], $slash_pos + 1, strlen($row['template_filename']) - $slash_pos - 1);
- }
-// }
- }
- $db->sql_freeresult($result);
-
- $this->store_templates('update', $style_id, $template_row['template_path'], $filelist);
- unset($filelist);
-
- $template_refreshed = $user->lang['TEMPLATE_REFRESHED'] . '<br />';
- add_log('admin', 'LOG_TEMPLATE_REFRESHED', $template_row['template_name']);
- }
-
- $this->clear_template_cache($template_row);
-
- trigger_error($template_refreshed . $user->lang['TEMPLATE_CACHE_CLEARED'] . adm_back_link($this->u_action));
- }
- else
- {
- confirm_box(false, ($template_row['template_storedb']) ? $user->lang['CONFIRM_TEMPLATE_REFRESH'] : $user->lang['CONFIRM_TEMPLATE_CLEAR_CACHE'], build_hidden_fields(array(
- 'i' => $id,
- 'mode' => $mode,
- 'action' => $action,
- 'id' => $style_id
- )));
- }
-
- break;
- }
-
- $this->frontend('template', array('edit', 'cache', 'details'), array('refresh', 'export', 'delete'));
- break;
-
- case 'theme':
-
- switch ($action)
- {
- // Refresh theme data stored in the database
- case 'refresh':
-
- $sql = 'SELECT *
- FROM ' . STYLES_THEME_TABLE . "
- WHERE theme_id = $style_id";
- $result = $db->sql_query($sql);
- $theme_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
+ $action = $this->request->variable('action', '');
+ $post_actions = array('install', 'activate', 'deactivate', 'uninstall');
- if (!$theme_row)
- {
- trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- if (!$theme_row['theme_storedb'])
- {
- trigger_error($user->lang['THEME_ERR_REFRESH_FS'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- if (confirm_box(true))
- {
- if ($theme_row['theme_storedb'] && file_exists("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/stylesheet.css"))
- {
- // Save CSS contents
- $sql_ary = array(
- 'theme_mtime' => (int) filemtime("{$phpbb_root_path}styles/{$theme_row['theme_path']}/theme/stylesheet.css"),
- 'theme_data' => $this->db_theme_data($theme_row)
- );
-
- $sql = 'UPDATE ' . STYLES_THEME_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
- WHERE theme_id = $style_id";
- $db->sql_query($sql);
-
- $cache->destroy('sql', STYLES_THEME_TABLE);
-
- add_log('admin', 'LOG_THEME_REFRESHED', $theme_row['theme_name']);
- trigger_error($user->lang['THEME_REFRESHED'] . adm_back_link($this->u_action));
- }
- }
- else
- {
- confirm_box(false, $user->lang['CONFIRM_THEME_REFRESH'], build_hidden_fields(array(
- 'i' => $id,
- 'mode' => $mode,
- 'action' => $action,
- 'id' => $style_id
- )));
- }
- break;
- }
-
- $this->frontend('theme', array('edit', 'details'), array('refresh', 'export', 'delete'));
- break;
-
- case 'imageset':
-
- switch ($action)
- {
- case 'refresh':
-
- $sql = 'SELECT *
- FROM ' . STYLES_IMAGESET_TABLE . "
- WHERE imageset_id = $style_id";
- $result = $db->sql_query($sql);
- $imageset_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$imageset_row)
- {
- trigger_error($user->lang['NO_IMAGESET'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- if (confirm_box(true))
- {
- $sql_ary = array();
-
- $imageset_definitions = array();
- foreach ($this->imageset_keys as $topic => $key_array)
- {
- $imageset_definitions = array_merge($imageset_definitions, $key_array);
- }
-
- $cfg_data_imageset = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/imageset.cfg");
-
- $db->sql_transaction('begin');
-
- $sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . '
- WHERE imageset_id = ' . $style_id;
- $result = $db->sql_query($sql);
-
- foreach ($cfg_data_imageset as $image_name => $value)
- {
- if (strpos($value, '*') !== false)
- {
- if (substr($value, -1, 1) === '*')
- {
- list($image_filename, $image_height) = explode('*', $value);
- $image_width = 0;
- }
- else
- {
- list($image_filename, $image_height, $image_width) = explode('*', $value);
- }
- }
- else
- {
- $image_filename = $value;
- $image_height = $image_width = 0;
- }
-
- if (strpos($image_name, 'img_') === 0 && $image_filename)
- {
- $image_name = substr($image_name, 4);
- if (in_array($image_name, $imageset_definitions))
- {
- $sql_ary[] = array(
- 'image_name' => (string) $image_name,
- 'image_filename' => (string) $image_filename,
- 'image_height' => (int) $image_height,
- 'image_width' => (int) $image_width,
- 'imageset_id' => (int) $style_id,
- 'image_lang' => '',
- );
- }
- }
- }
-
- $sql = 'SELECT lang_dir
- FROM ' . LANG_TABLE;
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- if (@file_exists("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$row['lang_dir']}/imageset.cfg"))
- {
- $cfg_data_imageset_data = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$row['lang_dir']}/imageset.cfg");
- foreach ($cfg_data_imageset_data as $image_name => $value)
- {
- if (strpos($value, '*') !== false)
- {
- if (substr($value, -1, 1) === '*')
- {
- list($image_filename, $image_height) = explode('*', $value);
- $image_width = 0;
- }
- else
- {
- list($image_filename, $image_height, $image_width) = explode('*', $value);
- }
- }
- else
- {
- $image_filename = $value;
- $image_height = $image_width = 0;
- }
-
- if (strpos($image_name, 'img_') === 0 && $image_filename)
- {
- $image_name = substr($image_name, 4);
- if (in_array($image_name, $imageset_definitions))
- {
- $sql_ary[] = array(
- 'image_name' => (string) $image_name,
- 'image_filename' => (string) $image_filename,
- 'image_height' => (int) $image_height,
- 'image_width' => (int) $image_width,
- 'imageset_id' => (int) $style_id,
- 'image_lang' => (string) $row['lang_dir'],
- );
- }
- }
- }
- }
- }
- $db->sql_freeresult($result);
-
- $db->sql_multi_insert(STYLES_IMAGESET_DATA_TABLE, $sql_ary);
-
- $db->sql_transaction('commit');
-
- $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
- $cache->destroy('imageset_site_logo_md5');
-
- add_log('admin', 'LOG_IMAGESET_REFRESHED', $imageset_row['imageset_name']);
- trigger_error($user->lang['IMAGESET_REFRESHED'] . adm_back_link($this->u_action));
- }
- else
- {
- confirm_box(false, $user->lang['CONFIRM_IMAGESET_REFRESH'], build_hidden_fields(array(
- 'i' => $id,
- 'mode' => $mode,
- 'action' => $action,
- 'id' => $style_id
- )));
- }
- break;
- }
-
- $this->frontend('imageset', array('edit', 'details'), array('refresh', 'export', 'delete'));
- break;
- }
- }
-
- /**
- * Build Frontend with supplied options
- */
- function frontend($mode, $options, $actions)
- {
- global $user, $template, $db, $config, $phpbb_root_path, $phpEx;
-
- $sql_from = '';
- $sql_sort = 'LOWER(' . $mode . '_name)';
- $style_count = array();
-
- switch ($mode)
+ if ($action && in_array($action, $post_actions) && !check_link_hash($request->variable('hash', ''), $action))
{
- case 'style':
- $sql_from = STYLES_TABLE;
- $sql_sort = 'style_active DESC, ' . $sql_sort;
-
- $sql = 'SELECT user_style, COUNT(user_style) AS style_count
- FROM ' . USERS_TABLE . '
- GROUP BY user_style';
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- $style_count[$row['user_style']] = $row['style_count'];
- }
- $db->sql_freeresult($result);
-
- break;
-
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
-
- default:
- trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- $l_prefix = strtoupper($mode);
-
- $this->page_title = 'ACP_' . $l_prefix . 'S';
-
- $template->assign_vars(array(
- 'S_FRONTEND' => true,
- 'S_STYLE' => ($mode == 'style') ? true : false,
-
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'L_NAME' => $user->lang[$l_prefix . '_NAME'],
- 'L_INSTALLED' => $user->lang['INSTALLED_' . $l_prefix],
- 'L_UNINSTALLED' => $user->lang['UNINSTALLED_' . $l_prefix],
- 'L_NO_UNINSTALLED' => $user->lang['NO_UNINSTALLED_' . $l_prefix],
- 'L_CREATE' => $user->lang['CREATE_' . $l_prefix],
-
- 'U_ACTION' => $this->u_action,
- )
- );
-
- $sql = "SELECT *
- FROM $sql_from
- ORDER BY $sql_sort ASC";
- $result = $db->sql_query($sql);
-
- $installed = array();
-
- $basis_options = '<option class="sep" value="">' . $user->lang['OPTIONAL_BASIS'] . '</option>';
- while ($row = $db->sql_fetchrow($result))
+ foreach ($post_actions as $key)
{
- $installed[] = $row[$mode . '_name'];
- $basis_options .= '<option value="' . $row[$mode . '_id'] . '">' . $row[$mode . '_name'] . '</option>';
-
- $stylevis = ($mode == 'style' && !$row['style_active']) ? 'activate' : 'deactivate';
-
- $s_options = array();
- foreach ($options as $option)
- {
- $s_options[] = '<a href="' . $this->u_action . "&amp;action=$option&amp;id=" . $row[$mode . '_id'] . '">' . $user->lang[strtoupper($option)] . '</a>';
- }
-
- $s_actions = array();
- foreach ($actions as $option)
+ if ($this->request->is_set_post($key))
{
- $s_actions[] = '<a href="' . $this->u_action . "&amp;action=$option&amp;id=" . $row[$mode . '_id'] . '">' . $user->lang[strtoupper($option)] . '</a>';
+ $action = $key;
}
-
- $template->assign_block_vars('installed', array(
- 'S_DEFAULT_STYLE' => ($mode == 'style' && $row['style_id'] == $config['default_style']) ? true : false,
- 'U_EDIT' => $this->u_action . '&amp;action=' . (($mode == 'style') ? 'details' : 'edit') . '&amp;id=' . $row[$mode . '_id'],
- 'U_STYLE_ACT_DEACT' => $this->u_action . '&amp;action=' . $stylevis . '&amp;id=' . $row[$mode . '_id'],
- 'L_STYLE_ACT_DEACT' => $user->lang['STYLE_' . strtoupper($stylevis)],
- 'S_OPTIONS' => implode(' | ', $s_options),
- 'S_ACTIONS' => implode(' | ', $s_actions),
- 'U_PREVIEW' => ($mode == 'style') ? append_sid("{$phpbb_root_path}index.$phpEx", "$mode=" . $row[$mode . '_id']) : '',
-
- 'NAME' => $row[$mode . '_name'],
- 'STYLE_COUNT' => ($mode == 'style' && isset($style_count[$row['style_id']])) ? $style_count[$row['style_id']] : 0,
-
- 'S_INACTIVE' => ($mode == 'style' && !$row['style_active']) ? true : false,
- )
- );
}
- $db->sql_freeresult($result);
- // Grab uninstalled items
- $new_ary = $cfg = array();
-
- $dp = @opendir("{$phpbb_root_path}styles");
-
- if ($dp)
+ if ($action != '')
{
- while (($file = readdir($dp)) !== false)
- {
- if ($file[0] == '.' || !is_dir($phpbb_root_path . 'styles/' . $file))
- {
- continue;
- }
-
- $subpath = ($mode != 'style') ? "$mode/" : '';
- if (file_exists("{$phpbb_root_path}styles/$file/$subpath$mode.cfg"))
- {
- if ($cfg = file("{$phpbb_root_path}styles/$file/$subpath$mode.cfg"))
- {
- $items = parse_cfg_file('', $cfg);
- $name = (isset($items['name'])) ? trim($items['name']) : false;
-
- if ($name && !in_array($name, $installed))
- {
- // The array key is used for sorting later on.
- // $file is appended because $name doesn't have to be unique.
- $new_ary[$name . $file] = array(
- 'path' => $file,
- 'name' => $name,
- 'copyright' => $items['copyright'],
- );
- }
- }
- }
- }
- closedir($dp);
+ $this->s_hidden_fields['action'] = $action;
}
- unset($installed);
+ $this->template->assign_vars(array(
+ 'U_ACTION' => $this->u_base_action,
+ 'S_HIDDEN_FIELDS' => build_hidden_fields($this->s_hidden_fields)
+ )
+ );
- if (sizeof($new_ary))
+ // Execute actions
+ switch ($action)
{
- ksort($new_ary);
-
- foreach ($new_ary as $cfg)
- {
- $template->assign_block_vars('uninstalled', array(
- 'NAME' => $cfg['name'],
- 'COPYRIGHT' => $cfg['copyright'],
- 'U_INSTALL' => $this->u_action . '&amp;action=install&amp;path=' . urlencode($cfg['path']))
- );
- }
+ case 'install':
+ $this->action_install();
+ return;
+ case 'uninstall':
+ $this->action_uninstall();
+ return;
+ case 'activate':
+ $this->action_activate();
+ return;
+ case 'deactivate':
+ $this->action_deactivate();
+ return;
+ case 'details':
+ $this->action_details();
+ return;
+ default:
+ $this->frontend();
}
- unset($new_ary);
-
- $template->assign_vars(array(
- 'S_BASIS_OPTIONS' => $basis_options)
- );
-
}
/**
- * Provides a template editor which allows saving changes to template files on the filesystem or in the database.
- *
- * @param int $template_id specifies which template set is being edited
+ * Main page
*/
- function edit_template($template_id)
+ protected function frontend()
{
- global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode;
-
- if (defined('PHPBB_DISABLE_ACP_EDITOR'))
+ // Check mode
+ switch ($this->mode)
{
- trigger_error($user->lang['EDITOR_DISABLED'] . adm_back_link($this->u_action));
+ case 'style':
+ $this->welcome_message('ACP_STYLES', 'ACP_STYLES_EXPLAIN');
+ $this->show_installed();
+ return;
+ case 'install':
+ $this->welcome_message('INSTALL_STYLES', 'INSTALL_STYLES_EXPLAIN');
+ $this->show_available();
+ return;
+ case 'cache':
+ $this->action_cache();
+ return;
}
+ trigger_error($this->user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
- $this->page_title = 'EDIT_TEMPLATE';
+ /**
+ * Purge cache
+ */
+ protected function action_cache()
+ {
+ global $db, $cache, $auth;
- $filelist = $filelist_cats = array();
+ $this->cache->purge();
- $template_data = utf8_normalize_nfc(request_var('template_data', '', true));
- $template_data = htmlspecialchars_decode($template_data);
- $template_file = utf8_normalize_nfc(request_var('template_file', '', true));
- $text_rows = max(5, min(999, request_var('text_rows', 20)));
- $save_changes = (isset($_POST['save'])) ? true : false;
+ // Clear permissions
+ $this->auth->acl_clear_prefetch();
+ phpbb_cache_moderators($db, $cache, $auth);
- // make sure template_file path doesn't go upwards
- $template_file = preg_replace('#\.{2,}#', '.', $template_file);
+ add_log('admin', 'LOG_PURGE_CACHE');
- // Retrieve some information about the template
- $sql = 'SELECT template_storedb, template_path, template_name
- FROM ' . STYLES_TEMPLATE_TABLE . "
- WHERE template_id = $template_id";
- $result = $db->sql_query($sql);
- $template_info = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
+ trigger_error($this->user->lang['PURGED_CACHE'] . adm_back_link($this->u_base_action), E_USER_NOTICE);
+ }
- if (!$template_info)
- {
- trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
+ /**
+ * Install style(s)
+ */
+ protected function action_install()
+ {
+ // Get list of styles to install
+ $dirs = $this->request_vars('dir', '', true);
- if ($save_changes && !check_form_key('acp_styles'))
- {
- trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
- else if (!$save_changes)
- {
- add_form_key('acp_styles');
- }
+ // Get list of styles that can be installed
+ $styles = $this->find_available(false);
- // save changes to the template if the user submitted any
- if ($save_changes && $template_file)
+ // Install each style
+ $messages = array();
+ $installed_names = array();
+ $installed_dirs = array();
+ $last_installed = false;
+ foreach ($dirs as $dir)
{
- // Get the filesystem location of the current file
- $file = "{$phpbb_root_path}styles/{$template_info['template_path']}/template/$template_file";
- $additional = '';
-
- // If the template is stored on the filesystem try to write the file else store it in the database
- if (!$safe_mode && !$template_info['template_storedb'] && file_exists($file) && phpbb_is_writable($file))
+ $found = false;
+ foreach ($styles as &$style)
{
- if (!($fp = @fopen($file, 'wb')))
+ // Check if:
+ // 1. Directory matches directory we are looking for
+ // 2. Style is not installed yet
+ // 3. Style with same name or directory hasn't been installed already within this function
+ if ($style['style_path'] == $dir && empty($style['_installed']) && !in_array($style['style_path'], $installed_dirs) && !in_array($style['style_name'], $installed_names))
{
- // File exists and is writeable, but still not able to be written to
- trigger_error(sprintf($user->lang['TEMPLATE_FILE_NOT_WRITABLE'], htmlspecialchars($template_file)) . adm_back_link($this->u_action), E_USER_WARNING);
+ // Install style
+ $style['style_active'] = 1;
+ $style['style_id'] = $this->install_style($style);
+ $style['_installed'] = true;
+ $found = true;
+ $last_installed = $style['style_id'];
+ $installed_names[] = $style['style_name'];
+ $installed_dirs[] = $style['style_path'];
+ $messages[] = sprintf($this->user->lang['STYLE_INSTALLED'], htmlspecialchars($style['style_name']));
}
- fwrite($fp, $template_data);
- fclose($fp);
}
- else
+ if (!$found)
{
- $db->sql_transaction('begin');
-
- // If it's not stored in the db yet, then update the template setting and store all template files in the db
- if (!$template_info['template_storedb'])
- {
- if ($super = $this->get_super('template', $template_id))
- {
- $this->store_in_db('template', $super['template_id']);
- }
- else
- {
- $this->store_in_db('template', $template_id);
- }
-
- add_log('admin', 'LOG_TEMPLATE_EDIT_DETAILS', $template_info['template_name']);
- $additional .= '<br />' . $user->lang['EDIT_TEMPLATE_STORED_DB'];
- }
-
- // Update the template_data table entry for this template file
- $sql = 'UPDATE ' . STYLES_TEMPLATE_DATA_TABLE . "
- SET template_data = '" . $db->sql_escape($template_data) . "', template_mtime = " . time() . "
- WHERE template_id = $template_id
- AND template_filename = '" . $db->sql_escape($template_file) . "'";
- $db->sql_query($sql);
-
- $db->sql_transaction('commit');
+ $messages[] = sprintf($this->user->lang['STYLE_NOT_INSTALLED'], htmlspecialchars($dir));
}
-
- // destroy the cached version of the template (filename without extension)
- $this->clear_template_cache($template_info, array(substr($template_file, 0, -5)));
-
- $cache->destroy('sql', STYLES_TABLE);
-
- add_log('admin', 'LOG_TEMPLATE_EDIT', $template_info['template_name'], $template_file);
- trigger_error($user->lang['TEMPLATE_FILE_UPDATED'] . $additional . adm_back_link($this->u_action . "&amp;action=edit&amp;id=$template_id&amp;text_rows=$text_rows&amp;template_file=$template_file"));
}
- // Generate a category array containing template filenames
- if (!$template_info['template_storedb'])
+ // Show message
+ if (!count($messages))
{
- $template_path = "{$phpbb_root_path}styles/{$template_info['template_path']}/template";
-
- $filelist = filelist($template_path, '', 'html');
- $filelist[''] = array_diff($filelist[''], array('bbcode.html'));
-
- if ($template_file)
- {
- if (!file_exists($template_path . "/$template_file") || !($template_data = file_get_contents($template_path . "/$template_file")))
- {
- trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
- }
- }
- else
- {
- $sql = 'SELECT *
- FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = $template_id";
- $result = $db->sql_query($sql);
-
- $filelist = array('' => array());
- while ($row = $db->sql_fetchrow($result))
- {
- $file_info = pathinfo($row['template_filename']);
-
- if (($file_info['basename'] != 'bbcode') && ($file_info['extension'] == 'html'))
- {
- if (($file_info['dirname'] == '.') || empty($file_info['dirname']))
- {
- $filelist[''][] = $row['template_filename'];
- }
- else
- {
- $filelist[$file_info['dirname'] . '/'][] = $file_info['basename'];
- }
- }
-
- if ($row['template_filename'] == $template_file)
- {
- $template_data = $row['template_data'];
- }
- }
- $db->sql_freeresult($result);
- unset($file_info);
+ trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
}
+ $message = implode('<br />', $messages);
+ $message .= '<br /><br />' . sprintf($this->user->lang['STYLE_INSTALLED_RETURN_STYLES'], $this->u_base_action . '&amp;mode=style');
+ $message .= '<br /><br />' . sprintf($this->user->lang['STYLE_INSTALLED_RETURN_UNINSTALLED'], $this->u_base_action . '&amp;mode=install');
+ trigger_error($message, E_USER_NOTICE);
+ }
- if (empty($filelist['']))
- {
- trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
+ /**
+ * Confirm styles removal
+ */
+ protected function action_uninstall()
+ {
+ // Get list of styles to uninstall
+ $ids = $this->request_vars('id', 0, true);
- // Now create the categories
- $filelist_cats[''] = array();
- foreach ($filelist as $pathfile => $file_ary)
+ // Check if confirmation box was submitted
+ if (confirm_box(true))
{
- // Use the directory name as category name
- if (!empty($pathfile))
- {
- $filelist_cats[$pathfile] = array();
- foreach ($file_ary as $file)
- {
- $filelist_cats[$pathfile][$pathfile . $file] = $file;
- }
- }
- // or if it's in the main category use the word before the first underscore to group files
- else
- {
- $cats = array();
- foreach ($file_ary as $file)
- {
- $cats[] = substr($file, 0, strpos($file, '_'));
- $filelist_cats[substr($file, 0, strpos($file, '_'))][$file] = $file;
- }
-
- $cats = array_values(array_unique($cats));
-
- // we don't need any single element categories so put them into the misc '' category
- for ($i = 0, $n = sizeof($cats); $i < $n; $i++)
- {
- if (sizeof($filelist_cats[$cats[$i]]) == 1 && $cats[$i] !== '')
- {
- $filelist_cats[''][key($filelist_cats[$cats[$i]])] = current($filelist_cats[$cats[$i]]);
- unset($filelist_cats[$cats[$i]]);
- }
- }
- unset($cats);
- }
+ // Uninstall
+ $this->action_uninstall_confirmed($ids, $this->request->variable('confirm_delete_files', false));
+ return;
}
- unset($filelist);
-
- // Generate list of categorised template files
- $tpl_options = '';
- ksort($filelist_cats);
- foreach ($filelist_cats as $category => $tpl_ary)
- {
- ksort($tpl_ary);
-
- if (!empty($category))
- {
- $tpl_options .= '<option class="sep" value="">' . $category . '</option>';
- }
- foreach ($tpl_ary as $filename => $file)
- {
- $selected = ($template_file == $filename) ? ' selected="selected"' : '';
- $tpl_options .= '<option value="' . $filename . '"' . $selected . '>' . $file . '</option>';
- }
- }
+ // Confirm box
+ $s_hidden = build_hidden_fields(array(
+ 'action' => 'uninstall',
+ 'ids' => $ids
+ ));
+ $this->template->assign_var('S_CONFIRM_DELETE', true);
+ confirm_box(false, $this->user->lang['CONFIRM_UNINSTALL_STYLES'], $s_hidden, 'acp_styles.html');
- $template->assign_vars(array(
- 'S_EDIT_TEMPLATE' => true,
- 'S_HIDDEN_FIELDS' => build_hidden_fields(array('template_file' => $template_file)),
- 'S_TEMPLATES' => $tpl_options,
-
- 'U_ACTION' => $this->u_action . "&amp;action=edit&amp;id=$template_id&amp;text_rows=$text_rows",
- 'U_BACK' => $this->u_action,
-
- 'L_EDIT' => $user->lang['EDIT_TEMPLATE'],
- 'L_EDIT_EXPLAIN' => $user->lang['EDIT_TEMPLATE_EXPLAIN'],
- 'L_EDITOR' => $user->lang['TEMPLATE_EDITOR'],
- 'L_EDITOR_HEIGHT' => $user->lang['TEMPLATE_EDITOR_HEIGHT'],
- 'L_FILE' => $user->lang['TEMPLATE_FILE'],
- 'L_SELECT' => $user->lang['SELECT_TEMPLATE'],
- 'L_SELECTED' => $user->lang['SELECTED_TEMPLATE'],
- 'L_SELECTED_FILE' => $user->lang['SELECTED_TEMPLATE_FILE'],
-
- 'SELECTED_TEMPLATE' => $template_info['template_name'],
- 'TEMPLATE_FILE' => $template_file,
- 'TEMPLATE_DATA' => utf8_htmlspecialchars($template_data),
- 'TEXT_ROWS' => $text_rows)
- );
+ // Canceled - show styles list
+ $this->frontend();
}
/**
- * Allows the admin to view cached versions of template files and clear single template cache files
+ * Uninstall styles(s)
*
- * @param int $template_id specifies which template's cache is shown
+ * @param array $ids List of style IDs
+ * @param bool $delete_files If true, script will attempt to remove files for selected styles
*/
- function template_cache($template_id)
+ protected function action_uninstall_confirmed($ids, $delete_files)
{
- global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
+ $default = $this->default_style;
+ $uninstalled = array();
+ $messages = array();
- $source = str_replace('/', '.', request_var('source', ''));
- $file_ary = array_diff(request_var('delete', array('')), array(''));
- $submit = isset($_POST['submit']) ? true : false;
-
- $sql = 'SELECT *
- FROM ' . STYLES_TEMPLATE_TABLE . "
- WHERE template_id = $template_id";
- $result = $db->sql_query($sql);
- $template_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$template_row)
+ // Check styles list
+ foreach ($ids as $id)
{
- trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- // User wants to delete one or more files ...
- if ($submit && $file_ary)
- {
- $this->clear_template_cache($template_row, $file_ary);
- trigger_error($user->lang['TEMPLATE_CACHE_CLEARED'] . adm_back_link($this->u_action . "&amp;action=cache&amp;id=$template_id"));
- }
-
- $cache_prefix = 'tpl_' . str_replace('_', '-', $template_row['template_path']);
-
- // Someone wants to see the cached source ... so we'll highlight it,
- // add line numbers and indent it appropriately. This could be nasty
- // on larger source files ...
- if ($source && file_exists("{$phpbb_root_path}cache/{$cache_prefix}_$source.html.$phpEx"))
- {
- adm_page_header($user->lang['TEMPLATE_CACHE']);
-
- $template->set_filenames(array(
- 'body' => 'viewsource.html')
- );
-
- $template->assign_vars(array(
- 'FILENAME' => str_replace('.', '/', $source) . '.html')
- );
-
- $code = str_replace(array("\r\n", "\r"), array("\n", "\n"), file_get_contents("{$phpbb_root_path}cache/{$cache_prefix}_$source.html.$phpEx"));
-
- $conf = array('highlight.bg', 'highlight.comment', 'highlight.default', 'highlight.html', 'highlight.keyword', 'highlight.string');
- foreach ($conf as $ini_var)
+ if (!$id)
{
- @ini_set($ini_var, str_replace('highlight.', 'syntax', $ini_var));
+ trigger_error($this->user->lang['INVALID_STYLE_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
-
- $marker = 'MARKER' . time();
- $code = highlight_string(str_replace("\n", $marker, $code), true);
- $code = str_replace($marker, "\n", $code);
- $str_from = array('<span style="color: ', '<font color="syntax', '</font>', '<code>', '</code>','[', ']', '.', ':');
- $str_to = array('<span class="', '<span class="syntax', '</span>', '', '', '&#91;', '&#93;', '&#46;', '&#58;');
-
- $code = str_replace($str_from, $str_to, $code);
- $code = preg_replace('#^(<span class="[a-z_]+">)\n?(.*?)\n?(</span>)$#ism', '$1$2$3', $code);
- $code = substr($code, strlen('<span class="syntaxhtml">'));
- $code = substr($code, 0, -1 * strlen('</ span>'));
- $code = explode("\n", $code);
-
- foreach ($code as $key => $line)
+ if ($id == $default)
{
- $template->assign_block_vars('source', array(
- 'LINENUM' => $key + 1,
- 'LINE' => preg_replace('#([^ ;])&nbsp;([^ &])#', '$1 $2', $line))
- );
- unset($code[$key]);
+ trigger_error($this->user->lang['UNINSTALL_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING);
}
-
- adm_page_footer();
+ $uninstalled[$id] = false;
}
- $filemtime = array();
- if ($template_row['template_storedb'])
- {
- $ids = array();
- if (isset($template_row['template_inherits_id']) && $template_row['template_inherits_id'])
- {
- $ids[] = $template_row['template_inherits_id'];
- }
- $ids[] = $template_row['template_id'];
-
- $filemtime = array();
- $file_template_db = array();
-
- foreach ($ids as $id)
- {
- $sql = 'SELECT template_filename, template_mtime
- FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = $id";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- $filemtime[$row['template_filename']] = $row['template_mtime'];
- $file_template_db[$row['template_filename']] = $id;
- }
- $db->sql_freeresult($result);
- }
- }
+ // Order by reversed style_id, so parent styles would be removed after child styles
+ // This way parent and child styles can be removed in same function call
+ $sql = 'SELECT *
+ FROM ' . STYLES_TABLE . '
+ WHERE style_id IN (' . implode(', ', $ids) . ')
+ ORDER BY style_id DESC';
+ $result = $this->db->sql_query($sql);
- // Get a list of cached template files and then retrieve additional information about them
- $file_ary = $this->template_cache_filelist($template_row['template_path']);
+ $rows = $this->db->sql_fetchrowset($result);
+ $this->db->sql_freeresult($result);
- foreach ($file_ary as $file)
+ // Uinstall each style
+ $uninstalled = array();
+ foreach ($rows as $style)
{
- $file = str_replace('/', '.', $file);
-
- // perform some dirty guessing to get the path right.
- // We assume that three dots in a row were '../'
- $tpl_file = str_replace('.', '/', $file);
- $tpl_file = str_replace('///', '../', $tpl_file);
-
- $filename = "{$cache_prefix}_$file.html.$phpEx";
+ $result = $this->uninstall_style($style, $delete_files);
- if (!file_exists("{$phpbb_root_path}cache/$filename"))
+ if (is_string($result))
{
+ $messages[] = $result;
continue;
}
+ $messages[] = sprintf($this->user->lang['STYLE_UNINSTALLED'], $style['style_name']);
+ $uninstalled[] = $style['style_name'];
- $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_path']}/template/$tpl_file.html";
- $inherited = false;
-
- if (isset($template_row['template_inherits_id']) && $template_row['template_inherits_id'])
- {
- if (!$template_row['template_storedb'])
- {
- if (!file_exists($file_tpl))
- {
- $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_inherit_path']}/template/$tpl_file.html";
- $inherited = true;
- }
- }
- else
- {
- if ($file_template_db[$file . '.html'] == $template_row['template_inherits_id'])
- {
- $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_inherit_path']}/template/$tpl_file.html";
- $inherited = true;
- }
- }
- }
-
- // Correct the filename if it is stored in database and the file is in a subfolder.
- if ($template_row['template_storedb'])
+ // Attempt to delete files
+ if ($delete_files)
{
- $file = str_replace('.', '/', $file);
+ $messages[] = sprintf($this->user->lang[$this->delete_style_files($style['style_path']) ? 'DELETE_STYLE_FILES_SUCCESS' : 'DELETE_STYLE_FILES_FAILED'], $style['style_name']);
}
+ }
- $template->assign_block_vars('file', array(
- 'U_VIEWSOURCE' => $this->u_action . "&amp;action=cache&amp;id=$template_id&amp;source=$file",
+ if (empty($messages))
+ {
+ // Nothing to uninstall?
+ trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
- 'CACHED' => $user->format_date(filemtime("{$phpbb_root_path}cache/$filename")),
- 'FILENAME' => $file,
- 'FILENAME_PATH' => $file_tpl,
- 'FILESIZE' => get_formatted_filesize(filesize("{$phpbb_root_path}cache/$filename")),
- 'MODIFIED' => $user->format_date((!$template_row['template_storedb']) ? filemtime($file_tpl) : $filemtime[$file . '.html']))
- );
+ // Log action
+ if (count($uninstalled))
+ {
+ add_log('admin', 'LOG_STYLE_DELETE', implode(', ', $uninstalled));
}
- unset($filemtime);
- $template->assign_vars(array(
- 'S_CACHE' => true,
- 'S_TEMPLATE' => true,
+ // Clear cache
+ $this->cache->purge();
- 'U_ACTION' => $this->u_action . "&amp;action=cache&amp;id=$template_id",
- 'U_BACK' => $this->u_action)
- );
+ // Show message
+ trigger_error(implode('<br />', $messages) . adm_back_link($this->u_action), E_USER_NOTICE);
}
/**
- * Provides a css editor and a basic easier to use stylesheet editing tool for less experienced (or lazy) users
- *
- * @param int $theme_id specifies which theme is being edited
+ * Activate styles
*/
- function edit_theme($theme_id)
+ protected function action_activate()
{
- global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode;
-
- $this->page_title = 'EDIT_THEME';
-
- $filelist = $filelist_cats = array();
-
- $theme_data = utf8_normalize_nfc(request_var('template_data', '', true));
- $theme_data = htmlspecialchars_decode($theme_data);
- $theme_file = utf8_normalize_nfc(request_var('template_file', '', true));
- $text_rows = max(5, min(999, request_var('text_rows', 20)));
- $save_changes = (isset($_POST['save'])) ? true : false;
-
- // make sure theme_file path doesn't go upwards
- $theme_file = str_replace('..', '.', $theme_file);
-
- // Retrieve some information about the theme
- $sql = 'SELECT theme_storedb, theme_path, theme_name, theme_data
- FROM ' . STYLES_THEME_TABLE . "
- WHERE theme_id = $theme_id";
- $result = $db->sql_query($sql);
-
- if (!($theme_info = $db->sql_fetchrow($result)))
- {
- trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
- $db->sql_freeresult($result);
-
- // save changes to the theme if the user submitted any
- if ($save_changes)
- {
- // Get the filesystem location of the current file
- $file = "{$phpbb_root_path}styles/{$theme_info['theme_path']}/theme/$theme_file";
- $additional = '';
- $message = $user->lang['THEME_UPDATED'];
-
- // If the theme is stored on the filesystem try to write the file else store it in the database
- if (!$safe_mode && !$theme_info['theme_storedb'] && file_exists($file) && phpbb_is_writable($file))
- {
- if (!($fp = @fopen($file, 'wb')))
- {
- trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
- fwrite($fp, $theme_data);
- fclose($fp);
- }
- else
- {
- // Write stylesheet to db
- $sql_ary = array(
- 'theme_mtime' => time(),
- 'theme_storedb' => 1,
- 'theme_data' => $this->db_theme_data($theme_info, $theme_data),
- );
- $sql = 'UPDATE ' . STYLES_THEME_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
- WHERE theme_id = ' . $theme_id;
- $db->sql_query($sql);
-
- $cache->destroy('sql', STYLES_THEME_TABLE);
+ // Get list of styles to activate
+ $ids = $this->request_vars('id', 0, true);
- // notify the user if the theme was not stored in the db before his modification
- if (!$theme_info['theme_storedb'])
- {
- add_log('admin', 'LOG_THEME_EDIT_DETAILS', $theme_info['theme_name']);
- $message .= '<br />' . $user->lang['EDIT_THEME_STORED_DB'];
- }
- }
- $cache->destroy('sql', STYLES_THEME_TABLE);
- add_log('admin', (!$theme_info['theme_storedb']) ? 'LOG_THEME_EDIT_FILE' : 'LOG_THEME_EDIT', $theme_info['theme_name'], (!$theme_info['theme_storedb']) ? $theme_file : '');
-
- trigger_error($message . adm_back_link($this->u_action . "&amp;action=edit&amp;id=$theme_id&amp;template_file=$theme_file&amp;text_rows=$text_rows"));
- }
+ // Activate styles
+ $sql = 'UPDATE ' . STYLES_TABLE . '
+ SET style_active = 1
+ WHERE style_id IN (' . implode(', ', $ids) . ')';
+ $this->db->sql_query($sql);
- // Generate a category array containing theme filenames
- if (!$theme_info['theme_storedb'])
- {
- $theme_path = "{$phpbb_root_path}styles/{$theme_info['theme_path']}/theme";
+ // Purge cache
+ $this->cache->destroy('sql', STYLES_TABLE);
- $filelist = filelist($theme_path, '', 'css');
+ // Show styles list
+ $this->frontend();
+ }
- if ($theme_file)
- {
- if (!file_exists($theme_path . "/$theme_file") || !($theme_data = file_get_contents($theme_path . "/$theme_file")))
- {
- trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
- }
- }
- else
- {
- $theme_data = &$theme_info['theme_data'];
- }
+ /**
+ * Deactivate styles
+ */
+ protected function action_deactivate()
+ {
+ // Get list of styles to deactivate
+ $ids = $this->request_vars('id', 0, true);
- // Now create the categories
- $filelist_cats[''] = array();
- foreach ($filelist as $pathfile => $file_ary)
+ // Check for default style
+ foreach ($ids as $id)
{
- // Use the directory name as category name
- if (!empty($pathfile))
+ if ($id == $this->default_style)
{
- $filelist_cats[$pathfile] = array();
- foreach ($file_ary as $file)
- {
- $filelist_cats[$pathfile][$pathfile . $file] = $file;
- }
- }
- // or if it's in the main category use the word before the first underscore to group files
- else
- {
- $cats = array();
- foreach ($file_ary as $file)
- {
- $cats[] = substr($file, 0, strpos($file, '_'));
- $filelist_cats[substr($file, 0, strpos($file, '_'))][$file] = $file;
- }
-
- $cats = array_values(array_unique($cats));
-
- // we don't need any single element categories so put them into the misc '' category
- for ($i = 0, $n = sizeof($cats); $i < $n; $i++)
- {
- if (sizeof($filelist_cats[$cats[$i]]) == 1 && $cats[$i] !== '')
- {
- $filelist_cats[''][key($filelist_cats[$cats[$i]])] = current($filelist_cats[$cats[$i]]);
- unset($filelist_cats[$cats[$i]]);
- }
- }
- unset($cats);
+ trigger_error($this->user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING);
}
}
- unset($filelist);
- // Generate list of categorised theme files
- $tpl_options = '';
- ksort($filelist_cats);
- foreach ($filelist_cats as $category => $tpl_ary)
- {
- ksort($tpl_ary);
+ // Reset default style for users who use selected styles
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET user_style = 0
+ WHERE user_style IN (' . implode(', ', $ids) . ')';
+ $this->db->sql_query($sql);
- if (!empty($category))
- {
- $tpl_options .= '<option class="sep" value="">' . $category . '</option>';
- }
+ // Deactivate styles
+ $sql = 'UPDATE ' . STYLES_TABLE . '
+ SET style_active = 0
+ WHERE style_id IN (' . implode(', ', $ids) . ')';
+ $this->db->sql_query($sql);
- foreach ($tpl_ary as $filename => $file)
- {
- $selected = ($theme_file == $filename) ? ' selected="selected"' : '';
- $tpl_options .= '<option value="' . $filename . '"' . $selected . '>' . $file . '</option>';
- }
- }
+ // Purge cache
+ $this->cache->destroy('sql', STYLES_TABLE);
- $template->assign_vars(array(
- 'S_EDIT_THEME' => true,
- 'S_HIDDEN_FIELDS' => build_hidden_fields(array('template_file' => $theme_file)),
- 'S_THEME_IN_DB' => $theme_info['theme_storedb'],
- 'S_TEMPLATES' => $tpl_options,
-
- 'U_ACTION' => $this->u_action . "&amp;action=edit&amp;id=$theme_id&amp;text_rows=$text_rows",
- 'U_BACK' => $this->u_action,
-
- 'L_EDIT' => $user->lang['EDIT_THEME'],
- 'L_EDIT_EXPLAIN' => $user->lang['EDIT_THEME_EXPLAIN'],
- 'L_EDITOR' => $user->lang['THEME_EDITOR'],
- 'L_EDITOR_HEIGHT' => $user->lang['THEME_EDITOR_HEIGHT'],
- 'L_FILE' => $user->lang['THEME_FILE'],
- 'L_SELECT' => $user->lang['SELECT_THEME'],
- 'L_SELECTED' => $user->lang['SELECTED_THEME'],
- 'L_SELECTED_FILE' => $user->lang['SELECTED_THEME_FILE'],
-
- 'SELECTED_TEMPLATE' => $theme_info['theme_name'],
- 'TEMPLATE_FILE' => $theme_file,
- 'TEMPLATE_DATA' => utf8_htmlspecialchars($theme_data),
- 'TEXT_ROWS' => $text_rows)
- );
+ // Show styles list
+ $this->frontend();
}
/**
- * Edit imagesets
- *
- * @param int $imageset_id specifies which imageset is being edited
+ * Show style details
*/
- function edit_imageset($imageset_id)
+ protected function action_details()
{
- global $db, $user, $phpbb_root_path, $cache, $template;
-
- $this->page_title = 'EDIT_IMAGESET';
-
- if (!$imageset_id)
+ $id = $this->request->variable('id', 0);
+ if (!$id)
{
- trigger_error($user->lang['NO_IMAGESET'] . adm_back_link($this->u_action), E_USER_WARNING);
+ trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- $update = (isset($_POST['update'])) ? true : false;
-
- $imgname = request_var('imgname', 'site_logo');
- $imgname = preg_replace('#[^a-z0-9\-+_]#i', '', $imgname);
- $sql_extra = $imgnamelang = '';
-
- $sql = 'SELECT imageset_path, imageset_name
- FROM ' . STYLES_IMAGESET_TABLE . "
- WHERE imageset_id = $imageset_id";
- $result = $db->sql_query($sql);
- $imageset_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$imageset_row)
- {
- trigger_error($user->lang['NO_IMAGESET'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- $imageset_path = $imageset_row['imageset_path'];
- $imageset_name = $imageset_row['imageset_name'];
-
- if (strpos($imgname, '-') !== false)
- {
- list($imgname, $imgnamelang) = explode('-', $imgname);
- $sql_extra = " AND image_lang IN ('" . $db->sql_escape($imgnamelang) . "', '')";
- }
+ // Get all styles
+ $styles = $this->get_styles();
+ usort($styles, array($this, 'sort_styles'));
- $sql = 'SELECT image_filename, image_width, image_height, image_lang, image_id
- FROM ' . STYLES_IMAGESET_DATA_TABLE . "
- WHERE imageset_id = $imageset_id
- AND image_name = '" . $db->sql_escape($imgname) . "'$sql_extra";
- $result = $db->sql_query($sql);
- $imageset_data_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $image_filename = $imageset_data_row['image_filename'];
- $image_width = $imageset_data_row['image_width'];
- $image_height = $imageset_data_row['image_height'];
- $image_lang = $imageset_data_row['image_lang'];
- $image_id = $imageset_data_row['image_id'];
- $imgsize = ($imageset_data_row['image_width'] && $imageset_data_row['image_height']) ? 1 : 0;
-
- // Check to see whether the selected image exists in the table
- $valid_name = ($update) ? false : true;
-
- foreach ($this->imageset_keys as $category => $img_ary)
+ // Find current style
+ $style = false;
+ foreach ($styles as $row)
{
- if (in_array($imgname, $img_ary))
+ if ($row['style_id'] == $id)
{
- $valid_name = true;
+ $style = $row;
break;
}
}
- if ($update && isset($_POST['imgpath']) && $valid_name)
+ if ($style === false)
{
- // If imgwidth and imgheight are non-zero grab the actual size
- // from the image itself ... we ignore width settings for the poll center image
- $imgwidth = request_var('imgwidth', 0);
- $imgheight = request_var('imgheight', 0);
- $imgsize = request_var('imgsize', 0);
- $imgpath = request_var('imgpath', '');
- $imgpath = str_replace('..', '.', $imgpath);
-
- // If no dimensions selected, we reset width and height to 0 ;)
- if (!$imgsize)
- {
- $imgwidth = $imgheight = 0;
- }
-
- $imglang = '';
+ trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
+ }
- if ($imgpath && !file_exists("{$phpbb_root_path}styles/$imageset_path/imageset/$imgpath"))
- {
- trigger_error($user->lang['NO_IMAGE_ERROR'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
+ // Find all available parent styles
+ $list = $this->find_possible_parents($styles, $id);
- // Determine width/height. If dimensions included and no width/height given, we detect them automatically...
- if ($imgsize && $imgpath)
- {
- if (!$imgwidth || !$imgheight)
- {
- list($imgwidth_file, $imgheight_file) = getimagesize("{$phpbb_root_path}styles/$imageset_path/imageset/$imgpath");
- $imgwidth = ($imgwidth) ? $imgwidth : $imgwidth_file;
- $imgheight = ($imgheight) ? $imgheight : $imgheight_file;
- }
- $imgwidth = ($imgname != 'poll_center') ? (int) $imgwidth : 0;
- $imgheight = (int) $imgheight;
- }
+ // Add form key
+ $form_key = 'acp_styles';
+ add_form_key($form_key);
- if (strpos($imgpath, '/') !== false)
- {
- list($imglang, $imgfilename) = explode('/', $imgpath);
- }
- else
+ // Change data
+ if ($this->request->variable('update', false))
+ {
+ if (!check_form_key($form_key))
{
- $imgfilename = $imgpath;
+ trigger_error($this->user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- $sql_ary = array(
- 'image_filename' => (string) $imgfilename,
- 'image_width' => (int) $imgwidth,
- 'image_height' => (int) $imgheight,
- 'image_lang' => (string) $imglang,
+ $update = array(
+ 'style_name' => trim($this->request->variable('style_name', $style['style_name'])),
+ 'style_parent_id' => $this->request->variable('style_parent', (int) $style['style_parent_id']),
+ 'style_active' => $this->request->variable('style_active', (int) $style['style_active']),
);
+ $update_action = $this->u_action . '&amp;action=details&amp;id=' . $id;
- // already exists
- if ($imageset_data_row)
- {
- $sql = 'UPDATE ' . STYLES_IMAGESET_DATA_TABLE . '
- SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
- WHERE image_id = $image_id";
- $db->sql_query($sql);
- }
- // does not exist
- else if (!$imageset_data_row)
- {
- $sql_ary['image_name'] = $imgname;
- $sql_ary['imageset_id'] = (int) $imageset_id;
- $db->sql_query('INSERT INTO ' . STYLES_IMAGESET_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
- }
-
- $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
-
- add_log('admin', 'LOG_IMAGESET_EDIT', $imageset_name);
-
- $template->assign_var('SUCCESS', true);
-
- $image_filename = $imgfilename;
- $image_width = $imgwidth;
- $image_height = $imgheight;
- $image_lang = $imglang;
- }
-
- $imglang = '';
- $imagesetlist = array('nolang' => array(), 'lang' => array());
- $langs = array();
-
- $dir = "{$phpbb_root_path}styles/$imageset_path/imageset";
- $dp = @opendir($dir);
-
- if ($dp)
- {
- while (($file = readdir($dp)) !== false)
+ // Check style name
+ if ($update['style_name'] != $style['style_name'])
{
- if ($file[0] != '.' && strtoupper($file) != 'CVS' && !is_file($dir . '/' . $file) && !is_link($dir . '/' . $file))
+ if (!strlen($update['style_name']))
{
- $langs[] = $file;
+ trigger_error($this->user->lang['STYLE_ERR_STYLE_NAME'] . adm_back_link($update_action), E_USER_WARNING);
}
- else if (preg_match('#\.(?:gif|jpg|png)$#', $file))
+ foreach ($styles as $row)
{
- $imagesetlist['nolang'][] = $file;
+ if ($row['style_name'] == $update['style_name'])
+ {
+ trigger_error($this->user->lang['STYLE_ERR_NAME_EXIST'] . adm_back_link($update_action), E_USER_WARNING);
+ }
}
}
-
- if ($sql_extra)
+ else
{
- $dp2 = @opendir("$dir/$imgnamelang");
+ unset($update['style_name']);
+ }
- if ($dp2)
+ // Check parent style id
+ if ($update['style_parent_id'] != $style['style_parent_id'])
+ {
+ if ($update['style_parent_id'] != 0)
{
- while (($file2 = readdir($dp2)) !== false)
+ $found = false;
+ foreach ($list as $row)
{
- if (preg_match('#\.(?:gif|jpg|png)$#', $file2))
+ if ($row['style_id'] == $update['style_parent_id'])
{
- $imagesetlist['lang'][] = "$imgnamelang/$file2";
+ $found = true;
+ $update['style_parent_tree'] = ($row['style_parent_tree'] != '' ? $row['style_parent_tree'] . '/' : '') . $row['style_path'];
+ break;
}
}
- closedir($dp2);
- }
- }
- closedir($dp);
- }
-
- // Generate list of image options
- $img_options = '';
- foreach ($this->imageset_keys as $category => $img_ary)
- {
- $template->assign_block_vars('category', array(
- 'NAME' => $user->lang['IMG_CAT_' . strtoupper($category)]
- ));
-
- foreach ($img_ary as $img)
- {
- if ($category == 'buttons')
- {
- foreach ($langs as $language)
+ if (!$found)
{
- $template->assign_block_vars('category.images', array(
- 'SELECTED' => ($img == $imgname && $language == $imgnamelang),
- 'VALUE' => $img . '-' . $language,
- 'TEXT' => $user->lang['IMG_' . strtoupper($img)] . ' [ ' . $language . ' ]'
- ));
+ trigger_error($this->user->lang['STYLE_ERR_INVALID_PARENT'] . adm_back_link($update_action), E_USER_WARNING);
}
}
else
{
- $template->assign_block_vars('category.images', array(
- 'SELECTED' => ($img == $imgname),
- 'VALUE' => $img,
- 'TEXT' => (($category == 'custom') ? $img : $user->lang['IMG_' . strtoupper($img)])
- ));
+ $update['style_parent_tree'] = '';
}
}
- }
-
- // Make sure the list of possible images is sorted alphabetically
- sort($imagesetlist['lang']);
- sort($imagesetlist['nolang']);
-
- $image_found = false;
- $img_val = '';
- foreach ($imagesetlist as $type => $img_ary)
- {
- if ($type !== 'lang' || $sql_extra)
+ else
{
- $template->assign_block_vars('imagesetlist', array(
- 'TYPE' => ($type == 'lang')
- ));
+ unset($update['style_parent_id']);
}
- foreach ($img_ary as $img)
+ // Check style_active
+ if ($update['style_active'] != $style['style_active'])
{
- $imgtext = preg_replace('/^([^\/]+\/)/', '', $img);
- $selected = (!empty($imgname) && strpos($image_filename, $imgtext) !== false);
- if ($selected)
+ if (!$update['style_active'] && $this->default_style == $style['style_id'])
{
- $image_found = true;
- $img_val = htmlspecialchars($img);
+ trigger_error($this->user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($update_action), E_USER_WARNING);
}
- $template->assign_block_vars('imagesetlist.images', array(
- 'SELECTED' => $selected,
- 'TEXT' => $imgtext,
- 'VALUE' => htmlspecialchars($img)
- ));
}
- }
-
- $imgsize_bool = (!empty($imgname) && $image_width && $image_height) ? true : false;
- $image_request = '../styles/' . $imageset_path . '/imageset/' . ($image_lang ? $imgnamelang . '/' : '') . $image_filename;
-
- $template->assign_vars(array(
- 'S_EDIT_IMAGESET' => true,
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'IMAGE_OPTIONS' => $img_options,
- 'IMAGE_SIZE' => $image_width,
- 'IMAGE_HEIGHT' => $image_height,
- 'IMAGE_REQUEST' => (empty($image_filename)) ? 'images/no_image.png' : $image_request,
- 'U_ACTION' => $this->u_action . "&amp;action=edit&amp;id=$imageset_id",
- 'U_BACK' => $this->u_action,
- 'NAME' => $imageset_name,
- 'A_NAME' => addslashes($imageset_name),
- 'PATH' => $imageset_path,
- 'A_PATH' => addslashes($imageset_path),
- 'ERROR' => !$valid_name,
- 'IMG_SRC' => ($image_found) ? '../styles/' . $imageset_path . '/imageset/' . $img_val : 'images/no_image.png',
- 'IMAGE_SELECT' => $image_found
- ));
- }
-
- /**
- * Remove style/template/theme/imageset
- */
- function remove($mode, $style_id)
- {
- global $db, $template, $user, $phpbb_root_path, $cache, $config;
-
- $new_id = request_var('new_id', 0);
- $update = (isset($_POST['update'])) ? true : false;
- $sql_where = '';
-
- switch ($mode)
- {
- case 'style':
- $sql_from = STYLES_TABLE;
- $sql_select = 'style_id, style_name, template_id, theme_id, imageset_id';
- $sql_where = 'AND style_active = 1';
- break;
-
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- $sql_select = 'template_id, template_name, template_path, template_storedb';
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- $sql_select = 'theme_id, theme_name, theme_path, theme_storedb';
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- $sql_select = 'imageset_id, imageset_name, imageset_path';
- break;
- }
-
- if ($mode === 'template' && ($conflicts = $this->check_inheritance($mode, $style_id)))
- {
- $l_type = strtoupper($mode);
- $msg = $user->lang[$l_type . '_DELETE_DEPENDENT'];
- foreach ($conflicts as $id => $values)
+ else
{
- $msg .= '<br />' . $values['template_name'];
+ unset($update['style_active']);
}
- trigger_error($msg . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- $l_prefix = strtoupper($mode);
-
- $sql = "SELECT $sql_select
- FROM $sql_from
- WHERE {$mode}_id = $style_id";
- $result = $db->sql_query($sql);
- $style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$style_row)
- {
- trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- $s_only_component = $this->display_component_options($mode, $style_row[$mode . '_id'], $style_row);
-
- if ($s_only_component)
- {
- trigger_error($user->lang['ONLY_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- if ($update)
- {
- if ($mode == 'style')
+ // Update data
+ if (count($update))
{
- $sql = "DELETE FROM $sql_from
- WHERE {$mode}_id = $style_id";
- $db->sql_query($sql);
+ $sql = 'UPDATE ' . STYLES_TABLE . '
+ SET ' . $this->db->sql_build_array('UPDATE', $update) . "
+ WHERE style_id = $id";
+ $this->db->sql_query($sql);
- $sql = 'UPDATE ' . USERS_TABLE . "
- SET user_style = $new_id
- WHERE user_style = $style_id";
- $db->sql_query($sql);
+ $style = array_merge($style, $update);
- $sql = 'UPDATE ' . FORUMS_TABLE . "
- SET forum_style = $new_id
- WHERE forum_style = $style_id";
- $db->sql_query($sql);
-
- if ($style_id == $config['default_style'])
+ if (isset($update['style_parent_id']))
{
- set_config('default_style', $new_id);
+ // Update styles tree
+ $styles = $this->get_styles();
+ if ($this->update_styles_tree($styles, $style))
+ {
+ // Something was changed in styles tree, purge all cache
+ $this->cache->purge();
+ }
}
+ add_log('admin', 'LOG_STYLE_EDIT_DETAILS', $style['style_name']);
+ }
- // Remove the components
- $components = array('template', 'theme', 'imageset');
- foreach ($components as $component)
+ // Update default style
+ $default = $this->request->variable('style_default', 0);
+ if ($default)
+ {
+ if (!$style['style_active'])
{
- $new_id = request_var('new_' . $component . '_id', 0);
- $component_id = $style_row[$component . '_id'];
- $this->remove_component($component, $component_id, $new_id, $style_id);
+ trigger_error($this->user->lang['STYLE_DEFAULT_CHANGE_INACTIVE'] . adm_back_link($update_action), E_USER_WARNING);
}
- }
- else
- {
- $this->remove_component($mode, $style_id, $new_id);
+ set_config('default_style', $id);
+ $this->cache->purge();
}
- $cache->destroy('sql', STYLES_TABLE);
-
- add_log('admin', 'LOG_' . $l_prefix . '_DELETE', $style_row[$mode . '_name']);
- $message = ($mode != 'style') ? $l_prefix . '_DELETED_FS' : $l_prefix . '_DELETED';
- trigger_error($user->lang[$message] . adm_back_link($this->u_action));
+ // Show styles list
+ $this->frontend();
+ return;
}
- $this->page_title = 'DELETE_' . $l_prefix;
-
- $template->assign_vars(array(
- 'S_DELETE' => true,
-
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'L_NAME' => $user->lang[$l_prefix . '_NAME'],
- 'L_REPLACE' => $user->lang['REPLACE_' . $l_prefix],
- 'L_REPLACE_EXPLAIN' => $user->lang['REPLACE_' . $l_prefix . '_EXPLAIN'],
-
- 'U_ACTION' => $this->u_action . "&amp;action=delete&amp;id=$style_id",
- 'U_BACK' => $this->u_action,
+ // Show parent styles
+ foreach ($list as $row)
+ {
+ $this->template->assign_block_vars('parent_styles', array(
+ 'STYLE_ID' => $row['style_id'],
+ 'STYLE_NAME' => htmlspecialchars($row['style_name']),
+ 'LEVEL' => $row['level'],
+ 'SPACER' => str_repeat('&nbsp; ', $row['level']),
+ )
+ );
+ }
- 'NAME' => $style_row[$mode . '_name'],
+ // Show style details
+ $this->template->assign_vars(array(
+ 'S_STYLE_DETAILS' => true,
+ 'STYLE_ID' => $style['style_id'],
+ 'STYLE_NAME' => htmlspecialchars($style['style_name']),
+ 'STYLE_PATH' => htmlspecialchars($style['style_path']),
+ 'STYLE_COPYRIGHT' => strip_tags($style['style_copyright']),
+ 'STYLE_PARENT' => $style['style_parent_id'],
+ 'S_STYLE_ACTIVE' => $style['style_active'],
+ 'S_STYLE_DEFAULT' => ($style['style_id'] == $this->default_style)
)
);
-
- if ($mode == 'style')
- {
- $template->assign_vars(array(
- 'S_DELETE_STYLE' => true,
- ));
- }
}
/**
- * Remove template/theme/imageset entry from the database
+ * List installed styles
*/
- function remove_component($component, $component_id, $new_id, $style_id = false)
+ protected function show_installed()
{
- global $db;
+ // Get all installed styles
+ $styles = $this->get_styles();
- if (($new_id == 0) || ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id))))
+ if (!count($styles))
{
- // We can not delete the template, as the user wants to keep the component or an other template is inheriting from this one.
- return;
+ trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- $component_in_use = array();
- if ($component != 'style')
- {
- $component_in_use = $this->component_in_use($component, $component_id, $style_id);
- }
-
- if (($new_id == -1) && !empty($component_in_use))
- {
- // We can not delete the component, as it is still in use
- return;
- }
+ usort($styles, array($this, 'sort_styles'));
- if ($component == 'imageset')
- {
- $sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . "
- WHERE imageset_id = $component_id";
- $db->sql_query($sql);
- }
+ // Get users
+ $users = $this->get_users();
- switch ($component)
+ // Add users counter to rows
+ foreach ($styles as &$style)
{
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;;
- break;
+ $style['_users'] = isset($users[$style['style_id']]) ? $users[$style['style_id']] : 0;
}
- $sql = "DELETE FROM $sql_from
- WHERE {$component}_id = $component_id";
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . STYLES_TABLE . "
- SET {$component}_id = $new_id
- WHERE {$component}_id = $component_id";
- $db->sql_query($sql);
- }
-
- /**
- * Display the options which can be used to replace a style/template/theme/imageset
- *
- * @return boolean Returns true if the component is the only component and can not be deleted.
- */
- function display_component_options($component, $component_id, $style_row = false, $style_id = false)
- {
- global $db, $template, $user;
+ // Set up styles list variables
+ // Addons should increase this number and update template variable
+ $this->styles_list_cols = 4;
+ $this->template->assign_var('STYLES_LIST_COLS', $this->styles_list_cols);
- $is_only_component = true;
- $component_in_use = array();
- if ($component != 'style')
- {
- $component_in_use = $this->component_in_use($component, $component_id, $style_id);
- }
+ // Show styles list
+ $this->show_styles_list($styles, 0, 0);
- $sql_where = '';
- switch ($component)
+ // Show styles with invalid inherits_id
+ foreach ($styles as $style)
{
- case 'style':
- $sql_from = STYLES_TABLE;
- $sql_where = 'WHERE style_active = 1';
- break;
-
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- $sql_where = 'WHERE template_inherits_id <> ' . $component_id;
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
- }
-
- $s_options = '';
- if (($component != 'style') && empty($component_in_use))
- {
- // If it is not in use, there must be another component
- $is_only_component = false;
-
- $sql = "SELECT {$component}_id, {$component}_name
- FROM $sql_from
- WHERE {$component}_id = {$component_id}";
- $result = $db->sql_query($sql);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $s_options .= '<option value="-1" selected="selected">' . $user->lang['DELETE_' . strtoupper($component)] . '</option>';
- $s_options .= '<option value="0">' . sprintf($user->lang['KEEP_' . strtoupper($component)], $row[$component . '_name']) . '</option>';
- }
- else
- {
- $sql = "SELECT {$component}_id, {$component}_name
- FROM $sql_from
- $sql_where
- ORDER BY {$component}_name ASC";
- $result = $db->sql_query($sql);
-
- $s_keep_option = $s_options = '';
- while ($row = $db->sql_fetchrow($result))
+ if (empty($style['_shown']))
{
- if ($row[$component . '_id'] != $component_id)
- {
- $is_only_component = false;
- $s_options .= '<option value="' . $row[$component . '_id'] . '">' . sprintf($user->lang['REPLACE_WITH_OPTION'], $row[$component . '_name']) . '</option>';
- }
- else if ($component != 'style')
- {
- $s_keep_option = '<option value="0" selected="selected">' . sprintf($user->lang['KEEP_' . strtoupper($component)], $row[$component . '_name']) . '</option>';
- }
+ $style['_note'] = sprintf($this->user->lang['REQUIRES_STYLE'], htmlspecialchars($style['style_parent_tree']));
+ $this->list_style($style, 0);
}
- $db->sql_freeresult($result);
- $s_options = $s_keep_option . $s_options;
}
- if (!$style_row)
- {
- $template->assign_var('S_REPLACE_' . strtoupper($component) . '_OPTIONS', $s_options);
- }
- else
- {
- $template->assign_var('S_REPLACE_OPTIONS', $s_options);
- if ($component == 'style')
- {
- $components = array('template', 'theme', 'imageset');
- foreach ($components as $component)
- {
- $this->display_component_options($component, $style_row[$component . '_id'], false, $component_id, true);
- }
- }
- }
-
- return $is_only_component;
- }
-
- /**
- * Check whether the component is still used by another style or component
- */
- function component_in_use($component, $component_id, $style_id = false)
- {
- global $db;
-
- $component_in_use = array();
+ // Add buttons
+ $this->template->assign_block_vars('extra_actions', array(
+ 'ACTION_NAME' => 'activate',
+ 'L_ACTION' => $this->user->lang['STYLE_ACTIVATE'],
+ )
+ );
- if ($style_id)
- {
- $sql = 'SELECT style_id, style_name
- FROM ' . STYLES_TABLE . "
- WHERE {$component}_id = {$component_id}
- AND style_id <> {$style_id}
- ORDER BY style_name ASC";
- }
- else
- {
- $sql = 'SELECT style_id, style_name
- FROM ' . STYLES_TABLE . "
- WHERE {$component}_id = {$component_id}
- ORDER BY style_name ASC";
- }
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- $component_in_use[] = $row['style_name'];
- }
- $db->sql_freeresult($result);
+ $this->template->assign_block_vars('extra_actions', array(
+ 'ACTION_NAME' => 'deactivate',
+ 'L_ACTION' => $this->user->lang['STYLE_DEACTIVATE'],
+ )
+ );
- if ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id)))
+ if (isset($this->style_counters) && $this->style_counters['total'] > 1)
{
- foreach ($conflicts as $temp_id => $conflict_data)
- {
- $component_in_use[] = $conflict_data['template_name'];
- }
+ $this->template->assign_block_vars('extra_actions', array(
+ 'ACTION_NAME' => 'uninstall',
+ 'L_ACTION' => $this->user->lang['STYLE_UNINSTALL'],
+ )
+ );
}
-
- return $component_in_use;
}
/**
- * Export style or style elements
+ * Show list of styles that can be installed
*/
- function export($mode, $style_id)
+ protected function show_available()
{
- global $db, $template, $user, $phpbb_root_path, $cache, $phpEx, $config;
-
- $update = (isset($_POST['update'])) ? true : false;
-
- $inc_template = request_var('inc_template', 0);
- $inc_theme = request_var('inc_theme', 0);
- $inc_imageset = request_var('inc_imageset', 0);
- $store = request_var('store', 0);
- $format = request_var('format', '');
-
- $error = array();
- $methods = array('tar');
-
- $available_methods = array('tar.gz' => 'zlib', 'tar.bz2' => 'bz2', 'zip' => 'zlib');
- foreach ($available_methods as $type => $module)
- {
- if (!@extension_loaded($module))
- {
- continue;
- }
+ // Get list of styles
+ $styles = $this->find_available(true);
- $methods[] = $type;
- }
-
- if (!in_array($format, $methods))
+ // Show styles
+ if (empty($styles))
{
- $format = 'tar';
+ trigger_error($this->user->lang['NO_UNINSTALLED_STYLE'] . adm_back_link($this->u_base_action), E_USER_NOTICE);
}
- switch ($mode)
- {
- case 'style':
- if ($update && ($inc_template + $inc_theme + $inc_imageset) < 1)
- {
- $error[] = $user->lang['STYLE_ERR_MORE_ELEMENTS'];
- }
-
- $name = 'style_name';
-
- $sql_select = 's.style_id, s.style_name, s.style_copyright';
- $sql_select .= ($inc_template) ? ', t.*' : ', t.template_name';
- $sql_select .= ($inc_theme) ? ', c.*' : ', c.theme_name';
- $sql_select .= ($inc_imageset) ? ', i.*' : ', i.imageset_name';
- $sql_from = STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . ' c, ' . STYLES_IMAGESET_TABLE . ' i';
- $sql_where = "s.style_id = $style_id AND t.template_id = s.template_id AND c.theme_id = s.theme_id AND i.imageset_id = s.imageset_id";
+ usort($styles, array($this, 'sort_styles'));
- $l_prefix = 'STYLE';
- break;
-
- case 'template':
- $name = 'template_name';
-
- $sql_select = '*';
- $sql_from = STYLES_TEMPLATE_TABLE;
- $sql_where = "template_id = $style_id";
-
- $l_prefix = 'TEMPLATE';
- break;
-
- case 'theme':
- $name = 'theme_name';
-
- $sql_select = '*';
- $sql_from = STYLES_THEME_TABLE;
- $sql_where = "theme_id = $style_id";
-
- $l_prefix = 'THEME';
- break;
-
- case 'imageset':
- $name = 'imageset_name';
-
- $sql_select = '*';
- $sql_from = STYLES_IMAGESET_TABLE;
- $sql_where = "imageset_id = $style_id";
-
- $l_prefix = 'IMAGESET';
- break;
- }
+ $this->styles_list_cols = 3;
+ $this->template->assign_vars(array(
+ 'STYLES_LIST_COLS' => $this->styles_list_cols,
+ 'STYLES_LIST_HIDE_COUNT' => true
+ )
+ );
- if ($update && !sizeof($error))
+ // Show styles
+ foreach ($styles as &$style)
{
- $sql = "SELECT $sql_select
- FROM $sql_from
- WHERE $sql_where";
- $result = $db->sql_query($sql);
- $style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$style_row)
- {
- trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- $var_ary = array('style_id', 'style_name', 'style_copyright', 'template_id', 'template_name', 'template_path', 'template_copyright', 'template_storedb', 'template_inherits_id', 'bbcode_bitfield', 'theme_id', 'theme_name', 'theme_path', 'theme_copyright', 'theme_storedb', 'theme_mtime', 'theme_data', 'imageset_id', 'imageset_name', 'imageset_path', 'imageset_copyright');
-
- foreach ($var_ary as $var)
+ // Check if style has a parent style in styles list
+ $has_parent = false;
+ if ($style['_inherit_name'] != '')
{
- if (!isset($style_row[$var]))
+ foreach ($styles as $parent_style)
{
- $style_row[$var] = '';
- }
- }
-
- $files = $data = array();
-
- if ($mode == 'style')
- {
- $style_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['style_name'], $style_row['style_copyright'], $config['version']), $this->style_cfg);
-
- $style_cfg .= (!$inc_template) ? "\nrequired_template = {$style_row['template_name']}" : '';
- $style_cfg .= (!$inc_theme) ? "\nrequired_theme = {$style_row['theme_name']}" : '';
- $style_cfg .= (!$inc_imageset) ? "\nrequired_imageset = {$style_row['imageset_name']}" : '';
-
- $data[] = array(
- 'src' => $style_cfg,
- 'prefix' => 'style.cfg'
- );
-
- unset($style_cfg);
- }
-
- // Export template core code
- if ($mode == 'template' || $inc_template)
- {
- $use_template_name = $style_row['template_name'];
-
- // Add the inherit from variable, depending on it's use...
- if ($style_row['template_inherits_id'])
- {
- // Get the template name
- $sql = 'SELECT template_name
- FROM ' . STYLES_TEMPLATE_TABLE . '
- WHERE template_id = ' . (int) $style_row['template_inherits_id'];
- $result = $db->sql_query($sql);
- $use_template_name = (string) $db->sql_fetchfield('template_name');
- $db->sql_freeresult($result);
- }
-
- $template_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}', '{INHERIT_FROM}'), array($mode, $style_row['template_name'], $style_row['template_copyright'], $config['version'], $use_template_name), $this->template_cfg);
-
- $template_cfg .= "\n\nbbcode_bitfield = {$style_row['bbcode_bitfield']}";
-
- $data[] = array(
- 'src' => $template_cfg,
- 'prefix' => 'template/template.cfg'
- );
-
- // This is potentially nasty memory-wise ...
- if (!$style_row['template_storedb'])
- {
- $files[] = array(
- 'src' => "styles/{$style_row['template_path']}/template/",
- 'prefix-' => "styles/{$style_row['template_path']}/",
- 'prefix+' => false,
- 'exclude' => 'template.cfg'
- );
- }
- else
- {
- $sql = 'SELECT template_filename, template_data
- FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = {$style_row['template_id']}";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
+ if ($parent_style['style_name'] == $style['_inherit_name'] && empty($parent_style['_shown']))
{
- $data[] = array(
- 'src' => $row['template_data'],
- 'prefix' => 'template/' . $row['template_filename']
- );
+ // Show parent style first
+ $has_parent = true;
}
- $db->sql_freeresult($result);
}
- unset($template_cfg);
}
-
- // Export theme core code
- if ($mode == 'theme' || $inc_theme)
+ if (!$has_parent)
{
- $theme_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['theme_name'], $style_row['theme_copyright'], $config['version']), $this->theme_cfg);
-
- // Read old cfg file
- $items = $cache->obtain_cfg_items($style_row);
- $items = $items['theme'];
-
- if (!isset($items['parse_css_file']))
- {
- $items['parse_css_file'] = 'off';
- }
-
- $theme_cfg = str_replace(array('{PARSE_CSS_FILE}'), array($items['parse_css_file']), $theme_cfg);
-
- $files[] = array(
- 'src' => "styles/{$style_row['theme_path']}/theme/",
- 'prefix-' => "styles/{$style_row['theme_path']}/",
- 'prefix+' => false,
- 'exclude' => ($style_row['theme_storedb']) ? 'stylesheet.css,theme.cfg' : 'theme.cfg'
- );
-
- $data[] = array(
- 'src' => $theme_cfg,
- 'prefix' => 'theme/theme.cfg'
- );
-
- if ($style_row['theme_storedb'])
- {
- $data[] = array(
- 'src' => $style_row['theme_data'],
- 'prefix' => 'theme/stylesheet.css'
- );
- }
-
- unset($items, $theme_cfg);
- }
-
- // Export imageset core code
- if ($mode == 'imageset' || $inc_imageset)
- {
- $imageset_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['imageset_name'], $style_row['imageset_copyright'], $config['version']), $this->imageset_cfg);
-
- $imageset_main = array();
-
- $sql = 'SELECT image_filename, image_name, image_height, image_width
- FROM ' . STYLES_IMAGESET_DATA_TABLE . "
- WHERE imageset_id = $style_id
- AND image_lang = ''";
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- $imageset_main[$row['image_name']] = $row['image_filename'] . ($row['image_height'] ? '*' . $row['image_height']: '') . ($row['image_width'] ? '*' . $row['image_width']: '');
- }
- $db->sql_freeresult($result);
-
- foreach ($this->imageset_keys as $topic => $key_array)
- {
- foreach ($key_array as $key)
- {
- if (isset($imageset_main[$key]))
- {
- $imageset_cfg .= "\nimg_" . $key . ' = ' . str_replace("styles/{$style_row['imageset_path']}/imageset/", '{PATH}', $imageset_main[$key]);
- }
- }
- }
-
- $files[] = array(
- 'src' => "styles/{$style_row['imageset_path']}/imageset/",
- 'prefix-' => "styles/{$style_row['imageset_path']}/",
- 'prefix+' => false,
- 'exclude' => 'imageset.cfg'
- );
-
- $data[] = array(
- 'src' => trim($imageset_cfg),
- 'prefix' => 'imageset/imageset.cfg'
- );
-
- end($data);
-
- $imageset_root = "{$phpbb_root_path}styles/{$style_row['imageset_path']}/imageset/";
-
- if ($dh = @opendir($imageset_root))
- {
- while (($fname = readdir($dh)) !== false)
- {
- if ($fname[0] != '.' && $fname != 'CVS' && is_dir("$imageset_root$fname"))
- {
- $files[key($files)]['exclude'] .= ',' . $fname . '/imageset.cfg';
- }
- }
- closedir($dh);
- }
-
- $imageset_lang = array();
-
- $sql = 'SELECT image_filename, image_name, image_height, image_width, image_lang
- FROM ' . STYLES_IMAGESET_DATA_TABLE . "
- WHERE imageset_id = $style_id
- AND image_lang <> ''";
- $result = $db->sql_query($sql);
- while ($row = $db->sql_fetchrow($result))
- {
- $imageset_lang[$row['image_lang']][$row['image_name']] = $row['image_filename'] . ($row['image_height'] ? '*' . $row['image_height']: '') . ($row['image_width'] ? '*' . $row['image_width']: '');
- }
- $db->sql_freeresult($result);
-
- foreach ($imageset_lang as $lang => $imageset_localized)
- {
- $imageset_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['imageset_name'], $style_row['imageset_copyright'], $config['version']), $this->imageset_cfg);
-
- foreach ($this->imageset_keys as $topic => $key_array)
- {
- foreach ($key_array as $key)
- {
- if (isset($imageset_localized[$key]))
- {
- $imageset_cfg .= "\nimg_" . $key . ' = ' . str_replace("styles/{$style_row['imageset_path']}/imageset/", '{PATH}', $imageset_localized[$key]);
- }
- }
- }
-
- $data[] = array(
- 'src' => trim($imageset_cfg),
- 'prefix' => 'imageset/' . $lang . '/imageset.cfg'
- );
- }
-
- unset($imageset_cfg);
- }
-
- switch ($format)
- {
- case 'tar':
- $ext = '.tar';
- break;
-
- case 'zip':
- $ext = '.zip';
- break;
-
- case 'tar.gz':
- $ext = '.tar.gz';
- break;
-
- case 'tar.bz2':
- $ext = '.tar.bz2';
- break;
-
- default:
- $error[] = $user->lang[$l_prefix . '_ERR_ARCHIVE'];
- }
-
- if (!sizeof($error))
- {
- include($phpbb_root_path . 'includes/functions_compress.' . $phpEx);
-
- if ($mode == 'style')
- {
- $path = preg_replace('#[^\w-]+#', '_', $style_row['style_name']);
- }
- else
- {
- $path = $style_row[$mode . '_path'];
- }
-
- if ($format == 'zip')
- {
- $compress = new compress_zip('w', $phpbb_root_path . "store/$path$ext");
- }
- else
- {
- $compress = new compress_tar('w', $phpbb_root_path . "store/$path$ext", $ext);
- }
-
- if (sizeof($files))
- {
- foreach ($files as $file_ary)
- {
- $compress->add_file($file_ary['src'], $file_ary['prefix-'], $file_ary['prefix+'], $file_ary['exclude']);
- }
- }
-
- if (sizeof($data))
- {
- foreach ($data as $data_ary)
- {
- $compress->add_data($data_ary['src'], $data_ary['prefix']);
- }
- }
-
- $compress->close();
-
- add_log('admin', 'LOG_' . $l_prefix . '_EXPORT', $style_row[$mode . '_name']);
-
- if (!$store)
- {
- $compress->download($path);
- @unlink("{$phpbb_root_path}store/$path$ext");
- exit;
- }
-
- trigger_error(sprintf($user->lang[$l_prefix . '_EXPORTED'], "store/$path$ext") . adm_back_link($this->u_action));
+ $this->list_style($style, 0);
+ $this->show_available_child_styles($styles, $style['style_name'], 1);
}
}
- $sql = "SELECT {$mode}_id, {$mode}_name
- FROM " . (($mode == 'style') ? STYLES_TABLE : $sql_from) . "
- WHERE {$mode}_id = $style_id";
- $result = $db->sql_query($sql);
- $style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$style_row)
+ // Show styles that do not have parent style in styles list
+ foreach ($styles as $style)
{
- trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING);
+ if (empty($style['_shown']))
+ {
+ $this->list_style($style, 0);
+ }
}
- $this->page_title = $l_prefix . '_EXPORT';
-
- $format_buttons = '';
- foreach ($methods as $method)
+ // Add button
+ if (isset($this->style_counters) && $this->style_counters['caninstall'] > 0)
{
- $format_buttons .= '<label><input type="radio"' . ((!$format_buttons) ? ' id="format"' : '') . ' class="radio" value="' . $method . '" name="format"' . (($method == $format) ? ' checked="checked"' : '') . ' /> ' . $method . '</label>';
+ $this->template->assign_block_vars('extra_actions', array(
+ 'ACTION_NAME' => 'install',
+ 'L_ACTION' => $this->user->lang['INSTALL_STYLES'],
+ )
+ );
}
-
- $template->assign_vars(array(
- 'S_EXPORT' => true,
- 'S_ERROR_MSG' => (sizeof($error)) ? true : false,
- 'S_STYLE' => ($mode == 'style') ? true : false,
-
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'L_NAME' => $user->lang[$l_prefix . '_NAME'],
-
- 'U_ACTION' => $this->u_action . '&amp;action=export&amp;id=' . $style_id,
- 'U_BACK' => $this->u_action,
-
- 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
- 'NAME' => $style_row[$mode . '_name'],
- 'FORMAT_BUTTONS' => $format_buttons)
- );
}
/**
- * Display details
+ * Find styles available for installation
+ *
+ * @param bool $all if true, function will return all installable styles. if false, function will return only styles that can be installed
+ * @return array List of styles
*/
- function details($mode, $style_id)
+ protected function find_available($all)
{
- global $template, $db, $config, $user, $safe_mode, $cache, $phpbb_root_path;
-
- $update = (isset($_POST['update'])) ? true : false;
- $l_type = strtoupper($mode);
-
- $error = array();
- $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE, 'imageset' => STYLES_IMAGESET_TABLE);
-
- switch ($mode)
- {
- case 'style':
- $sql_from = STYLES_TABLE;
- break;
-
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
- }
-
- $sql = "SELECT *
- FROM $sql_from
- WHERE {$mode}_id = $style_id";
- $result = $db->sql_query($sql);
- $style_row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$style_row)
- {
- trigger_error($user->lang['NO_' . $l_type] . adm_back_link($this->u_action), E_USER_WARNING);
+ // Get list of installed styles
+ $installed = $this->get_styles();
+
+ $installed_dirs = array();
+ $installed_names = array();
+ foreach ($installed as $style)
+ {
+ $installed_dirs[] = $style['style_path'];
+ $installed_names[$style['style_name']] = array(
+ 'path' => $style['style_path'],
+ 'id' => $style['style_id'],
+ 'parent' => $style['style_parent_id'],
+ 'tree' => (strlen($style['style_parent_tree']) ? $style['style_parent_tree'] . '/' : '') . $style['style_path'],
+ );
}
- $style_row['style_default'] = ($mode == 'style' && $config['default_style'] == $style_id) ? 1 : 0;
+ // Get list of directories
+ $dirs = $this->find_style_dirs();
- if ($update)
+ // Find styles that can be installed
+ $styles = array();
+ foreach ($dirs as $dir)
{
- $name = utf8_normalize_nfc(request_var('name', '', true));
- $copyright = utf8_normalize_nfc(request_var('copyright', '', true));
-
- $template_id = request_var('template_id', 0);
- $theme_id = request_var('theme_id', 0);
- $imageset_id = request_var('imageset_id', 0);
-
- $style_active = request_var('style_active', 0);
- $style_default = request_var('style_default', 0);
- $store_db = request_var('store_db', 0);
-
- // If the admin selected the style to be the default style, but forgot to activate it... we will do it for him
- if ($style_default)
- {
- $style_active = 1;
- }
-
- $sql = "SELECT {$mode}_id, {$mode}_name
- FROM $sql_from
- WHERE {$mode}_id <> $style_id
- AND LOWER({$mode}_name) = '" . $db->sql_escape(strtolower($name)) . "'";
- $result = $db->sql_query($sql);
- $conflict = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($mode == 'style' && (!$template_id || !$theme_id || !$imageset_id))
- {
- $error[] = $user->lang['STYLE_ERR_NO_IDS'];
- }
-
- if ($mode == 'style' && $style_row['style_active'] && !$style_active && $config['default_style'] == $style_id)
+ if (in_array($dir, $installed_dirs))
{
- $error[] = $user->lang['DEACTIVATE_DEFAULT'];
- }
-
- if (!$name || $conflict)
- {
- $error[] = $user->lang[$l_type . '_ERR_STYLE_NAME'];
- }
-
- if ($mode === 'theme' || $mode === 'template')
- {
- // a rather elaborate check we have to do here once to avoid trouble later
- $check = "{$phpbb_root_path}styles/" . $style_row["{$mode}_path"] . (($mode === 'theme') ? '/theme/stylesheet.css' : '/template');
- if (($style_row["{$mode}_storedb"] != $store_db) && !$store_db && ($safe_mode || !phpbb_is_writable($check)))
- {
- $error[] = $user->lang['EDIT_' . strtoupper($mode) . '_STORED_DB'];
- $store_db = 1;
- }
-
- // themes which have to be parsed have to go into db
- if ($mode == 'theme')
- {
- $cfg = parse_cfg_file("{$phpbb_root_path}styles/" . $style_row["{$mode}_path"] . "/theme/theme.cfg");
-
- if (isset($cfg['parse_css_file']) && $cfg['parse_css_file'] && !$store_db)
- {
- $error[] = $user->lang['EDIT_THEME_STORE_PARSED'];
- $store_db = 1;
- }
- }
+ // Style is already installed
+ continue;
}
-
- if (!sizeof($error))
+ $cfg = $this->read_style_cfg($dir);
+ if ($cfg === false)
{
- // Check length settings
- if (utf8_strlen($name) > 30)
- {
- $error[] = $user->lang[$l_type . '_ERR_NAME_LONG'];
- }
-
- if (utf8_strlen($copyright) > 60)
- {
- $error[] = $user->lang[$l_type . '_ERR_COPY_LONG'];
- }
+ // Invalid style.cfg
+ continue;
}
- }
- if ($update && sizeof($error))
- {
- $style_row = array_merge($style_row, array(
- 'template_id' => $template_id,
- 'theme_id' => $theme_id,
- 'imageset_id' => $imageset_id,
- 'style_active' => $style_active,
- $mode . '_storedb' => $store_db,
- $mode . '_name' => $name,
- $mode . '_copyright' => $copyright)
+ // Style should be available for installation
+ $parent = $cfg['parent'];
+ $style = array(
+ 'style_id' => 0,
+ 'style_name' => $cfg['name'],
+ 'style_copyright' => $cfg['copyright'],
+ 'style_active' => 0,
+ 'style_path' => $dir,
+ 'bbcode_bitfield' => $cfg['template_bitfield'],
+ 'style_parent_id' => 0,
+ 'style_parent_tree' => '',
+ // Extra values for styles list
+ // All extra variable start with _ so they won't be confused with data that can be added to styles table
+ '_inherit_name' => $parent,
+ '_available' => true,
+ '_note' => '',
);
- }
-
- // User has submitted form and no errors have occurred
- if ($update && !sizeof($error))
- {
- $sql_ary = array(
- $mode . '_name' => $name,
- $mode . '_copyright' => $copyright
- );
-
- switch ($mode)
- {
- case 'style':
-
- $sql_ary += array(
- 'template_id' => (int) $template_id,
- 'theme_id' => (int) $theme_id,
- 'imageset_id' => (int) $imageset_id,
- 'style_active' => (int) $style_active,
- );
- break;
-
- case 'imageset':
- break;
-
- case 'theme':
-
- if ($style_row['theme_storedb'] != $store_db)
- {
- $theme_data = '';
-
- if (!$style_row['theme_storedb'])
- {
- $theme_data = $this->db_theme_data($style_row);
- }
- else if (!$store_db && !$safe_mode && phpbb_is_writable("{$phpbb_root_path}styles/{$style_row['theme_path']}/theme/stylesheet.css"))
- {
- $store_db = 1;
- $theme_data = $style_row['theme_data'];
-
- if ($fp = @fopen("{$phpbb_root_path}styles/{$style_row['theme_path']}/theme/stylesheet.css", 'wb'))
- {
- $store_db = (@fwrite($fp, str_replace("styles/{$style_row['theme_path']}/theme/", './', $theme_data))) ? 0 : 1;
- }
- fclose($fp);
- }
-
- $sql_ary += array(
- 'theme_mtime' => ($store_db) ? filemtime("{$phpbb_root_path}styles/{$style_row['theme_path']}/theme/stylesheet.css") : 0,
- 'theme_storedb' => $store_db,
- 'theme_data' => ($store_db) ? $theme_data : '',
- );
- }
- break;
-
- case 'template':
-
- if ($style_row['template_storedb'] != $store_db)
- {
- if ($super = $this->get_super($mode, $style_row['template_id']))
- {
- $error[] = (sprintf($user->lang["{$l_type}_INHERITS"], $super['template_name']));
- $sql_ary = array();
- }
- else
- {
- if (!$store_db && !$safe_mode && phpbb_is_writable("{$phpbb_root_path}styles/{$style_row['template_path']}/template"))
- {
- $err = $this->store_in_fs('template', $style_row['template_id']);
- if ($err)
- {
- $error += $err;
- }
- }
- else if ($store_db)
- {
- $this->store_in_db('template', $style_row['template_id']);
- }
- else
- {
- // We no longer store within the db, but are also not able to update the file structure
- // Since the admin want to switch this, we adhere to his decision. But we also need to remove the cache
- $sql = 'DELETE FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = $style_id";
- $db->sql_query($sql);
- }
-
- $sql_ary += array(
- 'template_storedb' => $store_db,
- );
- }
- }
- break;
- }
- if (sizeof($sql_ary))
+ // Check style inheritance
+ if ($parent != '')
{
- $sql = "UPDATE $sql_from
- SET " . $db->sql_build_array('UPDATE', $sql_ary) . "
- WHERE {$mode}_id = $style_id";
- $db->sql_query($sql);
-
- // Making this the default style?
- if ($mode == 'style' && $style_default)
+ if (isset($installed_names[$parent]))
{
- set_config('default_style', $style_id);
+ // Parent style is installed
+ $row = $installed_names[$parent];
+ $style['style_parent_id'] = $row['id'];
+ $style['style_parent_tree'] = $row['tree'];
}
- }
-
- $cache->destroy('sql', STYLES_TABLE);
-
- add_log('admin', 'LOG_' . $l_type . '_EDIT_DETAILS', $name);
- if (sizeof($error))
- {
- trigger_error(implode('<br />', $error) . adm_back_link($this->u_action), E_USER_WARNING);
- }
- else
- {
- trigger_error($user->lang[$l_type . '_DETAILS_UPDATED'] . adm_back_link($this->u_action));
- }
- }
-
- if ($mode == 'style')
- {
- foreach ($element_ary as $element => $table)
- {
- $sql = "SELECT {$element}_id, {$element}_name
- FROM $table
- ORDER BY {$element}_id ASC";
- $result = $db->sql_query($sql);
-
- ${$element . '_options'} = '';
- while ($row = $db->sql_fetchrow($result))
+ else
{
- $selected = ($row[$element . '_id'] == $style_row[$element . '_id']) ? ' selected="selected"' : '';
- ${$element . '_options'} .= '<option value="' . $row[$element . '_id'] . '"' . $selected . '>' . $row[$element . '_name'] . '</option>';
+ // Parent style is not installed yet
+ $style['_available'] = false;
+ $style['_note'] = sprintf($this->user->lang['REQUIRES_STYLE'], htmlspecialchars($parent));
}
- $db->sql_freeresult($result);
}
- }
- if ($mode == 'template')
- {
- $super = array();
- if (isset($style_row[$mode . '_inherits_id']) && $style_row['template_inherits_id'])
+ if ($all || $style['_available'])
{
- $super = $this->get_super($mode, $style_row['template_id']);
+ $styles[] = $style;
}
}
- $this->page_title = 'EDIT_DETAILS_' . $l_type;
-
- $template->assign_vars(array(
- 'S_DETAILS' => true,
- 'S_ERROR_MSG' => (sizeof($error)) ? true : false,
- 'S_STYLE' => ($mode == 'style') ? true : false,
- 'S_TEMPLATE' => ($mode == 'template') ? true : false,
- 'S_THEME' => ($mode == 'theme') ? true : false,
- 'S_IMAGESET' => ($mode == 'imageset') ? true : false,
- 'S_STORE_DB' => (isset($style_row[$mode . '_storedb'])) ? $style_row[$mode . '_storedb'] : 0,
- 'S_STORE_DB_DISABLED' => (isset($style_row[$mode . '_inherits_id'])) ? $style_row[$mode . '_inherits_id'] : 0,
- 'S_STYLE_ACTIVE' => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0,
- 'S_STYLE_DEFAULT' => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0,
- 'S_SUPERTEMPLATE' => (isset($style_row[$mode . '_inherits_id']) && $style_row[$mode . '_inherits_id']) ? $super['template_name'] : 0,
-
- 'S_TEMPLATE_OPTIONS' => ($mode == 'style') ? $template_options : '',
- 'S_THEME_OPTIONS' => ($mode == 'style') ? $theme_options : '',
- 'S_IMAGESET_OPTIONS' => ($mode == 'style') ? $imageset_options : '',
-
- 'U_ACTION' => $this->u_action . '&amp;action=details&amp;id=' . $style_id,
- 'U_BACK' => $this->u_action,
-
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'L_NAME' => $user->lang[$l_type . '_NAME'],
- 'L_LOCATION' => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION'] : '',
- 'L_LOCATION_EXPLAIN' => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION_EXPLAIN'] : '',
-
- 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
- 'NAME' => $style_row[$mode . '_name'],
- 'COPYRIGHT' => $style_row[$mode . '_copyright'],
- )
- );
+ return $styles;
}
/**
- * Load css file contents
+ * Show styles list
+ *
+ * @param array $styles styles list
+ * @param int $parent parent style id
+ * @param int $level style inheritance level
*/
- function load_css_file($path, $filename)
+ protected function show_styles_list(&$styles, $parent, $level)
{
- global $phpbb_root_path;
-
- $file = "{$phpbb_root_path}styles/$path/theme/$filename";
-
- if (file_exists($file) && ($content = file_get_contents($file)))
- {
- $content = trim($content);
- }
- else
- {
- $content = '';
- }
- if (defined('DEBUG'))
+ foreach ($styles as &$style)
{
- $content = "/* BEGIN @include $filename */ \n $content \n /* END @include $filename */ \n";
+ if (empty($style['_shown']) && $style['style_parent_id'] == $parent)
+ {
+ $this->list_style($style, $level);
+ $this->show_styles_list($styles, $style['style_id'], $level + 1);
+ }
}
-
- return $content;
}
/**
- * Returns a string containing the value that should be used for the theme_data column in the theme database table.
- * Includes contents of files loaded via @import
- *
- * @param array $theme_row is an associative array containing the theme's current database entry
- * @param mixed $stylesheet can either be the new content for the stylesheet or false to load from the standard file
- * @param string $root_path should only be used in case you want to use a different root path than "{$phpbb_root_path}styles/{$theme_row['theme_path']}"
+ * Show available styles tree
*
- * @return string Stylesheet data for theme_data column in the theme table
+ * @param array $styles Styles list, passed as reference
+ * @param string $name Name of parent style
+ * @param string $level Styles tree level
*/
- function db_theme_data($theme_row, $stylesheet = false, $root_path = '')
+ protected function show_available_child_styles(&$styles, $name, $level)
{
- global $phpbb_root_path;
-
- if (!$root_path)
- {
- $root_path = $phpbb_root_path . 'styles/' . $theme_row['theme_path'];
- }
-
- if (!$stylesheet)
- {
- $stylesheet = '';
- if (file_exists($root_path . '/theme/stylesheet.css'))
- {
- $stylesheet = file_get_contents($root_path . '/theme/stylesheet.css');
- }
- }
-
- // Match CSS imports
- $matches = array();
- preg_match_all('/@import url\((["\'])(.*)\1\);/i', $stylesheet, $matches);
-
- // remove commented stylesheets (very simple parser, allows only whitespace
- // around an @import statement)
- preg_match_all('#/\*\s*@import url\((["\'])(.*)\1\);\s\*/#i', $stylesheet, $commented);
- $matches[2] = array_diff($matches[2], $commented[2]);
-
- if (sizeof($matches))
+ foreach ($styles as &$style)
{
- foreach ($matches[0] as $idx => $match)
+ if (empty($style['_shown']) && $style['_inherit_name'] == $name)
{
- if (isset($matches[2][$idx]))
- {
- $stylesheet = str_replace($match, acp_styles::load_css_file($theme_row['theme_path'], $matches[2][$idx]), $stylesheet);
- }
+ $this->list_style($style, $level);
+ $this->show_available_child_styles($styles, $style['style_name'], $level + 1);
}
}
-
- // adjust paths
- return str_replace('./', 'styles/' . $theme_row['theme_path'] . '/theme/', $stylesheet);
}
/**
- * Store template files into db
+ * Update styles tree
+ *
+ * @param array $styles Styles list, passed as reference
+ * @param array $style Current style, false if root
+ * @return bool True if something was updated, false if not
*/
- function store_templates($mode, $style_id, $template_path, $filelist)
+ protected function update_styles_tree(&$styles, $style = false)
{
- global $phpbb_root_path, $phpEx, $db;
-
- $template_path = $template_path . '/template/';
- $includes = array();
- foreach ($filelist as $pathfile => $file_ary)
+ $parent_id = ($style === false) ? 0 : $style['style_id'];
+ $parent_tree = ($style === false) ? '' : ($style['style_parent_tree'] == '' ? '' : $style['style_parent_tree']) . $style['style_path'];
+ $update = false;
+ $updated = false;
+ foreach ($styles as &$row)
{
- foreach ($file_ary as $file)
+ if ($row['style_parent_id'] == $parent_id)
{
- if (!($fp = @fopen("{$phpbb_root_path}styles/$template_path$pathfile$file", 'r')))
+ if ($row['style_parent_tree'] != $parent_tree)
{
- trigger_error("Could not open {$phpbb_root_path}styles/$template_path$pathfile$file", E_USER_ERROR);
- }
-
- $filesize = filesize("{$phpbb_root_path}styles/$template_path$pathfile$file");
-
- if ($filesize)
- {
- $template_data = fread($fp, $filesize);
- }
-
- fclose($fp);
-
- if (!$filesize)
- {
- // File is empty
- continue;
- }
-
- if (preg_match_all('#<!-- INCLUDE (.*?\.html) -->#is', $template_data, $matches))
- {
- foreach ($matches[1] as $match)
- {
- $includes[trim($match)][] = $file;
- }
+ $row['style_parent_tree'] = $parent_tree;
+ $update = true;
}
+ $updated |= $this->update_styles_tree($styles, $row);
}
}
-
- foreach ($filelist as $pathfile => $file_ary)
+ if ($update)
{
- foreach ($file_ary as $file)
- {
- // Skip index.
- if (strpos($file, 'index.') === 0)
- {
- continue;
- }
-
- // We could do this using extended inserts ... but that could be one
- // heck of a lot of data ...
- $sql_ary = array(
- 'template_id' => (int) $style_id,
- 'template_filename' => "$pathfile$file",
- 'template_included' => (isset($includes[$file])) ? implode(':', $includes[$file]) . ':' : '',
- 'template_mtime' => (int) filemtime("{$phpbb_root_path}styles/$template_path$pathfile$file"),
- 'template_data' => (string) file_get_contents("{$phpbb_root_path}styles/$template_path$pathfile$file"),
- );
-
- if ($mode == 'insert')
- {
- $sql = 'INSERT INTO ' . STYLES_TEMPLATE_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
- }
- else
- {
- $sql = 'UPDATE ' . STYLES_TEMPLATE_DATA_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
- WHERE template_id = $style_id
- AND template_filename = '" . $db->sql_escape("$pathfile$file") . "'";
- }
- $db->sql_query($sql);
- }
+ $sql = 'UPDATE ' . STYLES_TABLE . "
+ SET style_parent_tree = '" . $this->db->sql_escape($parent_tree) . "'
+ WHERE style_parent_id = {$parent_id}";
+ $this->db->sql_query($sql);
+ $updated = true;
}
+ return $updated;
}
/**
- * Returns an array containing all template filenames for one template that are currently cached.
+ * Find all possible parent styles for style
*
- * @param string $template_path contains the name of the template's folder in /styles/
- *
- * @return array of filenames that exist in /styles/$template_path/template/ (without extension!)
+ * @param array $styles list of styles
+ * @param int $id id of style
+ * @param int $parent current parent style id
+ * @param int $level current tree level
+ * @return array Style ids, names and levels
*/
- function template_cache_filelist($template_path)
+ protected function find_possible_parents($styles, $id = -1, $parent = 0, $level = 0)
{
- global $phpbb_root_path, $phpEx, $user;
-
- $cache_prefix = 'tpl_' . str_replace('_', '-', $template_path);
-
- if (!($dp = @opendir("{$phpbb_root_path}cache")))
- {
- trigger_error($user->lang['TEMPLATE_ERR_CACHE_READ'] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- $file_ary = array();
- while ($file = readdir($dp))
- {
- if ($file[0] == '.')
- {
- continue;
- }
-
- if (is_file($phpbb_root_path . 'cache/' . $file) && (strpos($file, $cache_prefix) === 0))
- {
- $file_ary[] = str_replace('.', '/', preg_replace('#^' . preg_quote($cache_prefix, '#') . '_(.*?)\.html\.' . $phpEx . '$#i', '\1', $file));
+ $results = array();
+ foreach ($styles as $style)
+ {
+ if ($style['style_id'] != $id && $style['style_parent_id'] == $parent)
+ {
+ $results[] = array(
+ 'style_id' => $style['style_id'],
+ 'style_name' => $style['style_name'],
+ 'style_path' => $style['style_path'],
+ 'style_parent_id' => $style['style_parent_id'],
+ 'style_parent_tree' => $style['style_parent_tree'],
+ 'level' => $level
+ );
+ $results = array_merge($results, $this->find_possible_parents($styles, $id, $style['style_id'], $level + 1));
}
}
- closedir($dp);
-
- return $file_ary;
+ return $results;
}
/**
- * Destroys cached versions of template files
+ * Show item in styles list
*
- * @param array $template_row contains the template's row in the STYLES_TEMPLATE_TABLE database table
- * @param mixed $file_ary is optional and may contain an array of template file names which should be refreshed in the cache.
- * The file names should be the original template file names and not the cache file names.
+ * @param array $style style row
+ * @param array $level style inheritance level
*/
- function clear_template_cache($template_row, $file_ary = false)
+ protected function list_style(&$style, $level)
{
- global $phpbb_root_path, $phpEx, $user;
-
- $cache_prefix = 'tpl_' . str_replace('_', '-', $template_row['template_path']);
-
- if (!$file_ary || !is_array($file_ary))
- {
- $file_ary = $this->template_cache_filelist($template_row['template_path']);
- $log_file_list = $user->lang['ALL_FILES'];
- }
- else
- {
- $log_file_list = implode(', ', $file_ary);
- }
-
- foreach ($file_ary as $file)
+ // Mark row as shown
+ if (!empty($style['_shown']))
{
- $file = str_replace('/', '.', $file);
-
- $file = "{$phpbb_root_path}cache/{$cache_prefix}_$file.html.$phpEx";
- if (file_exists($file) && is_file($file))
- {
- @unlink($file);
- }
+ return;
}
- unset($file_ary);
-
- add_log('admin', 'LOG_TEMPLATE_CACHE_CLEARED', $template_row['template_name'], $log_file_list);
- }
-
- /**
- * Install Style/Template/Theme/Imageset
- */
- function install($mode)
- {
- global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
- $l_type = strtoupper($mode);
-
- $error = $installcfg = $style_row = array();
- $root_path = $cfg_file = '';
- $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE, 'imageset' => STYLES_IMAGESET_TABLE);
-
- $install_path = request_var('path', '');
- $update = (isset($_POST['update'])) ? true : false;
+ $style['_shown'] = true;
+
+ // Generate template variables
+ $actions = array();
+ $row = array(
+ // Style data
+ 'STYLE_ID' => $style['style_id'],
+ 'STYLE_NAME' => htmlspecialchars($style['style_name']),
+ 'STYLE_PATH' => htmlspecialchars($style['style_path']),
+ 'STYLE_COPYRIGHT' => strip_tags($style['style_copyright']),
+ 'STYLE_ACTIVE' => $style['style_active'],
+
+ // Additional data
+ 'DEFAULT' => ($style['style_id'] && $style['style_id'] == $this->default_style),
+ 'USERS' => (isset($style['_users'])) ? $style['_users'] : '',
+ 'LEVEL' => $level,
+ 'PADDING' => (4 + 16 * $level),
+ 'SHOW_COPYRIGHT' => ($style['style_id']) ? false : true,
+ 'STYLE_PATH_FULL' => htmlspecialchars($this->styles_path_absolute . '/' . $style['style_path']) . '/',
+
+ // Comment to show below style
+ 'COMMENT' => (isset($style['_note'])) ? $style['_note'] : '',
+
+ // The following variables should be used by hooks to add custom HTML code
+ 'EXTRA' => '',
+ 'EXTRA_OPTIONS' => ''
+ );
- // Installing, obtain cfg file contents
- if ($install_path)
+ // Status specific data
+ if ($style['style_id'])
{
- $root_path = $phpbb_root_path . 'styles/' . $install_path . '/';
- $cfg_file = ($mode == 'style') ? "$root_path$mode.cfg" : "$root_path$mode/$mode.cfg";
-
- if (!file_exists($cfg_file))
- {
- $error[] = $user->lang[$l_type . '_ERR_NOT_' . $l_type];
- }
- else
- {
- $installcfg = parse_cfg_file($cfg_file);
- }
- }
+ // Style is installed
- // Installing
- if (sizeof($installcfg))
- {
- $name = $installcfg['name'];
- $copyright = $installcfg['copyright'];
- $version = $installcfg['version'];
-
- $style_row = array(
- $mode . '_id' => 0,
- $mode . '_name' => '',
- $mode . '_copyright' => ''
+ // Details
+ $actions[] = array(
+ 'U_ACTION' => $this->u_action . '&amp;action=details&amp;id=' . $style['style_id'],
+ 'L_ACTION' => $this->user->lang['DETAILS']
);
- switch ($mode)
- {
- case 'style':
-
- $style_row = array(
- 'style_id' => 0,
- 'style_name' => $installcfg['name'],
- 'style_copyright' => $installcfg['copyright']
- );
-
- $reqd_template = (isset($installcfg['required_template'])) ? $installcfg['required_template'] : false;
- $reqd_theme = (isset($installcfg['required_theme'])) ? $installcfg['required_theme'] : false;
- $reqd_imageset = (isset($installcfg['required_imageset'])) ? $installcfg['required_imageset'] : false;
-
- // Check to see if each element is already installed, if it is grab the id
- foreach ($element_ary as $element => $table)
- {
- $style_row = array_merge($style_row, array(
- $element . '_id' => 0,
- $element . '_name' => '',
- $element . '_copyright' => '')
- );
-
- $this->test_installed($element, $error, (${'reqd_' . $element}) ? $phpbb_root_path . 'styles/' . $reqd_template . '/' : $root_path, ${'reqd_' . $element}, $style_row[$element . '_id'], $style_row[$element . '_name'], $style_row[$element . '_copyright']);
-
- if (!$style_row[$element . '_name'])
- {
- $style_row[$element . '_name'] = $reqd_template;
- }
+ // Activate/Deactive
+ $action_name = ($style['style_active'] ? 'de' : '') . 'activate';
- // Merge other information to installcfg... if present
- $cfg_file = $phpbb_root_path . 'styles/' . $install_path . '/' . $element . '/' . $element . '.cfg';
-
- if (file_exists($cfg_file))
- {
- $cfg_contents = parse_cfg_file($cfg_file);
-
- // Merge only specific things. We may need them later.
- foreach (array('inherit_from', 'parse_css_file') as $key)
- {
- if (!empty($cfg_contents[$key]) && !isset($installcfg[$key]))
- {
- $installcfg[$key] = $cfg_contents[$key];
- }
- }
- }
- }
-
- break;
+ $actions[] = array(
+ 'U_ACTION' => $this->u_action . '&amp;action=' . $action_name . '&amp;hash=' . generate_link_hash($action_name) . '&amp;id=' . $style['style_id'],
+ 'L_ACTION' => $this->user->lang['STYLE_' . ($style['style_active'] ? 'DE' : '') . 'ACTIVATE']
+ );
- case 'template':
- $this->test_installed('template', $error, $root_path, false, $style_row['template_id'], $style_row['template_name'], $style_row['template_copyright']);
- break;
+/* // Export
+ $actions[] = array(
+ 'U_ACTION' => $this->u_action . '&amp;action=export&amp;hash=' . generate_link_hash('export') . '&amp;id=' . $style['style_id'],
+ 'L_ACTION' => $this->user->lang['EXPORT']
+ ); */
- case 'theme':
- $this->test_installed('theme', $error, $root_path, false, $style_row['theme_id'], $style_row['theme_name'], $style_row['theme_copyright']);
- break;
+ // Uninstall
+ $actions[] = array(
+ 'U_ACTION' => $this->u_action . '&amp;action=uninstall&amp;hash=' . generate_link_hash('uninstall') . '&amp;id=' . $style['style_id'],
+ 'L_ACTION' => $this->user->lang['STYLE_UNINSTALL']
+ );
- case 'imageset':
- $this->test_installed('imageset', $error, $root_path, false, $style_row['imageset_id'], $style_row['imageset_name'], $style_row['imageset_copyright']);
- break;
- }
+ // Preview
+ $actions[] = array(
+ 'U_ACTION' => append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'style=' . $style['style_id']),
+ 'L_ACTION' => $this->user->lang['PREVIEW']
+ );
}
else
{
- trigger_error($user->lang['NO_' . $l_type] . adm_back_link($this->u_action), E_USER_WARNING);
- }
-
- $style_row['store_db'] = request_var('store_db', 0);
- $style_row['style_active'] = request_var('style_active', 1);
- $style_row['style_default'] = request_var('style_default', 0);
-
- // User has submitted form and no errors have occurred
- if ($update && !sizeof($error))
- {
- if ($mode == 'style')
+ // Style is not installed
+ if (empty($style['_available']))
{
- foreach ($element_ary as $element => $table)
- {
- ${$element . '_root_path'} = (${'reqd_' . $element}) ? $phpbb_root_path . 'styles/' . ${'reqd_' . $element} . '/' : false;
- ${$element . '_path'} = (${'reqd_' . $element}) ? ${'reqd_' . $element} : false;
- }
- $this->install_style($error, 'install', $root_path, $style_row['style_id'], $style_row['style_name'], $install_path, $style_row['style_copyright'], $style_row['style_active'], $style_row['style_default'], $style_row, $template_root_path, $template_path, $theme_root_path, $theme_path, $imageset_root_path, $imageset_path);
+ $actions[] = array(
+ 'HTML' => $this->user->lang['CANNOT_BE_INSTALLED']
+ );
}
else
{
- $style_row['store_db'] = $this->install_element($mode, $error, 'install', $root_path, $style_row[$mode . '_id'], $style_row[$mode . '_name'], $install_path, $style_row[$mode . '_copyright'], $style_row['store_db']);
+ $actions[] = array(
+ 'U_ACTION' => $this->u_action . '&amp;action=install&amp;hash=' . generate_link_hash('install') . '&amp;dir=' . urlencode($style['style_path']),
+ 'L_ACTION' => $this->user->lang['INSTALL_STYLE']
+ );
}
+ }
- if (!sizeof($error))
- {
- $cache->destroy('sql', STYLES_TABLE);
+ // todo: add hook
- $message = ($style_row['store_db']) ? '_ADDED_DB' : '_ADDED';
- trigger_error($user->lang[$l_type . $message] . adm_back_link($this->u_action));
- }
+ // Assign template variables
+ $this->template->assign_block_vars('styles_list', $row);
+ foreach($actions as $action)
+ {
+ $this->template->assign_block_vars('styles_list.actions', $action);
}
- $this->page_title = 'INSTALL_' . $l_type;
-
- $template->assign_vars(array(
- 'S_DETAILS' => true,
- 'S_INSTALL' => true,
- 'S_ERROR_MSG' => (sizeof($error)) ? true : false,
- 'S_LOCATION' => (isset($installcfg['inherit_from']) && $installcfg['inherit_from']) ? false : true,
- 'S_STYLE' => ($mode == 'style') ? true : false,
- 'S_TEMPLATE' => ($mode == 'template') ? true : false,
- 'S_SUPERTEMPLATE' => (isset($installcfg['inherit_from'])) ? $installcfg['inherit_from'] : '',
- 'S_THEME' => ($mode == 'theme') ? true : false,
-
- 'S_STORE_DB' => (isset($style_row[$mode . '_storedb'])) ? $style_row[$mode . '_storedb'] : 0,
- 'S_STYLE_ACTIVE' => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0,
- 'S_STYLE_DEFAULT' => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0,
-
- 'U_ACTION' => $this->u_action . "&amp;action=install&amp;path=" . urlencode($install_path),
- 'U_BACK' => $this->u_action,
-
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'L_NAME' => $user->lang[$l_type . '_NAME'],
- 'L_LOCATION' => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION'] : '',
- 'L_LOCATION_EXPLAIN' => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION_EXPLAIN'] : '',
-
- 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
- 'NAME' => $style_row[$mode . '_name'],
- 'COPYRIGHT' => $style_row[$mode . '_copyright'],
- 'TEMPLATE_NAME' => ($mode == 'style') ? $style_row['template_name'] : '',
- 'THEME_NAME' => ($mode == 'style') ? $style_row['theme_name'] : '',
- 'IMAGESET_NAME' => ($mode == 'style') ? $style_row['imageset_name'] : '')
- );
+ // Increase counters
+ $counter = ($style['style_id']) ? ($style['style_active'] ? 'active' : 'inactive') : (empty($style['_available']) ? 'cannotinstall' : 'caninstall');
+ if (!isset($this->style_counters))
+ {
+ $this->style_counters = array(
+ 'total' => 0,
+ 'active' => 0,
+ 'inactive' => 0,
+ 'caninstall' => 0,
+ 'cannotinstall' => 0
+ );
+ }
+ $this->style_counters[$counter]++;
+ $this->style_counters['total']++;
}
/**
- * Add new style
+ * Show welcome message
+ *
+ * @param string $title main title
+ * @param string $description page description
*/
- function add($mode)
+ protected function welcome_message($title, $description)
{
- global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template;
-
- $l_type = strtoupper($mode);
- $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE, 'imageset' => STYLES_IMAGESET_TABLE);
- $error = array();
-
- $style_row = array(
- $mode . '_name' => utf8_normalize_nfc(request_var('name', '', true)),
- $mode . '_copyright' => utf8_normalize_nfc(request_var('copyright', '', true)),
- 'template_id' => 0,
- 'theme_id' => 0,
- 'imageset_id' => 0,
- 'store_db' => request_var('store_db', 0),
- 'style_active' => request_var('style_active', 1),
- 'style_default' => request_var('style_default', 0),
+ $this->template->assign_vars(array(
+ 'L_TITLE' => $this->user->lang[$title],
+ 'L_EXPLAIN' => (isset($this->user->lang[$description])) ? $this->user->lang[$description] : ''
+ )
);
+ }
- $basis = request_var('basis', 0);
- $update = (isset($_POST['update'])) ? true : false;
-
- if ($basis)
- {
- switch ($mode)
- {
- case 'style':
- $sql_select = 'template_id, theme_id, imageset_id';
- $sql_from = STYLES_TABLE;
- break;
-
- case 'template':
- $sql_select = 'template_id';
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
-
- case 'theme':
- $sql_select = 'theme_id';
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_select = 'imageset_id';
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
- }
-
- $sql = "SELECT $sql_select
- FROM $sql_from
- WHERE {$mode}_id = $basis";
- $result = $db->sql_query($sql);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if (!$row)
- {
- $error[] = $user->lang['NO_' . $l_type];
- }
-
- if (!sizeof($error))
- {
- $style_row['template_id'] = (isset($row['template_id'])) ? $row['template_id'] : $style_row['template_id'];
- $style_row['theme_id'] = (isset($row['theme_id'])) ? $row['theme_id'] : $style_row['theme_id'];
- $style_row['imageset_id'] = (isset($row['imageset_id'])) ? $row['imageset_id'] : $style_row['imageset_id'];
- }
- }
-
- if ($update)
- {
- $style_row['template_id'] = request_var('template_id', $style_row['template_id']);
- $style_row['theme_id'] = request_var('theme_id', $style_row['theme_id']);
- $style_row['imageset_id'] = request_var('imageset_id', $style_row['imageset_id']);
-
- if ($mode == 'style' && (!$style_row['template_id'] || !$style_row['theme_id'] || !$style_row['imageset_id']))
- {
- $error[] = $user->lang['STYLE_ERR_NO_IDS'];
- }
- }
-
- // User has submitted form and no errors have occurred
- if ($update && !sizeof($error))
- {
- if ($mode == 'style')
- {
- $style_row['style_id'] = 0;
-
- $this->install_style($error, 'add', '', $style_row['style_id'], $style_row['style_name'], '', $style_row['style_copyright'], $style_row['style_active'], $style_row['style_default'], $style_row);
- }
-
- if (!sizeof($error))
- {
- $cache->destroy('sql', STYLES_TABLE);
-
- $message = ($style_row['store_db']) ? '_ADDED_DB' : '_ADDED';
- trigger_error($user->lang[$l_type . $message] . adm_back_link($this->u_action));
- }
- }
+ /**
+ * Find all directories that have styles
+ *
+ * @return array Directory names
+ */
+ protected function find_style_dirs()
+ {
+ $styles = array();
- if ($mode == 'style')
+ $dp = @opendir($this->styles_path);
+ if ($dp)
{
- foreach ($element_ary as $element => $table)
+ while (($file = readdir($dp)) !== false)
{
- $sql = "SELECT {$element}_id, {$element}_name
- FROM $table
- ORDER BY {$element}_id ASC";
- $result = $db->sql_query($sql);
+ $dir = $this->styles_path . $file;
+ if ($file[0] == '.' || !is_dir($dir))
+ {
+ continue;
+ }
- ${$element . '_options'} = '';
- while ($row = $db->sql_fetchrow($result))
+ if (file_exists("{$dir}/style.cfg"))
{
- $selected = ($row[$element . '_id'] == $style_row[$element . '_id']) ? ' selected="selected"' : '';
- ${$element . '_options'} .= '<option value="' . $row[$element . '_id'] . '"' . $selected . '>' . $row[$element . '_name'] . '</option>';
+ $styles[] = $file;
}
- $db->sql_freeresult($result);
}
+ closedir($dp);
}
- $this->page_title = 'ADD_' . $l_type;
-
- $template->assign_vars(array(
- 'S_DETAILS' => true,
- 'S_ADD' => true,
- 'S_ERROR_MSG' => (sizeof($error)) ? true : false,
- 'S_STYLE' => ($mode == 'style') ? true : false,
- 'S_TEMPLATE' => ($mode == 'template') ? true : false,
- 'S_THEME' => ($mode == 'theme') ? true : false,
- 'S_BASIS' => ($basis) ? true : false,
-
- 'S_STORE_DB' => (isset($style_row['storedb'])) ? $style_row['storedb'] : 0,
- 'S_STYLE_ACTIVE' => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0,
- 'S_STYLE_DEFAULT' => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0,
- 'S_TEMPLATE_OPTIONS' => ($mode == 'style') ? $template_options : '',
- 'S_THEME_OPTIONS' => ($mode == 'style') ? $theme_options : '',
- 'S_IMAGESET_OPTIONS' => ($mode == 'style') ? $imageset_options : '',
-
- 'U_ACTION' => $this->u_action . '&amp;action=add&amp;basis=' . $basis,
- 'U_BACK' => $this->u_action,
-
- 'L_TITLE' => $user->lang[$this->page_title],
- 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'],
- 'L_NAME' => $user->lang[$l_type . '_NAME'],
- 'L_LOCATION' => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION'] : '',
- 'L_LOCATION_EXPLAIN' => ($mode == 'template' || $mode == 'theme') ? $user->lang[$l_type . '_LOCATION_EXPLAIN'] : '',
-
- 'ERROR_MSG' => (sizeof($error)) ? implode('<br />', $error) : '',
- 'NAME' => $style_row[$mode . '_name'],
- 'COPYRIGHT' => $style_row[$mode . '_copyright'])
- );
-
+ return $styles;
}
/**
-
- $reqd_template = (isset($installcfg['required_template'])) ? $installcfg['required_template'] : false;
- $reqd_theme = (isset($installcfg['required_theme'])) ? $installcfg['required_theme'] : false;
- $reqd_imageset = (isset($installcfg['required_imageset'])) ? $installcfg['required_imageset'] : false;
-
- // Check to see if each element is already installed, if it is grab the id
- foreach ($element_ary as $element => $table)
- {
- $style_row = array_merge($style_row, array(
- $element . '_id' => 0,
- $element . '_name' => '',
- $element . '_copyright' => '')
- );
-
- $this->test_installed($element, $error, $root_path, ${'reqd_' . $element}, $style_row[$element . '_id'], $style_row[$element . '_name'], $style_row[$element . '_copyright']);
- * Is this element installed? If not, grab its cfg details
+ * Sort styles
*/
- function test_installed($element, &$error, $root_path, $reqd_name, &$id, &$name, &$copyright)
+ public function sort_styles($style1, $style2)
{
- global $db, $user;
-
- switch ($element)
+ if ($style1['style_active'] != $style2['style_active'])
{
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
+ return ($style1['style_active']) ? -1 : 1;
}
-
- $l_element = strtoupper($element);
-
- $chk_name = ($reqd_name !== false) ? $reqd_name : $name;
-
- $sql = "SELECT {$element}_id, {$element}_name
- FROM $sql_from
- WHERE {$element}_name = '" . $db->sql_escape($chk_name) . "'";
- $result = $db->sql_query($sql);
-
- if ($row = $db->sql_fetchrow($result))
+ if (isset($style1['_available']) && $style1['_available'] != $style2['_available'])
{
- $name = $row[$element . '_name'];
- $id = $row[$element . '_id'];
- }
- else
- {
- if (!($cfg = @file("$root_path$element/$element.cfg")))
- {
- $error[] = sprintf($user->lang['REQUIRES_' . $l_element], $reqd_name);
- return false;
- }
-
- $cfg = parse_cfg_file("$root_path$element/$element.cfg", $cfg);
-
- $name = $cfg['name'];
- $copyright = $cfg['copyright'];
- $id = 0;
-
- unset($cfg);
+ return ($style1['_available']) ? -1 : 1;
}
- $db->sql_freeresult($result);
+ return strcasecmp(isset($style1['style_name']) ? $style1['style_name'] : $style1['name'], isset($style2['style_name']) ? $style2['style_name'] : $style2['name']);
}
/**
- * Install/Add style
+ * Read style configuration file
+ *
+ * @param string $dir style directory
+ * @return array|bool Style data, false on error
*/
- function install_style(&$error, $action, $root_path, &$id, $name, $path, $copyright, $active, $default, &$style_row, $template_root_path = false, $template_path = false, $theme_root_path = false, $theme_path = false, $imageset_root_path = false, $imageset_path = false)
+ protected function read_style_cfg($dir)
{
- global $config, $db, $user;
-
- $element_ary = array('template', 'theme', 'imageset');
-
- if (!$name)
- {
- $error[] = $user->lang['STYLE_ERR_STYLE_NAME'];
- }
-
- // Check length settings
- if (utf8_strlen($name) > 30)
- {
- $error[] = $user->lang['STYLE_ERR_NAME_LONG'];
- }
-
- if (utf8_strlen($copyright) > 60)
- {
- $error[] = $user->lang['STYLE_ERR_COPY_LONG'];
- }
-
- // Check if the name already exist
- $sql = 'SELECT style_id
- FROM ' . STYLES_TABLE . "
- WHERE style_name = '" . $db->sql_escape($name) . "'";
- $result = $db->sql_query($sql);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($row)
- {
- $error[] = $user->lang['STYLE_ERR_NAME_EXIST'];
- }
-
- if (sizeof($error))
- {
- return false;
- }
+ static $required = array('name', 'phpbb_version', 'copyright');
+ $cfg = parse_cfg_file($this->styles_path . $dir . '/style.cfg');
- foreach ($element_ary as $element)
+ // Check if it is a valid file
+ foreach ($required as $key)
{
- // Zero id value ... need to install element ... run usual checks
- // and do the install if necessary
- if (!$style_row[$element . '_id'])
+ if (!isset($cfg[$key]))
{
- $this->install_element($element, $error, $action, (${$element . '_root_path'}) ? ${$element . '_root_path'} : $root_path, $style_row[$element . '_id'], $style_row[$element . '_name'], (${$element . '_path'}) ? ${$element . '_path'} : $path, $style_row[$element . '_copyright']);
+ return false;
}
}
- if (!$style_row['template_id'] || !$style_row['theme_id'] || !$style_row['imageset_id'])
- {
- $error[] = $user->lang['STYLE_ERR_NO_IDS'];
- }
-
- if (sizeof($error))
+ // Check data
+ if (!isset($cfg['parent']) || !is_string($cfg['parent']) || $cfg['parent'] == $cfg['name'])
{
- return false;
+ $cfg['parent'] = '';
}
-
- $db->sql_transaction('begin');
-
- $sql_ary = array(
- 'style_name' => $name,
- 'style_copyright' => $copyright,
- 'style_active' => (int) $active,
- 'template_id' => (int) $style_row['template_id'],
- 'theme_id' => (int) $style_row['theme_id'],
- 'imageset_id' => (int) $style_row['imageset_id'],
- );
-
- $sql = 'INSERT INTO ' . STYLES_TABLE . '
- ' . $db->sql_build_array('INSERT', $sql_ary);
- $db->sql_query($sql);
-
- $id = $db->sql_nextid();
-
- if ($default)
+ if (!isset($cfg['template_bitfield']))
{
- $sql = 'UPDATE ' . USERS_TABLE . "
- SET user_style = $id
- WHERE user_style = " . $config['default_style'];
- $db->sql_query($sql);
-
- set_config('default_style', $id);
+ $cfg['template_bitfield'] = $this->default_bitfield();
}
- $db->sql_transaction('commit');
-
- add_log('admin', 'LOG_STYLE_ADD', $name);
+ return $cfg;
}
/**
- * Install/add an element, doing various checks as we go
+ * Install style
+ *
+ * @param $style style data
+ * @return int Style id
*/
- function install_element($mode, &$error, $action, $root_path, &$id, $name, $path, $copyright, $store_db = 0)
+ protected function install_style($style)
{
- global $phpbb_root_path, $db, $user;
-
- // we parse the cfg here (again)
- $cfg_data = parse_cfg_file("$root_path$mode/$mode.cfg");
-
- switch ($mode)
+ // Generate row
+ $sql_ary = array();
+ foreach ($style as $key => $value)
{
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
-
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
- }
-
- $l_type = strtoupper($mode);
-
- if (!$name)
- {
- $error[] = $user->lang[$l_type . '_ERR_STYLE_NAME'];
- }
-
- // Check length settings
- if (utf8_strlen($name) > 30)
- {
- $error[] = $user->lang[$l_type . '_ERR_NAME_LONG'];
- }
-
- if (utf8_strlen($copyright) > 60)
- {
- $error[] = $user->lang[$l_type . '_ERR_COPY_LONG'];
- }
-
- // Check if the name already exist
- $sql = "SELECT {$mode}_id
- FROM $sql_from
- WHERE {$mode}_name = '" . $db->sql_escape($name) . "'";
- $result = $db->sql_query($sql);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- if ($row)
- {
- // If it exist, we just use the style on installation
- if ($action == 'install')
+ if ($key != 'style_id' && substr($key, 0, 1) != '_')
{
- $id = $row[$mode . '_id'];
- return false;
+ $sql_ary[$key] = $value;
}
-
- $error[] = $user->lang[$l_type . '_ERR_NAME_EXIST'];
}
- if (isset($cfg_data['inherit_from']) && $cfg_data['inherit_from'])
- {
- if ($mode === 'template')
- {
- $select_bf = ', bbcode_bitfield';
- }
- else
- {
- $select_bf = '';
- }
+ // Add to database
+ $this->db->sql_transaction('begin');
- $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path, {$mode}_storedb $select_bf
- FROM $sql_from
- WHERE {$mode}_name = '" . $db->sql_escape($cfg_data['inherit_from']) . "'
- AND {$mode}_inherits_id = 0";
- $result = $db->sql_query($sql);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
- if (!$row)
- {
- $error[] = sprintf($user->lang[$l_type . '_ERR_REQUIRED_OR_INCOMPLETE'], $cfg_data['inherit_from']);
- }
- else
- {
- $inherit_id = $row["{$mode}_id"];
- $inherit_path = $row["{$mode}_path"];
- $inherit_bf = ($mode === 'template') ? $row["bbcode_bitfield"] : false;
- $cfg_data['store_db'] = $row["{$mode}_storedb"];
- $store_db = $row["{$mode}_storedb"];
- }
- }
- else
- {
- $inherit_id = 0;
- $inherit_path = '';
- $inherit_bf = false;
- }
-
- if (sizeof($error))
- {
- return false;
- }
-
- $sql_ary = array(
- $mode . '_name' => $name,
- $mode . '_copyright' => $copyright,
- $mode . '_path' => $path,
- );
-
- switch ($mode)
- {
- case 'template':
- // We check if the template author defined a different bitfield
- if (!empty($cfg_data['template_bitfield']))
- {
- $sql_ary['bbcode_bitfield'] = $cfg_data['template_bitfield'];
- }
- else if ($inherit_bf)
- {
- $sql_ary['bbcode_bitfield'] = $inherit_bf;
- }
- else
- {
- $sql_ary['bbcode_bitfield'] = TEMPLATE_BITFIELD;
- }
-
- // We set a pre-defined bitfield here which we may use further in 3.2
- $sql_ary += array(
- 'template_storedb' => $store_db,
- );
- if (isset($cfg_data['inherit_from']) && $cfg_data['inherit_from'])
- {
- $sql_ary += array(
- 'template_inherits_id' => $inherit_id,
- 'template_inherit_path' => $inherit_path,
- );
- }
- break;
-
- case 'theme':
- // We are only interested in the theme configuration for now
-
- if (isset($cfg_data['parse_css_file']) && $cfg_data['parse_css_file'])
- {
- $store_db = 1;
- }
-
- $sql_ary += array(
- 'theme_storedb' => $store_db,
- 'theme_data' => ($store_db) ? $this->db_theme_data($sql_ary, false, $root_path) : '',
- 'theme_mtime' => (int) filemtime("{$phpbb_root_path}styles/$path/theme/stylesheet.css")
- );
- break;
-
- // all the heavy lifting is done later
- case 'imageset':
- break;
- }
-
- $db->sql_transaction('begin');
-
- $sql = "INSERT INTO $sql_from
- " . $db->sql_build_array('INSERT', $sql_ary);
- $db->sql_query($sql);
-
- $id = $db->sql_nextid();
-
- if ($mode == 'template' && $store_db)
- {
- $filelist = filelist("{$root_path}template", '', 'html');
- $this->store_templates('insert', $id, $path, $filelist);
- }
- else if ($mode == 'imageset')
- {
- $cfg_data = parse_cfg_file("$root_path$mode/imageset.cfg");
-
- $imageset_definitions = array();
- foreach ($this->imageset_keys as $topic => $key_array)
- {
- $imageset_definitions = array_merge($imageset_definitions, $key_array);
- }
-
- foreach ($cfg_data as $key => $value)
- {
- if (strpos($value, '*') !== false)
- {
- if (substr($value, -1, 1) === '*')
- {
- list($image_filename, $image_height) = explode('*', $value);
- $image_width = 0;
- }
- else
- {
- list($image_filename, $image_height, $image_width) = explode('*', $value);
- }
- }
- else
- {
- $image_filename = $value;
- $image_height = $image_width = 0;
- }
-
- if (strpos($key, 'img_') === 0 && $image_filename)
- {
- $key = substr($key, 4);
- if (in_array($key, $imageset_definitions))
- {
- $sql_ary = array(
- 'image_name' => $key,
- 'image_filename' => str_replace('{PATH}', "styles/$path/imageset/", trim($image_filename)),
- 'image_height' => (int) $image_height,
- 'image_width' => (int) $image_width,
- 'imageset_id' => (int) $id,
- 'image_lang' => '',
- );
- $db->sql_query('INSERT INTO ' . STYLES_IMAGESET_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
- }
- }
- }
- unset($cfg_data);
+ $sql = 'INSERT INTO ' . STYLES_TABLE . '
+ ' . $this->db->sql_build_array('INSERT', $sql_ary);
+ $this->db->sql_query($sql);
- $sql = 'SELECT lang_dir
- FROM ' . LANG_TABLE;
- $result = $db->sql_query($sql);
+ $id = $this->db->sql_nextid();
- while ($row = $db->sql_fetchrow($result))
- {
- if (@file_exists("$root_path$mode/{$row['lang_dir']}/imageset.cfg"))
- {
- $cfg_data_imageset_data = parse_cfg_file("$root_path$mode/{$row['lang_dir']}/imageset.cfg");
- foreach ($cfg_data_imageset_data as $image_name => $value)
- {
- if (strpos($value, '*') !== false)
- {
- if (substr($value, -1, 1) === '*')
- {
- list($image_filename, $image_height) = explode('*', $value);
- $image_width = 0;
- }
- else
- {
- list($image_filename, $image_height, $image_width) = explode('*', $value);
- }
- }
- else
- {
- $image_filename = $value;
- $image_height = $image_width = 0;
- }
+ $this->db->sql_transaction('commit');
- if (strpos($image_name, 'img_') === 0 && $image_filename)
- {
- $image_name = substr($image_name, 4);
- if (in_array($image_name, $imageset_definitions))
- {
- $sql_ary = array(
- 'image_name' => $image_name,
- 'image_filename' => $image_filename,
- 'image_height' => (int) $image_height,
- 'image_width' => (int) $image_width,
- 'imageset_id' => (int) $id,
- 'image_lang' => $row['lang_dir'],
- );
- $db->sql_query('INSERT INTO ' . STYLES_IMAGESET_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
- }
- }
- }
- unset($cfg_data_imageset_data);
- }
- }
- $db->sql_freeresult($result);
- }
+ add_log('admin', 'LOG_STYLE_ADD', $sql_ary['style_name']);
- $db->sql_transaction('commit');
-
- $log = ($store_db) ? 'LOG_' . $l_type . '_ADD_DB' : 'LOG_' . $l_type . '_ADD_FS';
- add_log('admin', $log, $name);
-
- // Return store_db in case it had to be altered
- return $store_db;
+ return $id;
}
/**
- * Checks downwards dependencies
+ * Lists all styles
*
- * @access public
- * @param string $mode The element type to check - only template is supported
- * @param int $id The template id
- * @returns false if no component inherits, array with name, path and id for each subtemplate otherwise
+ * @return array Rows with styles data
*/
- function check_inheritance($mode, $id)
+ protected function get_styles()
{
- global $db;
-
- $l_type = strtoupper($mode);
-
- switch ($mode)
- {
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
+ $sql = 'SELECT *
+ FROM ' . STYLES_TABLE;
+ $result = $this->db->sql_query($sql);
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
+ $rows = $this->db->sql_fetchrowset($result);
+ $this->db->sql_freeresult($result);
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
- }
+ return $rows;
+ }
- $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
- FROM $sql_from
- WHERE {$mode}_inherits_id = " . (int) $id;
- $result = $db->sql_query($sql);
+ /**
+ * Count users for each style
+ *
+ * @return array Styles in following format: [style_id] = number of users
+ */
+ protected function get_users()
+ {
+ $sql = 'SELECT user_style, COUNT(user_style) AS style_count
+ FROM ' . USERS_TABLE . '
+ GROUP BY user_style';
+ $result = $this->db->sql_query($sql);
- $names = array();
- while ($row = $db->sql_fetchrow($result))
+ $style_count = array();
+ while ($row = $this->db->sql_fetchrow($result))
{
-
- $names[$row["{$mode}_id"]] = array(
- "{$mode}_id" => $row["{$mode}_id"],
- "{$mode}_name" => $row["{$mode}_name"],
- "{$mode}_path" => $row["{$mode}_path"],
- );
+ $style_count[$row['user_style']] = $row['style_count'];
}
- $db->sql_freeresult($result);
+ $this->db->sql_freeresult($result);
- if (sizeof($names))
- {
- return $names;
- }
- else
- {
- return false;
- }
+ return $style_count;
}
/**
- * Checks upwards dependencies
+ * Uninstall style
*
- * @access public
- * @param string $mode The element type to check - only template is supported
- * @param int $id The template id
- * @returns false if the component does not inherit, array with name, path and id otherwise
+ * @param array $style Style data
+ * @return bool|string True on success, error message on error
*/
- function get_super($mode, $id)
+ protected function uninstall_style($style)
{
- global $db;
-
- $l_type = strtoupper($mode);
-
- switch ($mode)
- {
- case 'template':
- $sql_from = STYLES_TEMPLATE_TABLE;
- break;
+ $id = $style['style_id'];
+ $path = $style['style_path'];
- case 'theme':
- $sql_from = STYLES_THEME_TABLE;
- break;
-
- case 'imageset':
- $sql_from = STYLES_IMAGESET_TABLE;
- break;
- }
+ // Check if style has child styles
+ $sql = 'SELECT style_id
+ FROM ' . STYLES_TABLE . '
+ WHERE style_parent_id = ' . (int) $id . " OR style_parent_tree = '" . $this->db->sql_escape($path) . "'";
+ $result = $this->db->sql_query($sql);
- $sql = "SELECT {$mode}_inherits_id
- FROM $sql_from
- WHERE {$mode}_id = " . (int) $id;
- $result = $db->sql_query_limit($sql, 1);
+ $conflict = $this->db->sql_fetchrow($result);
+ $this->db->sql_freeresult($result);
- if ($row = $db->sql_fetchrow($result))
- {
- $db->sql_freeresult($result);
- }
- else
+ if ($conflict !== false)
{
- return false;
+ return sprintf($this->user->lang['STYLE_UNINSTALL_DEPENDENT'], $style['style_name']);
}
- $super_id = $row["{$mode}_inherits_id"];
-
- $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
- FROM $sql_from
- WHERE {$mode}_id = " . (int) $super_id;
-
- $result = $db->sql_query_limit($sql, 1);
- if ($row = $db->sql_fetchrow($result))
- {
- $db->sql_freeresult($result);
- return $row;
- }
+ // Change default style for users
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET user_style = 0
+ WHERE user_style = ' . $id;
+ $this->db->sql_query($sql);
- return false;
+ // Uninstall style
+ $sql = 'DELETE FROM ' . STYLES_TABLE . '
+ WHERE style_id = ' . $id;
+ $this->db->sql_query($sql);
+ return true;
}
/**
- * Moves a template set and its subtemplates to the database
+ * Delete all files in style directory
*
- * @access public
- * @param string $mode The component to move - only template is supported
- * @param int $id The template id
+ * @param string $path Style directory
+ * @param string $dir Directory to remove inside style's directory
+ * @return bool True on success, false on error
*/
- function store_in_db($mode, $id)
+ protected function delete_style_files($path, $dir = '')
{
- global $db, $user;
+ $dirname = $this->styles_path . $path . $dir;
+ $result = true;
- $error = array();
- $l_type = strtoupper($mode);
- if ($super = $this->get_super($mode, $id))
- {
- $error[] = (sprintf($user->lang["{$l_type}_INHERITS"], $super['template_name']));
- return $error;
- }
+ $dp = @opendir($dirname);
- $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
- FROM " . STYLES_TEMPLATE_TABLE . '
- WHERE template_id = ' . (int) $id;
-
- $result = $db->sql_query_limit($sql, 1);
- if ($row = $db->sql_fetchrow($result))
+ if ($dp)
{
- $db->sql_freeresult($result);
- $subs = $this->check_inheritance($mode, $id);
-
- $this->_store_in_db($mode, $id, $row["{$mode}_path"]);
- if ($subs && sizeof($subs))
+ while (($file = readdir($dp)) !== false)
{
- foreach ($subs as $sub_id => $sub)
+ if ($file == '.' || $file == '..')
+ {
+ continue;
+ }
+ $filename = $dirname . '/' . $file;
+ if (is_dir($filename))
+ {
+ if (!$this->delete_style_files($path, $dir . '/' . $file))
+ {
+ $result = false;
+ }
+ }
+ else
{
- if ($err = $this->_store_in_db($mode, $sub["{$mode}_id"], $sub["{$mode}_path"]))
+ if (!@unlink($filename))
{
- $error[] = $err;
+ $result = false;
}
}
}
+ closedir($dp);
}
- if (sizeof($error))
+ if (!@rmdir($dirname))
{
- return $error;
+ return false;
}
- return false;
- }
-
- /**
- * Moves a template set to the database
- *
- * @access private
- * @param string $mode The component to move - only template is supported
- * @param int $id The template id
- * @param string $path TThe path to the template files
- */
- function _store_in_db($mode, $id, $path)
- {
- global $phpbb_root_path, $db;
-
- $filelist = filelist("{$phpbb_root_path}styles/{$path}/template", '', 'html');
- $this->store_templates('insert', $id, $path, $filelist);
-
- // Okay, we do the query here -shouldn't be triggered often.
- $sql = 'UPDATE ' . STYLES_TEMPLATE_TABLE . '
- SET template_storedb = 1
- WHERE template_id = ' . $id;
- $db->sql_query($sql);
+ return $result;
}
/**
- * Moves a template set and its subtemplates to the filesystem
+ * Get list of items from posted data
*
- * @access public
- * @param string $mode The component to move - only template is supported
- * @param int $id The template id
+ * @param string $name Variable name
+ * @param string|int $default Default value for array
+ * @param bool $error If true, error will be triggered if list is empty
+ * @return array Items
*/
- function store_in_fs($mode, $id)
+ protected function request_vars($name, $default, $error = false)
{
- global $db, $user;
+ $item = $this->request->variable($name, $default);
+ $items = $this->request->variable($name . 's', array($default));
- $error = array();
- $l_type = strtoupper($mode);
- if ($super = $this->get_super($mode, $id))
+ if (count($items) == 1 && $items[0] == $default)
{
- $error[] = (sprintf($user->lang["{$l_type}_INHERITS"], $super['template_name']));
- return($error);
+ $items = array();
}
- $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path
- FROM " . STYLES_TEMPLATE_TABLE . '
- WHERE template_id = ' . (int) $id;
-
- $result = $db->sql_query_limit($sql, 1);
- if ($row = $db->sql_fetchrow($result))
+ if ($item != $default && !count($items))
{
- $db->sql_freeresult($result);
- if (!sizeof($error))
- {
- $subs = $this->check_inheritance($mode, $id);
-
- $this->_store_in_fs($mode, $id, $row["{$mode}_path"]);
+ $items[] = $item;
+ }
- if ($subs && sizeof($subs))
- {
- foreach ($subs as $sub_id => $sub)
- {
- $this->_store_in_fs($mode, $sub["{$mode}_id"], $sub["{$mode}_path"]);
- }
- }
- }
- if (sizeof($error))
- {
- $this->store_in_db($id, $mode);
- return $error;
- }
+ if ($error && !count($items))
+ {
+ trigger_error($this->user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING);
}
- return false;
+
+ return $items;
}
/**
- * Moves a template set to the filesystem
+ * Generates default bitfield
+ *
+ * This bitfield decides which bbcodes are defined in a template.
*
- * @access private
- * @param string $mode The component to move - only template is supported
- * @param int $id The template id
- * @param string $path The path to the template
+ * @return string Bitfield
*/
- function _store_in_fs($mode, $id, $path)
+ protected function default_bitfield()
{
- global $phpbb_root_path, $db, $user, $safe_mode;
-
- $store_db = 0;
- $error = array();
- if (!$safe_mode && phpbb_is_writable("{$phpbb_root_path}styles/{$path}/template"))
+ static $value;
+ if (isset($value))
{
- $sql = 'SELECT *
- FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = $id";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- if (!($fp = @fopen("{$phpbb_root_path}styles/{$path}/template/" . $row['template_filename'], 'wb')))
- {
- $store_db = 1;
- $error[] = $user->lang['EDIT_TEMPLATE_STORED_DB'];
- break;
- }
-
- fwrite($fp, $row['template_data']);
- fclose($fp);
- }
- $db->sql_freeresult($result);
-
- if (!$store_db)
- {
- $sql = 'DELETE FROM ' . STYLES_TEMPLATE_DATA_TABLE . "
- WHERE template_id = $id";
- $db->sql_query($sql);
- }
+ return $value;
}
- if (sizeof($error))
- {
- return $error;
- }
- $sql = 'UPDATE ' . STYLES_TEMPLATE_TABLE . '
- SET template_storedb = 0
- WHERE template_id = ' . $id;
- $db->sql_query($sql);
- return false;
+ // Hardcoded template bitfield to add for new templates
+ $bitfield = new bitfield();
+ $bitfield->set(0);
+ $bitfield->set(1);
+ $bitfield->set(2);
+ $bitfield->set(3);
+ $bitfield->set(4);
+ $bitfield->set(8);
+ $bitfield->set(9);
+ $bitfield->set(11);
+ $bitfield->set(12);
+ $value = $bitfield->get_base64();
+ return $value;
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_update.php b/phpBB/includes/acp/acp_update.php
index 5d3e9abcea..6b5407067d 100644
--- a/phpBB/includes/acp/acp_update.php
+++ b/phpBB/includes/acp/acp_update.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -86,5 +85,3 @@ class acp_update
));
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php
index 70e08f79f2..fbc1cc1f14 100644
--- a/phpBB/includes/acp/acp_users.php
+++ b/phpBB/includes/acp/acp_users.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,6 +32,8 @@ class acp_users
{
global $config, $db, $user, $auth, $template, $cache;
global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
+ global $phpbb_dispatcher, $request;
+ global $phpbb_container;
$user->add_lang(array('posting', 'ucp', 'acp/users'));
$this->tpl_name = 'acp_users';
@@ -56,7 +57,7 @@ class acp_users
$this->page_title = 'WHOIS';
$this->tpl_name = 'simple_body';
- $user_ip = request_var('user_ip', '');
+ $user_ip = phpbb_ip_normalise(request_var('user_ip', ''));
$domain = gethostbyaddr($user_ip);
$ipwhois = user_ipwhois($user_ip);
@@ -120,7 +121,7 @@ class acp_users
// Build modes dropdown list
$sql = 'SELECT module_mode, module_auth
FROM ' . MODULES_TABLE . "
- WHERE module_basename = 'users'
+ WHERE module_basename = 'acp_users'
AND module_enabled = 1
AND module_class = 'acp'
ORDER BY left_id, module_mode";
@@ -129,7 +130,7 @@ class acp_users
$dropdown_modes = array();
while ($row = $db->sql_fetchrow($result))
{
- if (!$this->p_master->module_auth($row['module_auth']))
+ if (!$this->p_master->module_auth_self($row['module_auth']))
{
continue;
}
@@ -346,7 +347,7 @@ class acp_users
$messenger->template($email_template, $user_row['user_lang']);
- $messenger->to($user_row['user_email'], $user_row['username']);
+ $messenger->set_addresses($user_row);
$messenger->anti_abuse_headers($config, $user);
@@ -395,13 +396,16 @@ class acp_users
{
if ($config['require_activation'] == USER_ACTIVATION_ADMIN)
{
+ $phpbb_notifications = $phpbb_container->get('notification_manager');
+ $phpbb_notifications->delete_notifications('admin_activate_user', $user_row['user_id']);
+
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$messenger = new messenger(false);
$messenger->template('admin_welcome_activated', $user_row['user_lang']);
- $messenger->to($user_row['user_email'], $user_row['username']);
+ $messenger->set_addresses($user_row);
$messenger->anti_abuse_headers($config, $user);
@@ -456,7 +460,7 @@ class acp_users
$sql_ary = array(
'user_avatar' => '',
- 'user_avatar_type' => 0,
+ 'user_avatar_type' => '',
'user_avatar_width' => 0,
'user_avatar_height' => 0,
);
@@ -467,9 +471,11 @@ class acp_users
$db->sql_query($sql);
// Delete old avatar if present
- if ($user_row['user_avatar'] && $user_row['user_avatar_type'] != AVATAR_GALLERY)
+ $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
+ $driver = $phpbb_avatar_manager->get_driver($user_row['user_avatar_type']);
+ if ($driver)
{
- avatar_delete('user', $user_row);
+ $driver->delete($user_row);
}
add_log('admin', 'LOG_USER_DEL_AVATAR', $user_row['username']);
@@ -621,29 +627,31 @@ class acp_users
$topic_id_ary = $move_topic_ary = $move_post_ary = $new_topic_id_ary = array();
$forum_id_ary = array($new_forum_id);
- $sql = 'SELECT topic_id, COUNT(post_id) AS total_posts
+ $sql = 'SELECT topic_id, post_visibility, COUNT(post_id) AS total_posts
FROM ' . POSTS_TABLE . "
WHERE poster_id = $user_id
AND forum_id <> $new_forum_id
- GROUP BY topic_id";
+ GROUP BY topic_id, post_visibility";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
- $topic_id_ary[$row['topic_id']] = $row['total_posts'];
+ $topic_id_ary[$row['topic_id']][$row['post_visibility']] = $row['total_posts'];
}
$db->sql_freeresult($result);
if (sizeof($topic_id_ary))
{
- $sql = 'SELECT topic_id, forum_id, topic_title, topic_replies, topic_replies_real, topic_attachment
+ $sql = 'SELECT topic_id, forum_id, topic_title, topic_posts_approved, topic_posts_unapproved, topic_posts_softdeleted, topic_attachment
FROM ' . TOPICS_TABLE . '
WHERE ' . $db->sql_in_set('topic_id', array_keys($topic_id_ary));
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
- if (max($row['topic_replies'], $row['topic_replies_real']) + 1 == $topic_id_ary[$row['topic_id']])
+ if ($topic_id_ary[$row['topic_id']][ITEM_APPROVED] == $row['topic_posts_approved']
+ && $topic_id_ary[$row['topic_id']][ITEM_UNAPPROVED] == $row['topic_posts_unapproved']
+ && $topic_id_ary[$row['topic_id']][ITEM_DELETED] == $row['topic_posts_softdeleted'])
{
$move_topic_ary[] = $row['topic_id'];
}
@@ -676,7 +684,7 @@ class acp_users
'topic_time' => time(),
'forum_id' => $new_forum_id,
'icon_id' => 0,
- 'topic_approved' => 1,
+ 'topic_visibility' => ITEM_APPROVED,
'topic_title' => $post_ary['title'],
'topic_first_poster_name' => $user_row['username'],
'topic_type' => POST_NORMAL,
@@ -750,6 +758,19 @@ class acp_users
}
break;
+
+ default:
+ /**
+ * Run custom quicktool code
+ *
+ * @event core.acp_users_overview_run_quicktool
+ * @var array user_row Current user data
+ * @var string action Quick tool that should be run
+ * @since 3.1-A1
+ */
+ $vars = array('action', 'user_row');
+ extract($phpbb_dispatcher->trigger_event('core.acp_users_overview_run_quicktool', compact($vars)));
+ break;
}
// Handle registration info updates
@@ -757,9 +778,8 @@ class acp_users
'username' => utf8_normalize_nfc(request_var('user', $user_row['username'], true)),
'user_founder' => request_var('user_founder', ($user_row['user_type'] == USER_FOUNDER) ? 1 : 0),
'email' => strtolower(request_var('user_email', $user_row['user_email'])),
- 'email_confirm' => strtolower(request_var('email_confirm', '')),
- 'new_password' => request_var('new_password', '', true),
- 'password_confirm' => request_var('password_confirm', '', true),
+ 'new_password' => $request->variable('new_password', '', true),
+ 'password_confirm' => $request->variable('password_confirm', '', true),
);
// Validation data - we do not check the password complexity setting here
@@ -789,7 +809,6 @@ class acp_users
array('string', false, 6, 60),
array('email', $user_row['user_email'])
),
- 'email_confirm' => array('string', true, 6, 60)
);
}
@@ -800,11 +819,6 @@ class acp_users
$error[] = 'NEW_PASSWORD_ERROR';
}
- if ($data['email'] != $user_row['user_email'] && $data['email_confirm'] != $data['email'])
- {
- $error[] = 'NEW_EMAIL_ERROR';
- }
-
if (!check_form_key($form_name))
{
$error[] = 'FORM_INVALID';
@@ -863,6 +877,18 @@ class acp_users
}
}
+ /**
+ * Modify user data before we update it
+ *
+ * @event core.acp_users_overview_modify_data
+ * @var array user_row Current user data
+ * @var array data Submitted user data
+ * @var array sql_ary User data we udpate
+ * @since 3.1-A1
+ */
+ $vars = array('user_row', 'data', 'sql_ary');
+ extract($phpbb_dispatcher->trigger_event('core.acp_users_overview_modify_data', compact($vars)));
+
if ($update_username !== false)
{
$sql_ary['username'] = $update_username;
@@ -915,7 +941,7 @@ class acp_users
}
// Replace "error" strings with their real, localised form
- $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
+ $error = array_map(array($user, 'lang'), $error);
}
if ($user_id == $user->data['user_id'])
@@ -953,12 +979,6 @@ class acp_users
}
}
- $s_action_options = '<option class="sep" value="">' . $user->lang['SELECT_OPTION'] . '</option>';
- foreach ($quick_tool_ary as $value => $lang)
- {
- $s_action_options .= '<option value="' . $value . '">' . $user->lang['USER_ADMIN_' . $lang] . '</option>';
- }
-
if ($config['load_onlinetrack'])
{
$sql = 'SELECT MAX(session_time) AS session_time, MIN(session_viewonline) AS session_viewonline
@@ -973,6 +993,23 @@ class acp_users
unset($row);
}
+ /**
+ * Add additional quick tool options and overwrite user data
+ *
+ * @event core.acp_users_display_overview
+ * @var array user_row Array with user data
+ * @var array quick_tool_ary Ouick tool options
+ * @since 3.1-A1
+ */
+ $vars = array('user_row', 'quick_tool_ary');
+ extract($phpbb_dispatcher->trigger_event('core.acp_users_display_overview', compact($vars)));
+
+ $s_action_options = '<option class="sep" value="">' . $user->lang['SELECT_OPTION'] . '</option>';
+ foreach ($quick_tool_ary as $value => $lang)
+ {
+ $s_action_options .= '<option value="' . $value . '">' . $user->lang['USER_ADMIN_' . $lang] . '</option>';
+ }
+
$last_visit = (!empty($user_row['session_time'])) ? $user_row['session_time'] : $user_row['user_lastvisit'];
$inactive_reason = '';
@@ -1004,7 +1041,7 @@ class acp_users
$sql = 'SELECT COUNT(post_id) as posts_in_queue
FROM ' . POSTS_TABLE . '
WHERE poster_id = ' . $user_id . '
- AND post_approved = 0';
+ AND post_visibility = ' . ITEM_UNAPPROVED;
$result = $db->sql_query($sql);
$user_row['posts_in_queue'] = (int) $db->sql_fetchfield('posts_in_queue');
$db->sql_freeresult($result);
@@ -1017,8 +1054,8 @@ class acp_users
$db->sql_freeresult($result);
$template->assign_vars(array(
- 'L_NAME_CHARS_EXPLAIN' => sprintf($user->lang[$config['allow_name_chars'] . '_EXPLAIN'], $config['min_name_chars'], $config['max_name_chars']),
- 'L_CHANGE_PASSWORD_EXPLAIN' => sprintf($user->lang[$config['pass_complex'] . '_EXPLAIN'], $config['min_pass_chars'], $config['max_pass_chars']),
+ 'L_NAME_CHARS_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])),
+ 'L_CHANGE_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])),
'L_POSTS_IN_QUEUE' => $user->lang('NUM_POSTS_IN_QUEUE', $user_row['posts_in_queue']),
'S_FOUNDER' => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
@@ -1128,10 +1165,12 @@ class acp_users
$log_count = 0;
$start = view_log('user', $log_data, $log_count, $config['topics_per_page'], $start, 0, 0, $user_id, $sql_where, $sql_sort);
+ $base_url = $this->u_action . "&amp;u=$user_id&amp;$u_sort_param";
+ phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start);
+
$template->assign_vars(array(
'S_FEEDBACK' => true,
- 'S_ON_PAGE' => on_page($log_count, $config['topics_per_page'], $start),
- 'PAGINATION' => generate_pagination($this->u_action . "&amp;u=$user_id&amp;$u_sort_param", $log_count, $config['topics_per_page'], $start, true),
+ 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $log_count, $config['topics_per_page'], $start),
'S_LIMIT_DAYS' => $s_limit_days,
'S_SORT_KEY' => $s_sort_key,
@@ -1407,7 +1446,7 @@ class acp_users
}
// Replace "error" strings with their real, localised form
- $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
+ $error = array_map(array($user, 'lang'), $error);
}
$s_birthday_day_options = '<option value="0"' . ((!$data['bday_day']) ? ' selected="selected"' : '') . '>--</option>';
@@ -1466,15 +1505,13 @@ class acp_users
$data = array(
'dateformat' => utf8_normalize_nfc(request_var('dateformat', $user_row['user_dateformat'], true)),
'lang' => basename(request_var('lang', $user_row['user_lang'])),
- 'tz' => request_var('tz', (float) $user_row['user_timezone']),
+ 'tz' => request_var('tz', $user_row['user_timezone']),
'style' => request_var('style', $user_row['user_style']),
- 'dst' => request_var('dst', $user_row['user_dst']),
'viewemail' => request_var('viewemail', $user_row['user_allow_viewemail']),
'massemail' => request_var('massemail', $user_row['user_allow_massemail']),
'hideonline' => request_var('hideonline', !$user_row['user_allow_viewonline']),
'notifymethod' => request_var('notifymethod', $user_row['user_notify_type']),
'notifypm' => request_var('notifypm', $user_row['user_notify_pm']),
- 'popuppm' => request_var('popuppm', $this->optionget($user_row, 'popuppm')),
'allowpm' => request_var('allowpm', $user_row['user_allow_pm']),
'topic_sk' => request_var('topic_sk', ($user_row['user_topic_sortby_type']) ? $user_row['user_topic_sortby_type'] : 't'),
@@ -1503,7 +1540,7 @@ class acp_users
$error = validate_data($data, array(
'dateformat' => array('string', false, 1, 30),
'lang' => array('match', false, '#^[a-z_\-]{2,}$#i'),
- 'tz' => array('num', false, -14, 14),
+ 'tz' => array('timezone'),
'topic_sk' => array('string', false, 1, 1),
'topic_sd' => array('string', false, 1, 1),
@@ -1518,7 +1555,6 @@ class acp_users
if (!sizeof($error))
{
- $this->optionset($user_row, 'popuppm', $data['popuppm']);
$this->optionset($user_row, 'viewimg', $data['view_images']);
$this->optionset($user_row, 'viewflash', $data['view_flash']);
$this->optionset($user_row, 'viewsmilies', $data['view_smilies']);
@@ -1539,7 +1575,6 @@ class acp_users
'user_notify_type' => $data['notifymethod'],
'user_notify_pm' => $data['notifypm'],
- 'user_dst' => $data['dst'],
'user_dateformat' => $data['dateformat'],
'user_lang' => $data['lang'],
'user_timezone' => $data['tz'],
@@ -1570,7 +1605,7 @@ class acp_users
|| $user_row['user_allow_viewonline'] && !$sql_ary['user_allow_viewonline'])
{
// We also need to check if the user has the permission to cloak.
- $user_auth = new auth();
+ $user_auth = new \phpbb\auth\auth();
$user_auth->acl($user_row);
$session_sql_ary = array(
@@ -1590,7 +1625,7 @@ class acp_users
}
// Replace "error" strings with their real, localised form
- $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
+ $error = array_map(array($user, 'lang'), $error);
}
$dateformat_options = '';
@@ -1649,6 +1684,7 @@ class acp_users
${'s_sort_' . $sort_option . '_dir'} .= '</select>';
}
+ $timezone_selects = phpbb_timezone_select($user, $data['tz'], true);
$template->assign_vars(array(
'S_PREFS' => true,
'S_JABBER_DISABLED' => ($config['jab_enable'] && $user_row['user_jabber'] && @extension_loaded('xml')) ? false : true,
@@ -1661,8 +1697,6 @@ class acp_users
'NOTIFY_IM' => ($data['notifymethod'] == NOTIFY_IM) ? true : false,
'NOTIFY_BOTH' => ($data['notifymethod'] == NOTIFY_BOTH) ? true : false,
'NOTIFY_PM' => $data['notifypm'],
- 'POPUP_PM' => $data['popuppm'],
- 'DST' => $data['dst'],
'BBCODE' => $data['bbcode'],
'SMILIES' => $data['smilies'],
'ATTACH_SIG' => $data['sig'],
@@ -1689,7 +1723,8 @@ class acp_users
'S_LANG_OPTIONS' => language_select($data['lang']),
'S_STYLE_OPTIONS' => style_select($data['style']),
- 'S_TZ_OPTIONS' => tz_select($data['tz'], true),
+ 'S_TZ_OPTIONS' => $timezone_selects['tz_select'],
+ 'S_TZ_DATE_OPTIONS' => $timezone_selects['tz_dates'],
)
);
@@ -1698,66 +1733,121 @@ class acp_users
case 'avatar':
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
- include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
- $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && phpbb_is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
+ $avatars_enabled = false;
- if ($submit)
+ if ($config['allow_avatar'])
{
+ $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
+ $avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers();
- if (!check_form_key($form_name))
+ // This is normalised data, without the user_ prefix
+ $avatar_data = \phpbb\avatar\manager::clean_row($user_row, 'user');
+
+ if ($submit)
{
+ if (check_form_key($form_name))
+ {
+ $driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', ''));
+
+ if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))
+ {
+ $driver = $phpbb_avatar_manager->get_driver($driver_name);
+ $result = $driver->process_form($request, $template, $user, $avatar_data, $error);
+
+ if ($result && empty($error))
+ {
+ // Success! Lets save the result in the database
+ $result = array(
+ 'user_avatar_type' => $driver_name,
+ 'user_avatar' => $result['avatar'],
+ 'user_avatar_width' => $result['avatar_width'],
+ 'user_avatar_height' => $result['avatar_height'],
+ );
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET ' . $db->sql_build_array('UPDATE', $result) . '
+ WHERE user_id = ' . (int) $user_id;
+
+ $db->sql_query($sql);
+ trigger_error($user->lang['USER_AVATAR_UPDATED'] . adm_back_link($this->u_action . '&amp;u=' . $user_id));
+ }
+ }
+ else
+ {
+ $driver = $phpbb_avatar_manager->get_driver($user->data['user_avatar_type']);
+ if ($driver)
+ {
+ $driver->delete($avatar_data);
+ }
+
+ // Removing the avatar
+ $result = array(
+ 'user_avatar' => '',
+ 'user_avatar_type' => '',
+ 'user_avatar_width' => 0,
+ 'user_avatar_height' => 0,
+ );
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET ' . $db->sql_build_array('UPDATE', $result) . '
+ WHERE user_id = ' . (int) $user_id;
+
+ $db->sql_query($sql);
+ trigger_error($user->lang['USER_AVATAR_UPDATED'] . adm_back_link($this->u_action . '&amp;u=' . $user_id));
+ }
+ }
+ else
+ {
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;u=' . $user_id), E_USER_WARNING);
+ }
}
- if (avatar_process_user($error, $user_row, $can_upload))
+ $selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $user_row['user_avatar_type']));
+
+ foreach ($avatar_drivers as $current_driver)
{
- trigger_error($user->lang['USER_AVATAR_UPDATED'] . adm_back_link($this->u_action . '&amp;u=' . $user_row['user_id']));
- }
+ $driver = $phpbb_avatar_manager->get_driver($current_driver);
- // Replace "error" strings with their real, localised form
- $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
- }
+ $avatars_enabled = true;
+ $config_name = $phpbb_avatar_manager->get_driver_config_name($driver);
+ $template->set_filenames(array(
+ 'avatar' => "acp_avatar_options_{$config_name}.html",
+ ));
- if (!$config['allow_avatar'] && $user_row['user_avatar_type'])
- {
- $error[] = $user->lang['USER_AVATAR_NOT_ALLOWED'];
- }
- else if ((($user_row['user_avatar_type'] == AVATAR_UPLOAD) && !$config['allow_avatar_upload']) ||
- (($user_row['user_avatar_type'] == AVATAR_REMOTE) && !$config['allow_avatar_remote']) ||
- (($user_row['user_avatar_type'] == AVATAR_GALLERY) && !$config['allow_avatar_local']))
- {
- $error[] = $user->lang['USER_AVATAR_TYPE_NOT_ALLOWED'];
- }
-
- // Generate users avatar
- $avatar_img = ($user_row['user_avatar']) ? get_user_avatar($user_row['user_avatar'], $user_row['user_avatar_type'], $user_row['user_avatar_width'], $user_row['user_avatar_height'], 'USER_AVATAR', true) : '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />';
+ if ($driver->prepare_form($request, $template, $user, $avatar_data, $error))
+ {
+ $driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver);
+ $driver_upper = strtoupper($driver_name);
- $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
- $avatar_select = basename(request_var('avatar_select', ''));
- $category = basename(request_var('category', ''));
+ $template->assign_block_vars('avatar_drivers', array(
+ 'L_TITLE' => $user->lang($driver_upper . '_TITLE'),
+ 'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'),
- if ($config['allow_avatar_local'] && $display_gallery)
- {
- avatar_gallery($category, $avatar_select, 4);
+ 'DRIVER' => $driver_name,
+ 'SELECTED' => $current_driver == $selected_driver,
+ 'OUTPUT' => $template->assign_display('avatar'),
+ ));
+ }
+ }
}
+ // Replace "error" strings with their real, localised form
+ $error = $phpbb_avatar_manager->localize_errors($user, $error);
+
+ $avatar = phpbb_get_user_avatar($user_row, 'USER_AVATAR', true);
+
$template->assign_vars(array(
- 'S_AVATAR' => true,
- 'S_CAN_UPLOAD' => $can_upload,
- 'S_UPLOAD_FILE' => ($config['allow_avatar'] && $can_upload && $config['allow_avatar_upload']) ? true : false,
- 'S_REMOTE_UPLOAD' => ($config['allow_avatar'] && $can_upload && $config['allow_avatar_remote_upload']) ? true : false,
- 'S_ALLOW_REMOTE' => ($config['allow_avatar'] && $config['allow_avatar_remote']) ? true : false,
- 'S_DISPLAY_GALLERY' => ($config['allow_avatar'] && $config['allow_avatar_local'] && !$display_gallery) ? true : false,
- 'S_IN_GALLERY' => ($config['allow_avatar'] && $config['allow_avatar_local'] && $display_gallery) ? true : false,
-
- 'AVATAR_IMAGE' => $avatar_img,
- 'AVATAR_MAX_FILESIZE' => $config['avatar_filesize'],
- 'USER_AVATAR_WIDTH' => $user_row['user_avatar_width'],
- 'USER_AVATAR_HEIGHT' => $user_row['user_avatar_height'],
-
- 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)))
- );
+ 'S_AVATAR' => true,
+ 'ERROR' => (!empty($error)) ? implode('<br />', $error) : '',
+ 'AVATAR' => (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar),
+
+ 'S_FORM_ENCTYPE' => ' enctype="multipart/form-data"',
+
+ 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024),
+
+ 'S_AVATARS_ENABLED' => ($config['allow_avatar'] && $avatars_enabled),
+ ));
break;
@@ -1859,7 +1949,7 @@ class acp_users
}
// Replace "error" strings with their real, localised form
- $error = preg_replace('#^([A-Z_]+)$#e', "(!empty(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '\\1'", $error);
+ $error = array_map(array($user, 'lang'), $error);
}
$signature_preview = '';
@@ -1889,7 +1979,7 @@ class acp_users
'FLASH_STATUS' => ($config['allow_sig_flash']) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
'URL_STATUS' => ($config['allow_sig_links']) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
- 'L_SIGNATURE_EXPLAIN' => sprintf($user->lang['SIGNATURE_EXPLAIN'], $config['max_sig_chars']),
+ 'L_SIGNATURE_EXPLAIN' => $user->lang('SIGNATURE_EXPLAIN', (int) $config['max_sig_chars']),
'S_BBCODE_ALLOWED' => $config['allow_sig_bbcode'],
'S_SMILIES_ALLOWED' => $config['allow_sig_smilies'],
@@ -1950,7 +2040,7 @@ class acp_users
$message = (sizeof($log_attachments) == 1) ? $user->lang['ATTACHMENT_DELETED'] : $user->lang['ATTACHMENTS_DELETED'];
- add_log('admin', 'LOG_ATTACHMENTS_DELETED', implode(', ', $log_attachments));
+ add_log('admin', 'LOG_ATTACHMENTS_DELETED', implode($user->lang['COMMA_SEPARATOR'], $log_attachments));
trigger_error($message . adm_back_link($this->u_action . '&amp;u=' . $user_id));
}
else
@@ -2043,14 +2133,15 @@ class acp_users
}
$db->sql_freeresult($result);
+ $base_url = $this->u_action . "&amp;u=$user_id&amp;sk=$sort_key&amp;sd=$sort_dir";
+ phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $num_attachments, $config['topics_per_page'], $start);
+
$template->assign_vars(array(
'S_ATTACHMENTS' => true,
- 'S_ON_PAGE' => on_page($num_attachments, $config['topics_per_page'], $start),
+ 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $num_attachments, $config['topics_per_page'], $start),
'S_SORT_KEY' => $s_sort_key,
'S_SORT_DIR' => $s_sort_dir,
-
- 'PAGINATION' => generate_pagination($this->u_action . "&amp;u=$user_id&amp;sk=$sort_key&amp;sd=$sort_dir", $num_attachments, $config['topics_per_page'], $start, true))
- );
+ ));
break;
@@ -2405,5 +2496,3 @@ class acp_users
return phpbb_optionget($user->keyoptions[$key], $var);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/acp_words.php b/phpBB/includes/acp/acp_words.php
index 88c5bbe592..d8d14ba4ad 100644
--- a/phpBB/includes/acp/acp_words.php
+++ b/phpBB/includes/acp/acp_words.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -186,5 +185,3 @@ class acp_words
$db->sql_freeresult($result);
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php
index 10d7973da6..a023bced0a 100644
--- a/phpBB/includes/acp/auth.php
+++ b/phpBB/includes/acp/auth.php
@@ -2,9 +2,8 @@
/**
*
* @package phpBB3
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -20,7 +19,7 @@ if (!defined('IN_PHPBB'))
* ACP Permission/Auth class
* @package phpBB3
*/
-class auth_admin extends auth
+class auth_admin extends \phpbb\auth\auth
{
/**
* Init auth settings
@@ -131,7 +130,7 @@ class auth_admin extends auth
{
if ($user->data['user_id'] != $userdata['user_id'])
{
- $auth2 = new auth();
+ $auth2 = new \phpbb\auth\auth();
$auth2->acl($userdata);
}
else
@@ -262,7 +261,8 @@ class auth_admin extends auth
*/
function display_mask($mode, $permission_type, &$hold_ary, $user_mode = 'user', $local = false, $group_display = true)
{
- global $template, $user, $db, $phpbb_root_path, $phpEx;
+ global $template, $user, $db, $phpbb_root_path, $phpEx, $phpbb_container;
+ $phpbb_permissions = $phpbb_container->get('acl.permissions');
// Define names for template loops, might be able to be set
$tpl_pmask = 'p_mask';
@@ -270,7 +270,7 @@ class auth_admin extends auth
$tpl_category = 'category';
$tpl_mask = 'mask';
- $l_acl_type = (isset($user->lang['ACL_TYPE_' . (($local) ? 'LOCAL' : 'GLOBAL') . '_' . strtoupper($permission_type)])) ? $user->lang['ACL_TYPE_' . (($local) ? 'LOCAL' : 'GLOBAL') . '_' . strtoupper($permission_type)] : 'ACL_TYPE_' . (($local) ? 'LOCAL' : 'GLOBAL') . '_' . strtoupper($permission_type);
+ $l_acl_type = $phpbb_permissions->get_type_lang($permission_type, (($local) ? 'local' : 'global'));
// Allow trace for viewing permissions and in user mode
$show_trace = ($mode == 'view' && $user_mode == 'user') ? true : false;
@@ -506,7 +506,7 @@ class auth_admin extends auth
'FORUM_ID' => $forum_id)
);
- $this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace, ($mode == 'view'));
+ $this->assign_cat_array($ug_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, ($mode == 'view'), $show_trace);
unset($content_array[$ug_id]);
}
@@ -530,8 +530,8 @@ class auth_admin extends auth
'NAME' => $ug_name,
'CATEGORIES' => implode('</th><th>', $categories),
- 'USER_GROUPS_DEFAULT' => ($user_mode == 'user' && isset($user_groups_default[$ug_id]) && sizeof($user_groups_default[$ug_id])) ? implode(', ', $user_groups_default[$ug_id]) : '',
- 'USER_GROUPS_CUSTOM' => ($user_mode == 'user' && isset($user_groups_custom[$ug_id]) && sizeof($user_groups_custom[$ug_id])) ? implode(', ', $user_groups_custom[$ug_id]) : '',
+ 'USER_GROUPS_DEFAULT' => ($user_mode == 'user' && isset($user_groups_default[$ug_id]) && sizeof($user_groups_default[$ug_id])) ? implode($user->lang['COMMA_SEPARATOR'], $user_groups_default[$ug_id]) : '',
+ 'USER_GROUPS_CUSTOM' => ($user_mode == 'user' && isset($user_groups_custom[$ug_id]) && sizeof($user_groups_custom[$ug_id])) ? implode($user->lang['COMMA_SEPARATOR'], $user_groups_custom[$ug_id]) : '',
'L_ACL_TYPE' => $l_acl_type,
'S_LOCAL' => ($local) ? true : false,
@@ -593,7 +593,7 @@ class auth_admin extends auth
'FORUM_ID' => $forum_id)
);
- $this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, $show_trace, ($mode == 'view'));
+ $this->assign_cat_array($forum_array, $tpl_pmask . '.' . $tpl_fmask . '.' . $tpl_category, $tpl_mask, $ug_id, $forum_id, ($mode == 'view'), $show_trace);
}
unset($hold_ary[$ug_id], $ug_names_ary[$ug_id]);
@@ -1099,9 +1099,11 @@ class auth_admin extends auth
* Assign category to template
* used by display_mask()
*/
- function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $show_trace = false, $s_view)
+ function assign_cat_array(&$category_array, $tpl_cat, $tpl_mask, $ug_id, $forum_id, $s_view, $show_trace = false)
{
- global $template, $user, $phpbb_admin_path, $phpEx;
+ global $template, $user, $phpbb_admin_path, $phpEx, $phpbb_container;
+
+ $phpbb_permissions = $phpbb_container->get('acl.permissions');
@reset($category_array);
while (list($cat, $cat_array) = each($category_array))
@@ -1111,8 +1113,8 @@ class auth_admin extends auth
'S_NEVER' => ($cat_array['S_NEVER'] && !$cat_array['S_YES'] && !$cat_array['S_NO']) ? true : false,
'S_NO' => ($cat_array['S_NO'] && !$cat_array['S_NEVER'] && !$cat_array['S_YES']) ? true : false,
- 'CAT_NAME' => $user->lang['permission_cat'][$cat])
- );
+ 'CAT_NAME' => $phpbb_permissions->get_category_lang($cat),
+ ));
/* Sort permissions by name (more naturaly and user friendly than sorting by a primary key)
* Commented out due to it's memory consumption and time needed
@@ -1146,8 +1148,8 @@ class auth_admin extends auth
'U_TRACE' => ($show_trace) ? append_sid("{$phpbb_admin_path}index.$phpEx", "i=permissions&amp;mode=trace&amp;u=$ug_id&amp;f=$forum_id&amp;auth=$permission") : '',
'UA_TRACE' => ($show_trace) ? append_sid("{$phpbb_admin_path}index.$phpEx", "i=permissions&mode=trace&u=$ug_id&f=$forum_id&auth=$permission", false) : '',
- 'PERMISSION' => $user->lang['acl_' . $permission]['lang'])
- );
+ 'PERMISSION' => $phpbb_permissions->get_permission_lang($permission),
+ ));
}
else
{
@@ -1164,8 +1166,8 @@ class auth_admin extends auth
'U_TRACE' => ($show_trace) ? append_sid("{$phpbb_admin_path}index.$phpEx", "i=permissions&amp;mode=trace&amp;u=$ug_id&amp;f=$forum_id&amp;auth=$permission") : '',
'UA_TRACE' => ($show_trace) ? append_sid("{$phpbb_admin_path}index.$phpEx", "i=permissions&mode=trace&u=$ug_id&f=$forum_id&auth=$permission", false) : '',
- 'PERMISSION' => $user->lang['acl_' . $permission]['lang'])
- );
+ 'PERMISSION' => $phpbb_permissions->get_permission_lang($permission),
+ ));
}
}
}
@@ -1177,7 +1179,9 @@ class auth_admin extends auth
*/
function build_permission_array(&$permission_row, &$content_array, &$categories, $key_sort_array)
{
- global $user;
+ global $user, $phpbb_container;
+
+ $phpbb_permissions = $phpbb_container->get('acl.permissions');
foreach ($key_sort_array as $forum_id)
{
@@ -1192,20 +1196,12 @@ class auth_admin extends auth
@reset($permissions);
while (list($permission, $auth_setting) = each($permissions))
{
- if (!isset($user->lang['acl_' . $permission]))
- {
- $user->lang['acl_' . $permission] = array(
- 'cat' => 'misc',
- 'lang' => '{ acl_' . $permission . ' }'
- );
- }
-
- $cat = $user->lang['acl_' . $permission]['cat'];
+ $cat = $phpbb_permissions->get_permission_category($permission);
// Build our categories array
if (!isset($categories[$cat]))
{
- $categories[$cat] = $user->lang['permission_cat'][$cat];
+ $categories[$cat] = $phpbb_permissions->get_category_lang($cat);
}
// Build our content array
@@ -1281,5 +1277,3 @@ class auth_admin extends auth
return true;
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_attachments.php b/phpBB/includes/acp/info/acp_attachments.php
index b77785801f..8fad241451 100644
--- a/phpBB/includes/acp/info/acp_attachments.php
+++ b/phpBB/includes/acp/info/acp_attachments.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -23,7 +22,8 @@ class acp_attachments_info
'attach' => array('title' => 'ACP_ATTACHMENT_SETTINGS', 'auth' => 'acl_a_attach', 'cat' => array('ACP_BOARD_CONFIGURATION', 'ACP_ATTACHMENTS')),
'extensions' => array('title' => 'ACP_MANAGE_EXTENSIONS', 'auth' => 'acl_a_attach', 'cat' => array('ACP_ATTACHMENTS')),
'ext_groups' => array('title' => 'ACP_EXTENSION_GROUPS', 'auth' => 'acl_a_attach', 'cat' => array('ACP_ATTACHMENTS')),
- 'orphan' => array('title' => 'ACP_ORPHAN_ATTACHMENTS', 'auth' => 'acl_a_attach', 'cat' => array('ACP_ATTACHMENTS'))
+ 'orphan' => array('title' => 'ACP_ORPHAN_ATTACHMENTS', 'auth' => 'acl_a_attach', 'cat' => array('ACP_ATTACHMENTS')),
+ 'manage' => array('title' => 'ACP_MANAGE_ATTACHMENTS', 'auth' => 'acl_a_attach', 'cat' => array('ACP_ATTACHMENTS')),
),
);
}
@@ -36,5 +36,3 @@ class acp_attachments_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_ban.php b/phpBB/includes/acp/info/acp_ban.php
index df51011ec6..37f0f021a7 100644
--- a/phpBB/includes/acp/info/acp_ban.php
+++ b/phpBB/includes/acp/info/acp_ban.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -35,5 +34,3 @@ class acp_ban_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_bbcodes.php b/phpBB/includes/acp/info/acp_bbcodes.php
index c0206432d6..5c88ca8a0f 100644
--- a/phpBB/includes/acp/info/acp_bbcodes.php
+++ b/phpBB/includes/acp/info/acp_bbcodes.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_bbcodes_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_board.php b/phpBB/includes/acp/info/acp_board.php
index 3e18f55940..50d5a4f4e1 100644
--- a/phpBB/includes/acp/info/acp_board.php
+++ b/phpBB/includes/acp/info/acp_board.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -48,5 +47,3 @@ class acp_board_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_bots.php b/phpBB/includes/acp/info/acp_bots.php
index 45087f9225..c30ab588ab 100644
--- a/phpBB/includes/acp/info/acp_bots.php
+++ b/phpBB/includes/acp/info/acp_bots.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,6 +32,3 @@ class acp_bots_info
{
}
}
-
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_captcha.php b/phpBB/includes/acp/info/acp_captcha.php
index b2541c252c..3f31b4c102 100644
--- a/phpBB/includes/acp/info/acp_captcha.php
+++ b/phpBB/includes/acp/info/acp_captcha.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -34,5 +33,3 @@ class acp_captcha_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_database.php b/phpBB/includes/acp/info/acp_database.php
index 85c3c8b21c..c8ad65e255 100644
--- a/phpBB/includes/acp/info/acp_database.php
+++ b/phpBB/includes/acp/info/acp_database.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -34,5 +33,3 @@ class acp_database_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_disallow.php b/phpBB/includes/acp/info/acp_disallow.php
index 41315eb716..f9dd4c32c0 100644
--- a/phpBB/includes/acp/info/acp_disallow.php
+++ b/phpBB/includes/acp/info/acp_disallow.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,6 +32,3 @@ class acp_disallow_info
{
}
}
-
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_email.php b/phpBB/includes/acp/info/acp_email.php
index 4ad7bca58b..620904c956 100644
--- a/phpBB/includes/acp/info/acp_email.php
+++ b/phpBB/includes/acp/info/acp_email.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,6 +32,3 @@ class acp_email_info
{
}
}
-
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_extensions.php b/phpBB/includes/acp/info/acp_extensions.php
new file mode 100644
index 0000000000..174b365af0
--- /dev/null
+++ b/phpBB/includes/acp/info/acp_extensions.php
@@ -0,0 +1,34 @@
+<?php
+/**
+*
+* @package acp
+* @copyright (c) 2012 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+/**
+* @package module_install
+*/
+class acp_extensions_info
+{
+ function module()
+ {
+ return array(
+ 'filename' => 'acp_extensions',
+ 'title' => 'ACP_EXTENSION_MANAGEMENT',
+ 'version' => '1.0.0',
+ 'modes' => array(
+ 'main' => array('title' => 'ACP_EXTENSIONS', 'auth' => 'acl_a_extensions', 'cat' => array('ACP_EXTENSION_MANAGEMENT')),
+ ),
+ );
+ }
+
+ function install()
+ {
+ }
+
+ function uninstall()
+ {
+ }
+}
diff --git a/phpBB/includes/acp/info/acp_forums.php b/phpBB/includes/acp/info/acp_forums.php
index 8d82eaf42d..e5281a4e58 100644
--- a/phpBB/includes/acp/info/acp_forums.php
+++ b/phpBB/includes/acp/info/acp_forums.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_forums_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_groups.php b/phpBB/includes/acp/info/acp_groups.php
index 3910c24e6b..af3f4893fd 100644
--- a/phpBB/includes/acp/info/acp_groups.php
+++ b/phpBB/includes/acp/info/acp_groups.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -21,6 +20,7 @@ class acp_groups_info
'version' => '1.0.0',
'modes' => array(
'manage' => array('title' => 'ACP_GROUPS_MANAGE', 'auth' => 'acl_a_group', 'cat' => array('ACP_GROUPS')),
+ 'position' => array('title' => 'ACP_GROUPS_POSITION', 'auth' => 'acl_a_group', 'cat' => array('ACP_GROUPS')),
),
);
}
@@ -33,5 +33,3 @@ class acp_groups_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_icons.php b/phpBB/includes/acp/info/acp_icons.php
index 16bf753940..e0cf05660c 100644
--- a/phpBB/includes/acp/info/acp_icons.php
+++ b/phpBB/includes/acp/info/acp_icons.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -34,5 +33,3 @@ class acp_icons_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_inactive.php b/phpBB/includes/acp/info/acp_inactive.php
index e17fbda9dd..02b1fcdaa2 100644
--- a/phpBB/includes/acp/info/acp_inactive.php
+++ b/phpBB/includes/acp/info/acp_inactive.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2006 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_inactive_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_jabber.php b/phpBB/includes/acp/info/acp_jabber.php
index 7bcf7744e1..3ad05e1a6a 100644
--- a/phpBB/includes/acp/info/acp_jabber.php
+++ b/phpBB/includes/acp/info/acp_jabber.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,4 +32,3 @@ class acp_jabber_info
{
}
}
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_language.php b/phpBB/includes/acp/info/acp_language.php
index f7606631fe..7f33a22fa6 100644
--- a/phpBB/includes/acp/info/acp_language.php
+++ b/phpBB/includes/acp/info/acp_language.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -20,7 +19,7 @@ class acp_language_info
'title' => 'ACP_LANGUAGE',
'version' => '1.0.0',
'modes' => array(
- 'lang_packs' => array('title' => 'ACP_LANGUAGE_PACKS', 'auth' => 'acl_a_language', 'cat' => array('ACP_GENERAL_TASKS')),
+ 'lang_packs' => array('title' => 'ACP_LANGUAGE_PACKS', 'auth' => 'acl_a_language', 'cat' => array('ACP_LANGUAGE')),
),
);
}
@@ -33,5 +32,3 @@ class acp_language_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_logs.php b/phpBB/includes/acp/info/acp_logs.php
index f119e10b83..033f9baf50 100644
--- a/phpBB/includes/acp/info/acp_logs.php
+++ b/phpBB/includes/acp/info/acp_logs.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -36,5 +35,3 @@ class acp_logs_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_main.php b/phpBB/includes/acp/info/acp_main.php
index 5574cc40d1..4c1cb6dc0f 100644
--- a/phpBB/includes/acp/info/acp_main.php
+++ b/phpBB/includes/acp/info/acp_main.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_main_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_modules.php b/phpBB/includes/acp/info/acp_modules.php
index 886f17d628..c9d2cffa72 100644
--- a/phpBB/includes/acp/info/acp_modules.php
+++ b/phpBB/includes/acp/info/acp_modules.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -35,5 +34,3 @@ class acp_modules_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_permission_roles.php b/phpBB/includes/acp/info/acp_permission_roles.php
index 3ab2fecd53..ee2a3ee560 100644
--- a/phpBB/includes/acp/info/acp_permission_roles.php
+++ b/phpBB/includes/acp/info/acp_permission_roles.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -36,5 +35,3 @@ class acp_permission_roles_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_permissions.php b/phpBB/includes/acp/info/acp_permissions.php
index 6f341742f3..7b51b67a96 100644
--- a/phpBB/includes/acp/info/acp_permissions.php
+++ b/phpBB/includes/acp/info/acp_permissions.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -50,5 +49,3 @@ class acp_permissions_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_php_info.php b/phpBB/includes/acp/info/acp_php_info.php
index 7d716b0f83..a456e4b8b7 100644
--- a/phpBB/includes/acp/info/acp_php_info.php
+++ b/phpBB/includes/acp/info/acp_php_info.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_php_info_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_profile.php b/phpBB/includes/acp/info/acp_profile.php
index 8590226038..6fa673b094 100644
--- a/phpBB/includes/acp/info/acp_profile.php
+++ b/phpBB/includes/acp/info/acp_profile.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_profile_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_prune.php b/phpBB/includes/acp/info/acp_prune.php
index 46565c4f16..7498e46cad 100644
--- a/phpBB/includes/acp/info/acp_prune.php
+++ b/phpBB/includes/acp/info/acp_prune.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -34,5 +33,3 @@ class acp_prune_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_ranks.php b/phpBB/includes/acp/info/acp_ranks.php
index 06b9c6d284..651a86471d 100644
--- a/phpBB/includes/acp/info/acp_ranks.php
+++ b/phpBB/includes/acp/info/acp_ranks.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_ranks_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_reasons.php b/phpBB/includes/acp/info/acp_reasons.php
index 65d805ee18..9f8f2ced77 100644
--- a/phpBB/includes/acp/info/acp_reasons.php
+++ b/phpBB/includes/acp/info/acp_reasons.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_reasons_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_search.php b/phpBB/includes/acp/info/acp_search.php
index 4afd6c6994..494d8afd67 100644
--- a/phpBB/includes/acp/info/acp_search.php
+++ b/phpBB/includes/acp/info/acp_search.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -34,5 +33,3 @@ class acp_search_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_send_statistics.php b/phpBB/includes/acp/info/acp_send_statistics.php
index de5dcdb8ad..07e7f3ba5c 100644
--- a/phpBB/includes/acp/info/acp_send_statistics.php
+++ b/phpBB/includes/acp/info/acp_send_statistics.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_send_statistics_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_styles.php b/phpBB/includes/acp/info/acp_styles.php
index db67167e39..3137c4781b 100644
--- a/phpBB/includes/acp/info/acp_styles.php
+++ b/phpBB/includes/acp/info/acp_styles.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -18,12 +17,11 @@ class acp_styles_info
return array(
'filename' => 'acp_styles',
'title' => 'ACP_CAT_STYLES',
- 'version' => '1.0.0',
+ 'version' => '2.0.0',
'modes' => array(
'style' => array('title' => 'ACP_STYLES', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_MANAGEMENT')),
- 'template' => array('title' => 'ACP_TEMPLATES', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_COMPONENTS')),
- 'theme' => array('title' => 'ACP_THEMES', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_COMPONENTS')),
- 'imageset' => array('title' => 'ACP_IMAGESETS', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_COMPONENTS')),
+ 'install' => array('title' => 'ACP_STYLES_INSTALL', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_MANAGEMENT')),
+ 'cache' => array('title' => 'ACP_STYLES_CACHE', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_MANAGEMENT')),
),
);
}
@@ -36,5 +34,3 @@ class acp_styles_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_update.php b/phpBB/includes/acp/info/acp_update.php
index 886cdc94d5..3d491216a8 100644
--- a/phpBB/includes/acp/info/acp_update.php
+++ b/phpBB/includes/acp/info/acp_update.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_update_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_users.php b/phpBB/includes/acp/info/acp_users.php
index 10081ac870..1848622a1c 100644
--- a/phpBB/includes/acp/info/acp_users.php
+++ b/phpBB/includes/acp/info/acp_users.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -43,5 +42,3 @@ class acp_users_info
{
}
}
-
-?> \ No newline at end of file
diff --git a/phpBB/includes/acp/info/acp_words.php b/phpBB/includes/acp/info/acp_words.php
index a2417f8a7f..48cb3fbdd1 100644
--- a/phpBB/includes/acp/info/acp_words.php
+++ b/phpBB/includes/acp/info/acp_words.php
@@ -2,9 +2,8 @@
/**
*
* @package acp
-* @version $Id$
* @copyright (c) 2005 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@@ -33,5 +32,3 @@ class acp_words_info
{
}
}
-
-?> \ No newline at end of file
d='n19251' href='#n19251'>19251 19252 19253 19254 19255 19256 19257 19258 19259 19260 19261 19262 19263 19264 19265 19266 19267 19268 19269 19270 19271 19272 19273 19274 19275 19276 19277 19278 19279 19280 19281 19282 19283 19284 19285 19286 19287 19288 19289 19290 19291 19292 19293 19294 19295 19296 19297 19298 19299 19300 19301 19302 19303 19304 19305 19306 19307 19308 19309 19310 19311 19312 19313 19314 19315 19316 19317 19318 19319 19320 19321 19322 19323 19324 19325 19326 19327 19328 19329 19330 19331 19332 19333 19334 19335 19336 19337 19338 19339 19340 19341 19342 19343 19344 19345 19346 19347 19348 19349 19350 19351 19352 19353 19354 19355 19356 19357 19358 19359 19360 19361 19362 19363 19364 19365 19366 19367 19368 19369 19370 19371 19372 19373 19374 19375 19376 19377 19378 19379 19380 19381 19382 19383 19384 19385 19386 19387 19388 19389 19390 19391 19392 19393 19394 19395 19396 19397 19398 19399 19400 19401 19402 19403 19404 19405 19406 19407 19408 19409 19410 19411 19412 19413 19414 19415 19416 19417 19418 19419 19420 19421 19422 19423 19424 19425 19426 19427 19428 19429 19430 19431 19432 19433 19434 19435 19436 19437 19438 19439 19440 19441 19442 19443 19444 19445 19446 19447 19448 19449 19450 19451 19452 19453 19454 19455 19456 19457 19458 19459 19460 19461 19462 19463 19464 19465 19466 19467 19468 19469 19470 19471 19472 19473 19474 19475 19476 19477 19478 19479 19480 19481 19482 19483 19484 19485 19486 19487 19488 19489 19490 19491 19492 19493 19494 19495 19496 19497 19498 19499 19500 19501 19502 19503 19504 19505 19506 19507 19508 19509 19510 19511 19512 19513 19514 19515 19516 19517 19518 19519 19520 19521 19522 19523 19524 19525 19526 19527 19528 19529 19530 19531 19532 19533 19534 19535 19536 19537 19538 19539 19540 19541 19542 19543 19544 19545 19546 19547 19548 19549 19550 19551 19552 19553 19554 19555 19556 19557 19558 19559 19560 19561 19562 19563 19564 19565 19566 19567 19568 19569 19570 19571 19572 19573 19574 19575 19576 19577 19578 19579 19580 19581 19582 19583 19584 19585 19586 19587 19588 19589 19590 19591 19592 19593 19594 19595 19596 19597 19598 19599 19600 19601 19602 19603 19604 19605 19606 19607 19608 19609 19610 19611 19612 19613 19614 19615 19616 19617 19618 19619 19620 19621 19622 19623 19624 19625 19626 19627 19628 19629 19630 19631 19632 19633 19634 19635 19636 19637 19638 19639 19640 19641 19642 19643 19644 19645 19646 19647 19648 19649 19650 19651 19652 19653 19654 19655 19656 19657 19658 19659 19660 19661 19662 19663 19664 19665 19666 19667 19668 19669 19670 19671 19672 19673 19674 19675 19676 19677 19678 19679 19680 19681 19682 19683 19684 19685 19686 19687 19688 19689 19690 19691 19692 19693 19694 19695 19696 19697 19698 19699 19700 19701 19702 19703 19704 19705 19706 19707 19708 19709 19710 19711 19712 19713 19714 19715 19716 19717 19718 19719 19720 19721 19722 19723 19724 19725 19726 19727 19728 19729 19730 19731 19732 19733 19734 19735 19736 19737 19738 19739 19740 19741 19742 19743 19744 19745 19746 19747 19748 19749 19750 19751 19752 19753 19754 19755 19756 19757 19758 19759 19760 19761 19762 19763 19764 19765 19766 19767 19768 19769 19770 19771 19772 19773 19774 19775 19776 19777 19778 19779 19780 19781 19782 19783 19784 19785 19786 19787 19788 19789 19790 19791 19792 19793 19794 19795 19796 19797 19798 19799 19800 19801 19802 19803 19804 19805 19806 19807 19808 19809 19810 19811 19812 19813 19814 19815 19816 19817 19818 19819 19820 19821 19822 19823 19824 19825 19826 19827 19828 19829 19830 19831 19832 19833 19834 19835 19836 19837 19838 19839 19840 19841 19842 19843 19844 19845 19846 19847 19848 19849 19850 19851 19852 19853 19854 19855 19856 19857 19858 19859 19860 19861 19862 19863 19864 19865 19866 19867 19868 19869 19870 19871 19872 19873 19874 19875 19876 19877 19878 19879 19880 19881 19882 19883 19884 19885 19886 19887 19888 19889 19890 19891 19892 19893 19894 19895 19896 19897 19898 19899 19900 19901 19902 19903 19904 19905 19906 19907 19908 19909 19910 19911 19912 19913 19914 19915 19916 19917 19918 19919 19920 19921 19922 19923 19924 19925 19926 19927 19928 19929 19930 19931 19932 19933 19934 19935 19936 19937 19938 19939 19940 19941 19942 19943 19944 19945 19946 19947 19948 19949 19950 19951 19952 19953 19954 19955 19956 19957 19958 19959 19960 19961 19962 19963 19964 19965 19966 19967 19968 19969 19970 19971 19972 19973 19974 19975 19976 19977 19978 19979 19980 19981 19982 19983 19984 19985 19986 19987 19988 19989 19990 19991 19992 19993 19994 19995 19996 19997 19998 19999 20000 20001 20002 20003 20004 20005 20006 20007 20008 20009 20010 20011 20012 20013 20014 20015 20016 20017 20018 20019 20020 20021 20022 20023 20024 20025 20026 20027 20028 20029 20030 20031 20032 20033 20034 20035 20036 20037 20038 20039 20040 20041 20042 20043 20044 20045 20046 20047 20048 20049 20050 20051 20052 20053 20054 20055 20056 20057 20058 20059 20060 20061 20062 20063 20064 20065 20066 20067 20068 20069 20070 20071 20072 20073 20074 20075 20076 20077 20078 20079 20080 20081 20082 20083 20084 20085 20086 20087 20088 20089 20090 20091 20092 20093 20094 20095 20096 20097 20098 20099 20100 20101 20102 20103 20104 20105 20106 20107 20108 20109 20110 20111 20112 20113 20114 20115 20116 20117 20118 20119 20120 20121 20122 20123 20124 20125 20126 20127 20128 20129 20130 20131 20132 20133 20134 20135 20136 20137 20138 20139 20140 20141 20142 20143 20144 20145 20146 20147 20148 20149 20150 20151 20152 20153 20154 20155 20156 20157 20158 20159 20160 20161 20162 20163 20164 20165 20166 20167 20168 20169 20170 20171 20172 20173 20174 20175 20176 20177 20178 20179 20180 20181 20182 20183 20184 20185 20186 20187 20188 20189 20190 20191 20192 20193 20194 20195 20196 20197 20198 20199 20200 20201 20202 20203 20204 20205 20206 20207 20208 20209 20210 20211 20212 20213 20214 20215 20216 20217 20218 20219 20220 20221 20222 20223 20224 20225 20226 20227 20228 20229 20230 20231 20232 20233 20234 20235 20236 20237 20238 20239 20240 20241 20242 20243 20244 20245 20246 20247 20248 20249 20250 20251 20252 20253 20254 20255 20256 20257 20258 20259 20260 20261 20262 20263 20264 20265 20266 20267 20268 20269 20270 20271 20272 20273 20274 20275 20276 20277 20278 20279 20280 20281 20282 20283 20284 20285 20286 20287 20288 20289 20290 20291 20292 20293 20294 20295 20296 20297 20298 20299 20300 20301 20302 20303 20304 20305 20306 20307 20308 20309 20310 20311 20312 20313 20314 20315 20316 20317 20318 20319 20320 20321 20322 20323 20324 20325 20326 20327 20328 20329 20330 20331 20332 20333 20334 20335 20336 20337 20338 20339 20340 20341 20342 20343 20344 20345 20346 20347 20348 20349 20350 20351 20352 20353 20354 20355 20356 20357 20358 20359 20360 20361 20362 20363 20364 20365 20366 20367 20368 20369 20370 20371 20372 20373 20374 20375 20376 20377 20378 20379 20380 20381 20382 20383 20384 20385 20386 20387 20388 20389 20390 20391 20392 20393 20394 20395 20396 20397 20398 20399 20400 20401 20402 20403 20404 20405 20406 20407 20408 20409 20410 20411 20412 20413 20414 20415 20416 20417 20418 20419 20420 20421 20422 20423 20424 20425 20426 20427 20428 20429 20430 20431 20432 20433 20434 20435 20436 20437 20438 20439 20440 20441 20442 20443 20444 20445 20446 20447 20448 20449 20450 20451 20452 20453 20454 20455 20456 20457 20458 20459 20460 20461 20462 20463 20464 20465 20466 20467 20468 20469 20470 20471 20472 20473 20474 20475 20476 20477 20478 20479 20480 20481 20482 20483 20484 20485 20486 20487 20488 20489 20490 20491 20492 20493 20494 20495 20496 20497 20498 20499 20500 20501 20502 20503 20504 20505 20506 20507 20508 20509 20510 20511 20512 20513 20514 20515 20516 20517 20518 20519 20520 20521 20522 20523 20524 20525 20526 20527 20528 20529 20530 20531 20532 20533 20534 20535 20536 20537 20538 20539 20540 20541 20542 20543 20544 20545 20546 20547 20548 20549 20550 20551 20552 20553 20554 20555 20556 20557 20558 20559 20560 20561 20562 20563 20564 20565 20566 20567 20568 20569 20570 20571 20572 20573 20574 20575 20576 20577 20578 20579 20580 20581 20582 20583 20584 20585 20586 20587 20588 20589 20590 20591 20592 20593 20594 20595 20596 20597 20598 20599 20600 20601 20602 20603 20604 20605 20606 20607 20608 20609 20610 20611 20612 20613 20614 20615 20616 20617 20618 20619 20620 20621 20622 20623 20624 20625 20626 20627 20628 20629 20630 20631 20632 20633 20634 20635 20636 20637 20638 20639 20640 20641 20642 20643 20644 20645 20646 20647 20648 20649 20650 20651 20652 20653 20654 20655 20656 20657 20658 20659 20660 20661 20662 20663 20664 20665 20666 20667 20668 20669 20670 20671 20672 20673 20674 20675 20676 20677 20678 20679 20680 20681 20682 20683 20684 20685 20686 20687 20688 20689 20690 20691 20692 20693 20694 20695 20696 20697 20698 20699 20700 20701 20702 20703 20704 20705 20706 20707 20708 20709 20710 20711 20712 20713 20714 20715 20716 20717 20718 20719 20720 20721 20722 20723 20724 20725 20726 20727 20728 20729 20730 20731 20732 20733 20734 20735 20736 20737 20738 20739 20740 20741 20742 20743 20744 20745 20746 20747 20748 20749 20750 20751 20752 20753 20754 20755 20756 20757 20758 20759 20760 20761 20762 20763 20764 20765 20766 20767 20768 20769 20770 20771 20772 20773 20774 20775 20776 20777 20778 20779 20780 20781 20782 20783 20784 20785 20786 20787 20788 20789 20790 20791 20792 20793 20794 20795 20796 20797 20798 20799 20800 20801 20802 20803 20804 20805 20806 20807 20808 20809 20810 20811 20812 20813 20814 20815 20816 20817 20818 20819 20820 20821 20822 20823 20824 20825 20826 20827 20828 20829 20830 20831 20832 20833 20834 20835 20836 20837 20838 20839 20840 20841 20842 20843 20844 20845 20846 20847 20848 20849 20850 20851 20852 20853 20854 20855 20856 20857 20858 20859 20860 20861 20862 20863 20864 20865 20866 20867 20868 20869 20870 20871 20872 20873 20874 20875 20876 20877 20878 20879 20880 20881 20882 20883 20884 20885 20886 20887 20888 20889 20890 20891 20892 20893 20894 20895 20896 20897 20898 20899 20900 20901 20902 20903 20904 20905 20906 20907 20908 20909 20910 20911 20912 20913 20914 20915 20916 20917 20918 20919 20920 20921 20922 20923 20924 20925 20926 20927 20928 20929 20930 20931 20932 20933 20934 20935 20936 20937 20938 20939 20940 20941 20942 20943 20944 20945 20946 20947 20948 20949 20950 20951 20952 20953 20954 20955 20956 20957 20958 20959 20960 20961 20962 20963 20964 20965 20966 20967 20968 20969 20970 20971 20972 20973 20974 20975 20976 20977 20978 20979 20980 20981 20982 20983 20984 20985 20986 20987 20988 20989 20990 20991 20992 20993 20994 20995 20996 20997 20998 20999 21000 21001 21002 21003 21004 21005 21006 21007 21008 21009 21010 21011 21012 21013 21014 21015 21016 21017 21018 21019 21020 21021 21022 21023 21024 21025 21026 21027 21028 21029 21030 21031 21032 21033 21034 21035 21036 21037 21038 21039 21040 21041 21042 21043 21044 21045 21046 21047 21048 21049 21050 21051 21052 21053 21054 21055 21056 21057 21058 21059 21060 21061 21062 21063 21064 21065 21066 21067 21068 21069 21070 21071 21072 21073 21074 21075 21076 21077 21078 21079 21080 21081 21082 21083 21084 21085 21086 21087 21088 21089 21090 21091 21092 21093 21094 21095 21096 21097 21098 21099 21100 21101 21102 21103 21104 21105 21106 21107 21108 21109 21110 21111 21112 21113 21114 21115 21116 21117 21118 21119 21120 21121 21122 21123 21124 21125 21126 21127 21128 21129 21130 21131 21132 21133 21134 21135 21136 21137 21138 21139 21140 21141 21142 21143 21144 21145 21146 21147 21148 21149 21150 21151 21152 21153 21154 21155 21156 21157 21158 21159 21160 21161 21162 21163 21164 21165 21166 21167 21168 21169 21170 21171 21172 21173 21174 21175 21176 21177 21178 21179 21180 21181 21182 21183 21184 21185 21186 21187 21188 21189 21190 21191 21192 21193 21194 21195 21196 21197 21198 21199 21200 21201 21202 21203 21204 21205 21206 21207 21208 21209 21210 21211 21212 21213 21214 21215 21216 21217 21218 21219 21220 21221 21222 21223 21224 21225 21226 21227 21228 21229 21230 21231 21232 21233 21234 21235 21236 21237 21238 21239 21240 21241 21242 21243 21244 21245 21246 21247 21248 21249 21250 21251 21252 21253 21254 21255 21256 21257 21258 21259 21260 21261 21262 21263 21264 21265 21266 21267 21268 21269 21270 21271 21272 21273 21274 21275 21276 21277 21278 21279 21280 21281 21282 21283 21284 21285 21286 21287 21288 21289 21290 21291 21292 21293 21294 21295 21296 21297 21298 21299 21300 21301 21302 21303 21304 21305 21306 21307 21308 21309 21310 21311 21312 21313 21314 21315 21316 21317 21318 21319 21320 21321 21322 21323 21324 21325 21326 21327 21328 21329 21330 21331 21332 21333 21334 21335 21336 21337 21338 21339 21340 21341 21342 21343 21344 21345 21346 21347 21348 21349 21350 21351 21352 21353 21354 21355 21356 21357 21358 21359 21360 21361 21362 21363 21364 21365 21366 21367 21368 21369 21370 21371 21372 21373 21374 21375 21376 21377 21378 21379 21380 21381 21382 21383 21384 21385 21386 21387 21388 21389 21390 21391 21392 21393 21394 21395 21396 21397 21398 21399 21400 21401 21402 21403 21404 21405 21406 21407 21408 21409 21410 21411 21412 21413 21414 21415 21416 21417 21418 21419 21420 21421 21422 21423 21424 21425 21426 21427 21428 21429 21430 21431 21432 21433 21434 21435 21436 21437 21438 21439 21440 21441 21442 21443 21444 21445 21446 21447 21448 21449 21450 21451 21452 21453 21454 21455 21456 21457 21458 21459 21460 21461 21462 21463 21464 21465 21466 21467 21468 21469 21470 21471 21472 21473 21474 21475 21476 21477 21478 21479 21480 21481 21482 21483 21484 21485 21486 21487 21488 21489 21490 21491 21492 21493 21494 21495 21496 21497 21498 21499 21500 21501 21502 21503 21504 21505 21506 21507 21508 21509 21510 21511 21512 21513 21514 21515 21516 21517 21518 21519 21520 21521 21522 21523 21524 21525 21526 21527 21528 21529 21530 21531 21532 21533 21534 21535 21536 21537 21538 21539 21540 21541 21542 21543 21544 21545 21546 21547 21548 21549 21550 21551 21552 21553 21554 21555 21556 21557 21558 21559 21560 21561 21562 21563 21564 21565 21566 21567 21568 21569 21570 21571 21572 21573 21574 21575 21576 21577 21578 21579 21580 21581 21582 21583 21584 21585 21586 21587 21588 21589 21590 21591 21592 21593 21594 21595 21596 21597 21598 21599 21600 21601 21602 21603
#
# Mykolas Norvai-as <Myka@centras.lt>, 2002
#
msgid ""
msgstr ""
"Project-Id-Version: DrakX VERSION\n"
"POT-Creation-Date: 2004-02-19 18:02+0100\n"
"PO-Revision-Date: 2000-12-23 13:50+0200\n"
"Last-Translator: Mykolas Norvai­as <Myka@centras.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../move/move.pm:359
#, c-format
msgid ""
"Your USB key doesn't have any valid Windows (FAT) partitions.\n"
"We need one to continue (beside, it's more standard so that you\n"
"will be able to move and access your files from machines\n"
"running Windows). Please plug in an USB key containing a\n"
"Windows partition instead.\n"
"\n"
"\n"
"You may also proceed without an USB key - you'll still be\n"
"able to use Mandrake Move as a normal live Mandrake\n"
"Operating System."
msgstr ""

#: ../move/move.pm:369
#, c-format
msgid ""
"We didn't detect any USB key on your system. If you\n"
"plug in an USB key now, Mandrake Move will have the ability\n"
"to transparently save the data in your home directory and\n"
"system wide configuration, for next boot on this computer\n"
"or another one. Note: if you plug in a key now, wait several\n"
"seconds before detecting again.\n"
"\n"
"\n"
"You may also proceed without an USB key - you'll still be\n"
"able to use Mandrake Move as a normal live Mandrake\n"
"Operating System."
msgstr ""

#: ../move/move.pm:380
#, c-format
msgid "Need a key to save your data"
msgstr ""

#: ../move/move.pm:382
#, c-format
msgid "Detect USB key again"
msgstr ""

#: ../move/move.pm:383 ../move/move.pm:413
#, c-format
msgid "Continue without USB key"
msgstr ""

#: ../move/move.pm:394 ../move/move.pm:408
#, c-format
msgid "Key isn't writable"
msgstr ""

#: ../move/move.pm:396
#, c-format
msgid ""
"The USB key seems to have write protection enabled, but we can't safely\n"
"unplug it now.\n"
"\n"
"\n"
"Click the button to reboot the machine, unplug it, remove write protection,\n"
"plug the key again, and launch Mandrake Move again."
msgstr ""

#: ../move/move.pm:402 help.pm:418 install_steps_interactive.pm:1310
#, fuzzy, c-format
msgid "Reboot"
msgstr "Šakninis"

#: ../move/move.pm:410
#, c-format
msgid ""
"The USB key seems to have write protection enabled. Please\n"
"unplug it, remove write protection, and then plug it again."
msgstr ""

#: ../move/move.pm:412
#, fuzzy, c-format
msgid "Retry"
msgstr "Atstatyti iš bylos"

#: ../move/move.pm:423
#, c-format
msgid "Setting up USB key"
msgstr ""

#: ../move/move.pm:423
#, fuzzy, c-format
msgid "Please wait, setting up system configuration files on USB key..."
msgstr "Nustatomas saugumo lygis"

#: ../move/move.pm:445
#, c-format
msgid "Enter your user information, password will be used for screensaver"
msgstr ""

#: ../move/move.pm:455
#, fuzzy, c-format
msgid "Auto configuration"
msgstr "Nustatymai"

#: ../move/move.pm:455
#, fuzzy, c-format
msgid "Please wait, detecting and configuring devices..."
msgstr "Nustatomas saugumo lygis"

#: ../move/move.pm:502 ../move/move.pm:559 ../move/move.pm:563
#: ../move/tree/mdk_totem:86 diskdrake/dav.pm:77 diskdrake/hd_gtk.pm:117
#: diskdrake/interactive.pm:215 diskdrake/interactive.pm:228
#: diskdrake/interactive.pm:369 diskdrake/interactive.pm:384
#: diskdrake/interactive.pm:505 diskdrake/interactive.pm:510
#: diskdrake/smbnfs_gtk.pm:42 fsedit.pm:253 install_steps.pm:82
#: install_steps_interactive.pm:40 interactive/http.pm:118
#: interactive/http.pm:119 network/netconnect.pm:753 network/netconnect.pm:846
#: network/netconnect.pm:849 network/netconnect.pm:894
#: network/netconnect.pm:898 network/netconnect.pm:965
#: network/netconnect.pm:1014 network/netconnect.pm:1019
#: network/netconnect.pm:1034 printer/printerdrake.pm:213
#: printer/printerdrake.pm:220 printer/printerdrake.pm:245
#: printer/printerdrake.pm:393 printer/printerdrake.pm:398
#: printer/printerdrake.pm:411 printer/printerdrake.pm:421
#: printer/printerdrake.pm:1052 printer/printerdrake.pm:1099
#: printer/printerdrake.pm:1174 printer/printerdrake.pm:1178
#: printer/printerdrake.pm:1349 printer/printerdrake.pm:1353
#: printer/printerdrake.pm:1357 printer/printerdrake.pm:1457
#: printer/printerdrake.pm:1461 printer/printerdrake.pm:1578
#: printer/printerdrake.pm:1582 printer/printerdrake.pm:1668
#: printer/printerdrake.pm:1755 printer/printerdrake.pm:2153
#: printer/printerdrake.pm:2419 printer/printerdrake.pm:2425
#: printer/printerdrake.pm:2842 printer/printerdrake.pm:2846
#: printer/printerdrake.pm:2850 printer/printerdrake.pm:3241
#: standalone/drakTermServ:399 standalone/drakTermServ:730
#: standalone/drakTermServ:737 standalone/drakTermServ:931
#: standalone/drakTermServ:1330 standalone/drakTermServ:1335
#: standalone/drakTermServ:1342 standalone/drakTermServ:1353
#: standalone/drakTermServ:1372 standalone/drakauth:36
#: standalone/drakbackup:766 standalone/drakbackup:881
#: standalone/drakbackup:1455 standalone/drakbackup:1488
#: standalone/drakbackup:2004 standalone/drakbackup:2177
#: standalone/drakbackup:2738 standalone/drakbackup:2805
#: standalone/drakbackup:4826 standalone/drakboot:235 standalone/drakbug:267
#: standalone/drakbug:286 standalone/drakbug:292 standalone/drakconnect:569
#: standalone/drakconnect:571 standalone/drakconnect:587
#: standalone/drakfloppy:301 standalone/drakfloppy:305
#: standalone/drakfloppy:311 standalone/drakfont:208 standalone/drakfont:221
#: standalone/drakfont:257 standalone/drakfont:597 standalone/draksplash:21
#: standalone/logdrake:171 standalone/logdrake:415 standalone/logdrake:420
#: standalone/scannerdrake:52 standalone/scannerdrake:194
#: standalone/scannerdrake:253 standalone/scannerdrake:676
#: standalone/scannerdrake:687 standalone/scannerdrake:826
#: standalone/scannerdrake:837 standalone/scannerdrake:902 wizards.pm:95
#: wizards.pm:99 wizards.pm:121
#, c-format
msgid "Error"
msgstr "Klaida"

#: ../move/move.pm:503 install_steps.pm:83
#, c-format
msgid ""
"An error occurred, but I don't know how to handle it nicely.\n"
"Continue at your own risk."
msgstr ""
"Įvyko klaida, bet aš nežinau, kaip su ja gražiai susitvarkyti.\n"
"Tęsk darbą savo paties rizika."

#: ../move/move.pm:559 install_steps_interactive.pm:40
#, c-format
msgid "An error occurred"
msgstr "Įvyko klaida"

#: ../move/move.pm:565
#, c-format
msgid ""
"An error occurred:\n"
"\n"
"\n"
"%s\n"
"\n"
"This may come from corrupted system configuration files\n"
"on the USB key, in this case removing them and then\n"
"rebooting Mandrake Move would fix the problem. To do\n"
"so, click on the corresponding button.\n"
"\n"
"\n"
"You may also want to reboot and remove the USB key, or\n"
"examine its contents under another OS, or even have\n"
"a look at log files in console #3 and #4 to try to\n"
"guess what's happening."
msgstr ""

#: ../move/move.pm:580
#, fuzzy, c-format
msgid "Remove system config files"
msgstr "Sužymima loopback byla %s"

#: ../move/move.pm:581
#, c-format
msgid "Simply reboot"
msgstr ""

#: ../move/tree/mdk_totem:60
#, c-format
msgid "You can only run with no CDROM support"
msgstr ""

#: ../move/tree/mdk_totem:81
#, c-format
msgid "Kill those programs"
msgstr ""

#: ../move/tree/mdk_totem:82
#, c-format
msgid "No CDROM support"
msgstr ""

#: ../move/tree/mdk_totem:87
#, c-format
msgid ""
"You can't use another CDROM when the following programs are running: \n"
"%s"
msgstr ""

#: ../move/tree/mdk_totem:101
#, c-format
msgid "Copying to memory to allow removing the CDROM"
msgstr ""

#: Xconfig/card.pm:16
#, c-format
msgid "256 kB"
msgstr "256 kB"

#: Xconfig/card.pm:17
#, c-format
msgid "512 kB"
msgstr "512 kB"

#: Xconfig/card.pm:18
#, c-format
msgid "1 MB"
msgstr "1 MB"

#: Xconfig/card.pm:19
#, c-format
msgid "2 MB"
msgstr "2 MB"

#: Xconfig/card.pm:20
#, c-format
msgid "4 MB"
msgstr "4 MB"

#: Xconfig/card.pm:21
#, c-format
msgid "8 MB"
msgstr "8 MB"

#: Xconfig/card.pm:22
#, c-format
msgid "16 MB"
msgstr "16 MB"

#: Xconfig/card.pm:23
#, c-format
msgid "32 MB"
msgstr "32 MB"

#: Xconfig/card.pm:24
#, c-format
msgid "64 MB or more"
msgstr "64 MB ar daugiau"

#: Xconfig/card.pm:211
#, c-format
msgid "X server"
msgstr "X serveris"

#: Xconfig/card.pm:212
#, fuzzy, c-format
msgid "Choose an X server"
msgstr "Pasirink X serverį"

#: Xconfig/card.pm:244
#, fuzzy, c-format
msgid "Multi-head configuration"
msgstr "skaitomi nustatymai"

#: Xconfig/card.pm:245
#, c-format
msgid ""
"Your system supports multiple head configuration.\n"
"What do you want to do?"
msgstr ""

#: Xconfig/card.pm:312
#, fuzzy, c-format
msgid "Can't install XFree package: %s"
msgstr "Įdiegiamas paketas %s"

#: Xconfig/card.pm:322
#, c-format
msgid "Select the memory size of your graphics card"
msgstr "Pasirink savo vaizdo plokštės atminties dydį"

#: Xconfig/card.pm:398
#, c-format
msgid "XFree configuration"
msgstr "XFree konfigūravimas"

#: Xconfig/card.pm:400
#, c-format
msgid "Which configuration of XFree do you want to have?"
msgstr "Kurią XFree konfigūraciją tu nori turėti?"

#: Xconfig/card.pm:434
#, c-format
msgid "Configure all heads independently"
msgstr ""

#: Xconfig/card.pm:435
#, fuzzy, c-format
msgid "Use Xinerama extension"
msgstr "Naudokite automatinį aptikimą"

#: Xconfig/card.pm:440
#, fuzzy, c-format
msgid "Configure only card \"%s\"%s"
msgstr "Tinklo Konfigūravimo Meistras"

#: Xconfig/card.pm:454 Xconfig/card.pm:456 Xconfig/various.pm:23
#, c-format
msgid "XFree %s"
msgstr "XFree %s"

#: Xconfig/card.pm:467 Xconfig/card.pm:493 Xconfig/various.pm:23
#, c-format
msgid "XFree %s with 3D hardware acceleration"
msgstr "XFree %s su 3D įrenginio akseleracija"

#: Xconfig/card.pm:470
#, c-format
msgid ""
"Your card can have 3D hardware acceleration support but only with XFree %s.\n"
"Your card is supported by XFree %s which may have a better support in 2D."
msgstr ""
"Tavo plokštė palaiko 3D įrenginio akseleraciją, bet tik su XFree %s.\n"
"Tavo plokštė dirba su XFree %s, kuris galbūt geriau palaiko 2D."

#: Xconfig/card.pm:472 Xconfig/card.pm:495
#, c-format
msgid "Your card can have 3D hardware acceleration support with XFree %s."
msgstr "Tavo plokštė palaiko 3D akseleraciją su XFree %s."

#: Xconfig/card.pm:480 Xconfig/card.pm:501
#, c-format
msgid "XFree %s with EXPERIMENTAL 3D hardware acceleration"
msgstr "XFree %s su EKSPERIMENTINE 3D įrenginio akseleracija"

#: Xconfig/card.pm:483
#, c-format
msgid ""
"Your card can have 3D hardware acceleration support but only with XFree %s,\n"
"NOTE THIS IS EXPERIMENTAL SUPPORT AND MAY FREEZE YOUR COMPUTER.\n"
"Your card is supported by XFree %s which may have a better support in 2D."
msgstr ""
"Jūsų korta palaiko 3D įrenginio akseleracija tik su XFree %s,\n"
"ATMINKITE, KAD TAI YRA EKSPERIMENTINIS PALIKYMAS IR GALI PAKABINTI "
"KOMPIUTERĮ.\n"
"Jūsų korta dirba su XFree %s kuris galbūt geriau palaiko 2D."

#: Xconfig/card.pm:486 Xconfig/card.pm:503
#, c-format
msgid ""
"Your card can have 3D hardware acceleration support with XFree %s,\n"
"NOTE THIS IS EXPERIMENTAL SUPPORT AND MAY FREEZE YOUR COMPUTER."
msgstr ""
"Jūsų korta palaiko 3D akseleracija su XFree %s.ATMINKITE, KAD TAI YRA "
"EKSPERIMENTINIS PALIKYMAS IR GALI PAKABINTI KOMPIUTERĮ."

#: Xconfig/card.pm:509
#, c-format
msgid "Xpmac (installation display driver)"
msgstr ""

#: Xconfig/main.pm:88 Xconfig/main.pm:89 Xconfig/monitor.pm:106 any.pm:818
#, c-format
msgid "Custom"
msgstr "Prisitaikyti"

#: Xconfig/main.pm:113 diskdrake/dav.pm:28 help.pm:14
#: install_steps_interactive.pm:83 printer/printerdrake.pm:3871
#: standalone/draksplash:114 standalone/harddrake2:187 standalone/logdrake:176
#: standalone/scannerdrake:438
#, c-format
msgid "Quit"
msgstr "Išeiti"

#: Xconfig/main.pm:115
#, fuzzy, c-format
msgid "Graphic Card"
msgstr "Vaizdo plokštė"

#: Xconfig/main.pm:118 Xconfig/monitor.pm:100
#, c-format
msgid "Monitor"
msgstr "Monitorius"

#: Xconfig/main.pm:121 Xconfig/resolution_and_depth.pm:228
#, c-format
msgid "Resolution"
msgstr "Skiriamoji geba"

#: Xconfig/main.pm:126
#, c-format
msgid "Test"
msgstr "Bandyti"

#: Xconfig/main.pm:131 diskdrake/dav.pm:67 diskdrake/interactive.pm:410
#: diskdrake/removable.pm:25 diskdrake/smbnfs_gtk.pm:80
#: standalone/drakconnect:254 standalone/drakconnect:263
#: standalone/drakconnect:277 standalone/drakconnect:283
#: standalone/drakconnect:381 standalone/drakconnect:382
#: standalone/drakconnect:540 standalone/drakfont:491 standalone/drakfont:551
#: standalone/harddrake2:184
#, c-format
msgid "Options"
msgstr "Pasirinktys"

#: Xconfig/main.pm:180
#, c-format
msgid ""
"Keep the changes?\n"
"The current configuration is:\n"
"\n"
"%s"
msgstr ""
"Išlaikyti pakeitimus?\n"
"Esama konfigūracija yra:\n"
"\n"
"%s"

#: Xconfig/monitor.pm:101
#, c-format
msgid "Choose a monitor"
msgstr "Pasirink monitorių"

#: Xconfig/monitor.pm:107
#, c-format
msgid "Plug'n Play"
msgstr ""

#: Xconfig/monitor.pm:108 mouse.pm:49
#, c-format
msgid "Generic"
msgstr "Paprasta"

#: Xconfig/monitor.pm:109 standalone/drakconnect:520 standalone/harddrake2:68
#: standalone/harddrake2:69
#, fuzzy, c-format
msgid "Vendor"
msgstr "Sugrįžti"

#: Xconfig/monitor.pm:119
#, c-format
msgid "Plug'n Play probing failed. Please select the correct monitor"
msgstr ""

#: Xconfig/monitor.pm:124
#, c-format
msgid ""
"The two critical parameters are the vertical refresh rate, which is the "
"rate\n"
"at which the whole screen is refreshed, and most importantly the horizontal\n"
"sync rate, which is the rate at which scanlines are displayed.\n"
"\n"
"It is VERY IMPORTANT that you do not specify a monitor type with a sync "
"range\n"
"that is beyond the capabilities of your monitor: you may damage your "
"monitor.\n"
" If in doubt, choose a conservative setting."
msgstr ""
"Du svarbiausi dydžiai yra vertikalaus atnaujinimo dažnis, kuris rodo,\n"
"kaip dažnai perpiešiamas visas ekranas, ir horizontaliosios skleistinės "
"dažnis, kuris parodo, kaip greit perpiešiamos eilutės.\n"
"\n"
"Tai LABAI SVARBU, kad nenurodytum skleistinės dažnio, didesnio\n"
"už palaikomą monitoriaus, nes gali jį sugadinti. Jeigu abejoji,\n"
"pasirink konservatyvią nuostatą."

#: Xconfig/monitor.pm:131
#, c-format
msgid "Horizontal refresh rate"
msgstr "Horizontalaus atnaujinimo dažnis"

#: Xconfig/monitor.pm:132
#, c-format
msgid "Vertical refresh rate"
msgstr "Vertikalaus atnaujinimo dažnis"

#: Xconfig/resolution_and_depth.pm:12
#, c-format
msgid "256 colors (8 bits)"
msgstr "256 spalvos (8 bitai)"

#: Xconfig/resolution_and_depth.pm:13
#, c-format
msgid "32 thousand colors (15 bits)"
msgstr "32 tūkst. spalvų (15 bitų)"

#: Xconfig/resolution_and_depth.pm:14
#, c-format
msgid "65 thousand colors (16 bits)"
msgstr "65 tūkst. spalvų (16 bitų)"

#: Xconfig/resolution_and_depth.pm:15
#, c-format
msgid "16 million colors (24 bits)"
msgstr "16 milijonai spalvų (24 bitai)"

#: Xconfig/resolution_and_depth.pm:16
#, c-format
msgid "4 billion colors (32 bits)"
msgstr "4 milijardai spalvų (32 bitai)"

#: Xconfig/resolution_and_depth.pm:141
#, c-format
msgid "Resolutions"
msgstr "Skiriamosios gebos"

#: Xconfig/resolution_and_depth.pm:275
#, c-format
msgid "Choose the resolution and the color depth"
msgstr "Pasirink skiriamąją gebą ir spalvų gylį"

#: Xconfig/resolution_and_depth.pm:276
#, c-format
msgid "Graphics card: %s"
msgstr "Vaizdo plokštė: %s"

#: Xconfig/resolution_and_depth.pm:289 interactive.pm:403
#: interactive/gtk.pm:734 interactive/http.pm:103 interactive/http.pm:157
#: interactive/newt.pm:308 interactive/newt.pm:410 interactive/stdio.pm:39
#: interactive/stdio.pm:142 interactive/stdio.pm:143 interactive/stdio.pm:172
#: standalone/drakbackup:4320 standalone/drakbackup:4352
#: standalone/drakbackup:4445 standalone/drakbackup:4462
#: standalone/drakbackup:4563 standalone/drakconnect:162
#: standalone/drakconnect:734 standalone/drakconnect:821
#: standalone/drakconnect:964 standalone/net_monitor:303 ugtk2.pm:412
#: ugtk2.pm:509 ugtk2.pm:1047 ugtk2.pm:1070
#, c-format
msgid "Ok"
msgstr "Gerai"

#: Xconfig/resolution_and_depth.pm:289 any.pm:858 diskdrake/smbnfs_gtk.pm:81
#: help.pm:197 help.pm:457 install_steps_gtk.pm:488
#: install_steps_interactive.pm:787 interactive.pm:404 interactive/gtk.pm:738
#: interactive/http.pm:104 interactive/http.pm:161 interactive/newt.pm:307
#: interactive/newt.pm:414 interactive/stdio.pm:39 interactive/stdio.pm:142
#: interactive/stdio.pm:176 printer/printerdrake.pm:2920
#: standalone/drakautoinst:200 standalone/drakbackup:4284
#: standalone/drakbackup:4311 standalone/drakbackup:4336
#: standalone/drakbackup:4369 standalone/drakbackup:4395
#: standalone/drakbackup:4421 standalone/drakbackup:4478
#: standalone/drakbackup:4504 standalone/drakbackup:4534
#: standalone/drakbackup:4558 standalone/drakconnect:161
#: standalone/drakconnect:819 standalone/drakconnect:973
#: standalone/drakfont:657 standalone/drakfont:734 standalone/logdrake:176
#: standalone/net_monitor:299 ugtk2.pm:406 ugtk2.pm:507 ugtk2.pm:516
#: ugtk2.pm:1047
#, c-format
msgid "Cancel"
msgstr "Nutraukti"

#: Xconfig/resolution_and_depth.pm:289 diskdrake/hd_gtk.pm:154
#: install_steps_gtk.pm:267 install_steps_gtk.pm:667 interactive.pm:498
#: interactive/gtk.pm:620 interactive/gtk.pm:622 standalone/drakTermServ:313
#: standalone/drakbackup:4281 standalone/drakbackup:4308
#: standalone/drakbackup:4333 standalone/drakbackup:4366
#: standalone/drakbackup:4392 standalone/drakbackup:4418
#: standalone/drakbackup:4459 standalone/drakbackup:4475
#: standalone/drakbackup:4501 standalone/drakbackup:4530
#: standalone/drakbackup:4555 standalone/drakbackup:4580
#: standalone/drakbug:157 standalone/drakconnect:157
#: standalone/drakconnect:227 standalone/drakfont:509 standalone/drakperm:134
#: standalone/draksec:285 standalone/harddrake2:183 ugtk2.pm:1160
#: ugtk2.pm:1161
#, c-format
msgid "Help"
msgstr "Pagalba"

#: Xconfig/test.pm:30
#, c-format
msgid "Test of the configuration"
msgstr "Nustatymų tikrinimas"

#: Xconfig/test.pm:31
#, c-format
msgid "Do you want to test the configuration?"
msgstr "Ar tu nori išbandyti nustatymus?"

#: Xconfig/test.pm:31
#, fuzzy, c-format
msgid "Warning: testing this graphic card may freeze your computer"
msgstr "Perspėjimas: šios plokštės bandymas gali pakabinti kompiuterį"

#: Xconfig/test.pm:71
#, c-format
msgid ""
"An error occurred:\n"
"%s\n"
"Try to change some parameters"
msgstr ""

#: Xconfig/test.pm:149
#, fuzzy, c-format
msgid "Leaving in %d seconds"
msgstr "%d sekundės"

#: Xconfig/test.pm:149
#, fuzzy, c-format
msgid "Is this the correct setting?"
msgstr "Ar taip teisinga?"

#: Xconfig/various.pm:29
#, c-format
msgid "Keyboard layout: %s\n"
msgstr "Klaviatūros išdėstymas: %s\n"

#: Xconfig/various.pm:30
#, c-format
msgid "Mouse type: %s\n"
msgstr "Pelės tipas: %s\n"

#: Xconfig/various.pm:31
#, c-format
msgid "Mouse device: %s\n"
msgstr "Pelės įrenginys: %s\n"

#: Xconfig/various.pm:32
#, c-format
msgid "Monitor: %s\n"
msgstr "Monitorius: %s\n"

#: Xconfig/various.pm:33
#, c-format
msgid "Monitor HorizSync: %s\n"
msgstr "Monitoriaus horiz. skleistinė: %s\n"

#: Xconfig/various.pm:34
#, c-format
msgid "Monitor VertRefresh: %s\n"
msgstr "Monitoriaus vert. skleistinė: %s\n"

#: Xconfig/various.pm:35
#, c-format
msgid "Graphics card: %s\n"
msgstr "Vaizdo plokštė: %s\n"

#: Xconfig/various.pm:36
#, c-format
msgid "Graphics memory: %s kB\n"
msgstr "Vaizdo atmintis: %s kB\n"

#: Xconfig/various.pm:38
#, c-format
msgid "Color depth: %s\n"
msgstr "Spalvų gylis: %s\n"

#: Xconfig/various.pm:39
#, c-format
msgid "Resolution: %s\n"
msgstr "Skiriamoji geba: %s\n"

#: Xconfig/various.pm:41
#, c-format
msgid "XFree86 server: %s\n"
msgstr "XFree86 serveris: %s\n"

#: Xconfig/various.pm:42
#, c-format
msgid "XFree86 driver: %s\n"
msgstr "XFree86 tvarkyklė: %s\n"

#: Xconfig/various.pm:71
#, c-format
msgid "Graphical interface at startup"
msgstr "X paleidžiant"

#: Xconfig/various.pm:73
#, c-format
msgid ""
"I can setup your computer to automatically start the graphical interface "
"(XFree) upon booting.\n"
"Would you like XFree to start when you reboot?"
msgstr ""
"Tu gali nustatyti, kad X startuotų automatiškai.\n"
"Ar tu nori, kad X startuotų po kompiuterio perkrovimo?"

#: Xconfig/various.pm:86
#, c-format
msgid ""
"Your graphic card seems to have a TV-OUT connector.\n"
"It can be configured to work using frame-buffer.\n"
"\n"
"For this you have to plug your graphic card to your TV before booting your "
"computer.\n"
"Then choose the \"TVout\" entry in the bootloader\n"
"\n"
"Do you have this feature?"
msgstr ""

#: Xconfig/various.pm:98
#, fuzzy, c-format
msgid "What norm is your TV using?"
msgstr "Kokios rūšies tavo ISDN jungtis?"

#: any.pm:98 harddrake/sound.pm:150 interactive.pm:441 standalone/drakbug:259
#: standalone/drakconnect:164 standalone/drakxtv:90 standalone/harddrake2:133
#: standalone/service_harddrake:94
#, c-format
msgid "Please wait"
msgstr "Prašom palaukti"

#: any.pm:98
#, fuzzy, c-format
msgid "Bootloader installation in progress"
msgstr "Įkrovos tvarkyklės įdiegimas"

#: any.pm:137
#, c-format
msgid ""
"You decided to install the bootloader on a partition.\n"
"This implies you already have a bootloader on the hard drive you boot (eg: "
"System Commander).\n"
"\n"
"On which drive are you booting?"
msgstr ""

#: any.pm:160 any.pm:192 help.pm:800
#, c-format
msgid "First sector of drive (MBR)"
msgstr "Pirmasis kaupiklio sektorius (MBR)"

#: any.pm:161
#, fuzzy, c-format
msgid "First sector of the root partition"
msgstr "Pirmasis įkrovos skirsnio sektorius"

#: any.pm:163
#, fuzzy, c-format
msgid "On Floppy"
msgstr "Išsaugoti į diskelį"

#: any.pm:165 help.pm:768 help.pm:800 printer/printerdrake.pm:3238
#, c-format
msgid "Skip"
msgstr "Praleisti"

#: any.pm:170
#, c-format
msgid "SILO Installation"
msgstr "SILO Įdiegimas"

#: any.pm:170
#, c-format
msgid "LILO/grub Installation"
msgstr "LILO/GRUB įdiegimas"

#: any.pm:171
#, c-format
msgid "Where do you want to install the bootloader?"
msgstr "Kur nori įdiegti įkrovos tvarkyklę?"

#: any.pm:192
#, c-format
msgid "First sector of boot partition"
msgstr "Pirmasis įkrovos skirsnio sektorius"

#: any.pm:204 any.pm:239
#, c-format
msgid "Bootloader main options"
msgstr "Įkrovos tvarkyklės pagrindinės parinktys"

#: any.pm:205
#, c-format
msgid "Boot Style Configuration"
msgstr "Įdiegimo Tipo Konfiguracija"

#: any.pm:209
#, c-format
msgid "Give the ram size in MB"
msgstr "Nurodyk RAM atminties dydį (MB)"

#: any.pm:211
#, c-format
msgid ""
"Option ``Restrict command line options'' is of no use without a password"
msgstr ""
"Parinktis „Griežtos komandinės eilutės parinktys“ yra nenaudingą be "
"slaptažodžio"

#: any.pm:212 any.pm:519 install_steps_interactive.pm:1158
#, c-format
msgid "The passwords do not match"
msgstr "Slaptažodžiai nesutampa"

#: any.pm:212 any.pm:519 diskdrake/interactive.pm:1255
#: install_steps_interactive.pm:1158
#, c-format
msgid "Please try again"
msgstr "Prašom bandyti vėl"

#: any.pm:217 any.pm:242 help.pm:768
#, c-format
msgid "Bootloader to use"
msgstr "Naudojama įkrovos tvarkyklė"

#: any.pm:219
#, c-format
msgid "Bootloader installation"
msgstr "Įkrovos tvarkyklės įdiegimas"

#: any.pm:221 any.pm:244 help.pm:768
#, c-format
msgid "Boot device"
msgstr "Įkrovos įrenginys"

#: any.pm:223
#, c-format
msgid "Delay before booting default image"
msgstr "Palaukti prieš įkraunant įprastą atvaizdą"

#: any.pm:224 help.pm:768
#, c-format
msgid "Enable ACPI"
msgstr ""

#: any.pm:225
#, c-format
msgid "Force No APIC"
msgstr ""

#: any.pm:227 any.pm:546 diskdrake/smbnfs_gtk.pm:180
#: install_steps_interactive.pm:1163 network/netconnect.pm:491
#: printer/printerdrake.pm:1340 printer/printerdrake.pm:1454
#: standalone/drakbackup:1990 standalone/drakbackup:3875
#: standalone/drakconnect:916 standalone/drakconnect:944
#, c-format
msgid "Password"
msgstr "Slaptažodis"

#: any.pm:228 any.pm:547 install_steps_interactive.pm:1164
#, c-format
msgid "Password (again)"
msgstr "Slaptažodis (vėl)"

#: any.pm:229
#, c-format
msgid "Restrict command line options"
msgstr "Griežtos komandinės eilutės parinktys"

#: any.pm:229
#, c-format
msgid "restrict"
msgstr "griežta"

#: any.pm:231
#, c-format
msgid "Clean /tmp at each boot"
msgstr "Išvalyti /tmp kiekvieną kartą įkrovus"

#: any.pm:232
#, c-format
msgid "Precise RAM size if needed (found %d MB)"
msgstr "Tikslus RAM atminties dydis (rasta %d MB)"

#: any.pm:234
#, c-format
msgid "Enable multiple profiles"
msgstr "Leisti keletą profilių"

#: any.pm:243
#, c-format
msgid "Init Message"
msgstr ""

#: any.pm:245
#, c-format
msgid "Open Firmware Delay"
msgstr ""

#: any.pm:246
#, c-format
msgid "Kernel Boot Timeout"
msgstr ""

#: any.pm:247
#, c-format
msgid "Enable CD Boot?"
msgstr ""

#: any.pm:248
#, c-format
msgid "Enable OF Boot?"
msgstr ""

#: any.pm:249
#, fuzzy, c-format
msgid "Default OS?"
msgstr "Įprastas"

#: any.pm:290
#, c-format
msgid "Image"
msgstr "Atvaizdas"

#: any.pm:291 any.pm:300
#, c-format
msgid "Root"
msgstr "Šakninis"

#: any.pm:292 any.pm:313
#, c-format
msgid "Append"
msgstr "Pridurti"

#: any.pm:294
#, c-format
msgid "Video mode"
msgstr "Vaizdo režimas"

#: any.pm:296
#, c-format
msgid "Initrd"
msgstr "Initrd"

#: any.pm:305 any.pm:310 any.pm:312
#, c-format
msgid "Label"
msgstr "Žymė"

#: any.pm:307 any.pm:317 harddrake/v4l.pm:236 standalone/drakfloppy:88
#: standalone/drakfloppy:94
#, c-format
msgid "Default"
msgstr "Įprastas"

#: any.pm:314
#, fuzzy, c-format
msgid "Initrd-size"
msgstr "Initrd"

#: any.pm:316
#, c-format
msgid "NoVideo"
msgstr ""

#: any.pm:327
#, c-format
msgid "Empty label not allowed"
msgstr "Tuščia žymė neleidžiama"

#: any.pm:328
#, c-format
msgid "You must specify a kernel image"
msgstr ""

#: any.pm:328
#, fuzzy, c-format
msgid "You must specify a root partition"
msgstr "Tu privalai turėti swap skirsnį"

#: any.pm:329
#, c-format
msgid "This label is already used"
msgstr "Ši žymė jau naudojama"

#: any.pm:342
#, c-format
msgid "Which type of entry do you want to add?"
msgstr "Kokio tipo įrašą tu nori pridėti?"

#: any.pm:343 standalone/drakbackup:1904
#, c-format
msgid "Linux"
msgstr "Linux"

#: any.pm:343
#, c-format
msgid "Other OS (SunOS...)"
msgstr "Kitos OS (SunOS...)"

#: any.pm:344
#, c-format
msgid "Other OS (MacOS...)"
msgstr "Kitos OS (MacOS...)"

#: any.pm:344
#, c-format
msgid "Other OS (windows...)"
msgstr "Kitos OS (Windows...)"

#: any.pm:372
#, c-format
msgid ""
"Here are the entries on your boot menu so far.\n"
"You can create additional entries or change the existing ones."
msgstr ""
"Čia yra skirtingi įrašai.\n"
"Tu gali pakeisti esamus arba prijungti naujus."

#: any.pm:504
#, c-format
msgid "access to X programs"
msgstr ""

#: any.pm:505
#, c-format
msgid "access to rpm tools"
msgstr ""

#: any.pm:506
#, c-format
msgid "allow \"su\""
msgstr ""

#: any.pm:507
#, c-format
msgid "access to administrative files"
msgstr ""

#: any.pm:508
#, c-format
msgid "access to network tools"
msgstr ""

#: any.pm:509
#, c-format
msgid "access to compilation tools"
msgstr ""

#: any.pm:515
#, c-format
msgid "(already added %s)"
msgstr "(%s jau pridėtas)"

#: any.pm:520
#, c-format
msgid "This password is too simple"
msgstr "Šis slaptažodis pernelyg paprastas"

#: any.pm:521
#, c-format
msgid "Please give a user name"
msgstr "Prašom suteikti vartotojo vardą"

#: any.pm:522
#, c-format
msgid ""
"The user name must contain only lower cased letters, numbers, `-' and `_'"
msgstr ""
"Vartotojo vardas turi susidaryti tik iš mažųjų raidžių, skaičių ir simbolių "
"`-' bei `_'"

#: any.pm:523
#, fuzzy, c-format
msgid "The user name is too long"
msgstr "Šis vartotojo vardas jau pridėtas"

#: any.pm:524
#, c-format
msgid "This user name has already been added"
msgstr "Šis vartotojo vardas jau pridėtas"

#: any.pm:528
#, c-format
msgid "Add user"
msgstr "Pridėti vartotoją"

#: any.pm:529
#, c-format
msgid ""
"Enter a user\n"
"%s"
msgstr ""
"Įvesk vartotoją\n"
"%s"

#: any.pm:532 diskdrake/dav.pm:68 diskdrake/hd_gtk.pm:158
#: diskdrake/removable.pm:27 diskdrake/smbnfs_gtk.pm:82 help.pm:544
#: interactive/http.pm:152 printer/printerdrake.pm:165
#: printer/printerdrake.pm:352 printer/printerdrake.pm:3871
#: standalone/drakbackup:3094 standalone/scannerdrake:629
#: standalone/scannerdrake:779
#, c-format
msgid "Done"
msgstr "Atlikta"

#: any.pm:533 help.pm:52
#, c-format
msgid "Accept user"
msgstr "Priimti vartotoją"

#: any.pm:544
#, c-format
msgid "Real name"
msgstr "Tikras vardas"

#: any.pm:545 help.pm:52 printer/printerdrake.pm:1339
#: printer/printerdrake.pm:1453
#, c-format
msgid "User name"
msgstr "Vartotojo vardas"

#: any.pm:548
#, c-format
msgid "Shell"
msgstr "Shell"

#: any.pm:550
#, c-format
msgid "Icon"
msgstr "Ikona"

#: any.pm:591 security/l10n.pm:14
#, c-format
msgid "Autologin"
msgstr "Automatinis pasisveikinimas"

#: any.pm:592
#, fuzzy, c-format
msgid "I can set up your computer to automatically log on one user."
msgstr ""
"Aš galiu nustatyti taip, kad vienas vartotojas pasisveikintų automatiškai.\n"
"Jei nenori to naudoti, spausk mygtuką Nutraukti."

#: any.pm:593 help.pm:52
#, fuzzy, c-format
msgid "Do you want to use this feature?"
msgstr "Ar nori naudoti aboot?"

#: any.pm:594
#, c-format
msgid "Choose the default user:"
msgstr "Pasirink įprastą vartotoją:"

#: any.pm:595
#, c-format
msgid "Choose the window manager to run:"
msgstr "Pasirink, kurią langų tvarkyklę naudosi:"

#: any.pm:607
#, fuzzy, c-format
msgid "Please choose a language to use."
msgstr "Prašom pasirinkti kalbą, kurią naudosi."

#: any.pm:628
#, c-format
msgid ""
"Mandrake Linux can support multiple languages. Select\n"
"the languages you would like to install. They will be available\n"
"when your installation is complete and you restart your system."
msgstr "Tu gali pasirinkti kitas kalbas, kurios bus prieinamos po įdiegimo"

#: any.pm:646 help.pm:660
#, c-format
msgid "Use Unicode by default"
msgstr ""

#: any.pm:647 help.pm:660
#, fuzzy, c-format
msgid "All languages"
msgstr "Pasirink savo kalbą"

#: any.pm:683 help.pm:581 help.pm:991 install_steps_interactive.pm:907
#, c-format
msgid "Country / Region"
msgstr "Valstybė"

#: any.pm:684
#, fuzzy, c-format
msgid "Please choose your country."
msgstr "Prašom pasirinkti savo pelės rūšį."

#: any.pm:686
#, fuzzy, c-format
msgid "Here is the full list of available countries"
msgstr "Čia yra galimų klaviatūrų sąrašas"

#: any.pm:687 diskdrake/interactive.pm:292 help.pm:544 help.pm:581 help.pm:621
#: help.pm:991 install_steps_interactive.pm:114
#, c-format
msgid "More"
msgstr "Dar"

#: any.pm:818
#, fuzzy, c-format
msgid "No sharing"
msgstr "CUPS paleidžiamas"

#: any.pm:818
#, fuzzy, c-format
msgid "Allow all users"
msgstr "Pridėti vartotoją"

#: any.pm:822
#, c-format
msgid ""
"Would you like to allow users to share some of their directories?\n"
"Allowing this will permit users to simply click on \"Share\" in konqueror "
"and nautilus.\n"
"\n"
"\"Custom\" permit a per-user granularity.\n"
msgstr ""

#: any.pm:838
#, c-format
msgid ""
"You can export using NFS or Samba. Please select which you'd like to use."
msgstr ""

#: any.pm:846
#, fuzzy, c-format
msgid "The package %s is going to be removed."
msgstr "Ruošiamasi pašalinti šiuos paketus"

#: any.pm:858
#, c-format
msgid "Launch userdrake"
msgstr ""

#: any.pm:860
#, c-format
msgid ""
"The per-user sharing uses the group \"fileshare\". \n"
"You can use userdrake to add a user to this group."
msgstr ""

#: authentication.pm:12
#, fuzzy, c-format
msgid "Local files"
msgstr "Vietinis spausdintuvas"

#: authentication.pm:12
#, c-format
msgid "LDAP"
msgstr ""

#: authentication.pm:12
#, fuzzy, c-format
msgid "NIS"
msgstr "Naudoti NIS"

#: authentication.pm:12 authentication.pm:50
#, fuzzy, c-format
msgid "Windows Domain"
msgstr "NIS domenas"

#: authentication.pm:33
#, fuzzy, c-format
msgid "Authentication LDAP"
msgstr "Autentikacija"

#: authentication.pm:34
#, c-format
msgid "LDAP Base dn"
msgstr ""

#: authentication.pm:35
#, fuzzy, c-format
msgid "LDAP Server"
msgstr "serveris"

#: authentication.pm:40
#, fuzzy, c-format
msgid "Authentication NIS"
msgstr "Autentikacijos NIS"

#: authentication.pm:41
#, c-format
msgid "NIS Domain"
msgstr "NIS domenas"

#: authentication.pm:42
#, c-format
msgid "NIS Server"
msgstr "NIS serveris"

#: authentication.pm:47
#, c-format
msgid ""
"For this to work for a W2K PDC, you will probably need to have the admin "
"run: C:\\>net localgroup \"Pre-Windows 2000 Compatible Access\" everyone /"
"add and reboot the server.\n"
"You will also need the username/password of a Domain Admin to join the "
"machine to the Windows(TM) domain.\n"
"If networking is not yet enabled, Drakx will attempt to join the domain "
"after the network setup step.\n"
"Should this setup fail for some reason and domain authentication is not "
"working, run 'smbpasswd -j DOMAIN -U USER%%PASSWORD' using your Windows(tm) "
"Domain, and Admin Username/Password, after system boot.\n"
"The command 'wbinfo -t' will test whether your authentication secrets are "
"good."
msgstr ""

#: authentication.pm:49
#, fuzzy, c-format
msgid "Authentication Windows Domain"
msgstr "Autentikacija"

#: authentication.pm:51
#, fuzzy, c-format
msgid "Domain Admin User Name"
msgstr "Domeno vardas"

#: authentication.pm:52
#, c-format
msgid "Domain Admin Password"
msgstr ""

#: authentication.pm:83
#, c-format
msgid "Can't use broadcast with no NIS domain"
msgstr "Negalima naudoti transliavimo be NIS domeno"

#. -PO: these messages will be displayed at boot time in the BIOS, use only ASCII (7bit)
#: bootloader.pm:542
#, fuzzy, c-format
msgid ""
"Welcome to the operating system chooser!\n"
"\n"
"Choose an operating system from the list above or\n"
"wait for default boot.\n"
"\n"
msgstr ""
"Sveiki, besinaudojantys %s, operaciju sistemu parinkikliu!\n"
"\n"
"Pasirink operaciju sistema is zemiau esancio saraso,\n"
"arba palauk %d sekundziu, kad butu ikrauta pagal nutylejima\n"

#: bootloader.pm:674
#, c-format
msgid "SILO"
msgstr "SILO"

#: bootloader.pm:676 help.pm:768
#, c-format
msgid "LILO with graphical menu"
msgstr "LILO su grafiniu meniu"

#: bootloader.pm:677 help.pm:768
#, c-format
msgid "LILO with text menu"
msgstr "LILO su tekstiniu meniu"

#: bootloader.pm:679
#, c-format
msgid "Grub"
msgstr "Grub"

#: bootloader.pm:681
#, c-format
msgid "Yaboot"
msgstr "Yaboot"

#: bootloader.pm:1150
#, c-format
msgid "not enough room in /boot"
msgstr "nepakanka vietos /boot"

#: bootloader.pm:1178
#, fuzzy, c-format
msgid "You can't install the bootloader on a %s partition\n"
msgstr "Kur nori įdiegti įkrovos tvarkyklę?"

#: bootloader.pm:1218
#, c-format
msgid ""
"Your bootloader configuration must be updated because partition has been "
"renumbered"
msgstr ""

#: bootloader.pm:1225
#, c-format
msgid ""
"The bootloader can't be installed correctly. You have to boot rescue and "
"choose \"%s\""
msgstr ""

#: bootloader.pm:1226
#, fuzzy, c-format
msgid "Re-install Boot Loader"
msgstr "Įdiegti įkrovos tvarkyklę"

#: common.pm:125
#, c-format
msgid "KB"
msgstr "KB"

#: common.pm:125
#, c-format
msgid "MB"
msgstr "MB"

#: common.pm:125
#, c-format
msgid "GB"
msgstr "GB"

#: common.pm:133
#, c-format
msgid "TB"
msgstr "TB"

#: common.pm:141
#, c-format
msgid "%d minutes"
msgstr "%d minutės"

#: common.pm:143
#, c-format
msgid "1 minute"
msgstr "1 minutė"

#: common.pm:145
#, c-format
msgid "%d seconds"
msgstr "%d sekundės"

#: common.pm:196
#, fuzzy, c-format
msgid "Can't make screenshots before partitioning"
msgstr "Aš daugiau negaliu pridėti nė vieno skirsnio"

#: common.pm:203
#, fuzzy, c-format
msgid "Screenshots will be available after install in %s"
msgstr "Tu gali pasirinkti kitas kalbas, kurios bus prieinamos po įdiegimo"

#: common.pm:268
#, fuzzy, c-format
msgid "kdesu missing"
msgstr "nieko"

#: common.pm:271
#, c-format
msgid "consolehelper missing"
msgstr ""

#: crypto.pm:14 crypto.pm:28 lang.pm:231 network/adsl_consts.pm:37
#: network/adsl_consts.pm:48 network/adsl_consts.pm:58
#: network/adsl_consts.pm:68 network/adsl_consts.pm:79
#: network/adsl_consts.pm:90 network/adsl_consts.pm:100
#: network/adsl_consts.pm:110 network/netconnect.pm:46
#, c-format
msgid "France"
msgstr "Prancūzija"

#: crypto.pm:15 lang.pm:207
#, c-format
msgid "Costa Rica"
msgstr "Kosta Rika"

#: crypto.pm:16 crypto.pm:29 lang.pm:179 network/adsl_consts.pm:20
#: network/adsl_consts.pm:30 network/netconnect.pm:49
#, fuzzy, c-format
msgid "Belgium"
msgstr "Belgų"

#: crypto.pm:17 crypto.pm:30 lang.pm:212
#, c-format
msgid "Czech Republic"
msgstr "Čekija"

#: crypto.pm:18 crypto.pm:31 lang.pm:213 network/adsl_consts.pm:126
#: network/adsl_consts.pm:134
#, c-format
msgid "Germany"
msgstr "Vokiečių"

#: crypto.pm:19 crypto.pm:32 lang.pm:244
#, fuzzy, c-format
msgid "Greece"
msgstr "Graikų"

#: crypto.pm:20 crypto.pm:33 lang.pm:317
#, fuzzy, c-format
msgid "Norway"
msgstr "Norvegų"

#: crypto.pm:21 crypto.pm:34 lang.pm:346 network/adsl_consts.pm:230
#, fuzzy, c-format
msgid "Sweden"
msgstr "Pasižiūrėti"

#: crypto.pm:22 crypto.pm:36 lang.pm:316 network/adsl_consts.pm:170
#: network/netconnect.pm:47
#, c-format
msgid "Netherlands"
msgstr "Olandija"

#: crypto.pm:23 crypto.pm:37 lang.pm:264 network/adsl_consts.pm:150
#: network/adsl_consts.pm:160 network/netconnect.pm:48 standalone/drakxtv:48
#, fuzzy, c-format
msgid "Italy"
msgstr "Italų"

#: crypto.pm:24 crypto.pm:38 lang.pm:172
#, fuzzy, c-format
msgid "Austria"
msgstr "nuoseklioji"

#: crypto.pm:35 crypto.pm:61 lang.pm:380 network/netconnect.pm:50
#, c-format
msgid "United States"
msgstr "Jungtinės amerikos valstijos"

#: diskdrake/dav.pm:19
#, c-format
msgid ""
"WebDAV is a protocol that allows you to mount a web server's directory\n"
"locally, and treat it like a local filesystem (provided the web server is\n"
"configured as a WebDAV server). If you would like to add WebDAV mount\n"
"points, select \"New\"."
msgstr ""

#: diskdrake/dav.pm:27
#, fuzzy, c-format
msgid "New"
msgstr "naujas"

#: diskdrake/dav.pm:63 diskdrake/interactive.pm:417 diskdrake/smbnfs_gtk.pm:75
#, c-format
msgid "Unmount"
msgstr "Atjungti"

#: diskdrake/dav.pm:64 diskdrake/interactive.pm:414 diskdrake/smbnfs_gtk.pm:76
#, c-format
msgid "Mount"
msgstr "Primontuoti"

#: diskdrake/dav.pm:65 help.pm:137
#, fuzzy, c-format
msgid "Server"
msgstr "serveris"

#: diskdrake/dav.pm:66 diskdrake/interactive.pm:408
#: diskdrake/interactive.pm:616 diskdrake/interactive.pm:635
#: diskdrake/removable.pm:24 diskdrake/smbnfs_gtk.pm:79
#, c-format
msgid "Mount point"
msgstr "Prijungimo vieta"

#: diskdrake/dav.pm:85
#, fuzzy, c-format
msgid "Please enter the WebDAV server URL"
msgstr "Prašom išbandyti pelę"

#: diskdrake/dav.pm:89
#, c-format
msgid "The URL must begin with http:// or https://"
msgstr ""

#: diskdrake/dav.pm:111
#, fuzzy, c-format
msgid "Server: "
msgstr "serveris"

#: diskdrake/dav.pm:112 diskdrake/interactive.pm:469
#: diskdrake/interactive.pm:1149 diskdrake/interactive.pm:1225
#, c-format
msgid "Mount point: "
msgstr "Montavimo taškas: "

#: diskdrake/dav.pm:113 diskdrake/interactive.pm:1233
#, c-format
msgid "Options: %s"
msgstr "Pasirinktys: %s"

#: diskdrake/hd_gtk.pm:96 diskdrake/interactive.pm:995
#: diskdrake/interactive.pm:1005 diskdrake/interactive.pm:1065
#, c-format
msgid "Read carefully!"
msgstr "Perskaityk įdėmiai!"

#: diskdrake/hd_gtk.pm:96
#, c-format
msgid "Please make a backup of your data first"
msgstr "Pradžiai padaryk atsarginę savo duomenų kopiją"

#: diskdrake/hd_gtk.pm:99
#, c-format
msgid ""
"If you plan to use aboot, be carefull to leave a free space (2048 sectors is "
"enough)\n"
"at the beginning of the disk"
msgstr ""
"Jeigu tu planuoji naudoti aboot, nepamiršk palikti tuščios vietos (2048 "
"sektorių pakanka)\n"
"kaupiklio pradžioje"

#: diskdrake/hd_gtk.pm:156 help.pm:544
#, c-format
msgid "Wizard"
msgstr "Meistras"

#: diskdrake/hd_gtk.pm:189
#, c-format
msgid "Choose action"
msgstr "Pasirink veiksmą"

#: diskdrake/hd_gtk.pm:193
#, fuzzy, c-format
msgid ""
"You have one big Microsoft Windows partition.\n"
"I suggest you first resize that partition\n"
"(click on it, then click on \"Resize\")"
msgstr ""
"Tu turi vieną didelį FAT skirsnį\n"
"(dažniausiai naudojamas Microsoft DOS/Windows).\n"
"Patariu tau pakeisti to skirsnio dydį\n"
"(spragtelėk ant jo, tada ant „Pakeisti dydį“)"

#: diskdrake/hd_gtk.pm:195
#, c-format
msgid "Please click on a partition"
msgstr "Prašom spragtelėti ant skirsnio"

#: diskdrake/hd_gtk.pm:209 diskdrake/smbnfs_gtk.pm:63 install_steps_gtk.pm:475
#, c-format
msgid "Details"
msgstr "Detalės"

#: diskdrake/hd_gtk.pm:255
#, fuzzy, c-format
msgid "No hard drives found"
msgstr "Vietinis spausdintuvas"

#: diskdrake/hd_gtk.pm:326
#, c-format
msgid "Ext2"
msgstr "Ext2"

#: diskdrake/hd_gtk.pm:326
#, fuzzy, c-format
msgid "Journalised FS"
msgstr "primontuoti nepavyko"

#: diskdrake/hd_gtk.pm:326
#, c-format
msgid "Swap"
msgstr "Swap"

#: diskdrake/hd_gtk.pm:326
#, c-format
msgid "SunOS"
msgstr "SunOS"

#: diskdrake/hd_gtk.pm:326
#, c-format
msgid "HFS"
msgstr "HFS"

#: diskdrake/hd_gtk.pm:326
#, fuzzy, c-format
msgid "Windows"
msgstr "NIS domenas"

#: diskdrake/hd_gtk.pm:327 install_steps_gtk.pm:327 mouse.pm:167
#: services.pm:164 standalone/drakbackup:1947 standalone/drakperm:250
#, c-format
msgid "Other"
msgstr "Kitas"

#: diskdrake/hd_gtk.pm:327 diskdrake/interactive.pm:1165
#, c-format
msgid "Empty"
msgstr "Tuščias"

#: diskdrake/hd_gtk.pm:331
#, c-format
msgid "Filesystem types:"
msgstr "Bylų sistemos tipai:"

#: diskdrake/hd_gtk.pm:348 diskdrake/hd_gtk.pm:350 diskdrake/hd_gtk.pm:353
#, c-format
msgid "Use ``%s'' instead"
msgstr "Naudok „%s“ vietoj to"

#: diskdrake/hd_gtk.pm:348 diskdrake/hd_gtk.pm:353
#: diskdrake/interactive.pm:409 diskdrake/interactive.pm:569
#: diskdrake/removable.pm:26 diskdrake/removable.pm:49
#: standalone/harddrake2:67
#, c-format
msgid "Type"
msgstr "Rūšis"

#: diskdrake/hd_gtk.pm:348 diskdrake/interactive.pm:431
#, c-format
msgid "Create"
msgstr "Sukurti"

#: diskdrake/hd_gtk.pm:350 diskdrake/interactive.pm:418
#: standalone/drakperm:124 standalone/printerdrake:231
#, c-format
msgid "Delete"
msgstr "Ištrinti"

#: diskdrake/hd_gtk.pm:353
#, c-format
msgid "Use ``Unmount'' first"
msgstr "Pirmiau naudok „Numontuoti“"

#: diskdrake/interactive.pm:179
#, fuzzy, c-format
msgid "Choose another partition"
msgstr "Sukurti naują skirsnį"

#: diskdrake/interactive.pm:179
#, fuzzy, c-format
msgid "Choose a partition"
msgstr "Pasirink veiksmą"

#: diskdrake/interactive.pm:208
#, fuzzy, c-format
msgid "Exit"
msgstr "Ext2"

#: diskdrake/interactive.pm:241 help.pm:544
#, c-format
msgid "Undo"
msgstr "Sugrįžti"

#: diskdrake/interactive.pm:241
#, c-format
msgid "Toggle to normal mode"
msgstr "Pakeisti į normalų režimą"

#: diskdrake/interactive.pm:241
#, c-format
msgid "Toggle to expert mode"
msgstr "Pakeisti į eksperto režimą"

#: diskdrake/interactive.pm:260
#, c-format
msgid "Continue anyway?"
msgstr "Ar vis tiek tęsti?"

#: diskdrake/interactive.pm:265
#, c-format
msgid "Quit without saving"
msgstr "Išeiti neišsaugojus"

#: diskdrake/interactive.pm:265
#, c-format
msgid "Quit without writing the partition table?"
msgstr "Išeiti neišsaugojus skirsnių lentelės?"

#: diskdrake/interactive.pm:270
#, fuzzy, c-format
msgid "Do you want to save /etc/fstab modifications"
msgstr "Ar tu nori išbandyti nustatymus?"

#: diskdrake/interactive.pm:277 install_steps_interactive.pm:301
#, c-format
msgid "You need to reboot for the partition table modifications to take place"
msgstr ""
"Tau reikia perkrauti kompiuterį, kad skirsnių lentelės pakeitimai būtų "
"naudojami"

#: diskdrake/interactive.pm:290 help.pm:544
#, c-format
msgid "Clear all"
msgstr "Išvalyti viską"

#: diskdrake/interactive.pm:291 help.pm:544
#, c-format
msgid "Auto allocate"
msgstr "Automatinis suskirstymas"

#: diskdrake/interactive.pm:297
#, fuzzy, c-format
msgid "Hard drive information"
msgstr "Pašto informaciją"

#: diskdrake/interactive.pm:329
#, c-format
msgid "All primary partitions are used"
msgstr "Visi pirminiai skirsniai yra naudojami"

#: diskdrake/interactive.pm:330
#, c-format
msgid "I can't add any more partition"
msgstr "Aš daugiau negaliu pridėti nė vieno skirsnio"

#: diskdrake/interactive.pm:331
#, c-format
msgid ""
"To have more partitions, please delete one to be able to create an extended "
"partition"
msgstr ""
"Jei nori turėti daugiau skirsnių, prašom ištrinti vieną, kad vietoj jo "
"galėtum sukurti išplėstinį"

#: diskdrake/interactive.pm:342 help.pm:544
#, fuzzy, c-format
msgid "Save partition table"
msgstr "Įrašyti skirsnių lentelę"

#: diskdrake/interactive.pm:343 help.pm:544
#, fuzzy, c-format
msgid "Restore partition table"
msgstr "Išgelbėti skirsnių lentelę"

#: diskdrake/interactive.pm:344 help.pm:544
#, c-format
msgid "Rescue partition table"
msgstr "Išgelbėti skirsnių lentelę"

#: diskdrake/interactive.pm:346 help.pm:544
#, fuzzy, c-format
msgid "Reload partition table"
msgstr "Išgelbėti skirsnių lentelę"

#: diskdrake/interactive.pm:348
#, fuzzy, c-format
msgid "Removable media automounting"
msgstr "Išimamų laikmenų automatinis montavimas"

#: diskdrake/interactive.pm:357 diskdrake/interactive.pm:377
#, c-format
msgid "Select file"
msgstr "Pasirink bylą"

#: diskdrake/interactive.pm:364
#, c-format
msgid ""
"The backup partition table has not the same size\n"
"Still continue?"
msgstr ""
"Atsarginė skirsnių lentelė nėra tokio paties dydžio\n"
"Vis tiek tęsti?"

#: diskdrake/interactive.pm:378 harddrake/sound.pm:222 keyboard.pm:311
#: network/netconnect.pm:353 printer/printerdrake.pm:2159
#: printer/printerdrake.pm:3246 printer/printerdrake.pm:3365
#: printer/printerdrake.pm:4338 standalone/drakTermServ:1040
#: standalone/drakTermServ:1715 standalone/drakbackup:765
#: standalone/drakbackup:865 standalone/drakboot:137 standalone/drakclock:200
#: standalone/drakconnect:856 standalone/drakfloppy:295
#, c-format
msgid "Warning"
msgstr "Dėmesio"

#: diskdrake/interactive.pm:379
#, c-format
msgid ""
"Insert a floppy in drive\n"
"All data on this floppy will be lost"
msgstr ""
"Įdėk diskelį į kaupiklį\n"
"Visi duomenys diskelyje bus prarasti"

#: diskdrake/interactive.pm:390
#, c-format
msgid "Trying to rescue partition table"
msgstr "Bandau išgelbėti skirsnių lentelę"

#: diskdrake/interactive.pm:396
#, fuzzy, c-format
msgid "Detailed information"
msgstr "Pašto informaciją"

#: diskdrake/interactive.pm:411 diskdrake/interactive.pm:706
#, c-format
msgid "Resize"
msgstr "Pakeisti dydį"

#: diskdrake/interactive.pm:412 diskdrake/interactive.pm:774
#, c-format
msgid "Move"
msgstr "Perkelti"

#: diskdrake/interactive.pm:413
#, c-format
msgid "Format"
msgstr "Formatuoti"

#: diskdrake/interactive.pm:415
#, c-format
msgid "Add to RAID"
msgstr "Pridėti į RAID"

#: diskdrake/interactive.pm:416
#, c-format
msgid "Add to LVM"
msgstr "Pridėti į LVM"

#: diskdrake/interactive.pm:419
#, c-format
msgid "Remove from RAID"
msgstr "Pašalinti iš RAID"

#: diskdrake/interactive.pm:420
#, c-format
msgid "Remove from LVM"
msgstr "Pašalinti iš LVM"

#: diskdrake/interactive.pm:421
#, c-format
msgid "Modify RAID"
msgstr "Taisyti RAID"

#: diskdrake/interactive.pm:422
#, c-format
msgid "Use for loopback"
msgstr "Naudoti loopback'ui"

#: diskdrake/interactive.pm:462
#, c-format
msgid "Create a new partition"
msgstr "Sukurti naują skirsnį"

#: diskdrake/interactive.pm:465
#, c-format
msgid "Start sector: "
msgstr "Pradžios sektorius: "

#: diskdrake/interactive.pm:467 diskdrake/interactive.pm:876
#, c-format
msgid "Size in MB: "
msgstr "Dydis (MB): "

#: diskdrake/interactive.pm:468 diskdrake/interactive.pm:877
#, c-format
msgid "Filesystem type: "
msgstr "Bylų sistemos tipas: "

#: diskdrake/interactive.pm:473
#, c-format
msgid "Preference: "
msgstr "Pirmenybė: "

#: diskdrake/interactive.pm:476
#, fuzzy, c-format
msgid "Logical volume name "
msgstr "Vietinis spausdintuvas"

#: diskdrake/interactive.pm:505
#, c-format
msgid ""
"You can't create a new partition\n"
"(since you reached the maximal number of primary partitions).\n"
"First remove a primary partition and create an extended partition."
msgstr ""

#: diskdrake/interactive.pm:535
#, fuzzy, c-format
msgid "Remove the loopback file?"
msgstr "Sužymima loopback byla %s"

#: diskdrake/interactive.pm:554
#, c-format
msgid ""
"After changing type of partition %s, all data on this partition will be lost"
msgstr "Pakeitus skirsnio %s tipą, visi duomenys jame bus prarasti"

#: diskdrake/interactive.pm:565
#, c-format
msgid "Change partition type"
msgstr "Pakeisti skirsnio tipą"

#: diskdrake/interactive.pm:566 diskdrake/removable.pm:48
#, c-format
msgid "Which filesystem do you want?"
msgstr "Kokios bylų sistemos tu nori?"

#: diskdrake/interactive.pm:574
#, c-format
msgid "Switching from ext2 to ext3"
msgstr ""

#: diskdrake/interactive.pm:603
#, fuzzy, c-format
msgid "Where do you want to mount the loopback file %s?"
msgstr "Kur nori primontuoti loopback bylą %s?"

#: diskdrake/interactive.pm:604
#, c-format
msgid "Where do you want to mount device %s?"
msgstr "Kur nori primontuoti įrenginį %s?"

#: diskdrake/interactive.pm:609
#, c-format
msgid ""
"Can't unset mount point as this partition is used for loop back.\n"
"Remove the loopback first"
msgstr ""
"Negaliu nuimti montavimo taško, nes šis skirsnis naudojamas loopback'ui.\n"
"Pirma pašalink loopback'us"

#: diskdrake/interactive.pm:634
#, fuzzy, c-format
msgid "Where do you want to mount %s?"
msgstr "Kur nori primontuoti įrenginį %s?"

#: diskdrake/interactive.pm:658 diskdrake/interactive.pm:738
#: install_interactive.pm:156 install_interactive.pm:186
#, c-format
msgid "Resizing"
msgstr "Keičiamas dydis"

#: diskdrake/interactive.pm:658
#, c-format
msgid "Computing FAT filesystem bounds"
msgstr "Skaičiuojami FAT bylų sistemos rėžiai"

#: diskdrake/interactive.pm:694
#, c-format
msgid "This partition is not resizeable"
msgstr "Šio skirsnio dydžio neina pakeisti"

#: diskdrake/interactive.pm:699
#, c-format
msgid "All data on this partition should be backed-up"
msgstr "Pasidaryk atsarginę duomenų šiame skirsnyje kopiją"

#: diskdrake/interactive.pm:701
#, c-format
msgid "After resizing partition %s, all data on this partition will be lost"
msgstr "Pakeitus skirsnio %s dydį, visi duomenys jame bus prarasti"

#: diskdrake/interactive.pm:706
#, c-format
msgid "Choose the new size"
msgstr "Pasirink naują dydį"

#: diskdrake/interactive.pm:707
#, fuzzy, c-format
msgid "New size in MB: "
msgstr "Dydis (MB): "

#: diskdrake/interactive.pm:751 install_interactive.pm:194
#, c-format
msgid ""
"To ensure data integrity after resizing the partition(s), \n"
"filesystem checks will be run on your next boot into Windows(TM)"
msgstr ""

#: diskdrake/interactive.pm:775
#, c-format
msgid "Which disk do you want to move it to?"
msgstr "Į kurį diską tu nori jį perkelti?"

#: diskdrake/interactive.pm:776
#, c-format
msgid "Sector"
msgstr "Sektorius"

#: diskdrake/interactive.pm:777
#, c-format
msgid "Which sector do you want to move it to?"
msgstr "Į kurį sektorių tu nori jį perkelti?"

#: diskdrake/interactive.pm:780
#, c-format
msgid "Moving"
msgstr "Perkeliama"

#: diskdrake/interactive.pm:780
#, c-format
msgid "Moving partition..."
msgstr "Perkeliamas skirsnis..."

#: diskdrake/interactive.pm:802
#, c-format
msgid "Choose an existing RAID to add to"
msgstr "Pasirink jau esantį RAID, prie kurio pridėti"

#: diskdrake/interactive.pm:803 diskdrake/interactive.pm:820
#, c-format
msgid "new"
msgstr "naujas"

#: diskdrake/interactive.pm:818
#, c-format
msgid "Choose an existing LVM to add to"
msgstr "Pasirink jau esantį LVM, prie kurio pridėti"

#: diskdrake/interactive.pm:824
#, c-format
msgid "LVM name?"
msgstr "LVM vardas?"

#: diskdrake/interactive.pm:861
#, c-format
msgid "This partition can't be used for loopback"
msgstr "Šis skirsnis negali būti naudojamas loopback'ui"

#: diskdrake/interactive.pm:874
#, c-format
msgid "Loopback"
msgstr "Loopback"

#: diskdrake/interactive.pm:875
#, c-format
msgid "Loopback file name: "
msgstr "Loopback bylos vardas: "

#: diskdrake/interactive.pm:880
#, fuzzy, c-format
msgid "Give a file name"
msgstr "Tikras vardas"

#: diskdrake/interactive.pm:883
#, fuzzy, c-format
msgid "File is already used by another loopback, choose another one"
msgstr "Byla jau naudojama kitam loopback'ui, pasirink kitą"

#: diskdrake/interactive.pm:884
#, c-format
msgid "File already exists. Use it?"
msgstr "Ši byla jau yra. Naudoti ją?"

#: diskdrake/interactive.pm:907
#, fuzzy, c-format
msgid "Mount options"
msgstr "Modulio parinktys:"

#: diskdrake/interactive.pm:914
#, c-format
msgid "Various"
msgstr ""

#: diskdrake/interactive.pm:978
#, c-format
msgid "device"
msgstr "įrenginys"

#: diskdrake/interactive.pm:979
#, c-format
msgid "level"
msgstr "lygis"

#: diskdrake/interactive.pm:980
#, c-format
msgid "chunk size"
msgstr "gabalo dydis"

#: diskdrake/interactive.pm:996
#, c-format
msgid "Be careful: this operation is dangerous."
msgstr "Būk atsargus: ši operacija yra pavojinga."

#: diskdrake/interactive.pm:1011
#, c-format
msgid "What type of partitioning?"
msgstr "Kokio tipo skirsnių skaidymas?"

#: diskdrake/interactive.pm:1027
#, fuzzy, c-format
msgid "The package %s is needed. Install it?"
msgstr "Kokius jūs norite įdiegti paketus"

#: diskdrake/interactive.pm:1056
#, c-format
msgid "You'll need to reboot before the modification can take place"
msgstr "Tau reikia perkrauti, kad pakeitimai būtų veiksmingi"

#: diskdrake/interactive.pm:1065
#, c-format
msgid "Partition table of drive %s is going to be written to disk!"
msgstr "Įrenginio %s skirsnių lentelė bus įrašyta į diską!"

#: diskdrake/interactive.pm:1078
#, c-format
msgid "After formatting partition %s, all data on this partition will be lost"
msgstr "Sužymėjus skirsnį %s, visi duomenys jame bus prarasti"

#: diskdrake/interactive.pm:1095
#, fuzzy, c-format
msgid "Move files to the new partition"
msgstr "Naujiems skirsniams nepakanka laisvos vietos"

#: diskdrake/interactive.pm:1095
#, fuzzy, c-format
msgid "Hide files"
msgstr "mkraid nepavyko"

#: diskdrake/interactive.pm:1096
#, c-format
msgid ""
"Directory %s already contains data\n"
"(%s)"
msgstr ""

#: diskdrake/interactive.pm:1107
#, fuzzy, c-format
msgid "Moving files to the new partition"
msgstr "Naujiems skirsniams nepakanka laisvos vietos"

#: diskdrake/interactive.pm:1111
#, c-format
msgid "Copying %s"
msgstr ""

#: diskdrake/interactive.pm:1115
#, fuzzy, c-format
msgid "Removing %s"
msgstr "Skiriamoji geba: %s\n"

#: diskdrake/interactive.pm:1129
#, c-format
msgid "partition %s is now known as %s"
msgstr ""

#: diskdrake/interactive.pm:1150 diskdrake/interactive.pm:1210
#, c-format
msgid "Device: "
msgstr "Įrenginys: "

#: diskdrake/interactive.pm:1151
#, c-format
msgid "DOS drive letter: %s (just a guess)\n"
msgstr "DOS kaupiklio raidė: %s (spėjama)\n"

#: diskdrake/interactive.pm:1155 diskdrake/interactive.pm:1163
#: diskdrake/interactive.pm:1229
#, c-format
msgid "Type: "
msgstr "Tipas: "

#: diskdrake/interactive.pm:1159 install_steps_gtk.pm:339
#, c-format
msgid "Name: "
msgstr "Pavadinimas: "

#: diskdrake/interactive.pm:1167
#, c-format
msgid "Start: sector %s\n"
msgstr "Pradžia: sektorius %s\n"

#: diskdrake/interactive.pm:1168
#, c-format
msgid "Size: %s"
msgstr "Dydis: %s"

#: diskdrake/interactive.pm:1170
#, c-format
msgid ", %s sectors"
msgstr ", %s sektoriai(-ių)"

#: diskdrake/interactive.pm:1172
#, fuzzy, c-format
msgid "Cylinder %d to %d\n"
msgstr "Nuo cilindro %d iki cilindro %d\n"

#: diskdrake/interactive.pm:1173
#, c-format
msgid "Number of logical extents: %d"
msgstr ""

#: diskdrake/interactive.pm:1174
#, c-format
msgid "Formatted\n"
msgstr "Sužymėtas\n"

#: diskdrake/interactive.pm:1175
#, c-format
msgid "Not formatted\n"
msgstr "Nesužymėtas\n"

#: diskdrake/interactive.pm:1176
#, c-format
msgid "Mounted\n"
msgstr "Primontuotas\n"

#: diskdrake/interactive.pm:1177
#, c-format
msgid "RAID md%s\n"
msgstr "RAID md%s\n"

#: diskdrake/interactive.pm:1179
#, fuzzy, c-format
msgid ""
"Loopback file(s):\n"
"   %s\n"
msgstr "Loopback byla(os): %s\n"

#: diskdrake/interactive.pm:1180
#, c-format
msgid ""
"Partition booted by default\n"
"    (for MS-DOS boot, not for lilo)\n"
msgstr ""
"Skirsnis, įkraunamas pagal nutylėjimą\n"
"     (MS-DOS užkrovimui, ne LILO)\n"

#: diskdrake/interactive.pm:1182
#, c-format
msgid "Level %s\n"
msgstr "Lygis %s\n"

#: diskdrake/interactive.pm:1183
#, c-format
msgid "Chunk size %s\n"
msgstr "Gabalo dydis %s\n"

#: diskdrake/interactive.pm:1184
#, c-format
msgid "RAID-disks %s\n"
msgstr "RAID kaupikliai %s\n"

#: diskdrake/interactive.pm:1186
#, c-format
msgid "Loopback file name: %s"
msgstr "Loopback bylos vardas: %s"

#: diskdrake/interactive.pm:1189
#, fuzzy, c-format
msgid ""
"\n"
"Chances are, this partition is\n"
"a Driver partition. You should\n"
"probably leave it alone.\n"
msgstr ""
"\n"
"Galimybės tokios, šis skirsnis\n"
"yra Tvarkyklės skirsnis\n"
"gariau palikite jį ramybėje.\n"

#: diskdrake/interactive.pm:1192
#, c-format
msgid ""
"\n"
"This special Bootstrap\n"
"partition is for\n"
"dual-booting your system.\n"
msgstr ""
"\n"
"Šis specialus Bootstrap\n"
"skirsnis yra skirtas jūsų\n"
"sistemos dvigubai įkrovai.\n"

#: diskdrake/interactive.pm:1211
#, c-format
msgid "Read-only"
msgstr ""

#: diskdrake/interactive.pm:1212
#, c-format
msgid "Size: %s\n"
msgstr "Dydis: %s\n"

#: diskdrake/interactive.pm:1213
#, c-format
msgid "Geometry: %s cylinders, %s heads, %s sectors\n"
msgstr "Geometrija: %s cilindrų(-ai), %s galvučių(-os), %s sektorių(-iai)\n"

#: diskdrake/interactive.pm:1214
#, c-format
msgid "Info: "
msgstr "Info: "

#: diskdrake/interactive.pm:1215
#, c-format
msgid "LVM-disks %s\n"
msgstr "LVM kaupikliai %s\n"

#: diskdrake/interactive.pm:1216
#, c-format
msgid "Partition table type: %s\n"
msgstr "Skirsnių lentelės tipas: %s\n"

#: diskdrake/interactive.pm:1217
#, fuzzy, c-format
msgid "on channel %d id %d\n"
msgstr "ant magistralės %d id %d\n"

#: diskdrake/interactive.pm:1250
#, fuzzy, c-format
msgid "Filesystem encryption key"
msgstr "Bylų sistemos tipas: "

#: diskdrake/interactive.pm:1251
#, c-format
msgid "Choose your filesystem encryption key"
msgstr ""

#: diskdrake/interactive.pm:1254
#, fuzzy, c-format
msgid "This encryption key is too simple (must be at least %d characters long)"
msgstr ""
"Šis slaptažodis yra pernelyg paprastas (turi būti bent %d simbolių ilgio)"

#: diskdrake/interactive.pm:1255
#, fuzzy, c-format
msgid "The encryption keys do not match"
msgstr "Slaptažodžiai nesutampa"

#: diskdrake/interactive.pm:1258 network/netconnect.pm:889
#: standalone/drakconnect:370
#, c-format
msgid "Encryption key"
msgstr ""

#: diskdrake/interactive.pm:1259
#, c-format
msgid "Encryption key (again)"
msgstr ""

#: diskdrake/removable.pm:47
#, fuzzy, c-format
msgid "Change type"
msgstr "Pakeisti skirsnio tipą"

#: diskdrake/smbnfs_gtk.pm:163
#, c-format
msgid "Can't login using username %s (bad password?)"
msgstr ""

#: diskdrake/smbnfs_gtk.pm:167 diskdrake/smbnfs_gtk.pm:176
#, fuzzy, c-format
msgid "Domain Authentication Required"
msgstr "Autentikacija"

#: diskdrake/smbnfs_gtk.pm:168
#, fuzzy, c-format
msgid "Which username"
msgstr "Vartotojo vardas"

#: diskdrake/smbnfs_gtk.pm:168
#, fuzzy, c-format
msgid "Another one"
msgstr "Internetas"

#: diskdrake/smbnfs_gtk.pm:177
#, c-format
msgid ""
"Please enter your username, password and domain name to access this host."
msgstr ""

#: diskdrake/smbnfs_gtk.pm:179 standalone/drakbackup:3874
#, fuzzy, c-format
msgid "Username"
msgstr "Vartotojo vardas"

#: diskdrake/smbnfs_gtk.pm:181
#, fuzzy, c-format
msgid "Domain"
msgstr "NIS domenas"

#: diskdrake/smbnfs_gtk.pm:205
#, fuzzy, c-format
msgid "Search servers"
msgstr "DNS serveris"

#: diskdrake/smbnfs_gtk.pm:210
#, fuzzy, c-format
msgid "Search new servers"
msgstr "DNS serveris"

#: do_pkgs.pm:21
#, fuzzy, c-format
msgid "The package %s needs to be installed. Do you want to install it?"
msgstr "Kokius jūs norite įdiegti paketus"

#: do_pkgs.pm:26
#, c-format
msgid "Mandatory package %s is missing"
msgstr ""

#: do_pkgs.pm:136
#, fuzzy, c-format
msgid "Installing packages..."
msgstr "Įdiegiamas paketas %s"

#: do_pkgs.pm:210
#, fuzzy, c-format
msgid "Removing packages..."
msgstr "Skiriamoji geba: %s\n"

#: fs.pm:399
#, c-format
msgid ""
"Do not update inode access times on this file system\n"
"(e.g, for faster access on the news spool to speed up news servers)."
msgstr ""

#: fs.pm:402
#, c-format
msgid ""
"Can only be mounted explicitly (i.e.,\n"
"the -a option will not cause the file system to be mounted)."
msgstr ""

#: fs.pm:405
#, c-format
msgid "Do not interpret character or block special devices on the file system."
msgstr ""

#: fs.pm:407
#, c-format
msgid ""
"Do not allow execution of any binaries on the mounted\n"
"file system. This option might be useful for a server that has file systems\n"
"containing binaries for architectures other than its own."
msgstr ""

#: fs.pm:411
#, c-format
msgid ""
"Do not allow set-user-identifier or set-group-identifier\n"
"bits to take effect. (This seems safe, but is in fact rather unsafe if you\n"
"have suidperl(1) installed.)"
msgstr ""

#: fs.pm:415
#, c-format
msgid "Mount the file system read-only."
msgstr ""

#: fs.pm:417
#, c-format
msgid "All I/O to the file system should be done synchronously."
msgstr ""

#: fs.pm:421
#, c-format
msgid ""
"Allow an ordinary user to mount the file system. The\n"
"name of the mounting user is written to mtab so that he can unmount the "
"file\n"
"system again. This option implies the options noexec, nosuid, and nodev\n"
"(unless overridden by subsequent options, as in the option line\n"
"user,exec,dev,suid )."
msgstr ""

#: fs.pm:429
#, c-format
msgid "Give write access to ordinary users"
msgstr ""

#: fs.pm:565 fs.pm:575 fs.pm:579 fs.pm:583 fs.pm:587 fs.pm:591 swap.pm:12
#, c-format
msgid "%s formatting of %s failed"
msgstr "%s %s sužymėjimas nepavyko"

#: fs.pm:628
#, c-format
msgid "I don't know how to format %s in type %s"
msgstr "Nežinau, kaip sužymėti %s tipu %s"

#: fs.pm:635 fs.pm:642
#, c-format
msgid "Formatting partition %s"
msgstr "Sužymimas skirsnis %s"

#: fs.pm:639
#, c-format
msgid "Creating and formatting file %s"
msgstr "Sukuriama ir sužymima byla %s"

#: fs.pm:705 fs.pm:758
#, fuzzy, c-format
msgid "Mounting partition %s"
msgstr "Sužymimas skirsnis %s"

#: fs.pm:706 fs.pm:759
#, c-format
msgid "mounting partition %s in directory %s failed"
msgstr ""

#: fs.pm:726 fs.pm:734
#, fuzzy, c-format
msgid "Checking %s"
msgstr "Skiriamoji geba: %s\n"

#: fs.pm:775 partition_table.pm:636
#, c-format
msgid "error unmounting %s: %s"
msgstr "klaida numontuojant %s: %s"

#: fs.pm:807
#, fuzzy, c-format
msgid "Enabling swap partition %s"
msgstr "Sužymimas skirsnis %s"

#: fsedit.pm:21
#, c-format
msgid "simple"
msgstr "paprasta"

#: fsedit.pm:25
#, c-format
msgid "with /usr"
msgstr ""

#: fsedit.pm:30
#, c-format
msgid "server"
msgstr "serveris"

#: fsedit.pm:254
#, fuzzy, c-format
msgid ""
"I can't read the partition table of device %s, it's too corrupted for me :(\n"
"I can try to go on, erasing over bad partitions (ALL DATA will be lost!).\n"
"The other solution is to not allow DrakX to modify the partition table.\n"
"(the error is %s)\n"
"\n"
"Do you agree to lose all the partitions?\n"
msgstr ""
"Aš negaliu perskaityti skirsnių lentelės, ji pernelyg sugadinta :(\n"
"Galiu pabandyti išvalyti blogus skirsnius (VISI DUOMENYS bus prarasti!)\n"
"Kitas sprendimas -- neleisti DrakX taisyti skirsnių lentelę.\n"
"(klaida %s)\n"
"\n"
"Ar sutinki prarasti visus skirsnius?\n"

#: fsedit.pm:514
#, c-format
msgid "You can't use JFS for partitions smaller than 16MB"
msgstr "Tu negali naudoti JFS skirsniams, mažesniems nei 16MB"

#: fsedit.pm:515
#, c-format
msgid "You can't use ReiserFS for partitions smaller than 32MB"
msgstr "Tu negali naudoti ReiserFS skirsniams, mažesniems nei 32MB"

#: fsedit.pm:534
#, c-format
msgid "Mount points must begin with a leading /"
msgstr "Montavimo taškai turi prasidėti /"

#: fsedit.pm:535
#, c-format
msgid "Mount points should contain only alphanumerical characters"
msgstr ""

#: fsedit.pm:536
#, c-format
msgid "There is already a partition with mount point %s\n"
msgstr "Jau yra skirsnis su montavimo tašku %s\n"

#: fsedit.pm:538
#, fuzzy, c-format
msgid ""
"You've selected a software RAID partition as root (/).\n"
"No bootloader is able to handle this without a /boot partition.\n"
"Please be sure to add a /boot partition"
msgstr ""
"Tu pasirinkai programinį RAID skirsnį kaip šakninį (/).\n"
"Jokia įkrovos tvarkyklė negali su ja dirbti be /boot skirsnio.\n"
"Taigi, nepamiršk sukurti /boot skirsnio"

#: fsedit.pm:541
#, c-format
msgid "You can't use a LVM Logical Volume for mount point %s"
msgstr ""

#: fsedit.pm:543
#, c-format
msgid ""
"You may not be able to install lilo (since lilo doesn't handle a LV on "
"multiple PVs)"
msgstr ""

#: fsedit.pm:546 fsedit.pm:548
#, c-format
msgid "This directory should remain within the root filesystem"
msgstr "Šis katalogas turi pasilikti šakninėje bylų sistemoje"

#: fsedit.pm:550
#, fuzzy, c-format
msgid ""
"You need a true filesystem (ext2/ext3, reiserfs, xfs, or jfs) for this mount "
"point\n"
msgstr ""
"Tau reikia tikros bylų sistemos (ext2, reiserfs) šiam montavimo taškui\n"

#: fsedit.pm:552
#, fuzzy, c-format
msgid "You can't use an encrypted file system for mount point %s"
msgstr ""
"Tau reikia tikros bylų sistemos (ext2, reiserfs) šiam montavimo taškui\n"

#: fsedit.pm:613
#, fuzzy, c-format
msgid "Not enough free space for auto-allocating"
msgstr "Naujiems skirsniams nepakanka laisvos vietos"

#: fsedit.pm:615
#, c-format
msgid "Nothing to do"
msgstr ""

#: fsedit.pm:711
#, c-format
msgid "Error opening %s for writing: %s"
msgstr "Klaida atidarant %s įrašymui: %s"

#: harddrake/data.pm:53
#, fuzzy, c-format
msgid "Floppy"
msgstr "Išsaugoti į diskelį"

#: harddrake/data.pm:54
#, c-format
msgid "Zip"
msgstr ""

#: harddrake/data.pm:55
#, fuzzy, c-format
msgid "Disk"
msgstr "Danų"

#: harddrake/data.pm:56
#, c-format
msgid "CDROM"
msgstr ""

#: harddrake/data.pm:57
#, c-format
msgid "CD/DVD burners"
msgstr ""

#: harddrake/data.pm:58
#, c-format
msgid "DVD-ROM"
msgstr ""

#: harddrake/data.pm:59 standalone/drakbackup:2409
#, fuzzy, c-format
msgid "Tape"
msgstr "Rūšis"

#: harddrake/data.pm:60
#, fuzzy, c-format
msgid "Videocard"
msgstr "Vaizdo režimas"

#: harddrake/data.pm:61
#, c-format
msgid "Tvcard"
msgstr ""

#: harddrake/data.pm:62
#, fuzzy, c-format
msgid "Other MultiMedia devices"
msgstr "Kitas"

#: harddrake/data.pm:63
#, fuzzy, c-format
msgid "Soundcard"
msgstr "Standartinė"

#: harddrake/data.pm:64
#, c-format
msgid "Webcam"
msgstr ""

#: harddrake/data.pm:68
#, c-format
msgid "Processors"
msgstr ""

#: harddrake/data.pm:69
#, fuzzy, c-format
msgid "ISDN adapters"
msgstr "Vidinė ISDN plokštė"

#: harddrake/data.pm:71
#, fuzzy, c-format
msgid "Ethernetcard"
msgstr "Ethernet Korta"

#: harddrake/data.pm:79 network/netconnect.pm:366 standalone/drakconnect:277
#: standalone/drakconnect:447 standalone/drakconnect:448
#: standalone/drakconnect:540
#, fuzzy, c-format
msgid "Modem"
msgstr "Pelė"

#: harddrake/data.pm:80
#, c-format
msgid "ADSL adapters"
msgstr ""

#: harddrake/data.pm:82
#, c-format
msgid "Bridges and system controllers"
msgstr ""

#: harddrake/data.pm:83 help.pm:203 help.pm:991
#: install_steps_interactive.pm:935 printer/printerdrake.pm:680
#: printer/printerdrake.pm:3970
#, c-format
msgid "Printer"
msgstr "Spausdintuvas"

#: harddrake/data.pm:85 help.pm:991 install_steps_interactive.pm:928
#, c-format
msgid "Mouse"
msgstr "Pelė"

#: harddrake/data.pm:90
#, c-format
msgid "Joystick"
msgstr ""

#: harddrake/data.pm:92
#, c-format
msgid "(E)IDE/ATA controllers"
msgstr ""

#: harddrake/data.pm:93
#, c-format
msgid "Firewire controllers"
msgstr ""

#: harddrake/data.pm:94
#, c-format
msgid "SCSI controllers"
msgstr ""

#: harddrake/data.pm:95
#, c-format
msgid "USB controllers"
msgstr ""

#: harddrake/data.pm:96
#, c-format
msgid "SMBus controllers"
msgstr ""

#: harddrake/data.pm:97
#, fuzzy, c-format
msgid "Scanner"
msgstr "Pasirink vaizdo plokštę"

#: harddrake/data.pm:99 standalone/harddrake2:315
#, fuzzy, c-format
msgid "Unknown/Others"
msgstr "Paprasta"

#: harddrake/data.pm:113
#, c-format
msgid "cpu # "
msgstr ""

#: harddrake/sound.pm:150 standalone/drakconnect:166
#, fuzzy, c-format
msgid "Please Wait... Applying the configuration"
msgstr "Nustatymų tikrinimas"

#: harddrake/sound.pm:182
#, c-format
msgid "No alternative driver"
msgstr ""

#: harddrake/sound.pm:183
#, c-format
msgid ""
"There's no known OSS/ALSA alternative driver for your sound card (%s) which "
"currently uses \"%s\""
msgstr ""

#: harddrake/sound.pm:189
#, fuzzy, c-format
msgid "Sound configuration"
msgstr "LAN Konfiguravimas"

#: harddrake/sound.pm:191
#, c-format
msgid ""
"Here you can select an alternative driver (either OSS or ALSA) for your "
"sound card (%s)."
msgstr ""

#: harddrake/sound.pm:193
#, c-format
msgid ""
"\n"
"\n"
"Your card currently use the %s\"%s\" driver (default driver for your card is "
"\"%s\")"
msgstr ""

#: harddrake/sound.pm:195
#, c-format
msgid ""
"OSS (Open Sound System) was the first sound API. It's an OS independent "
"sound API (it's available on most UNIX(tm) systems) but it's a very basic "
"and limited API.\n"
"What's more, OSS drivers all reinvent the wheel.\n"
"\n"
"ALSA (Advanced Linux Sound Architecture) is a modularized architecture "
"which\n"
"supports quite a large range of ISA, USB and PCI cards.\n"
"\n"
"It also provides a much higher API than OSS.\n"
"\n"
"To use alsa, one can either use:\n"
"- the old compatibility OSS api\n"
"- the new ALSA api that provides many enhanced features but requires using "
"the ALSA library.\n"
msgstr ""

#: harddrake/sound.pm:209 harddrake/sound.pm:289
#, fuzzy, c-format
msgid "Driver:"
msgstr "Tvarkyklė"

#: harddrake/sound.pm:214
#, c-format
msgid "Trouble shooting"
msgstr ""

#: harddrake/sound.pm:222
#, c-format
msgid ""
"The old \"%s\" driver is blacklisted.\n"
"\n"
"It has been reported to oops the kernel on unloading.\n"
"\n"
"The new \"%s\" driver'll only be used on next bootstrap."
msgstr ""

#: harddrake/sound.pm:230
#, c-format
msgid "No open source driver"
msgstr ""

#: harddrake/sound.pm:231
#, c-format
msgid ""
"There's no free driver for your sound card (%s), but there's a proprietary "
"driver at \"%s\"."
msgstr ""

#: harddrake/sound.pm:234
#, c-format
msgid "No known driver"
msgstr ""

#: harddrake/sound.pm:235
#, c-format
msgid "There's no known driver for your sound card (%s)"
msgstr ""

#: harddrake/sound.pm:239
#, c-format
msgid "Unknown driver"
msgstr ""

#: harddrake/sound.pm:240
#, c-format
msgid "Error: The \"%s\" driver for your sound card is unlisted"
msgstr ""

#: harddrake/sound.pm:253
#, c-format
msgid "Sound trouble shooting"
msgstr ""

#: harddrake/sound.pm:254
#, c-format
msgid ""
"The classic bug sound tester is to run the following commands:\n"
"\n"
"\n"
"- \"lspcidrake -v | fgrep AUDIO\" will tell you which driver your card uses\n"
"by default\n"
"\n"
"- \"grep sound-slot /etc/modules.conf\" will tell you what driver it\n"
"currently uses\n"
"\n"
"- \"/sbin/lsmod\" will enable you to check if its module (driver) is\n"
"loaded or not\n"
"\n"
"- \"/sbin/chkconfig --list sound\" and \"/sbin/chkconfig --list alsa\" will\n"
"tell you if sound and alsa services're configured to be run on\n"
"initlevel 3\n"
"\n"
"- \"aumix -q\" will tell you if the sound volume is muted or not\n"
"\n"
"- \"/sbin/fuser -v /dev/dsp\" will tell which program uses the sound card.\n"
msgstr ""

#: harddrake/sound.pm:280
#, c-format
msgid "Let me pick any driver"
msgstr ""

#: harddrake/sound.pm:283
#, c-format
msgid "Choosing an arbitrary driver"
msgstr ""

#: harddrake/sound.pm:284
#, c-format
msgid ""
"If you really think that you know which driver is the right one for your "
"card\n"
"you can pick one in the above list.\n"
"\n"
"The current driver for your \"%s\" sound card is \"%s\" "
msgstr ""

#: harddrake/v4l.pm:14 harddrake/v4l.pm:66
#, fuzzy, c-format
msgid "Auto-detect"
msgstr "Naudokite automatinį aptikimą"

#: harddrake/v4l.pm:67 harddrake/v4l.pm:219
#, fuzzy, c-format
msgid "Unknown|Generic"
msgstr "Paprasta"

#: harddrake/v4l.pm:100
#, c-format
msgid "Unknown|CPH05X (bt878) [many vendors]"
msgstr ""

#: harddrake/v4l.pm:101
#, c-format
msgid "Unknown|CPH06X (bt878) [many vendors]"
msgstr ""

#: harddrake/v4l.pm:245
#, c-format
msgid ""
"For most modern TV cards, the bttv module of the GNU/Linux kernel just auto-"
"detect the rights parameters.\n"
"If your card is misdetected, you can force the right tuner and card types "
"here. Just select your tv card parameters if needed."
msgstr ""

#: harddrake/v4l.pm:248
#, fuzzy, c-format
msgid "Card model:"
msgstr "Plokštės mem (DMA)"

#: harddrake/v4l.pm:249
#, fuzzy, c-format
msgid "Tuner type:"
msgstr "Pakeisti skirsnio tipą"

#: harddrake/v4l.pm:250
#, c-format
msgid "Number of capture buffers:"
msgstr ""

#: harddrake/v4l.pm:250
#, c-format
msgid "number of capture buffers for mmap'ed capture"
msgstr ""

#: harddrake/v4l.pm:252
#, fuzzy, c-format
msgid "PLL setting:"
msgstr "sužymimas"

#: harddrake/v4l.pm:253
#, c-format
msgid "Radio support:"
msgstr ""

#: harddrake/v4l.pm:253
#, c-format
msgid "enable radio support"
msgstr ""

#: help.pm:11
#, c-format
msgid ""
"Before continuing, you should carefully read the terms of the license. It\n"
"covers the entire Mandrake Linux distribution. If you do agree with all the\n"
"terms in it, check the \"%s\" box. If not, clicking on the \"%s\" button\n"
"will reboot your computer."
msgstr ""

#: help.pm:14 install_steps_gtk.pm:596 install_steps_interactive.pm:88
#: install_steps_interactive.pm:697 standalone/drakautoinst:199
#, c-format
msgid "Accept"
msgstr "Sutinku"

#: help.pm:17
#, c-format
msgid ""
"GNU/Linux is a multi-user system, meaning each user may have their own\n"
"preferences, their own files and so on. You can read the ``Starter Guide''\n"
"to learn more about multi-user systems. But unlike \"root\", who is the\n"
"system administrator, the users you add at this point will not be\n"
"authorized to change anything except their own files and their own\n"
"configurations, protecting the system from unintentional or malicious\n"
"changes that impact on the system as a whole. You will have to create at\n"
"least one regular user for yourself -- this is the account which you should\n"
"use for routine, day-to-day use. Although it is very easy to log in as\n"
"\"root\" to do anything and everything, it may also be very dangerous! A\n"
"very simple mistake could mean that your system will not work any more. If\n"
"you make a serious mistake as a regular user, the worst that will happen is\n"
"that you will lose some information, but not affect the entire system.\n"
"\n"
"The first field asks you for a real name. Of course, this is not mandatory\n"
"-- you can actually enter whatever you like. DrakX will use the first word\n"
"you typed in this field and copy it to the \"%s\" field, which is the name\n"
"this user will enter to log onto the system. If you like, you may override\n"
"the default and change the user name. The next step is to enter a password.\n"
"From a security point of view, a non-privileged (regular) user password is\n"
"not as crucial as the \"root\" password, but that is no reason to neglect\n"
"it by making it blank or too simple: after all, your files could be the\n"
"ones at risk.\n"
"\n"
"Once you click on \"%s\", you can add other users. Add a user for each one\n"
"of your friends: your father or your sister, for example. Click \"%s\" when\n"
"you have finished adding users.\n"
"\n"
"Clicking the \"%s\" button allows you to change the default \"shell\" for\n"
"that user (bash by default).\n"
"\n"
"When you have finished adding users, you will be asked to choose a user who\n"
"can automatically log into the system when the computer boots up. If you\n"
"are interested in that feature (and do not care much about local security),\n"
"choose the desired user and window manager, then click \"%s\". If you are\n"
"not interested in this feature, uncheck the \"%s\" box."
msgstr ""

#: help.pm:52 help.pm:197 help.pm:444 help.pm:691 help.pm:784 help.pm:1005
#: install_steps_gtk.pm:275 interactive.pm:403 interactive/newt.pm:308
#: network/netconnect.pm:242 network/tools.pm:208 printer/printerdrake.pm:2922
#: standalone/drakTermServ:392 standalone/drakbackup:4487
#: standalone/drakbackup:4513 standalone/drakbackup:4543
#: standalone/drakbackup:4567 ugtk2.pm:509
#, c-format
msgid "Next"
msgstr "Toliau"

#: help.pm:52 help.pm:418 help.pm:444 help.pm:660 help.pm:733 help.pm:768
#: interactive.pm:371
#, c-format
msgid "Advanced"
msgstr "Išplėstinis"

#: help.pm:55
#, fuzzy, c-format
msgid ""
"Listed here are the existing Linux partitions detected on your hard drive.\n"
"You can keep the choices made by the wizard, since they are good for most\n"
"common installations. If you make any changes, you must at least define a\n"
"root partition (\"/\"). Do not choose too small a partition or you will not\n"
"be able to install enough software. If you want to store your data on a\n"
"separate partition, you will also need to create a \"/home\" partition\n"
"(only possible if you have more than one Linux partition available).\n"
"\n"
"Each partition is listed as follows: \"Name\", \"Capacity\".\n"
"\n"
"\"Name\" is structured: \"hard drive type\", \"hard drive number\",\n"
"\"partition number\" (for example, \"hda1\").\n"
"\n"
"\"Hard drive type\" is \"hd\" if your hard drive is an IDE hard drive and\n"
"\"sd\" if it is a SCSI hard drive.\n"
"\n"
"\"Hard drive number\" is always a letter after \"hd\" or \"sd\". For IDE\n"
"hard drives:\n"
"\n"
" * \"a\" means \"master hard drive on the primary IDE controller\";\n"
"\n"
" * \"b\" means \"slave hard drive on the primary IDE controller\";\n"
"\n"
" * \"c\" means \"master hard drive on the secondary IDE controller\";\n"
"\n"
" * \"d\" means \"slave hard drive on the secondary IDE controller\".\n"
"\n"
"With SCSI hard drives, an \"a\" means \"lowest SCSI ID\", a \"b\" means\n"
"\"second lowest SCSI ID\", etc."
msgstr ""
"Aukščiau yra sąrašas Linux skirsnių, kuriuos pavyko rasti tavo\n"
"kietajame diske. Tu gali pasilikti sprendimus, padarytus meistro, jie tinka\n"
"daugumai atvejų. Jei nori pakeisti šiuos sprendimus, tu turi nurodyti bent\n"
"šakninį skirsnį (\"/\"). Nepasirink per mažo skirsnio, nes tuomet tu "
"negalėsi\n"
"įdiegti pakankamai programinės įrangos. Jei tu nori laikyti savo duomenis\n"
"atskirame skirsnyje, pasirink, kurį naudosi \"/home\" (įmanoma tik jei turi "
"daugiau\n"
"nei vieną Linux skirsnį).\n"
"\n"
"Tavo žiniai, skirsniai rašomi tokiu pavidalu: \"Pavadinimas\", \"Talpa\".\n"
"\n"
"\n"
"\"Pavadinimas\" sudaromas taip: \"kaupiklio tipas\", \"kaupiklio numeris\",\n"
"\"skirsnio numeris\" (pavyzdžiui \"hda1\").\n"
"\n"
"\n"
"\"Kieto disko tipas\" yra \"hd\", jei tavo kietasis kaupiklis yra IDE tipo, "
"ir \"sd\", jeigu\n"
"tai SCSI kaupiklis.\n"
"\n"
"\n"
"\"kaupiklio numeris\" visada yra raidė po \"sd\" arba \"hd\". IDE "
"kaupikliams:\n"
"\n"
"   * \"a\" reiškia \"pagrindinis (master) diskas, prijungtas prie pirmojo "
"(primary) IDE valdiklio\",\n"
"\n"
"   * \"b\" reiškia \"šalutinis (slave) diskas, prijungtas prie pirmojo IDE "
"valdiklio\",\n"
"\n"
"   * \"c\" reiškia \"pagrindinis diskas, prijungtas prie antrojo (secondary) "
"IDE valdiklio\",\n"
"\n"
"   * \"d\" reiškia \"šalutinis diskas, prijungtas prie antrojo IDE valdiklio"
"\",\n"
"\n"
"\n"
"Su SCSI kaupikliais, \"a\" reiškia \"pirmasis diskas\", \"b\" reiškia "
"\"antrasis diskas\" ir t.t."

#: help.pm:86
#, c-format
msgid ""
"The Mandrake Linux installation is distributed on several CD-ROMs. If a\n"
"selected package is located on another CD-ROM, DrakX will eject the current\n"
"CD and ask you to insert the correct CD as required."
msgstr ""

#: help.pm:91
#, c-format
msgid ""
"It is now time to specify which programs you wish to install on your\n"
"system. There are thousands of packages available for Mandrake Linux, and\n"
"to make it simpler to manage the packages have been placed into groups of\n"
"similar applications.\n"
"\n"
"Packages are sorted into groups corresponding to a particular use of your\n"
"machine. Mandrake Linux sorts packages groups in four categories. You can\n"
"mix and match applications from the various categories, so a\n"
"``Workstation'' installation can still have applications from the\n"
"``Development'' category installed.\n"
"\n"
" * \"%s\": if you plan to use your machine as a workstation, select one or\n"
"more of the groups that are in the workstation category.\n"
"\n"
" * \"%s\": if you plan on using your machine for programming, select the\n"
"appropriate groups from that category.\n"
"\n"
" * \"%s\": if your machine is intended to be a server, select which of the\n"
"more common services you wish to install on your machine.\n"
"\n"
" * \"%s\": this is where you will choose your preferred graphical\n"
"environment. At least one must be selected if you want to have a graphical\n"
"interface available.\n"
"\n"
"Moving the mouse cursor over a group name will display a short explanatory\n"
"text about that group. If you unselect all groups when performing a regular\n"
"installation (as opposed to an upgrade), a dialog will pop up proposing\n"
"different options for a minimal installation:\n"
"\n"
" * \"%s\": install the minimum number of packages possible to have a\n"
"working graphical desktop.\n"
"\n"
" * \"%s\": installs the base system plus basic utilities and their\n"
"documentation. This installation is suitable for setting up a server.\n"
"\n"
" * \"%s\": will install the absolute minimum number of packages necessary\n"
"to get a working Linux system. With this installation you will only have a\n"
"command line interface. The total size of this installation is about 65\n"
"megabytes.\n"
"\n"
"You can check the \"%s\" box, which is useful if you are familiar with the\n"
"packages being offered or if you want to have total control over what will\n"
"be installed.\n"
"\n"
"If you started the installation in \"%s\" mode, you can unselect all groups\n"
"to avoid installing any new package. This is useful for repairing or\n"
"updating an existing system."
msgstr ""

#: help.pm:137
#, fuzzy, c-format
msgid "Workstation"
msgstr "KDE darbo stotis"

#: help.pm:137
#, fuzzy, c-format
msgid "Development"
msgstr "Kūrimo, Tinklapių"

#: help.pm:137
#, c-format
msgid "Graphical Environment"
msgstr ""

#: help.pm:137 install_steps_interactive.pm:559
#, fuzzy, c-format
msgid "With X"
msgstr "Palauk"

#: help.pm:137
#, fuzzy, c-format
msgid "With basic documentation"
msgstr "Dokumentacija"

#: help.pm:137
#, fuzzy, c-format
msgid "Truly minimal install"
msgstr "Išmesti"

#: help.pm:137 install_steps_gtk.pm:270 install_steps_interactive.pm:605
#, c-format
msgid "Individual package selection"
msgstr "Atskirų paketų pasirinkimas"

#: help.pm:137 help.pm:602
#, fuzzy, c-format
msgid "Upgrade"
msgstr "Atnaujinimas"

#: help.pm:140
#, c-format
msgid ""
"If you told the installer that you wanted to individually select packages,\n"
"it will present a tree containing all packages classified by groups and\n"
"subgroups. While browsing the tree, you can select entire groups,\n"
"subgroups, or individual packages.\n"
"\n"
"Whenever you select a package on the tree, a description appears on the\n"
"right to let you know the purpose of the package.\n"
"\n"
"!! If a server package has been selected, either because you specifically\n"
"chose the individual package or because it was part of a group of packages,\n"
"you will be asked to confirm that you really want those servers to be\n"
"installed. By default Mandrake Linux will automatically start any installed\n"
"services at boot time. Even if they are safe and have no known issues at\n"
"the time the distribution was shipped, it is entirely possible that that\n"
"security holes were discovered after this version of Mandrake Linux was\n"
"finalized. If you do not know what a particular service is supposed to do\n"
"or why it is being installed, then click \"%s\". Clicking \"%s\" will\n"
"install the listed services and they will be started automatically by\n"
"default during boot. !!\n"
"\n"
"The \"%s\" option is used to disable the warning dialog which appears\n"
"whenever the installer automatically selects a package to resolve a\n"
"dependency issue. Some packages have relationships between each them such\n"
"that installation of one package requires that some other program is also\n"
"required to be installed. The installer can determine which packages are\n"
"required to satisfy a dependency to successfully complete the installation.\n"
"\n"
"The tiny floppy disk icon at the bottom of the list allows you to load a\n"
"package list created during a previous installation. This is useful if you\n"
"have a number of machines that you wish to configure identically. Clicking\n"
"on this icon will ask you to insert a floppy disk previously created at the\n"
"end of another installation. See the second tip of last step on how to\n"
"create such a floppy."
msgstr ""

#: help.pm:172 help.pm:301 help.pm:329 help.pm:457 install_any.pm:422
#: interactive.pm:149 modules/interactive.pm:71 standalone/harddrake2:218
#: ugtk2.pm:1046 wizards.pm:156
#, c-format
msgid "No"
msgstr "Ne"

#: help.pm:172 help.pm:301 help.pm:457 install_any.pm:422 interactive.pm:149
#: modules/interactive.pm:71 standalone/drakgw:280 standalone/drakgw:281
#: standalone/drakgw:289 standalone/drakgw:299 standalone/harddrake2:217
#: ugtk2.pm:1046 wizards.pm:156
#, c-format
msgid "Yes"
msgstr "Taip"

#: help.pm:172
#, c-format
msgid "Automatic dependencies"
msgstr ""

#: help.pm:175
#, c-format
msgid ""
"You will now set up your Internet/network connection. If you wish to\n"
"connect your computer to the Internet or to a local network, click \"%s\".\n"
"Mandrake Linux will attempt to auto-detect network devices and modems. If\n"
"this detection fails, uncheck the \"%s\" box. You may also choose not to\n"
"configure the network, or to do it later, in which case clicking the \"%s\"\n"
"button will take you to the next step.\n"
"\n"
"When configuring your network, the available connections options are:\n"
"Normal modem connection, Winmodem connection, ISDN modem, ADSL connection,\n"
"cable modem, and finally a simple LAN connection (Ethernet).\n"
"\n"
"We will not detail each configuration option - just make sure that you have\n"
"all the parameters, such as IP address, default gateway, DNS servers, etc.\n"
"from your Internet Service Provider or system administrator.\n"
"\n"
"About Winmodem Connection. Winmodems are special integrated low-end modems\n"
"that require additional software to work compared to Normal modems. Some of\n"
"those modems actually work under Mandrake Linux, some others do not. You\n"
"can consult the list of supported modems at LinModems.\n"
"\n"
"You can consult the ``Starter Guide'' chapter about Internet connections\n"
"for details about the configuration, or simply wait until your system is\n"
"installed and use the program described there to configure your connection."
msgstr ""

#: help.pm:197
#, c-format
msgid "Use auto detection"
msgstr "Naudokite automatinį aptikimą"

#: help.pm:200
#, c-format
msgid ""
"\"%s\": clicking on the \"%s\" button will open the printer configuration\n"
"wizard. Consult the corresponding chapter of the ``Starter Guide'' for more\n"
"information on how to setup a new printer. The interface presented there is\n"
"similar to the one used during installation."
msgstr ""

#: help.pm:203 help.pm:581 help.pm:991 install_steps_gtk.pm:646
#: standalone/drakbackup:2688 standalone/drakbackup:2696
#: standalone/drakbackup:2704 standalone/drakbackup:2712
#, fuzzy, c-format
msgid "Configure"
msgstr "Nustatyti X"

#: help.pm:206
#, fuzzy, c-format
msgid ""
"This dialog is used to choose which services you wish to start at boot\n"
"time.\n"
"\n"
"DrakX will list all the services available on the current installation.\n"
"Review each one carefully and uncheck those which are not needed at boot\n"
"time.\n"
"\n"
"A short explanatory text will be displayed about a service when it is\n"
"selected. However, if you are not sure whether a service is useful or not,\n"
"it is safer to leave the default behavior.\n"
"\n"
"!! At this stage, be very careful if you intend to use your machine as a\n"
"server: you will probably not want to start any services that you do not\n"
"need. Please remember that several services can be dangerous if they are\n"
"enabled on a server. In general, select only the services you really need.\n"
"!!"
msgstr ""
"Dabar tu gali pasirinkti tarnybas, kurias nori paleisti įkrovos metu.\n"
"\n"
"\n"
"Užvedus žymeklį ant tarnybos, pasirodys pagalbos užrašas, kuris aprašo "
"tarnybos\n"
"vaidmenį tavo sistemoje.\n"
"\n"
"\n"
"Būk ypač atidus šiame žingsnyje, jeigu žadi naudotis savo kompiuteriu kaip\n"
"serveriu: tu tikriausiai norėsi nepaleisti jokių nereikalingų tarnybų.\n"
"Prisimink, kad kai kurios tarnybos gali būti pavojingos, jei naudojamos "
"serveryje.\n"
"Apskritai, pažymėk tik tas tarnybas, kurių tau tikrai reikia."

#: help.pm:224
#, c-format
msgid ""
"GNU/Linux manages time in GMT (Greenwich Mean Time) and translates it to\n"
"local time according to the time zone you selected. If the clock on your\n"
"motherboard is set to local time, you may deactivate this by unselecting\n"
"\"%s\", which will let GNU/Linux know that the system clock and the\n"
"hardware clock are in the same time zone. This is useful when the machine\n"
"also hosts another operating system like Windows.\n"
"\n"
"The \"%s\" option will automatically regulate the clock by connecting to a\n"
"remote time server on the Internet. For this feature to work, you must have\n"
"a working Internet connection. It is best to choose a time server located\n"
"near you. This option actually installs a time server that can be used by\n"
"other machines on your local network as well."
msgstr ""

#: help.pm:235 install_steps_interactive.pm:834
#, fuzzy, c-format
msgid "Hardware clock set to GMT"
msgstr "Ar tavo įrangos laikrodis nustatytas GMT?"

#: help.pm:235
#, fuzzy, c-format
msgid "Automatic time synchronization"
msgstr "Įdiegimo Tipo Konfiguracija"

#: help.pm:238
#, c-format
msgid ""
"Graphic Card\n"
"\n"
"   The installer will normally automatically detect and configure the\n"
"graphic card installed on your machine. If it is not the case, you can\n"
"choose from this list the card you actually have installed.\n"
"\n"
"   In the situation where different servers are available for your card,\n"
"with or without 3D acceleration, you are asked to choose the server that\n"
"best suits your needs."
msgstr ""

#: help.pm:249
#, c-format
msgid ""
"X (for X Window System) is the heart of the GNU/Linux graphical interface\n"
"on which all the graphical environments (KDE, GNOME, AfterStep,\n"
"WindowMaker, etc.) bundled with Mandrake Linux rely upon.\n"
"\n"
"You will be presented with a list of different parameters to change to get\n"
"an optimal graphical display: Graphic Card\n"
"\n"
"   The installer will normally automatically detect and configure the\n"
"graphic card installed on your machine. If it is not the case, you can\n"
"choose from this list the card you actually have installed.\n"
"\n"
"   In the situation where different servers are available for your card,\n"
"with or without 3D acceleration, you are asked to choose the server that\n"
"best suits your needs.\n"
"\n"
"\n"
"\n"
"Monitor\n"
"\n"
"   The installer will normally automatically detect and configure the\n"
"monitor connected to your machine. If it is incorrect, you can choose from\n"
"this list the monitor you actually have connected to your computer.\n"
"\n"
"\n"
"\n"
"Resolution\n"
"\n"
"   Here you can choose the resolutions and color depths available for your\n"
"hardware. Choose the one that best suits your needs (you will be able to\n"
"change that after installation though). A sample of the chosen\n"
"configuration is shown in the monitor picture.\n"
"\n"
"\n"
"\n"
"Test\n"
"\n"
"   Depending on your hardware, this entry might not appear.\n"
"\n"
"   the system will try to open a graphical screen at the desired\n"
"resolution. If you can see the message during the test and answer \"%s\",\n"
"then DrakX will proceed to the next step. If you cannot see the message, it\n"
"means that some part of the auto-detected configuration was incorrect and\n"
"the test will automatically end after 12 seconds, bringing you back to the\n"
"menu. Change settings until you get a correct graphical display.\n"
"\n"
"\n"
"\n"
"Options\n"
"\n"
"   Here you can choose whether you want to have your machine automatically\n"
"switch to a graphical interface at boot. Obviously, you want to check\n"
"\"%s\" if your machine is to act as a server, or if you were not successful\n"
"in getting the display configured."
msgstr ""

#: help.pm:304
#, c-format
msgid ""
"Monitor\n"
"\n"
"   The installer will normally automatically detect and configure the\n"
"monitor connected to your machine. If it is incorrect, you can choose from\n"
"this list the monitor you actually have connected to your computer."
msgstr ""

#: help.pm:311
#, c-format
msgid ""
"Resolution\n"
"\n"
"   Here you can choose the resolutions and color depths available for your\n"
"hardware. Choose the one that best suits your needs (you will be able to\n"
"change that after installation though). A sample of the chosen\n"
"configuration is shown in the monitor picture."
msgstr ""

#: help.pm:319
#, c-format
msgid ""
"In the situation where different servers are available for your card, with\n"
"or without 3D acceleration, you are asked to choose the server that best\n"
"suits your needs."
msgstr ""

#: help.pm:324
#, c-format
msgid ""
"Options\n"
"\n"
"   Here you can choose whether you want to have your machine automatically\n"
"switch to a graphical interface at boot. Obviously, you want to check\n"
"\"%s\" if your machine is to act as a server, or if you were not successful\n"
"in getting the display configured."
msgstr ""

#: help.pm:332
#, fuzzy, c-format
msgid ""
"At this point, you need to decide where you want to install the Mandrake\n"
"Linux operating system on your hard drive. If your hard drive is empty or\n"
"if an existing operating system is using all the available space you will\n"
"have to partition the drive. Basically, partitioning a hard drive consists\n"
"of logically dividing it to create the space needed to install your new\n"
"Mandrake Linux system.\n"
"\n"
"Because the process of partitioning a hard drive is usually irreversible\n"
"and can lead to lost data if there is an existing operating system already\n"
"installed on the drive, partitioning can be intimidating and stressful if\n"
"you are an inexperienced user. Fortunately, DrakX includes a wizard which\n"
"simplifies this process. Before continuing with this step, read through the\n"
"rest of this section and above all, take your time.\n"
"\n"
"Depending on your hard drive configuration, several options are available:\n"
"\n"
" * \"%s\": this option will perform an automatic partitioning of your blank\n"
"drive(s). If you use this option there will be no further prompts.\n"
"\n"
" * \"%s\": the wizard has detected one or more existing Linux partitions on\n"
"your hard drive. If you want to use them, choose this option. You will then\n"
"be asked to choose the mount points associated with each of the partitions.\n"
"The legacy mount points are selected by default, and for the most part it's\n"
"a good idea to keep them.\n"
"\n"
" * \"%s\": if Microsoft Windows is installed on your hard drive and takes\n"
"all the space available on it, you will have to create free space for\n"
"GNU/Linux. To do so, you can delete your Microsoft Windows partition and\n"
"data (see ``Erase entire disk'' solution) or resize your Microsoft Windows\n"
"FAT or NTFS partition. Resizing can be performed without the loss of any\n"
"data, provided you have previously defragmented the Windows partition.\n"
"Backing up your data is strongly recommended.. Using this option is\n"
"recommended if you want to use both Mandrake Linux and Microsoft Windows on\n"
"the same computer.\n"
"\n"
"   Before choosing this option, please understand that after this\n"
"procedure, the size of your Microsoft Windows partition will be smaller\n"
"then when you started. You will have less free space under Microsoft\n"
"Windows to store your data or to install new software.\n"
"\n"
" * \"%s\": if you want to delete all data and all partitions present on\n"
"your hard drive and replace them with your new Mandrake Linux system,\n"
"choose this option. Be careful, because you will not be able to undo your\n"
"choice after you confirm.\n"
"\n"
"   !! If you choose this option, all data on your disk will be deleted. !!\n"
"\n"
" * \"%s\": this will simply erase everything on the drive and begin fresh,\n"
"partitioning everything from scratch. All data on your disk will be lost.\n"
"\n"
"   !! If you choose this option, all data on your disk will be lost. !!\n"
"\n"
" * \"%s\": choose this option if you want to manually partition your hard\n"
"drive. Be careful -- it is a powerful but dangerous choice and you can very\n"
"easily lose all your data. That's why this option is really only\n"
"recommended if you have done something like this before and have some\n"
"experience. For more instructions on how to use the DiskDrake utility,\n"
"refer to the ``Managing Your Partitions'' section in the ``Starter Guide''."
msgstr ""
"Dabar tu turi nuspręsti, kurioje savo kietojo disko vietoje nori įdiegti\n"
"Mandrake Linux operacijų sistemą. Jei jis yra tuščias arba jau esanti\n"
"operacijų sistema naudoja visą vietą jame, tau reikės sudalinti jį. Kietojo\n"
"disko sudalinimas į skirsnius tiesiog yra jo logiškas padalinimas taip, kad\n"
"atsirastų laisvos vietos įdiegti tavo naujajai Mandrake Linux sistemai.\n"
"\n"
"\n"
"Kadangi sudalinimo skirsniais padariniai dažniausiai yra negrįžtami,\n"
"dalinimas gali būti gąsdinantis ir sunkus, jei tu esi nepatyręs vartotojas.\n"
"Šis meistras supaprastina tą procesą. Prieš pradėdamas, prašau, nepagailėk\n"
"laiko ir paskaityk žinyną.\n"
"\n"
"\n"
"Tau reikia mažiausiai dviejų skirsnių. Vienas yra pačiai operacijų "
"sistemai,\n"
"o kitas -- virtualiai atminčiai (vadinamai swap).\n"
"\n"
"\n"
"Jei skirsniai jau buvo apibrėžti (iš praeito įdiegimo arba kitu dalinimo "
"įrankiu),\n"
"tau tereikia pasirinkti juos, kad įdiegtum savo Linux'ą.\n"
"\n"
"\n"
"Jei skirsniai dar nebuvo apibrėžti, tu turi juos sukurti. Kad tai "
"padarytum,\n"
"naudokis aukščiau esančiu meistru. Priklausomai nuo tavo kietojo disko\n"
"situacijos, yra keli skirtingi sprendimai:\n"
"\n"
"* Naudoti esamą skirsnį: meistras rado vieną ar daugiau Linux skirsnių tavo "
"sistemoje. Jei tu nori juos\n"
"  naudoti, pasirink tai.\n"
"\n"
"\n"
"* Išvalyti visą diską: jei tu nori sunaikinti visus duomenis ir skirsnius, "
"esančius kietajame diske, ir pakeisti juos\n"
"  nauja Mandrake Linux sistema, gali pasirinkti šį variantą. Būk atsargus su "
"šiuo sprendimu, nes jei sutiksi,\n"
"  nebegalėsi apsigalvoti ir sugrįžti.\n"
"\n"
"\n"
"* Naudoti tuščią vietą Windows skirsnyje: jei Microsoft Windows yra įdiegti "
"į kietąjį diską ir užima visą vietą,\n"
"  esančią jame, tau teks atlaisvinti vietos Linux duomenims. Kad tai "
"padarytum, tu gali ištrinti Windows skirsnį\n"
"  ir duomenis (žiūrėk \"Išvalyti visą diską\" bei \"Eksperto režimas\" "
"sprendimus) arba pakeisti Windows skirsnio\n"
"  dydį. Dydžio pakeitimas gali būti atliktas be duomenų praradimo. Šis "
"sprendimas yra rekomenduojamas, jei\n"
"  tu nori naudoti tiek Mandrake Linux, tiek Microsoft Windows tame pačiame "
"kompiuteryje.\n"
"\n"
"\n"
"  Prieš pasirinkdamas šį sprendimą, suprask, kad Microsoft Windows skirsnio "
"dydis bus mažesnis, nei yra\n"
"  dabar. Tai reiškia, kad tu turėsi mažiau laisvos vietos Windows'uose "
"įrašyti duomenims bei įdiegti naujas\n"
"  programas.\n"
"\n"
"\n"
"* Eksperto režimas: jei tu nori rankomis sudalinti skirsniais savo kietąjį "
"diską, gali rinktis šį variantą. Įdėmiai\n"
"  pagalvok, prieš pasirinkdamas šį sprendimą. Jis yra galingas, tačiau labai "
"pavojingas. Tu gali prarasti \n"
"  visus savo duomenis labai lengvai. Taigi, nesirink šio sprendimo, nebent "
"tikrai žinai, ką darai."

#: help.pm:389 install_interactive.pm:95
#, c-format
msgid "Use free space"
msgstr "Naudoti laisvą vietą"

#: help.pm:389
#, fuzzy, c-format
msgid "Use existing partition"
msgstr "Naudoti esamą skirsnį"

#: help.pm:389 install_interactive.pm:137
#, c-format
msgid "Use the free space on the Windows partition"
msgstr "Naudoti laisvą vietą Windows skirsnyje"

#: help.pm:389 install_interactive.pm:211
#, c-format
msgid "Erase entire disk"
msgstr "Ištrinti visą diską"

#: help.pm:389
#, fuzzy, c-format
msgid "Remove Windows"
msgstr "Išmesti Windows(TM)"

#: help.pm:389 install_interactive.pm:226
#, c-format
msgid "Custom disk partitioning"
msgstr "Rankinis diskų skirstymas"

#: help.pm:392
#, c-format
msgid ""
"There you are. Installation is now complete and your GNU/Linux system is\n"
"ready to use. Just click \"%s\" to reboot the system. Don't forget to\n"
"remove the installation media (CD-ROM or floppy). The first thing you\n"
"should see after your computer has finished doing its hardware tests is the\n"
"bootloader menu, giving you the choice of which operating system to start.\n"
"\n"
"The \"%s\" button shows two more buttons to:\n"
"\n"
" * \"%s\": to create an installation floppy disk that will automatically\n"
"perform a whole installation without the help of an operator, similar to\n"
"the installation you just configured.\n"
"\n"
"   Note that two different options are available after clicking the button:\n"
"\n"
"    * \"%s\". This is a partially automated installation. The partitioning\n"
"step is the only interactive procedure.\n"
"\n"
"    * \"%s\". Fully automated installation: the hard disk is completely\n"
"rewritten, all data is lost.\n"
"\n"
"   This feature is very handy when installing a number of similar machines.\n"
"See the Auto install section on our web site for more information.\n"
"\n"
" * \"%s\": saves a list of the packages selected in this installation. To\n"
"use this selection with another installation, insert the floppy and start\n"
"the installation. At the prompt, press the [F1] key and type >>linux\n"
"defcfg=\"floppy\" <<."
msgstr ""

#: help.pm:418
#, fuzzy, c-format
msgid "Generate auto-install floppy"
msgstr "Sukurti automatinio įdiegimo diskelį"

#: help.pm:418 install_steps_interactive.pm:1320
#, c-format
msgid "Replay"
msgstr "Parodyti vėl"

#: help.pm:418 install_steps_interactive.pm:1320
#, c-format
msgid "Automated"
msgstr "Automatinis"

#: help.pm:418 install_steps_interactive.pm:1323
#, c-format
msgid "Save packages selection"
msgstr "Išsaugoti paketų pasirinkimą"

#: help.pm:421
#, fuzzy, c-format
msgid ""
"Any partitions that have been newly defined must be formatted for use\n"
"(formatting means creating a file system).\n"
"\n"
"At this time, you may wish to reformat some already existing partitions to\n"
"erase any data they contain. If you wish to do that, please select those\n"
"partitions as well.\n"
"\n"
"Please note that it is not necessary to reformat all pre-existing\n"
"partitions. You must reformat the partitions containing the operating\n"
"system (such as \"/\", \"/usr\" or \"/var\") but you do not have to\n"
"reformat partitions containing data that you wish to keep (typically\n"
"\"/home\").\n"
"\n"
"Please be careful when selecting partitions. After formatting, all data on\n"
"the selected partitions will be deleted and you will not be able to recover\n"
"it.\n"
"\n"
"Click on \"%s\" when you are ready to format the partitions.\n"
"\n"
"Click on \"%s\" if you want to choose another partition for your new\n"
"Mandrake Linux operating system installation.\n"
"\n"
"Click on \"%s\" if you wish to select partitions that will be checked for\n"
"bad blocks on the disk."
msgstr ""
"Bet kokie naujai sukurti skirsniai turi būti sužymėti, kad juos\n"
"būtų galima naudoti (sužymėjimas reiškia bylų sistemos sukūrimą).\n"
"\n"
"\n"
"Dabar tu gali norėti iš naujo sužymėti kai kuriuos esamus skirsnius, kad\n"
"ištrintum duomenis iš jų. Jei nori tai padaryti, pažymėk ir tuos skirsnius,\n"
"kuriuos nori sužymėti.\n"
"\n"
"\n"
"Pastaba: nebūtina iš naujo sužymėti visų anksčiau sukurtų skirsnių.\n"
"Tu privalai sužymėti iš naujo skirsnius, kuriuose bus operacijų sistema\n"
"(tokius kaip \"/\", \"/usr\" ar \"/var\"), tačiau skirsnių su duomenimis, "
"kuriuos\n"
"nori išlaikyti, sužymėti nereikia (dažniausiai \"/home\").\n"
"\n"
"\n"
"Būk atsargus, pasirinkdamas skirsnius, kadangi sužymint visi duomenys\n"
"bus ištrinti, ir nebebus įmanoma jų atstatyti.\n"
"\n"
"\n"
"Spausk \"Gerai\", kai būsi pasiruošęs skirsnių sužymėjimui.\n"
"\n"
"\n"
"Spausk \"Atšaukti\", jei nori pasirinkti kitus skirsnius, į kuriuos įdiegti\n"
"Mandrake Linux sistemą."

#: help.pm:444 help.pm:1005 install_steps_gtk.pm:431 interactive.pm:404
#: interactive/newt.pm:307 printer/printerdrake.pm:2920
#: standalone/drakTermServ:371 standalone/drakbackup:4288
#: standalone/drakbackup:4316 standalone/drakbackup:4374
#: standalone/drakbackup:4400 standalone/drakbackup:4426
#: standalone/drakbackup:4483 standalone/drakbackup:4509
#: standalone/drakbackup:4539 standalone/drakbackup:4563 ugtk2.pm:507
#, c-format
msgid "Previous"
msgstr "Ankstesnis"

#: help.pm:447
#, c-format
msgid ""
"At the time you are installing Mandrake Linux, it is likely that some\n"
"packages will have been updated since the initial release. Bugs may have\n"
"been fixed, security issues resolved. To allow you to benefit from these\n"
"updates, you are now able to download them from the Internet. Check \"%s\"\n"
"if you have a working Internet connection, or \"%s\" if you prefer to\n"
"install updated packages later.\n"
"\n"
"Choosing \"%s\" will display a list of places from which updates can be\n"
"retrieved. You should choose one near to you. A package-selection tree will\n"
"appear: review the selection, and press \"%s\" to retrieve and install the\n"
"selected package(s), or \"%s\" to abort."
msgstr ""

#: help.pm:457 help.pm:602 install_steps_gtk.pm:430
#: install_steps_interactive.pm:148 standalone/drakbackup:4602
#, c-format
msgid "Install"
msgstr "Įdiegti"

#: help.pm:460
#, c-format
msgid ""
"At this point, DrakX will allow you to choose the security level desired\n"
"for the machine. As a rule of thumb, the security level should be set\n"
"higher if the machine will contain crucial data, or if it will be a machine\n"
"directly exposed to the Internet. The trade-off of a higher security level\n"
"is generally obtained at the expense of ease of use.\n"
"\n"
"If you do not know what to choose, stay with the default option. You will\n"
"be able to change that security level later with tool draksec from the\n"
"Mandrake Control Center.\n"
"\n"
"The \"%s\" field can inform the system of the user on this computer who\n"
"will be responsible for security. Security messages will be sent to that\n"
"address."
msgstr ""

#: help.pm:472
#, fuzzy, c-format
msgid "Security Administrator"
msgstr "Nutolusio lpd spausdintuvo nuostatos"

#: help.pm:475
#, fuzzy, c-format
msgid ""
"At this point, you need to choose which partition(s) will be used for the\n"
"installation of your Mandrake Linux system. If partitions have already been\n"
"defined, either from a previous installation of GNU/Linux or by another\n"
"partitioning tool, you can use existing partitions. Otherwise, hard drive\n"
"partitions must be defined.\n"
"\n"
"To create partitions, you must first select a hard drive. You can select\n"
"the disk for partitioning by clicking on ``hda'' for the first IDE drive,\n"
"``hdb'' for the second, ``sda'' for the first SCSI drive and so on.\n"
"\n"
"To partition the selected hard drive, you can use these options:\n"
"\n"
" * \"%s\": this option deletes all partitions on the selected hard drive\n"
"\n"
" * \"%s\": this option enables you to automatically create ext3 and swap\n"
"partitions in the free space of your hard drive\n"
"\n"
"\"%s\": gives access to additional features:\n"
"\n"
" * \"%s\": saves the partition table to a floppy. Useful for later\n"
"partition-table recovery if necessary. It is strongly recommended that you\n"
"perform this step.\n"
"\n"
" * \"%s\": allows you to restore a previously saved partition table from a\n"
"floppy disk.\n"
"\n"
" * \"%s\": if your partition table is damaged, you can try to recover it\n"
"using this option. Please be careful and remember that it doesn't always\n"
"work.\n"
"\n"
" * \"%s\": discards all changes and reloads the partition table that was\n"
"originally on the hard drive.\n"
"\n"
" * \"%s\": un-checking this option will force users to manually mount and\n"
"unmount removable media such as floppies and CD-ROMs.\n"
"\n"
" * \"%s\": use this option if you wish to use a wizard to partition your\n"
"hard drive. This is recommended if you do not have a good understanding of\n"
"partitioning.\n"
"\n"
" * \"%s\": use this option to cancel your changes.\n"
"\n"
" * \"%s\": allows additional actions on partitions (type, options, format)\n"
"and gives more information about the hard drive.\n"
"\n"
" * \"%s\": when you are finished partitioning your hard drive, this will\n"
"save your changes back to disk.\n"
"\n"
"When defining the size of a partition, you can finely set the partition\n"
"size by using the Arrow keys of your keyboard.\n"
"\n"
"Note: you can reach any option using the keyboard. Navigate through the\n"
"partitions using [Tab] and the [Up/Down] arrows.\n"
"\n"
"When a partition is selected, you can use:\n"
"\n"
" * Ctrl-c to create a new partition (when an empty partition is selected)\n"
"\n"
" * Ctrl-d to delete a partition\n"
"\n"
" * Ctrl-m to set the mount point\n"
"\n"
"To get information about the different file system types available, please\n"
"read the ext2FS chapter from the ``Reference Manual''.\n"
"\n"
"If you are installing on a PPC machine, you will want to create a small HFS\n"
"``bootstrap'' partition of at least 1MB which will be used by the yaboot\n"
"bootloader. If you opt to make the partition a bit larger, say 50MB, you\n"
"may find it a useful place to store a spare kernel and ramdisk images for\n"
"emergency boot situations."
msgstr ""
"Dabar tu turi pasirinkti, kuriuos skirsnius naudoti tavo naujai Mandrake "
"Linux \n"
"sistemai įdiegti. Jei skirsniai jau buvo apibrėžti (iš praeito įdiegimo arba "
"kitu dalinimo įrankiu),\n"
"tu gali naudoti esančius skirsnius. Kitu atveju, skirsniai turi būti "
"apibrėžti.\n"
"\n"
"\n"
"Kad sukurtum skirsnius, tu pirmiausia turi pasirinkti kietąjį diską. Diską "
"dalinimui\n"
"gali pasirinkti, paspaudęs ant \"hda\" jei nori pirmo IDE kaupiklio, \"hdb\" "
"-- antro,\n"
"arba \"sda\", jei renkiesi pirmąjį SCSI kaupiklį ir t.t.\n"
"\n"
"\n"
"Kad sudalintum skirsniais pasirinktą kietąjį diską, gali naudotis vienu iš "
"šių variantų:\n"
"\n"
"   * Išvalyti viską: šis variantas ištrina visus skirsnius, esančius "
"pasirinktame kietajame diske.\n"
"\n"
"\n"
"    * Automatiškai paskirti: šis variantas leidžia automatiškai sukurti Ext2 "
"bei swap skirsnius laisvoje tavo\n"
"     disko vietoje.\n"
"\n"
"\n"
"   * Išgelbėti skirsnių lentelę: jei disko skirsnių lentelė yra sugadinta, "
"tu gali bandyti atstatyti ją su šiuo variantu.\n"
"     Būk atsargus ir prisimink, kad tai gali nepavykti.\n"
"\n"
"\n"
"   * Atšaukti: tu gali naudoti šį variantą, kad atšauktum visus tavo "
"pakeitimus.\n"
"\n"
"\n"
"   * Iš naujo: tu gali rinktis šį variantą, kad atsisakytum visų savo "
"pakeitimų ir įkeltum pradinę skirsnių lentelę.\n"
"\n"
"\n"
"   * Meistras: jei tu nori, kad meistras tau padėtų sudalinti kietąjį diską, "
"rinkis šį variantą. Tai rekomenduojama, jeigu\n"
"     tu nelabai išmanai apie skirsnių dalinimą.\n"
"\n"
"\n"
"   * Atkurti iš diskelio: jei tu išsaugojai savo skirsnių lentelę į diskelį "
"įdiegdamas praeitą kartą, tu gali atkurti ją\n"
"     naudodamasis šiuo variantu.\n"
"\n"
"\n"
"   * Išsaugoti į diskelį: jei tu nori išsaugoti savo skirsnių lentelę į "
"diskelį, kad galėtum paskui atkurti ją, rinkis šį\n"
"     variantą. labai rekomenduojama, kad tu tai padarytum.\n"
"\n"
"\n"
"   * Atlikta: jei tu baigei dalinti savo kietąjį diską, rinkis šį variantą, "
"kad išsaugotum visus pakeitimus.\n"
"\n"
"\n"
"Tavo žiniai, tu gali pasiekti bet kurį variantą naudodamasis klaviatūra: "
"vaikščiok tarp skirsnių su Tab bei\n"
"Aukštyn/Žemyn rodyklėmis.\n"
"\n"
"\n"
"Kai skirsnis yra parinktas, gali naudoti:\n"
"\n"
"* Ctrl-c kad sukurtum naują skirsnį (jei parinktas tuščias skirsnis)\n"
"\n"
"* Ctrl-d kad ištrintum skirsnį.\n"
"\n"
"* Ctrl-m kad nurodytum prijungimą tašką."

#: help.pm:544
#, fuzzy, c-format
msgid "Removable media auto-mounting"
msgstr "Išimamų laikmenų automatinis montavimas"

#: help.pm:544
#, fuzzy, c-format
msgid "Toggle between normal/expert mode"
msgstr "Pakeisti į normalų režimą"

#: help.pm:547
#, fuzzy, c-format
msgid ""
"More than one Microsoft partition has been detected on your hard drive.\n"
"Please choose the one which you want to resize in order to install your new\n"
"Mandrake Linux operating system.\n"
"\n"
"Each partition is listed as follows: \"Linux name\", \"Windows name\"\n"
"\"Capacity\".\n"
"\n"
"\"Linux name\" is structured: \"hard drive type\", \"hard drive number\",\n"
"\"partition number\" (for example, \"hda1\").\n"
"\n"
"\"Hard drive type\" is \"hd\" if your hard dive is an IDE hard drive and\n"
"\"sd\" if it is a SCSI hard drive.\n"
"\n"
"\"Hard drive number\" is always a letter after \"hd\" or \"sd\". With IDE\n"
"hard drives:\n"
"\n"
" * \"a\" means \"master hard drive on the primary IDE controller\";\n"
"\n"
" * \"b\" means \"slave hard drive on the primary IDE controller\";\n"
"\n"
" * \"c\" means \"master hard drive on the secondary IDE controller\";\n"
"\n"
" * \"d\" means \"slave hard drive on the secondary IDE controller\".\n"
"\n"
"With SCSI hard drives, an \"a\" means \"lowest SCSI ID\", a \"b\" means\n"
"\"second lowest SCSI ID\", etc.\n"
"\n"
"\"Windows name\" is the letter of your hard drive under Windows (the first\n"
"disk or partition is called \"C:\")."
msgstr ""
"Tavo kietajame diske buvo aptiktas vienas ar daugiau Microsoft Windows\n"
"skirsnis. Prašom pasirinkti, kurio iš jų dydį nori pakeisti, kad įdiegtum "
"savo\n"
"naująją Mandrake Linux operacijų sistemą.\n"
"\n"
"\n"
"Tavo žiniai, kiekvienas skirsnis sąraše užrašomas pavidalu \"Linux "
"pavadinimas\",\n"
"\"Windows pavadinimas\" \"Talpa\".\n"
"\n"
"\"Linux pavadinimas\" sudaromas taip: \"kaupiklio tipas\", \"kaupiklio "
"numeris\",\n"
"\"skirsnio numeris\" (pavyzdžiui \"hda1\").\n"
"\n"
"\"Kieto disko tipas\" yra \"hd\", jei tavo kietasis kaupiklis yra IDE tipo, "
"ir \"sd\", jeigu\n"
"tai SCSI kaupiklis.\n"
"\n"
"\n"
"\"Kaupiklio numeris\" visada yra raidė po \"sd\" arba \"hd\". IDE "
"kaupikliams:\n"
"\n"
"   * \"a\" reiškia \"pagrindinis (master) diskas, prijungtas prie pirmojo "
"(primary) IDE valdiklio\",\n"
"\n"
"   * \"b\" reiškia \"šalutinis (slave) diskas, prijungtas prie pirmojo IDE "
"valdiklio\",\n"
"\n"
"   * \"c\" reiškia \"pagrindinis diskas, prijungtas prie antrojo (secondary) "
"IDE valdiklio\",\n"
"\n"
"   * \"d\" reiškia \"šalutinis diskas, prijungtas prie antrojo IDE valdiklio"
"\",\n"
"\n"
"\n"
"Su SCSI kaupikliais, \"a\" reiškia \"pirmasis diskas\", \"b\" reiškia "
"\"antrasis diskas\" ir t.t.\n"
"\n"
"\n"
"\"Windows pavadinimas\" yra raidė, kuria tas skirsnis buvo vadinamas "
"Windows'uose\n"
"(pirmasis disko skirsnis vadinamas \"C:\")"

#: help.pm:578
#, c-format
msgid ""
"\"%s\": check the current country selection. If you are not in this\n"
"country, click on the \"%s\" button and choose another one. If your country\n"
"is not in the first list shown, click the \"%s\" button to get the complete\n"
"country list."
msgstr ""

#: help.pm:584
#, c-format
msgid ""
"This step is activated only if an existing GNU/Linux partition has been\n"
"found on your machine.\n"
"\n"
"DrakX now needs to know if you want to perform a new install or an upgrade\n"
"of an existing Mandrake Linux system:\n"
"\n"
" * \"%s\": For the most part, this completely wipes out the old system. If\n"
"you wish to change how your hard drives are partitioned, or change the file\n"
"system, you should use this option. However, depending on your partitioning\n"
"scheme, you can prevent some of your existing data from being over-written.\n"
"\n"
" * \"%s\": this installation class allows you to update the packages\n"
"currently installed on your Mandrake Linux system. Your current\n"
"partitioning scheme and user data is not altered. Most of other\n"
"configuration steps remain available, similar to a standard installation.\n"
"\n"
"Using the ``Upgrade'' option should work fine on Mandrake Linux systems\n"
"running version \"8.1\" or later. Performing an Upgrade on versions prior\n"
"to Mandrake Linux version \"8.1\" is not recommended."
msgstr ""

#: help.pm:605
#, c-format
msgid ""
"Depending on the language you chose in section , DrakX will automatically\n"
"select a particular type of keyboard configuration. Check that the\n"
"selection suits you or choose another keyboard layout.\n"
"\n"
"Also, you may not have a keyboard that corresponds exactly to your\n"
"language: for example, if you are an English-speaking Swiss native, you may\n"
"have a Swiss keyboard. Or if you speak English and are located in Quebec,\n"
"you may find yourself in the same situation where your native language and\n"
"country-set keyboard do not match. In either case, this installation step\n"
"will allow you to select an appropriate keyboard from a list.\n"
"\n"
"Click on the \"%s\" button to be presented with the complete list of\n"
"supported keyboards.\n"
"\n"
"If you choose a keyboard layout based on a non-Latin alphabet, the next\n"
"dialog will allow you to choose the key binding that will switch the\n"
"keyboard between the Latin and non-Latin layouts."
msgstr ""

#: help.pm:624
#, c-format
msgid ""
"Your choice of preferred language will affect the language of the\n"
"documentation, the installer and the system in general. Select first the\n"
"region you are located in, and then the language you speak.\n"
"\n"
"Clicking on the \"%s\" button will allow you to select other languages to\n"
"be installed on your workstation, thereby installing the language-specific\n"
"files for system documentation and applications. For example, if you will\n"
"host users from Spain on your machine, select English as the default\n"
"language in the tree view and \"%s\" in the Advanced section.\n"
"\n"
"About UTF-8 (unicode) support: Unicode is a new character encoding meant to\n"
"cover all existing languages. Though full support for it in GNU/Linux is\n"
"still under development. For that reason, Mandrake Linux will be using it\n"
"or not depending on the user choices:\n"
"\n"
" * If you choose a languages with a strong legacy encoding (latin1\n"
"languages, Russian, Japanese, Chinese, Korean, Thai, Greek, Turkish, most\n"
"iso-8859-2 languages), the legacy encoding will be used by default;\n"
"\n"
" * Other languages will use unicode by default;\n"
"\n"
" * If two or more languages are required, and those languages are not using\n"
"the same encoding, then unicode will be used for the whole system;\n"
"\n"
" * Finally, unicode can also be forced for the system at user request by\n"
"selecting option \"%s\" independently of which language(s) have been\n"
"chosen.\n"
"\n"
"Note that you're not limited to choosing a single additional language. You\n"
"may choose several ones, or even install them all by selecting the \"%s\"\n"
"box. Selecting support for a language means translations, fonts, spell\n"
"checkers, etc. for that language will also be installed.\n"
"\n"
"To switch between the various languages installed on the system, you can\n"
"launch the \"/usr/sbin/localedrake\" command as \"root\" to change the\n"
"language used by the entire system. Running the command as a regular user\n"
"will only change the language settings for that particular user."
msgstr ""

#: help.pm:660
#, c-format
msgid "Espanol"
msgstr ""

#: help.pm:663
#, c-format
msgid ""
"Usually, DrakX has no problems detecting the number of buttons on your\n"
"mouse. If it does, it assumes you have a two-button mouse and will\n"
"configure it for third-button emulation. The third-button mouse button of a\n"
"two-button mouse can be ``pressed'' by simultaneously clicking the left and\n"
"right mouse buttons. DrakX will automatically know whether your mouse uses\n"
"a PS/2, serial or USB interface.\n"
"\n"
"In case you have a 3 buttons mouse without wheel, you can choose the mouse\n"
"that says \"%s\". DrakX will then configure your mouse so that you can\n"
"simulate the wheel with it: to do so, press the middle button and move your\n"
"mouse up and down.\n"
"\n"
"If for some reason you wish to specify a different type of mouse, select it\n"
"from the list provided.\n"
"\n"
"If you choose a mouse other than the default, a test screen will be\n"
"displayed. Use the buttons and wheel to verify that the settings are\n"
"correct and that the mouse is working correctly. If the mouse is not\n"
"working well, press the space bar or [Return] key to cancel the test and to\n"
"go back to the list of choices.\n"
"\n"
"Wheel mice are occasionally not detected automatically, so you will need to\n"
"select your mouse from a list. Be sure to select the one corresponding to\n"
"the port that your mouse is attached to. After selecting a mouse and\n"
"pressing the \"%s\" button, a mouse image is displayed on-screen. Scroll\n"
"the mouse wheel to ensure that it is activated correctly. Once you see the\n"
"on-screen scroll wheel moving as you scroll your mouse wheel, test the\n"
"buttons and check that the mouse pointer moves on-screen as you move your\n"
"mouse."
msgstr ""

#: help.pm:691
#, fuzzy, c-format
msgid "with Wheel emulation"
msgstr "Logitech MouseMan"

#: help.pm:694
#, fuzzy, c-format
msgid ""
"Please select the correct port. For example, the \"COM1\" port under\n"
"Windows is named \"ttyS0\" under GNU/Linux."
msgstr ""
"Prašom pasirinkti teisingą prievadą. Pavyzdžiui COM1\n"
"MS Windows'uose vadinamas ttyS0 GNU/Linux'e."

#: help.pm:698
#, c-format
msgid ""
"This is the most crucial decision point for the security of your GNU/Linux\n"
"system: you have to enter the \"root\" password. \"Root\" is the system\n"
"administrator and is the only user authorized to make updates, add users,\n"
"change the overall system configuration, and so on. In short, \"root\" can\n"
"do everything! That is why you must choose a password that is difficult to\n"
"guess - DrakX will tell you if the password you chose is too easy. As you\n"
"can see, you are not forced to enter a password, but we strongly advise you\n"
"against this. GNU/Linux is just as prone to operator error as any other\n"
"operating system. Since \"root\" can overcome all limitations and\n"
"unintentionally erase all data on partitions by carelessly accessing the\n"
"partitions themselves, it is important that it be difficult to become\n"
"\"root\".\n"
"\n"
"The password should be a mixture of alphanumeric characters and at least 8\n"
"characters long. Never write down the \"root\" password -- it makes it far\n"
"too easy to compromise a system.\n"
"\n"
"One caveat -- do not make the password too long or complicated because you\n"
"must be able to remember it!\n"
"\n"
"The password will not be displayed on screen as you type it in. To reduce\n"
"the chance of a blind typing error you will need to enter the password\n"
"twice. If you do happen to make the same typing error twice, this\n"
"``incorrect'' password will be the one you will have use the first time you\n"
"connect.\n"
"\n"
"If you wish access to this computer to be controlled by an authentication\n"
"server, click the \"%s\" button.\n"
"\n"
"If your network uses either LDAP, NIS, or PDC Windows Domain authentication\n"
"services, select the appropriate one for \"%s\". If you do not know which\n"
"one to use, you should ask your network administrator.\n"
"\n"
"If you happen to have problems with remembering passwords, if your computer\n"
"will never be connected to the Internet and you absolutely trust everybody\n"
"who uses your computer, you can choose to have \"%s\"."
msgstr ""

#: help.pm:733
#, fuzzy, c-format
msgid "authentication"
msgstr "Autentikacija"

#. -PO: keep this short or else the buttons will not fit in the window
#: help.pm:733 install_steps_interactive.pm:1154
#, c-format
msgid "No password"
msgstr "Jokio slaptažodžio"

#: help.pm:736
#, c-format
msgid ""
"This dialog allows you to fine tune your bootloader:\n"
"\n"
" * \"%s\": there are three choices for your bootloader:\n"
"\n"
"    * \"%s\": if you prefer GRUB (text menu).\n"
"\n"
"    * \"%s\": if you prefer LILO with its text menu interface.\n"
"\n"
"    * \"%s\": if you prefer LILO with its graphical interface.\n"
"\n"
" * \"%s\": in most cases, you will not change the default (\"%s\"), but if\n"
"you prefer, the bootloader can be installed on the second hard drive\n"
"(\"%s\"), or even on a floppy disk (\"%s\");\n"
"\n"
" * \"%s\": after a boot or a reboot of the computer, this is the delay\n"
"given to the user at the console to select a boot entry other than the\n"
"default.\n"
"\n"
" * \"%s\": ACPI is a new standard (appeared during year 2002) for power\n"
"management, notably for laptops. If you know your hardware supports it and\n"
"you need it, check this box.\n"
"\n"
" * \"%s\": If you noticed hardware problems on your machine (IRQ conflicts,\n"
"instabilities, machine freeze, ...) you should try disabling APIC by\n"
"checking this box.\n"
"\n"
"!! Be aware that if you choose not to install a bootloader (by selecting\n"
"\"%s\"), you must ensure that you have a way to boot your Mandrake Linux\n"
"system! Be sure you know what you are doing before changing any of the\n"
"options. !!\n"
"\n"
"Clicking the \"%s\" button in this dialog will offer advanced options which\n"
"are normally reserved for the expert user."
msgstr ""

#: help.pm:768
#, fuzzy, c-format
msgid "GRUB"
msgstr "GB"

#: help.pm:768
#, c-format
msgid "/dev/hda"
msgstr "/dev/hda"

#: help.pm:768
#, c-format
msgid "/dev/hdb"
msgstr "/dev/hdb"

#: help.pm:768
#, c-format
msgid "/dev/fd0"
msgstr "/dev/fd0"

#: help.pm:768
#, fuzzy, c-format
msgid "Delay before booting the default image"
msgstr "Palaukti prieš įkraunant įprastą atvaizdą"

#: help.pm:768
#, c-format
msgid "Force no APIC"
msgstr ""

#: help.pm:771
#, fuzzy, c-format
msgid ""
"After you have configured the general bootloader parameters, the list of\n"
"boot options that will be available at boot time will be displayed.\n"
"\n"
"If there are other operating systems installed on your machine they will\n"
"automatically be added to the boot menu. You can fine-tune the existing\n"
"options by clicking \"%s\" to create a new entry; selecting an entry and\n"
"clicking \"%s\" or \"%s\" to modify or remove it. \"%s\" validates your\n"
"changes.\n"
"\n"
"You may also not want to give access to these other operating systems to\n"
"anyone who goes to the console and reboots the machine. You can delete the\n"
"corresponding entries for the operating systems to remove them from the\n"
"bootloader menu, but you will need a boot disk in order to boot those other\n"
"operating systems!"
msgstr ""
"LILO (the LInux LOader) ir GRUB yra įkrovos tvarkyklės: jos gali įkrauti\n"
"tiek GNU/Linux, tiek bet kokią kitą operacijų sistemą, esančią\n"
"kompiuteryje. Paprastai tos kitos operacijų sistemos yra teisingai\n"
"atpažįstamos ir įdiegiamos. Jeigu ne, tu gali pridėti įrašus pats šiame\n"
"lange. Būk atidus ir pasirink teisingus parametrus.\n"
"\n"
"\n"
"Tu taip pat gali uždrausti priėjimą prie tų kitų operacijų sistemų\n"
"bet kam, jei ištrinsi atitinkamus įrašus. Bet tuo atveju, tau prireiks\n"
"įkrovos diskelio, kad jas įkrautum!"

#: help.pm:784 interactive.pm:295 interactive/gtk.pm:480
#: standalone/drakbackup:1843 standalone/drakfont:586 standalone/drakfont:649
#: standalone/drakvpn:329 standalone/drakvpn:690
#, c-format
msgid "Add"
msgstr "Pridėti"

#: help.pm:784 interactive.pm:295 interactive/gtk.pm:480
#, fuzzy, c-format
msgid "Modify"
msgstr "Taisyti RAID"

#: help.pm:784 interactive.pm:295 interactive/gtk.pm:480
#: standalone/drakvpn:329 standalone/drakvpn:690
#, fuzzy, c-format
msgid "Remove"
msgstr "Nutolęs spausdintuvas"

#: help.pm:787
#, c-format
msgid ""
"LILO and GRUB are GNU/Linux bootloaders. Normally, this stage is totally\n"
"automated. DrakX will analyze the disk boot sector and act according to\n"
"what it finds there:\n"
"\n"
" * if a Windows boot sector is found, it will replace it with a GRUB/LILO\n"
"boot sector. This way you will be able to load either GNU/Linux or any\n"
"other OS installed on your machine.\n"
"\n"
" * if a GRUB or LILO boot sector is found, it will replace it with a new\n"
"one.\n"
"\n"
"If it cannot make a determination, DrakX will ask you where to place the\n"
"bootloader. Generally, the \"%s\" is the safest place. Choosing \"%s\"\n"
"won't install any bootloader. Use it only if you know what you are doing."
msgstr ""

#: help.pm:803
#, c-format
msgid ""
"Now, it's time to select a printing system for your computer. Other OSs may\n"
"offer you one, but Mandrake Linux offers two. Each of the printing systems\n"
"is best suited to particular types of configuration.\n"
"\n"
" * \"%s\" -- which is an acronym for ``print, don't queue'', is the choice\n"
"if you have a direct connection to your printer, you want to be able to\n"
"panic out of printer jams, and you do not have networked printers. (\"%s\"\n"
"will handle only very simple network cases and is somewhat slow when used\n"
"with networks.) It's recommended that you use \"pdq\" if this is your first\n"
"experience with GNU/Linux.\n"
"\n"
" * \"%s\" - `` Common Unix Printing System'', is an excellent choice for\n"
"printing to your local printer or to one halfway around the planet. It is\n"
"simple to configure and can act as a server or a client for the ancient\n"
"\"lpd \" printing system, so it is compatible with older operating systems\n"
"which may still need print services. While quite powerful, the basic setup\n"
"is almost as easy as \"pdq\". If you need to emulate a \"lpd\" server, make\n"
"sure you turn on the \"cups-lpd \" daemon. \"%s\" includes graphical\n"
"front-ends for printing or choosing printer options and for managing the\n"
"printer.\n"
"\n"
"If you make a choice now, and later find that you don't like your printing\n"
"system you may change it by running PrinterDrake from the Mandrake Control\n"
"Center and clicking the expert button."
msgstr ""

#: help.pm:826
#, c-format
msgid "pdq"
msgstr ""

#: help.pm:826 printer/cups.pm:99 printer/data.pm:82
#, c-format
msgid "CUPS"
msgstr ""

#: help.pm:829
#, fuzzy, c-format
msgid ""
"DrakX will first detect any IDE devices present in your computer. It will\n"
"also scan for one or more PCI SCSI cards on your system. If a SCSI card is\n"
"found, DrakX will automatically install the appropriate driver.\n"
"\n"
"Because hardware detection is not foolproof, DrakX may fail in detecting\n"
"your hard drives. If so, you'll have to specify your hardware by hand.\n"
"\n"
"If you had to manually specify your PCI SCSI adapter, DrakX will ask if you\n"
"want to configure options for it. You should allow DrakX to probe the\n"
"hardware for the card-specific options which are needed to initialize the\n"
"adapter. Most of the time, DrakX will get through this step without any\n"
"issues.\n"
"\n"
"If DrakX is not able to probe for the options to automatically determine\n"
"which parameters need to be passed to the hardware, you'll need to manually\n"
"configure the driver."
msgstr ""
"DrakX bandys surasti PCI SCSI adapterį(-ius). Jei DrakX\n"
"ras SCSI adapterį ir žinos, kokią tvarkyklę naudoti, ji bus automatiškai\n"
"įdiegta.\n"
"\n"
"\n"
"Jei tu neturi SCSI adapterio, turi ISA SCSI adapterį ar PCI SCSI adapterį,\n"
"kurio DrakX nepažįsta, tavęs bus paklausta, ar sistemoje yra SCSI\n"
"adapteris. Jei nėra nė vieno, gali spausti „Ne“. Jei paspausi „Taip“, bus\n"
"parodytas tvarkyklių sąrašas, iš kurio galėsi pasirinkti tinkamą savo\n"
"adapteriui.\n"
"\n"
"\n"
"Jei tau teks rankomis nurodyti savo adapterį, DrakX paprašys tavęs\n"
"nurodyti jo nuostatas. Tu turėtum leisti DrakX bandyti atpažinti įrangos\n"
"nuostatas. Dažniausiai tai suveikia.\n"
"\n"
"\n"
"Jei ne, tau teks nurodyti tvarkyklės nuostatas. Prašom peržiūrėti User "
"Guide\n"
"(chapter 3, section \"Collective informations on your hardware\") dėl "
"patarimų,\n"
"kaip sužinoti informaciją apie įrangos dokumentaciją, iš gamintojo "
"svetainės\n"
"tinkle (jei turi priėjimą prie interneto) arba iš Microsoft Windows (jei "
"turi juos\n"
"savo sistemoje)."

#: help.pm:847
#, c-format
msgid ""
"You can add additional entries in yaboot for other operating systems,\n"
"alternate kernels, or for an emergency boot image.\n"
"\n"
"For other OSs, the entry consists only of a label and the \"root\"\n"
"partition.\n"
"\n"
"For Linux, there are a few possible options:\n"
"\n"
" * Label: this is the name you will have to type at the yaboot prompt to\n"
"select this boot option.\n"
"\n"
" * Image: this is the name of the kernel to boot. Typically, vmlinux or a\n"
"variation of vmlinux with an extension.\n"
"\n"
" * Root: the \"root\" device or ``/'' for your Linux installation.\n"
"\n"
" * Append: on Apple hardware, the kernel append option is often used to\n"
"assist in initializing video hardware, or to enable keyboard mouse button\n"
"emulation for the missing 2nd and 3rd mouse buttons on a stock Apple mouse.\n"
"The following are some examples:\n"
"\n"
"   \t      video=aty128fb:vmode:17,cmode:32,mclk:71 adb_buttons=103,111\n"
"hda=autotune\n"
"\n"
"   \t      video=atyfb:vmode:12,cmode:24 adb_buttons=103,111\n"
"\n"
" * Initrd: this option can be used either to load initial modules before\n"
"the boot device is available, or to load a ramdisk image for an emergency\n"
"boot situation.\n"
"\n"
" * Initrd-size: the default ramdisk size is generally 4096 Kbytes. If you\n"
"need to allocate a large ramdisk, this option can be used to specify a\n"
"ramdisk larger than the default.\n"
"\n"
" * Read-write: normally the \"root\" partition is initially mounted as\n"
"read-only, to allow a file system check before the system becomes ``live''.\n"
"You can override the default with this option.\n"
"\n"
" * NoVideo: should the Apple video hardware prove to be exceptionally\n"
"problematic, you can select this option to boot in ``novideo'' mode, with\n"
"native frame buffer support.\n"
"\n"
" * Default: selects this entry as being the default Linux selection,\n"
"selectable by pressing ENTER at the yaboot prompt. This entry will also be\n"
"highlighted with a ``*'' if you press [Tab] to see the boot selections."
msgstr ""

#: help.pm:894
#, fuzzy, c-format
msgid ""
"Yaboot is a bootloader for NewWorld Macintosh hardware and can be used to\n"
"boot GNU/Linux, MacOS or MacOSX. Normally, MacOS and MacOSX are correctly\n"
"detected and installed in the bootloader menu. If this is not the case, you\n"
"can add an entry by hand in this screen. Take care to choose the correct\n"
"parameters.\n"
"\n"
"Yaboot's main options are:\n"
"\n"
" * Init Message: a simple text message displayed before the boot prompt.\n"
"\n"
" * Boot Device: indicates where you want to place the information required\n"
"to boot to GNU/Linux. Generally, you set up a bootstrap partition earlier\n"
"to hold this information.\n"
"\n"
" * Open Firmware Delay: unlike LILO, there are two delays available with\n"
"yaboot. The first delay is measured in seconds and at this point, you can\n"
"choose between CD, OF boot, MacOS or Linux;\n"
"\n"
" * Kernel Boot Timeout: this timeout is similar to the LILO boot delay.\n"
"After selecting Linux, you will have this delay in 0.1 second increments\n"
"before your default kernel description is selected;\n"
"\n"
" * Enable CD Boot?: checking this option allows you to choose ``C'' for CD\n"
"at the first boot prompt.\n"
"\n"
" * Enable OF Boot?: checking this option allows you to choose ``N'' for\n"
"Open Firmware at the first boot prompt.\n"
"\n"
" * Default OS: you can select which OS will boot by default when the Open\n"
"Firmware Delay expires."
msgstr ""
"Yaboot yra NewWorld MacIntosh geležies įkrovos programa. Ji gali\n"
"įkrauti GNU/Linux, MacOS, arba MacOSX (jeigu egzistuoja jūsų kompiuteryje).\n"
"Paprastai šios operacinės sistemos aptinkamos ir įdiegiamos\n"
"normaliai. Jeigu taip neįvyko galite šiame ekrane sukurti įrašą rankiniu "
"būdu.\n"
"Būkite atsargūs pasirinkdami parametrus.\n"
"\n"
"\n"
"Pagrindiniai Yaboot nustatymai yra:\n"
"\n"
"\n"
"  - Init Message: Pranešimas parodomas prieš įkrovą.\n"
"\n"
"\n"
"\n"
"  - Boot Device: Nurodykite kur padėti informacija kurios reikėsto \n"
"įkrauti GNU/Linux. Bendrai tariant jūs jau turėjote sukurti bootstrap "
"skirsnį \n"
"kuri laikys šią informaciją.\n"
"\n"
"\n"
"  - Open Firmware Delay: Skirtingai nuo LILO yaboot turi dvi pauzes\n"
"Pirmoji pauzė matuojamas sekundėmis. Čia galite pasirinkti\n"
"tarp CD, OF įkrova, MacOS, arba Linux.\n"
"\n"
"\n"
"  - Kernel Boot Timeout: Šis užlaikymas panašus į LILO įkrovos pauzę.  "
"Pasirinkė \n"
"Linux jus turėsite šią pauzę 0.1 sekundės dalimis prieš pasirenkantkernelio\n"
"aprašymą.\n"
"\n"
"\n"
"  - Enable CD Boot?: Pasirinkdami šį nustatymą jums leis pasirinkti 'C' "
"išCD \n"
"pirmoje įkrovos užklausoje.\n"
"\n"
"\n"
"  - Enable OF Boot?: Pasirinkus šį nustatymą jums leis pasirinkti 'N' Open\n"
"Firmware pirmoje įkrovos užklausoje.\n"
"\n"
"\n"
"  - Default OS: Galite pasirinkti kuri OS įsikraus pagal nutylėjimą kai "
"baigsis Open Firmware \n"
"užlaikymas."

#: help.pm:926
#, c-format
msgid ""
"\"%s\": if a sound card is detected on your system, it is displayed here.\n"
"If you notice the sound card displayed is not the one that is actually\n"
"present on your system, you can click on the button and choose another\n"
"driver."
msgstr ""

#: help.pm:929 help.pm:991 install_steps_interactive.pm:962
#: install_steps_interactive.pm:979
#, fuzzy, c-format
msgid "Sound card"
msgstr "Standartinė"

#: help.pm:932
#, c-format
msgid ""
"As a review, DrakX will present a summary of information it has about your\n"
"system. Depending on your installed hardware, you may have some or all of\n"
"the following entries. Each entry is made up of the configuration item to\n"
"be configured, followed by a quick summary of the current configuration.\n"
"Click on the corresponding \"%s\" button to change that.\n"
"\n"
" * \"%s\": check the current keyboard map configuration and change it if\n"
"necessary.\n"
"\n"
" * \"%s\": check the current country selection. If you are not in this\n"
"country, click on the \"%s\" button and choose another one. If your country\n"
"is not in the first list shown, click the \"%s\" button to get the complete\n"
"country list.\n"
"\n"
" * \"%s\": By default, DrakX deduces your time zone based on the country\n"
"you have chosen. You can click on the \"%s\" button here if this is not\n"
"correct.\n"
"\n"
" * \"%s\": check the current mouse configuration and click on the button to\n"
"change it if necessary.\n"
"\n"
" * \"%s\": clicking on the \"%s\" button will open the printer\n"
"configuration wizard. Consult the corresponding chapter of the ``Starter\n"
"Guide'' for more information on how to setup a new printer. The interface\n"
"presented there is similar to the one used during installation.\n"
"\n"
" * \"%s\": if a sound card is detected on your system, it is displayed\n"
"here. If you notice the sound card displayed is not the one that is\n"
"actually present on your system, you can click on the button and choose\n"
"another driver.\n"
"\n"
" * \"%s\": by default, DrakX configures your graphical interface in\n"
"\"800x600\" or \"1024x768\" resolution. If that does not suit you, click on\n"
"\"%s\" to reconfigure your graphical interface.\n"
"\n"
" * \"%s\": if a TV card is detected on your system, it is displayed here.\n"
"If you have a TV card and it is not detected, click on \"%s\" to try to\n"
"configure it manually.\n"
"\n"
" * \"%s\": if an ISDN card is detected on your system, it will be displayed\n"
"here. You can click on \"%s\" to change the parameters associated with the\n"
"card.\n"
"\n"
" * \"%s\": If you wish to configure your Internet or local network access\n"
"now.\n"
"\n"
" * \"%s\": this entry allows you to redefine the security level as set in a\n"
"previous step ().\n"
"\n"
" * \"%s\": if you plan to connect your machine to the Internet, it's a good\n"
"idea to protect yourself from intrusions by setting up a firewall. Consult\n"
"the corresponding section of the ``Starter Guide'' for details about\n"
"firewall settings.\n"
"\n"
" * \"%s\": if you wish to change your bootloader configuration, click that\n"
"button. This should be reserved to advanced users.\n"
"\n"
" * \"%s\": here you'll be able to fine control which services will be run\n"
"on your machine. If you plan to use this machine as a server it's a good\n"
"idea to review this setup."
msgstr ""

#: help.pm:991 install_steps_interactive.pm:110
#: install_steps_interactive.pm:899 standalone/keyboarddrake:23
#, c-format
msgid "Keyboard"
msgstr "Klaviatūra"

#: help.pm:991 install_steps_interactive.pm:921
#, c-format
msgid "Timezone"
msgstr "Laiko juosta"

#: help.pm:991
#, fuzzy, c-format
msgid "Graphical Interface"
msgstr "X paleidžiant"

#: help.pm:991 install_steps_interactive.pm:995
#, c-format
msgid "TV card"
msgstr ""

#: help.pm:991
#, fuzzy, c-format
msgid "ISDN card"
msgstr "Vidinė ISDN plokštė"

#: help.pm:991 install_steps_interactive.pm:1013 standalone/drakbackup:2394
#, fuzzy, c-format
msgid "Network"
msgstr "Tinklo interfeisas"

#: help.pm:991 install_steps_interactive.pm:1039
#, fuzzy, c-format
msgid "Security Level"
msgstr "Nustatomas saugumo lygis"

#: help.pm:991 install_steps_interactive.pm:1053
#, fuzzy, c-format
msgid "Firewall"
msgstr "Serveris, Firewall/Routeris"

#: help.pm:991 install_steps_interactive.pm:1067
#, fuzzy, c-format
msgid "Bootloader"
msgstr "Naudojama įkrovos tvarkyklė"

#: help.pm:991 install_steps_interactive.pm:1077 services.pm:195
#, fuzzy, c-format
msgid "Services"
msgstr "įrenginys"

#: help.pm:994
#, fuzzy, c-format
msgid ""
"Choose the hard drive you want to erase in order to install your new\n"
"Mandrake Linux partition. Be careful, all data on this drive will be lost\n"
"and will not be recoverable!"
msgstr ""
"Pasirink kietąjį diską, kurį nori ištuštinti, kad įdiegtum naują\n"
"Mandrake Linux sistemą. Būk atsargus, visi duomenys, esantys jame, bus\n"
"prarasti, ir jų nebebus įmanoma atkurti."

#: help.pm:999
#, fuzzy, c-format
msgid ""
"Click on \"%s\" if you want to delete all data and partitions present on\n"
"this hard drive. Be careful, after clicking on \"%s\", you will not be able\n"
"to recover any data and partitions present on this hard drive, including\n"
"any Windows data.\n"
"\n"
"Click on \"%s\" to quit this operation without losing data and partitions\n"
"present on this hard drive."
msgstr ""
"Spausk \"Gerai\", jei nori ištrinti visus duomenis ir skirsnius, esančius\n"
"šiame kietajame diske. Būk atsargus, kai paspausi \"Gerai\", tu nebegalėsi\n"
"atkurti jokių duomenų nei skirsnių, kurie buvo šiame diske, įskaitant bet\n"
"kokius Windows duomenis.\n"
"\n"
"\n"
"Spausk \"Atšaukti\", kad nutrauktum operaciją ir neprarastum jokių duomenų\n"
"nei skirsnių, esančių šiame kietajame diske."

#: install2.pm:119
#, c-format
msgid ""
"Can't access kernel modules corresponding to your kernel (file %s is "
"missing), this generally means your boot floppy in not in sync with the "
"Installation medium (please create a newer boot floppy)"
msgstr ""

#: install2.pm:169
#, c-format
msgid "You must also format %s"
msgstr ""

#: install_any.pm:413
#, c-format
msgid ""
"You have selected the following server(s): %s\n"
"\n"
"\n"
"These servers are activated by default. They don't have any known security\n"
"issues, but some new ones could be found. In that case, you must make sure\n"
"to upgrade as soon as possible.\n"
"\n"
"\n"
"Do you really want to install these servers?\n"
msgstr ""

#: install_any.pm:434
#, c-format
msgid ""
"The following packages will be removed to allow upgrading your system: %s\n"
"\n"
"\n"
"Do you really want to remove these packages?\n"
msgstr ""

#: install_any.pm:812
#, c-format
msgid "Insert a FAT formatted floppy in drive %s"
msgstr "Įdėk FAT formatuotą diskelį į kaupiklį %s"

#: install_any.pm:816
#, c-format
msgid "This floppy is not FAT formatted"
msgstr ""

#: install_any.pm:828
#, c-format
msgid ""
"To use this saved packages selection, boot installation with ``linux "
"defcfg=floppy''"
msgstr ""
"Kad išsaugoti šių paketų pasirinkimą įkraukite sistemą su ``linux "
"defcfg=floppy''"

#: install_any.pm:856 partition_table.pm:845
#, c-format
msgid "Error reading file %s"
msgstr "Klaida skaitant bylą %s"

#: install_any.pm:973
#, c-format
msgid ""
"An error occurred - no valid devices were found on which to create new "
"filesystems. Please check your hardware for the cause of this problem"
msgstr ""
"Įvyko klaida -- nerasta tinkamų įrenginių, kur būtų galima sukurti naujus "
"skirsnius. Prašom pasitikrinti savo įrangą dėl galimo gedimo"

#: install_gtk.pm:161
#, fuzzy, c-format
msgid "System installation"
msgstr "SILO Įdiegimas"

#: install_gtk.pm:164
#, fuzzy, c-format
msgid "System configuration"
msgstr "Nustatymai"

#: install_interactive.pm:22
#, c-format
msgid ""
"Some hardware on your computer needs ``proprietary'' drivers to work.\n"
"You can find some information about them at: %s"
msgstr ""
"Kad kai kurie tavo kompiuterio įrenginiai veiktų, jiems reikia\n"
"taip vadinamų \"proprietary\" tvarkyklių. daugiau informacijos apie jas "
"gali\n"
"rasti čia: %s"

#: install_interactive.pm:62
#, c-format
msgid ""
"You must have a root partition.\n"
"For this, create a partition (or click on an existing one).\n"
"Then choose action ``Mount point'' and set it to `/'"
msgstr ""
"Tu turi turėti root skirsnį. Tam sukurk skirsnį\n"
"(arba spragtelėk ant jau esamo). Tada pasirink\n"
"veiksmą „Montavimo taškas“ ir nurodyk jam „/“"

#: install_interactive.pm:67
#, c-format
msgid ""
"You don't have a swap partition.\n"
"\n"
"Continue anyway?"
msgstr ""
"Tu neturi swap skirsnio\n"
"\n"
"Vis tiek tęsti?"

#: install_interactive.pm:70 install_steps.pm:206
#, fuzzy, c-format
msgid "You must have a FAT partition mounted in /boot/efi"
msgstr "Tu privalai turėti swap skirsnį"

#: install_interactive.pm:97
#, c-format
msgid "Not enough free space to allocate new partitions"
msgstr "Naujiems skirsniams nepakanka laisvos vietos"

#: install_interactive.pm:105
#, c-format
msgid "Use existing partitions"
msgstr "Naudoti esamą skirsnį"

#: install_interactive.pm:107
#, c-format
msgid "There is no existing partition to use"
msgstr "Nėra jokio skirsnio, tinkamo naudojimui"

#: install_interactive.pm:114
#, c-format
msgid "Use the Windows partition for loopback"
msgstr "Naudoti Windows skirsnį loopback'ui"

#: install_interactive.pm:117
#, c-format
msgid "Which partition do you want to use for Linux4Win?"
msgstr "Kuri skirsnį tu nori naudoti Linux4Win įdiegimui?"

#: install_interactive.pm:119
#, c-format
msgid "Choose the sizes"
msgstr "Pasirink dydžius"

#: install_interactive.pm:120
#, c-format
msgid "Root partition size in MB: "
msgstr "Šakninio skirsnio dydis, MB: "

#: install_interactive.pm:121
#, c-format
msgid "Swap partition size in MB: "
msgstr "Swap skirsnio dydis, MB: "

#: install_interactive.pm:130
#, fuzzy, c-format
msgid "There is no FAT partition to use as loopback (or not enough space left)"
msgstr ""
"Nėra jokių FAT skirsnių, kurių dydį būtų galima pakeisti arba naudoti juos "
"loopback'ui\n"
"(arba nėra pakankamai laisvos vietos)"

#: install_interactive.pm:139
#, c-format
msgid "Which partition do you want to resize?"
msgstr "Kurio skirsnio dydį tu nori pakeisti?"

#: install_interactive.pm:153
#, c-format
msgid ""
"The FAT resizer is unable to handle your partition, \n"
"the following error occured: %s"
msgstr ""
"FAT dydžio keitimo programa nesusitvarko su tavo\n"
"skirsniu, įvyko tokia klaida: %s"

#: install_interactive.pm:156
#, fuzzy, c-format
msgid "Computing the size of the Windows partition"
msgstr "Naudoti laisvą vietą Windows skirsnyje"

#: install_interactive.pm:163
#, c-format
msgid ""
"Your Windows partition is too fragmented. Please reboot your computer under "
"Windows, run the ``defrag'' utility, then restart the Mandrake Linux "
"installation."
msgstr ""
"Tavo Windows skirsnis yra pernelyg fragmentuotas, pirma paleisk „defrag“"

#: install_interactive.pm:164
#, fuzzy, c-format
msgid ""
"WARNING!\n"
"\n"
"DrakX will now resize your Windows partition. Be careful: this\n"
"operation is dangerous. If you have not already done so, you\n"
"first need to exit the installation, run \"chkdsk c:\" from a\n"
"Command Prompt under Windows (beware, running graphical program\n"
"\"scandisk\" is not enough, be sure to use \"chkdsk\" in a\n"
"Command Prompt!), optionally run defrag, then restart the\n"
"installation. You should also backup your data.\n"
"When sure, press Ok."
msgstr ""
"PERSPĖJIMAS!\n"
"\n"
"DrakX dabar pakeis tavo Windows skirsnio dydį. Būk atsargus: šis veiksmas\n"
"yra pavojingas. Jeigu to dar nepadarei, dabar pats laikas išeiti iš "
"įdiegimo,\n"
"paleisti scandisk iš Windows (nepakenktų ir defrag paleisti), o tada iš "
"naujo\n"
"pradėti įdiegimą. Taip pat turėtum pasidaryti atsarginę duomenų kopiją.\n"
"Kai viskas sutvarkyta, spausk Gerai."

#: install_interactive.pm:176
#, c-format
msgid "Which size do you want to keep for Windows on"
msgstr "Kokį dydį norėtum palikti Windows'ams"

#: install_interactive.pm:177
#, c-format
msgid "partition %s"
msgstr "skirsnyje %s"

#: install_interactive.pm:186
#, c-format
msgid "Resizing Windows partition"
msgstr "Skaičiuojami Windows bylų sistemos rėžiai"

#: install_interactive.pm:191
#, c-format
msgid "FAT resizing failed: %s"
msgstr "Nepavyko pakeisti FAT dydžio: %s"

#: install_interactive.pm:206
#, fuzzy, c-format
msgid "There is no FAT partition to resize (or not enough space left)"
msgstr ""
"Nėra jokių FAT skirsnių, kurių dydį būtų galima pakeisti arba naudoti juos "
"loopback'ui\n"
"(arba nėra pakankamai laisvos vietos)"

#: install_interactive.pm:211
#, c-format
msgid "Remove Windows(TM)"
msgstr "Išmesti Windows(TM)"

#: install_interactive.pm:213
#, c-format
msgid "You have more than one hard drive, which one do you install linux on?"
msgstr "Tu turi daugiau negu vieną kietą diską, į kurį nori įdiegti Linux?"

#: install_interactive.pm:217
#, c-format
msgid "ALL existing partitions and their data will be lost on drive %s"
msgstr "VISI kaupiklyje %s esantys skirsniai ir duomenys bus prarasti"

#: install_interactive.pm:230
#, c-format
msgid "Use fdisk"
msgstr "Naudoti fdisk"

#: install_interactive.pm:233
#, c-format
msgid ""
"You can now partition %s.\n"
"When you are done, don't forget to save using `w'"
msgstr ""
"Tu dabar gali sudalinti %s.\n"
"Kai baigsi, nepamiršk išsaugoti su 'w'"

#: install_interactive.pm:269
#, c-format
msgid "I can't find any room for installing"
msgstr "Aš niekur negaliu rasti vietos įdiegimui"

#: install_interactive.pm:273
#, c-format
msgid "The DrakX Partitioning wizard found the following solutions:"
msgstr "DrakX Skirsnių dalinimo meistras rado tokius sprendimus:"

#: install_interactive.pm:279
#, c-format
msgid "Partitioning failed: %s"
msgstr "Dalinimas į skirsnius nepavyko: %s"

#: install_interactive.pm:286
#, c-format
msgid "Bringing up the network"
msgstr "Paleidžiamas tinklas"

#: install_interactive.pm:291
#, c-format
msgid "Bringing down the network"
msgstr "Išjungiamas tinklas"

#: install_messages.pm:9
#, c-format
msgid ""
"Introduction\n"
"\n"
"The operating system and the different components available in the Mandrake "
"Linux distribution \n"
"shall be called the \"Software Products\" hereafter. The Software Products "
"include, but are not \n"
"restricted to, the set of programs, methods, rules and documentation related "
"to the operating \n"
"system and the different components of the Mandrake Linux distribution.\n"
"\n"
"\n"
"1. License Agreement\n"
"\n"
"Please read this document carefully. This document is a license agreement "
"between you and  \n"
"MandrakeSoft S.A. which applies to the Software Products.\n"
"By installing, duplicating or using the Software Products in any manner, you "
"explicitly \n"
"accept and fully agree to conform to the terms and conditions of this "
"License. \n"
"If you disagree with any portion of the License, you are not allowed to "
"install, duplicate or use \n"
"the Software Products. \n"
"Any attempt to install, duplicate or use the Software Products in a manner "
"which does not comply \n"
"with the terms and conditions of this License is void and will terminate "
"your rights under this \n"
"License. Upon termination of the License,  you must immediately destroy all "
"copies of the \n"
"Software Products.\n"
"\n"
"\n"
"2. Limited Warranty\n"
"\n"
"The Software Products and attached documentation are provided \"as is\", "
"with no warranty, to the \n"
"extent permitted by law.\n"
"MandrakeSoft S.A. will, in no circumstances and to the extent permitted by "
"law, be liable for any special,\n"
"incidental, direct or indirect damages whatsoever (including without "
"limitation damages for loss of \n"
"business, interruption of business, financial loss, legal fees and penalties "
"resulting from a court \n"
"judgment, or any other consequential loss) arising out of  the use or "
"inability to use the Software \n"
"Products, even if MandrakeSoft S.A. has been advised of the possibility or "
"occurence of such \n"
"damages.\n"
"\n"
"LIMITED LIABILITY LINKED TO POSSESSING OR USING PROHIBITED SOFTWARE IN SOME "
"COUNTRIES\n"
"\n"
"To the extent permitted by law, MandrakeSoft S.A. or its distributors will, "
"in no circumstances, be \n"
"liable for any special, incidental, direct or indirect damages whatsoever "
"(including without \n"
"limitation damages for loss of business, interruption of business, financial "
"loss, legal fees \n"
"and penalties resulting from a court judgment, or any other consequential "
"loss) arising out \n"
"of the possession and use of software components or arising out of  "
"downloading software components \n"
"from one of Mandrake Linux sites  which are prohibited or restricted in some "
"countries by local laws.\n"
"This limited liability applies to, but is not restricted to, the strong "
"cryptography components \n"
"included in the Software Products.\n"
"\n"
"\n"
"3. The GPL License and Related Licenses\n"
"\n"
"The Software Products consist of components created by different persons or "
"entities.  Most \n"
"of these components are governed under the terms and conditions of the GNU "
"General Public \n"
"Licence, hereafter called \"GPL\", or of similar licenses. Most of these "
"licenses allow you to use, \n"
"duplicate, adapt or redistribute the components which they cover. Please "
"read carefully the terms \n"
"and conditions of the license agreement for each component before using any "
"component. Any question \n"
"on a component license should be addressed to the component author and not "
"to MandrakeSoft.\n"
"The programs developed by MandrakeSoft S.A. are governed by the GPL License. "
"Documentation written \n"
"by MandrakeSoft S.A. is governed by a specific license. Please refer to the "
"documentation for \n"
"further details.\n"
"\n"
"\n"
"4. Intellectual Property Rights\n"
"\n"
"All rights to the components of the Software Products belong to their "
"respective authors and are \n"
"protected by intellectual property and copyright laws applicable to software "
"programs.\n"
"MandrakeSoft S.A. reserves its rights to modify or adapt the Software "
"Products, as a whole or in \n"
"parts, by all means and for all purposes.\n"
"\"Mandrake\", \"Mandrake Linux\" and associated logos are trademarks of "
"MandrakeSoft S.A.  \n"
"\n"
"\n"
"5. Governing Laws \n"
"\n"
"If any portion of this agreement is held void, illegal or inapplicable by a "
"court judgment, this \n"
"portion is excluded from this contract. You remain bound by the other "
"applicable sections of the \n"
"agreement.\n"
"The terms and conditions of this License are governed by the Laws of "
"France.\n"
"All disputes on the terms of this license will preferably be settled out of "
"court. As a last \n"
"resort, the dispute will be referred to the appropriate Courts of Law of "
"Paris - France.\n"
"For any question on this document, please contact MandrakeSoft S.A.  \n"
msgstr ""

#: install_messages.pm:89
#, c-format
msgid ""
"Warning: Free Software may not necessarily be patent free, and some Free\n"
"Software included may be covered by patents in your country. For example, "
"the\n"
"MP3 decoders included may require a licence for further usage (see\n"
"http://www.mp3licensing.com for more details). If you are unsure if a "
"patent\n"
"may be applicable to you, check your local laws."
msgstr ""

#: install_messages.pm:96
#, c-format
msgid ""
"\n"
"Warning\n"
"\n"
"Please read carefully the terms below. If you disagree with any\n"
"portion, you are not allowed to install the next CD media. Press 'Refuse' \n"
"to continue the installation without using these media.\n"
"\n"
"\n"
"Some components contained in the next CD media are not governed\n"
"by the GPL License or similar agreements. Each such component is then\n"
"governed by the terms and conditions of its own specific license. \n"
"Please read carefully and comply with such specific licenses before \n"
"you use or redistribute the said components. \n"
"Such licenses will in general prevent the transfer,  duplication \n"
"(except for backup purposes), redistribution, reverse engineering, \n"
"de-assembly, de-compilation or modification of the component. \n"
"Any breach of agreement will immediately terminate your rights under \n"
"the specific license. Unless the specific license terms grant you such\n"
"rights, you usually cannot install the programs on more than one\n"
"system, or adapt it to be used on a network. In doubt, please contact \n"
"directly the distributor or editor of the component. \n"
"Transfer to third parties or copying of such components including the \n"
"documentation is usually forbidden.\n"
"\n"
"\n"
"All rights to the components of the next CD media belong to their \n"
"respective authors and are protected by intellectual property and \n"
"copyright laws applicable to software programs.\n"
msgstr ""
"\n"
"Perspėjimas\n"
"\n"
"Prašau įdėmiai perskaityti šį susitarimą. Jeigu jūs nesutinkate nors\n"
"su vienu kunktu jums neleidžiama naudoti šios laikmenos. Paspauskite "
"'Atmetu', \n"
"kad tęsti įdiegimą be šios laikmenos.\n"
"\n"
"\n"
"Kaikurie CD esantys komponentai nėra pažymėti \n"
"GPL Licenzija ar kažkuo panašiu. Tokiu atveju kiekvienas\n"
"komponentas turi savo licenziją. \n"
"Prašau pirmiau perskaityti ir sutikti su tomis licenzijomis prieš \n"
"naudojant arba perduodant tuos komponentus. \n"
"Tokios licenzijos bandrai sulaiko komponentų perdavimą, kopijavimą \n"
"(išskyrus rezervinę kopiją), atvirkštinę inžineriją, \n"
"de-assembly, de-compilation arba modifikavimą. \n"
"Bet koks susitarimo laužymas atima iš jūsų visas šios licenzijos suteiktas\n"
"teises. Jeigu jums speciali licenzija nesuteikia įpatinkų įgaliojimų\n"
"jūs negalite įdiegti šių programų į daugiau negu vieną kompiuterį\n"
"arba pritaikyti naudoti tinkle. Jei abejojate\n"
"susisiekite tiesiai su gamintoju. \n"
"Šių komponentų arba dokumentacijos  perdavimas trečioms šalims\n"
"yra uždraustas.\n"
"\n"
"\n"
"Visos CD diske esančių komponentų teisės priklauso gerbiamiems\n"
"jų autoriams ir saugomos intelektualios nuosavybės teises\n"
"saugančių įstatymų.\n"

#: install_messages.pm:128
#, c-format
msgid ""
"Congratulations, installation is complete.\n"
"Remove the boot media and press return to reboot.\n"
"\n"
"\n"
"For information on fixes which are available for this release of Mandrake "
"Linux,\n"
"consult the Errata available from:\n"
"\n"
"\n"
"%s\n"
"\n"
"\n"
"Information on configuring your system is available in the post\n"
"install chapter of the Official Mandrake Linux User's Guide."
msgstr ""
"Sveikiname. Įdiegimas baigtas.\n"
"Ištrauk įdiegimo laikmenas ir spausk Enter, kad perkrautum.\n"
"\n"
"\n"
"Kad sužinotum apie pataisymus, kurie prieinami šiai Mandrake Linux laidai,\n"
"pasižiūrėk į Errata, kuris yra \n"
"\n"
"\n"
"%s\n"
"\n"
"\n"
"Informacija apie tavo sistemos konfigūravimą yra oficialioje\n"
"Mandrake Linux User's Guide knygoje."

#: install_messages.pm:141
#, c-format
msgid "http://www.mandrakelinux.com/en/100errata.php3"
msgstr "http://www.mandrakelinux.com/en/100errata.php3"

#: install_steps.pm:241
#, c-format
msgid "Duplicate mount point %s"
msgstr "Pasikartojantis montavimo taškas %s"

#: install_steps.pm:410
#, c-format
msgid ""
"Some important packages didn't get installed properly.\n"
"Either your cdrom drive or your cdrom is defective.\n"
"Check the cdrom on an installed computer using \"rpm -qpl Mandrake/RPMS/*.rpm"
"\"\n"
msgstr ""
"Kai kurie svarbūs paketai nebuvo tvarkingai įdiegti.\n"
"Arba tavo CD-ROM kaupiklis, arba CD yra su trūkumais.\n"
"Patikrink CD įdiegtame kompiuteryje, naudodamas \"rpm -qpl Mandrake/RPMS/*."
"rpm\"\n"

#: install_steps.pm:541
#, c-format
msgid "No floppy drive available"
msgstr "Neprieinamas nė vienas diskelių kaupiklis"

#: install_steps_auto_install.pm:76 install_steps_stdio.pm:27
#, c-format
msgid "Entering step `%s'\n"
msgstr "Įeinama į žingsnį „%s\n"

#: install_steps_gtk.pm:178
#, c-format
msgid ""
"Your system is low on resources. You may have some problem installing\n"
"Mandrake Linux. If that occurs, you can try a text install instead. For "
"this,\n"
"press `F1' when booting on CDROM, then enter `text'."
msgstr ""
"Tavo sistemoje mažai resursų. Tu gali susidurti su bėdomis, įdiegdamas\n"
"Mandrake Linux. Jei taip atsitiktų, gali pabandyti tekstinį diegimo būdą:\n"
"Kai užsikrauna iš CDROM'o, paspausk `F1', o tada įvesk \"text\"."

#: install_steps_gtk.pm:232 install_steps_interactive.pm:587
#, c-format
msgid "Package Group Selection"
msgstr "Paketų grupių pasirinkimas"

#: install_steps_gtk.pm:292 install_steps_interactive.pm:519
#, c-format
msgid "Total size: %d / %d MB"
msgstr "Bendras dydis: %d / %d MB"

#: install_steps_gtk.pm:338
#, c-format
msgid "Bad package"
msgstr "Blogas paketas"

#: install_steps_gtk.pm:340
#, fuzzy, c-format
msgid "Version: "
msgstr "Versija: %s\n"

#: install_steps_gtk.pm:341
#, fuzzy, c-format
msgid "Size: "
msgstr "Dydis: %s"

#: install_steps_gtk.pm:341
#, fuzzy, c-format
msgid "%d KB\n"
msgstr "Dydis: %d KB\n"

#: install_steps_gtk.pm:342
#, fuzzy, c-format
msgid "Importance: "
msgstr "Svarba: %s\n"

#: install_steps_gtk.pm:375
#, c-format
msgid "You can't select/unselect this package"
msgstr "Tu negali pažymėti/atžymėti šio paketo"

#: install_steps_gtk.pm:379
#, fuzzy, c-format
msgid "due to missing %s"
msgstr "nieko"

#: install_steps_gtk.pm:380
#, c-format
msgid "due to unsatisfied %s"
msgstr ""

#: install_steps_gtk.pm:381
#, c-format
msgid "trying to promote %s"
msgstr ""

#: install_steps_gtk.pm:382
#, c-format
msgid "in order to keep %s"
msgstr ""

#: install_steps_gtk.pm:387
#, c-format
msgid ""
"You can't select this package as there is not enough space left to install it"
msgstr ""
"Tu negali pasirinkti šio paketo, kadangi nebėra pakankamai vietos jam įdiegti"

#: install_steps_gtk.pm:390
#, c-format
msgid "The following packages are going to be installed"
msgstr "Ruošiamasi įdiegti šiuos paketus"

#: install_steps_gtk.pm:391
#, c-format
msgid "The following packages are going to be removed"
msgstr "Ruošiamasi pašalinti šiuos paketus"

#: install_steps_gtk.pm:415
#, c-format
msgid "This is a mandatory package, it can't be unselected"
msgstr "Tai yra privalomas paketas, jis negali būti atžymėtas"

#: install_steps_gtk.pm:417
#, c-format
msgid "You can't unselect this package. It is already installed"
msgstr "Tu negali atžymėti šio paketo. Jis jau yra įdiegtas"

#: install_steps_gtk.pm:420
#, c-format
msgid ""
"This package must be upgraded.\n"
"Are you sure you want to deselect it?"
msgstr ""
"Šis paketas privalo būti atnaujintas\n"
"Ar tu tikrai nori jį atžymėti?"

#: install_steps_gtk.pm:423
#, c-format
msgid "You can't unselect this package. It must be upgraded"
msgstr "Tu negali atžymėti šio paketo. Jis privalo būti atnaujintas"

#: install_steps_gtk.pm:428
#, c-format
msgid "Show automatically selected packages"
msgstr ""

#: install_steps_gtk.pm:433
#, fuzzy, c-format
msgid "Load/Save on floppy"
msgstr "Išsaugoti į diskelį"

#: install_steps_gtk.pm:434
#, fuzzy, c-format
msgid "Updating package selection"
msgstr "Išsaugoti paketų pasirinkimą"

#: install_steps_gtk.pm:439
#, fuzzy, c-format
msgid "Minimal install"
msgstr "Išmesti"

#: install_steps_gtk.pm:453 install_steps_interactive.pm:427
#, c-format
msgid "Choose the packages you want to install"
msgstr "Pasirink paketus, kuriuos tu nori įdiegti"

#: install_steps_gtk.pm:469 install_steps_interactive.pm:673
#, c-format
msgid "Installing"
msgstr "Įdiegiama"

#: install_steps_gtk.pm:475
#, fuzzy, c-format
msgid "No details"
msgstr "Detalės"

#: install_steps_gtk.pm:476
#, c-format
msgid "Estimating"
msgstr "Skaičiuojama"

#: install_steps_gtk.pm:482
#, c-format
msgid "Time remaining "
msgstr "Liko laiko "

#: install_steps_gtk.pm:494
#, c-format
msgid "Please wait, preparing installation..."
msgstr "Prašome palaukti. Ruošiamas įdiegimas"

#: install_steps_gtk.pm:555
#, c-format
msgid "%d packages"
msgstr "%d paketų"

#: install_steps_gtk.pm:560
#, c-format
msgid "Installing package %s"
msgstr "Įdiegiamas paketas %s"

#: install_steps_gtk.pm:596 install_steps_interactive.pm:88
#: install_steps_interactive.pm:697
#, c-format
msgid "Refuse"
msgstr "Atmetu"

#: install_steps_gtk.pm:597 install_steps_interactive.pm:698
#, c-format
msgid ""
"Change your Cd-Rom!\n"
"\n"
"Please insert the Cd-Rom labelled \"%s\" in your drive and press Ok when "
"done.\n"
"If you don't have it, press Cancel to avoid installation from this Cd-Rom."
msgstr ""
"Pakeisk CD!\n"
"\n"
"Prašom įkišti CD su užrašu „%s“ į kaupiklį, tada paspausk Gerai.\n"
"Jei tu jo neturi, spausk Nutraukti, kad išvengtum įdiegimo iš šio CD."

#: install_steps_gtk.pm:612 install_steps_interactive.pm:710
#, c-format
msgid "There was an error ordering packages:"
msgstr "Įvyko klaida, bandant sutvarkyti paketus:"

#: install_steps_gtk.pm:612 install_steps_gtk.pm:616
#: install_steps_interactive.pm:710 install_steps_interactive.pm:714
#, c-format
msgid "Go on anyway?"
msgstr "Vis tiek tęsti?"

#: install_steps_gtk.pm:616 install_steps_interactive.pm:714
#, c-format
msgid "There was an error installing packages:"
msgstr "Įvyko klaida, įdiegiant paketus:"

#: install_steps_gtk.pm:656 install_steps_interactive.pm:881
#: install_steps_interactive.pm:1029
#, fuzzy, c-format
msgid "not configured"
msgstr "iš naujo nustatyti"

#: install_steps_interactive.pm:81
#, fuzzy, c-format
msgid "Do you want to recover your system?"
msgstr "Ar nori naudoti aboot?"

#: install_steps_interactive.pm:82
#, c-format
msgid "License agreement"
msgstr "Licenzijos patvirtinimas"

#: install_steps_interactive.pm:111
#, fuzzy, c-format
msgid "Please choose your keyboard layout."
msgstr "Prašom pasirinkti klaviatūros išdėstymą."

#: install_steps_interactive.pm:113
#, c-format
msgid "Here is the full list of keyboards available"
msgstr "Čia yra galimų klaviatūrų sąrašas"

#: install_steps_interactive.pm:143
#, fuzzy, c-format
msgid "Install/Upgrade"
msgstr "Įdiegti/Atnaujinti"

#: install_steps_interactive.pm:144
#, fuzzy, c-format
msgid "Is this an install or an upgrade?"
msgstr "Ar tai įdiegimas, ar atnaujinimas?"

#: install_steps_interactive.pm:150
#, fuzzy, c-format
msgid "Upgrade %s"
msgstr "Atnaujinimas"

#: install_steps_interactive.pm:160
#, fuzzy, c-format
msgid "Encryption key for %s"
msgstr "Slaptažodžiai nesutampa"

#: install_steps_interactive.pm:177
#, fuzzy, c-format
msgid "Please choose your type of mouse."
msgstr "Prašom pasirinkti savo pelės rūšį."

#: install_steps_interactive.pm:186 standalone/mousedrake:46
#, c-format
msgid "Mouse Port"
msgstr "Pelės prievadas"

#: install_steps_interactive.pm:187 standalone/mousedrake:47
#, c-format
msgid "Please choose which serial port your mouse is connected to."
msgstr ""
"Prašom pasirinkti, prie kurios nuosekliosios jungties prijungta tavo pelė."

#: install_steps_interactive.pm:197
#, c-format
msgid "Buttons emulation"
msgstr ""

#: install_steps_interactive.pm:199
#, c-format
msgid "Button 2 Emulation"
msgstr ""

#: install_steps_interactive.pm:200
#, c-format
msgid "Button 3 Emulation"
msgstr ""

#: install_steps_interactive.pm:221
#, c-format
msgid "PCMCIA"
msgstr "PCMCIA"

#: install_steps_interactive.pm:221
#, c-format
msgid "Configuring PCMCIA cards..."
msgstr "Nustatomos PCMCIA plokštes..."

#: install_steps_interactive.pm:228
#, c-format
msgid "IDE"
msgstr "IDE"

#: install_steps_interactive.pm:228
#, c-format
msgid "Configuring IDE"
msgstr "Nustatome IDE"

#: install_steps_interactive.pm:248 network/tools.pm:197
#, c-format
msgid "No partition available"
msgstr "nėra prieinamų skirsnių"

#: install_steps_interactive.pm:251
#, c-format
msgid "Scanning partitions to find mount points"
msgstr "Peržiūrimi skirsniai, ieškant montavimo taškų"

#: install_steps_interactive.pm:258
#, c-format
msgid "Choose the mount points"
msgstr "Pasirink montavimo taškus"

#: install_steps_interactive.pm:288
#, c-format
msgid ""
"No free space for 1MB bootstrap! Install will continue, but to boot your "
"system, you'll need to create the bootstrap partition in DiskDrake"
msgstr ""

#: install_steps_interactive.pm:325
#, c-format
msgid "Choose the partitions you want to format"
msgstr "Pasirink skirsnius, kuriuos nori sužymėti"

#: install_steps_interactive.pm:327
#, c-format
msgid "Check bad blocks?"
msgstr "Ieškoti blogų blokų?"

#: install_steps_interactive.pm:359
#, c-format
msgid ""
"Failed to check filesystem %s. Do you want to repair the errors? (beware, "
"you can lose data)"
msgstr ""

#: install_steps_interactive.pm:362
#, c-format
msgid "Not enough swap space to fulfill installation, please add some"
msgstr "Nepakanka swap atminties įdiegimo vykdymui, prašom praplėsti"

#: install_steps_interactive.pm:369
#, fuzzy, c-format
msgid "Looking for available packages and rebuilding rpm database..."
msgstr "Ieškomi galimi paketai"

#: install_steps_interactive.pm:370 install_steps_interactive.pm:389
#, c-format
msgid "Looking for available packages..."
msgstr "Ieškomi galimi paketai"

#: install_steps_interactive.pm:373
#, fuzzy, c-format
msgid "Looking at packages already installed..."
msgstr "Tu negali atžymėti šio paketo. Jis jau yra įdiegtas"

#: install_steps_interactive.pm:377
#, c-format
msgid "Finding packages to upgrade..."
msgstr "Ieškoma atnaujintinų paketų"

#: install_steps_interactive.pm:398
#, c-format
msgid ""
"Your system does not have enough space left for installation or upgrade (%d "
"> %d)"
msgstr "Tavo sistemoje neužtenka vietos įdiegimui arba atnaujinimui (%d > %d)"

#: install_steps_interactive.pm:439
#, c-format
msgid ""
"Please choose load or save package selection on floppy.\n"
"The format is the same as auto_install generated floppies."
msgstr ""

#: install_steps_interactive.pm:441
#, fuzzy, c-format
msgid "Load from floppy"
msgstr "Atstatyti iš diskelio"

#: install_steps_interactive.pm:441
#, c-format
msgid "Save on floppy"
msgstr "Išsaugoti į diskelį"

#: install_steps_interactive.pm:445
#, fuzzy, c-format
msgid "Package selection"
msgstr "Paketų grupių pasirinkimas"

#: install_steps_interactive.pm:445
#, fuzzy, c-format
msgid "Loading from floppy"
msgstr "Atstatyti iš diskelio"

#: install_steps_interactive.pm:450
#, fuzzy, c-format
msgid "Insert a floppy containing package selection"
msgstr "Įdėk diskelį į kaupiklį %s"

#: install_steps_interactive.pm:533
#, c-format
msgid ""
"Due to incompatibilities of the 2.6 series kernel with the LSB runtime\n"
"tests, the 2.4 series kernel will be installed as the default to insure\n"
"compliance under the \"LSB\" group selection."
msgstr ""

#: install_steps_interactive.pm:540
#, c-format
msgid "Selected size is larger than available space"
msgstr ""

#: install_steps_interactive.pm:555
#, fuzzy, c-format
msgid "Type of install"
msgstr "Pasirink paketą įdiegimui"

#: install_steps_interactive.pm:556
#, c-format
msgid ""
"You haven't selected any group of packages.\n"
"Please choose the minimal installation you want:"
msgstr ""

#: install_steps_interactive.pm:560
#, c-format
msgid "With basic documentation (recommended!)"
msgstr ""

#: install_steps_interactive.pm:561
#, c-format
msgid "Truly minimal install (especially no urpmi)"
msgstr ""

#: install_steps_interactive.pm:604 standalone/drakxtv:53
#, c-format
msgid "All"
msgstr "Visos"

#: install_steps_interactive.pm:648
#, c-format
msgid ""
"If you have all the CDs in the list below, click Ok.\n"
"If you have none of those CDs, click Cancel.\n"
"If only some CDs are missing, unselect them, then click Ok."
msgstr ""
"Jei turi visus CD žemiau esančiame sąraše, spausk Gerai.\n"
"Jei neturi nė vieno iš šių CD, spausk Nutraukti.\n"
"Jei trūksta tik kai kurių CD, atžymėk juos, o tada spausk Gerai."

#: install_steps_interactive.pm:653
#, c-format
msgid "Cd-Rom labeled \"%s\""
msgstr "CD-ROM su užrašu \"%s\""

#: install_steps_interactive.pm:673
#, c-format
msgid "Preparing installation"
msgstr "Ruošiamas įdiegimas"

#: install_steps_interactive.pm:682
#, c-format
msgid ""
"Installing package %s\n"
"%d%%"
msgstr ""
"Įdiegiamas paketas %s\n"
"%d%%"

#: install_steps_interactive.pm:728
#, c-format
msgid "Post-install configuration"
msgstr "Konfigūracija po įdiegimo"

#: install_steps_interactive.pm:734
#, fuzzy, c-format
msgid "Please insert the Boot floppy used in drive %s"
msgstr "Įdėk diskelį į kaupiklį %s"

#: install_steps_interactive.pm:740
#, fuzzy, c-format
msgid "Please insert the Update Modules floppy in drive %s"
msgstr "Įdėk tuščią diskelį į kaupiklį %s"

#: install_steps_interactive.pm:761
#, c-format
msgid ""
"You now have the opportunity to download updated packages. These packages\n"
"have been updated after the distribution was released. They may\n"
"contain security or bug fixes.\n"
"\n"
"To download these packages, you will need to have a working Internet \n"
"connection.\n"
"\n"
"Do you want to install the updates ?"
msgstr ""

#: install_steps_interactive.pm:782
#, fuzzy, c-format
msgid ""
"Contacting Mandrake Linux web site to get the list of available mirrors..."
msgstr ""
"Jungiamasi prie atvaizdžio (mirror), kad gautume prieinamų paketų sąrašą"

#: install_steps_interactive.pm:786
#, c-format
msgid "Choose a mirror from which to get the packages"
msgstr "Pasirink atvaizdį (mirror), iš kurio imti paketus"

#: install_steps_interactive.pm:800
#, c-format
msgid "Contacting the mirror to get the list of available packages..."
msgstr ""
"Jungiamasi prie atvaizdžio (mirror), kad gautume prieinamų paketų sąrašą"

#: install_steps_interactive.pm:804
#, fuzzy, c-format
msgid "Unable to contact mirror %s"
msgstr "Uždrausti tinklą"

#: install_steps_interactive.pm:804
#, fuzzy, c-format
msgid "Would you like to try again?"
msgstr "Ar nori nustatyti spausdintuvą?"

#: install_steps_interactive.pm:830 standalone/drakclock:42
#, c-format
msgid "Which is your timezone?"
msgstr "Kokia tavo laiko juosta?"

#: install_steps_interactive.pm:835
#, c-format
msgid "Automatic time synchronization (using NTP)"
msgstr ""

#: install_steps_interactive.pm:843
#, fuzzy, c-format
msgid "NTP Server"
msgstr "NIS serveris"

#: install_steps_interactive.pm:885 steps.pm:30
#, c-format
msgid "Summary"
msgstr "Apibendrinimas"

#: install_steps_interactive.pm:898 install_steps_interactive.pm:906
#: install_steps_interactive.pm:920 install_steps_interactive.pm:927
#: install_steps_interactive.pm:1076 services.pm:135
#: standalone/drakbackup:1937
#, fuzzy, c-format
msgid "System"
msgstr "Sistemos režimas"

#: install_steps_interactive.pm:934 install_steps_interactive.pm:961
#: install_steps_interactive.pm:978 install_steps_interactive.pm:994
#: install_steps_interactive.pm:1005
#, c-format
msgid "Hardware"
msgstr ""

#: install_steps_interactive.pm:940 install_steps_interactive.pm:949
#, c-format
msgid "Remote CUPS server"
msgstr "Nutolęs CUPS serveris"

#: install_steps_interactive.pm:940
#, c-format
msgid "No printer"
msgstr "Spausdintuvo nėra"

#: install_steps_interactive.pm:982
#, fuzzy, c-format
msgid "Do you have an ISA sound card?"
msgstr "Ar turi dar vieną?"

#: install_steps_interactive.pm:984
#, c-format
msgid "Run \"sndconfig\" after installation to configure your sound card"
msgstr ""

#: install_steps_interactive.pm:986
#, c-format
msgid "No sound card detected. Try \"harddrake\" after installation"
msgstr ""

#: install_steps_interactive.pm:1006
#, fuzzy, c-format
msgid "Graphical interface"
msgstr "X paleidžiant"

#: install_steps_interactive.pm:1012 install_steps_interactive.pm:1027
#, fuzzy, c-format
msgid "Network & Internet"
msgstr "Tinklo interfeisas"

#: install_steps_interactive.pm:1028
#, fuzzy, c-format
msgid "Proxies"
msgstr "Profailas: "

#: install_steps_interactive.pm:1029
#, fuzzy, c-format
msgid "configured"
msgstr "iš naujo nustatyti"

#: install_steps_interactive.pm:1038 install_steps_interactive.pm:1052
#: steps.pm:20
#, fuzzy, c-format
msgid "Security"
msgstr "curly"

#: install_steps_interactive.pm:1057
#, fuzzy, c-format
msgid "activated"
msgstr "Aktyvus"

#: install_steps_interactive.pm:1057
#, fuzzy, c-format
msgid "disabled"
msgstr "išjungti"

#: install_steps_interactive.pm:1066
#, fuzzy, c-format
msgid "Boot"
msgstr "Šakninis"

#. -PO: example: lilo-graphic on /dev/hda1
#: install_steps_interactive.pm:1070
#, fuzzy, c-format
msgid "%s on %s"
msgstr "Prievadas"

#: install_steps_interactive.pm:1081 services.pm:177
#, c-format
msgid "Services: %d activated for %d registered"
msgstr ""

#: install_steps_interactive.pm:1091
#, c-format
msgid "You have not configured X. Are you sure you really want this?"
msgstr ""

#: install_steps_interactive.pm:1149
#, c-format
msgid "Set root password and network authentication methods"
msgstr ""

#: install_steps_interactive.pm:1150
#, c-format
msgid "Set root password"
msgstr "Nurodyti root slaptažodį"

#: install_steps_interactive.pm:1160
#, c-format
msgid "This password is too short (it must be at least %d characters long)"
msgstr ""
"Šis slaptažodis yra pernelyg paprastas (turi būti bent %d simbolių ilgio)"

#: install_steps_interactive.pm:1165 network/netconnect.pm:492
#: standalone/drakauth:26 standalone/drakconnect:428
#: standalone/drakconnect:917
#, c-format
msgid "Authentication"
msgstr "Autentikacija"

#: install_steps_interactive.pm:1196
#, c-format
msgid "Preparing bootloader..."
msgstr "Ruošiama įkrovos tvarkyklė"

#: install_steps_interactive.pm:1206
#, c-format
msgid ""
"You appear to have an OldWorld or Unknown\n"
" machine, the yaboot bootloader will not work for you.\n"
"The install will continue, but you'll\n"
" need to use BootX or some other means to boot your machine"
msgstr ""

#: install_steps_interactive.pm:1212
#, c-format
msgid "Do you want to use aboot?"
msgstr "Ar nori naudoti aboot?"

#: install_steps_interactive.pm:1215
#, c-format
msgid ""
"Error installing aboot, \n"
"try to force installation even if that destroys the first partition?"
msgstr ""
"Klaida įdiegiant aboot,\n"
"bandyti įdiegti priverstinai, net jei tai sunaikintų pirmąjį skirsnį?"

#: install_steps_interactive.pm:1226
#, fuzzy, c-format
msgid "Installing bootloader"
msgstr "Įdiegti įkrovos tvarkyklę"

#: install_steps_interactive.pm:1233
#, c-format
msgid "Installation of bootloader failed. The following error occured:"
msgstr "Nepavyko įdiegti įkrovos tvarkyklės. Įvyko tokia klaida:"

#: install_steps_interactive.pm:1238
#, c-format
msgid ""
"You may need to change your Open Firmware boot-device to\n"
" enable the bootloader.  If you don't see the bootloader prompt at\n"
" reboot, hold down Command-Option-O-F at reboot and enter:\n"
" setenv boot-device %s,\\\\:tbxi\n"
" Then type: shut-down\n"
"At your next boot you should see the bootloader prompt."
msgstr ""

#: install_steps_interactive.pm:1251
#, c-format
msgid ""
"In this security level, access to the files in the Windows partition is "
"restricted to the administrator."
msgstr ""

#: install_steps_interactive.pm:1283 standalone/drakautoinst:75
#, c-format
msgid "Insert a blank floppy in drive %s"
msgstr "Įdėk tuščią diskelį į kaupiklį %s"

#: install_steps_interactive.pm:1287
#, c-format
msgid "Creating auto install floppy..."
msgstr "Kuriamas automatinio įdiegimo diskelis"

#: install_steps_interactive.pm:1298
#, c-format
msgid ""
"Some steps are not completed.\n"
"\n"
"Do you really want to quit now?"
msgstr ""
"Kai žingsniai buvo nebaigti.\n"
"\n"
"Ar tu nori išeiti dabar?"

#: install_steps_interactive.pm:1313
#, c-format
msgid "Generate auto install floppy"
msgstr "Sukurti automatinio įdiegimo diskelį"

#: install_steps_interactive.pm:1315
#, c-format
msgid ""
"The auto install can be fully automated if wanted,\n"
"in that case it will take over the hard drive!!\n"
"(this is meant for installing on another box).\n"
"\n"
"You may prefer to replay the installation.\n"
msgstr ""
"Automatinis įdiegimas reikalui esant gali būti pilnai\n"
"automatizuotas. Tokiu atveju jis užims visą diską!!\n"
"(turint omenyje įdiegimą į kitą dėžę).\n"
"\n"
"Jūs galbūt norėsite pakartoti įdiegimą.\n"

#: install_steps_newt.pm:20
#, c-format
msgid "Mandrake Linux Installation %s"
msgstr "Mandrake Linux įdiegimas %s"

#: install_steps_newt.pm:33
#, c-format
msgid ""
"  <Tab>/<Alt-Tab> between elements  | <Space> selects | <F12> next screen "
msgstr ""
"  <Tab>/<Alt-Tab> tarp elementų  | <Tarpas> parenka | <F12> kitas langas "

#: interactive.pm:170
#, fuzzy, c-format
msgid "Choose a file"
msgstr "Pasirink veiksmą"

#: interactive.pm:372
#, c-format
msgid "Basic"
msgstr "Esmė"

#: interactive.pm:403 interactive/newt.pm:308 ugtk2.pm:509
#, c-format
msgid "Finish"
msgstr "Baigti"

#: interactive/newt.pm:83
#, fuzzy, c-format
msgid "Do"
msgstr "Atlikta"

#: interactive/stdio.pm:29 interactive/stdio.pm:148
#, c-format
msgid "Bad choice, try again\n"
msgstr "Blogas pasirinkimas, bandyk vėl\n"

#: interactive/stdio.pm:30 interactive/stdio.pm:149
#, c-format
msgid "Your choice? (default %s) "
msgstr "Tavo pasirinkimas? (pagal nutylėjimą %s) "

#: interactive/stdio.pm:54
#, c-format
msgid ""
"Entries you'll have to fill:\n"
"%s"
msgstr ""

#: interactive/stdio.pm:70
#, fuzzy, c-format
msgid "Your choice? (0/1, default `%s') "
msgstr "Tavo pasirinkimas? (pagal nutylėjimą %s) "

#: interactive/stdio.pm:94
#, fuzzy, c-format
msgid "Button `%s': %s"
msgstr "Pasirinktys: %s"

#: interactive/stdio.pm:95
#, fuzzy, c-format
msgid "Do you want to click on this button?"
msgstr "Ar nori naudoti aboot?"

#: interactive/stdio.pm:104
#, fuzzy, c-format
msgid "Your choice? (default `%s'%s) "
msgstr "Tavo pasirinkimas? (pagal nutylėjimą %s) "

#: interactive/stdio.pm:104
#, c-format
msgid " enter `void' for void entry"
msgstr ""

#: interactive/stdio.pm:122
#, c-format
msgid "=> There are many things to choose from (%s).\n"
msgstr ""

#: interactive/stdio.pm:125
#, c-format
msgid ""
"Please choose the first number of the 10-range you wish to edit,\n"
"or just hit Enter to proceed.\n"
"Your choice? "
msgstr ""

#: interactive/stdio.pm:138
#, c-format
msgid ""
"=> Notice, a label changed:\n"
"%s"
msgstr ""

#: interactive/stdio.pm:145
#, c-format
msgid "Re-submit"
msgstr ""

#: keyboard.pm:137 keyboard.pm:169
#, c-format
msgid "Czech (QWERTZ)"
msgstr "Čekų (QWERTZ)"

#: keyboard.pm:138 keyboard.pm:171
#, c-format
msgid "German"
msgstr "Vokiečių"

#: keyboard.pm:139
#, c-format
msgid "Dvorak"
msgstr "Dvorako"

#: keyboard.pm:140 keyboard.pm:179
#, c-format
msgid "Spanish"
msgstr "Ispanų"

#: keyboard.pm:141 keyboard.pm:180
#, c-format
msgid "Finnish"
msgstr "Suomių"

#: keyboard.pm:142 keyboard.pm:181
#, c-format
msgid "French"
msgstr "Prancūzų"

#: keyboard.pm:143 keyboard.pm:217
#, c-format
msgid "Norwegian"
msgstr "Norvegų"

#: keyboard.pm:144
#, c-format
msgid "Polish"
msgstr "Lenkų"

#: keyboard.pm:145 keyboard.pm:226
#, c-format
msgid "Russian"
msgstr "Rusų"

#: keyboard.pm:147 keyboard.pm:230
#, c-format
msgid "Swedish"
msgstr "Švedų"

#: keyboard.pm:148 keyboard.pm:249
#, c-format
msgid "UK keyboard"
msgstr "Jungtinės karalystės klaviatūra"

#: keyboard.pm:149 keyboard.pm:250
#, c-format
msgid "US keyboard"
msgstr "JAV klaviatūra"

#: keyboard.pm:151
#, fuzzy, c-format
msgid "Albanian"
msgstr "Iraniečių"

#: keyboard.pm:152
#, c-format
msgid "Armenian (old)"
msgstr "Armėnų (senoji)"

#: keyboard.pm:153
#, c-format
msgid "Armenian (typewriter)"
msgstr "Armėnų (spausd. mašinėlės)"

#: keyboard.pm:154
#, c-format
msgid "Armenian (phonetic)"
msgstr "Armėnų (fonetinė)"

#: keyboard.pm:155
#, c-format
msgid "Arabic"
msgstr ""

#: keyboard.pm:156
#, c-format
msgid "Azerbaidjani (latin)"
msgstr "Azerbaidžaniečių (lotyniška)"

#: keyboard.pm:158
#, c-format
msgid "Belgian"
msgstr "Belgų"

#: keyboard.pm:159
#, fuzzy, c-format
msgid "Bengali"
msgstr "įjungti"

#: keyboard.pm:160
#, fuzzy, c-format
msgid "Bulgarian (phonetic)"
msgstr "Armėnų (fonetinė)"

#: keyboard.pm:161
#, fuzzy, c-format
msgid "Bulgarian (BDS)"
msgstr "Bulgarų"

#: keyboard.pm:162
#, c-format
msgid "Brazilian (ABNT-2)"
msgstr "Brazilų (ABNT-2)"

#: keyboard.pm:165
#, fuzzy, c-format
msgid "Bosnian"
msgstr "Estų"

#: keyboard.pm:166
#, c-format
msgid "Belarusian"
msgstr "Baltarusių"

#: keyboard.pm:167
#, c-format
msgid "Swiss (German layout)"
msgstr "Šveicarų (Vokiškas išdėstymas)"

#: keyboard.pm:168
#, c-format
msgid "Swiss (French layout)"
msgstr "Šveicarų. (Prancūziškas išdėstymas)"

#: keyboard.pm:170
#, c-format
msgid "Czech (QWERTY)"
msgstr "Čekų (QWERTY)"

#: keyboard.pm:172
#, c-format
msgid "German (no dead keys)"
msgstr "Vokiečių (be mirusių klavišų)"

#: keyboard.pm:173
#, c-format
msgid "Devanagari"
msgstr ""

#: keyboard.pm:174
#, c-format
msgid "Danish"
msgstr "Danų"

#: keyboard.pm:175
#, c-format
msgid "Dvorak (US)"
msgstr "Dvorako (JAV)"

#: keyboard.pm:176
#, c-format
msgid "Dvorak (Norwegian)"
msgstr "Dvorako (Norvegų)"

#: keyboard.pm:177
#, fuzzy, c-format
msgid "Dvorak (Swedish)"
msgstr "Dvorako (JAV)"

#: keyboard.pm:178
#, c-format
msgid "Estonian"
msgstr "Estų"

#: keyboard.pm:182
#, c-format
msgid "Georgian (\"Russian\" layout)"
msgstr "Gruzinų (\"Rusiškas\" išdėstymas)"

#: keyboard.pm:183
#, c-format
msgid "Georgian (\"Latin\" layout)"
msgstr "Gruzinų (\"Latin\" išdėstymas)"

#: keyboard.pm:184
#, c-format
msgid "Greek"
msgstr "Graikų"

#: keyboard.pm:185
#, c-format
msgid "Greek (polytonic)"
msgstr ""

#: keyboard.pm:186
#, c-format
msgid "Gujarati"
msgstr ""

#: keyboard.pm:187
#, c-format
msgid "Gurmukhi"
msgstr ""

#: keyboard.pm:188
#, c-format
msgid "Hungarian"
msgstr "Vengrų"

#: keyboard.pm:189
#, c-format
msgid "Croatian"
msgstr "Kroatų"

#: keyboard.pm:190
#, c-format
msgid "Irish"
msgstr ""

#: keyboard.pm:191
#, c-format
msgid "Israeli"
msgstr "Izraelio"

#: keyboard.pm:192
#, c-format
msgid "Israeli (Phonetic)"
msgstr "Žydų (Fonetinė)"

#: keyboard.pm:193
#, c-format
msgid "Iranian"
msgstr "Iraniečių"

#: keyboard.pm:194
#, c-format
msgid "Icelandic"
msgstr "Islandų"

#: keyboard.pm:195
#, c-format
msgid "Italian"
msgstr "Italų"

#: keyboard.pm:196
#, c-format
msgid "Inuktitut"
msgstr ""

#: keyboard.pm:197
#, c-format
msgid "Japanese 106 keys"
msgstr "Japoniška 106 klavišų"

#: keyboard.pm:198
#, c-format
msgid "Kannada"
msgstr ""

#: keyboard.pm:201
#, fuzzy, c-format
msgid "Korean keyboard"
msgstr "Jungtinės karalystės klaviatūra"

#: keyboard.pm:202
#, c-format
msgid "Latin American"
msgstr "Lotynų Amerikos"

#: keyboard.pm:203
#, fuzzy, c-format
msgid "Laotian"
msgstr "Vieta"

#: keyboard.pm:204
#, c-format
msgid "Lithuanian AZERTY (old)"
msgstr "Lietuvių ĄŽERTY (sena)"

#: keyboard.pm:206
#, c-format
msgid "Lithuanian AZERTY (new)"
msgstr "Lietuvių ĄŽERTY (nauja)"

#: keyboard.pm:207
#, c-format
msgid "Lithuanian \"number row\" QWERTY"
msgstr "Lietuvių \"skaičių eilė\" QWERTY"

#: keyboard.pm:208
#, c-format
msgid "Lithuanian \"phonetic\" QWERTY"
msgstr "Lietuvių \"fonetinė\" QWERTY"

#: keyboard.pm:209
#, fuzzy, c-format
msgid "Latvian"
msgstr "Vieta"

#: keyboard.pm:210
#, c-format
msgid "Malayalam"
msgstr ""

#: keyboard.pm:211
#, c-format
msgid "Macedonian"
msgstr "Makedoniečių"

#: keyboard.pm:212
#, c-format
msgid "Myanmar (Burmese)"
msgstr ""

#: keyboard.pm:213
#, fuzzy, c-format
msgid "Mongolian (cyrillic)"
msgstr "Azerbaidžaniečių (kirilica)"

#: keyboard.pm:214
#, c-format
msgid "Maltese (UK)"
msgstr ""

#: keyboard.pm:215
#, c-format
msgid "Maltese (US)"
msgstr ""

#: keyboard.pm:216
#, c-format
msgid "Dutch"
msgstr "Olandų"

#: keyboard.pm:218
#, c-format
msgid "Oriya"
msgstr ""

#: keyboard.pm:219
#, c-format
msgid "Polish (qwerty layout)"
msgstr "Lenkų (QWERTY išdėstymas)"

#: keyboard.pm:220
#, c-format
msgid "Polish (qwertz layout)"
msgstr "Lenkų (QWERTZ išdėstymas)"

#: keyboard.pm:221
#, c-format
msgid "Portuguese"
msgstr "Portugalų"

#: keyboard.pm:222
#, c-format
msgid "Canadian (Quebec)"
msgstr "Kanadiečių (Kvebeko)"

#: keyboard.pm:224
#, fuzzy, c-format
msgid "Romanian (qwertz)"
msgstr "Rusiška (Yawerty)"

#: keyboard.pm:225
#, fuzzy, c-format
msgid "Romanian (qwerty)"
msgstr "Rusiška (Yawerty)"

#: keyboard.pm:227
#, c-format
msgid "Russian (Phonetic)"
msgstr "Rusiška (Fonetinė)"

#: keyboard.pm:228
#, fuzzy, c-format
msgid "Saami (norwegian)"
msgstr "Dvorako (Norvegų)"

#: keyboard.pm:229
#, c-format
msgid "Saami (swedish/finnish)"
msgstr ""

#: keyboard.pm:231
#, c-format
msgid "Slovenian"
msgstr "Slovėnų"

#: keyboard.pm:232
#, c-format
msgid "Slovakian (QWERTZ)"
msgstr "Slovakų (QWERTZ)"

#: keyboard.pm:233
#, c-format
msgid "Slovakian (QWERTY)"
msgstr "Slovakų (QWERTY)"

#: keyboard.pm:235
#, fuzzy, c-format
msgid "Serbian (cyrillic)"
msgstr "Azerbaidžaniečių (kirilica)"

#: keyboard.pm:236
#, fuzzy, c-format
msgid "Syriac"
msgstr "nuoseklioji"

#: keyboard.pm:237
#, fuzzy, c-format
msgid "Syriac (phonetic)"
msgstr "Armėnų (fonetinė)"

#: keyboard.pm:238
#, fuzzy, c-format
msgid "Telugu"
msgstr "Belgų"

#: keyboard.pm:240
#, c-format
msgid "Tamil (ISCII-layout)"
msgstr ""

#: keyboard.pm:241
#, fuzzy, c-format
msgid "Tamil (Typewriter-layout)"
msgstr "Armėnų (spausd. mašinėlės)"

#: keyboard.pm:242
#, c-format
msgid "Thai keyboard"
msgstr "Thai klaviatūra"

#: keyboard.pm:244
#, fuzzy, c-format
msgid "Tajik keyboard"
msgstr "Thai klaviatūra"

#: keyboard.pm:245
#, c-format
msgid "Turkish (traditional \"F\" model)"
msgstr "Turkų (tradicinis \"F\" modelis)"

#: keyboard.pm:246
#, c-format
msgid "Turkish (modern \"Q\" model)"
msgstr "Turkų (šiuolaikinis \"Q\" modelis)"

#: keyboard.pm:248
#, c-format
msgid "Ukrainian"
msgstr "Ukrainiečių"

#: keyboard.pm:251
#, c-format
msgid "US keyboard (international)"
msgstr "JAV klaviatūra (tarptautinė)"

#: keyboard.pm:252
#, fuzzy, c-format
msgid "Uzbek (cyrillic)"
msgstr "Azerbaidžaniečių (kirilica)"

#: keyboard.pm:253
#, c-format
msgid "Vietnamese \"numeric row\" QWERTY"
msgstr "Vietnamiečių \"skaičių eilė\" QWERTY"

#: keyboard.pm:254
#, fuzzy, c-format
msgid "Yugoslavian (latin)"
msgstr "Jugoslavų (lotyniškas/kirilikos)"

#: keyboard.pm:261
#, c-format
msgid "Right Alt key"
msgstr ""

#: keyboard.pm:262
#, c-format
msgid "Both Shift keys simultaneously"
msgstr ""

#: keyboard.pm:263
#, c-format
msgid "Control and Shift keys simultaneously"
msgstr ""

#: keyboard.pm:264
#, c-format
msgid "CapsLock key"
msgstr ""

#: keyboard.pm:265
#, c-format
msgid "Ctrl and Alt keys simultaneously"
msgstr ""

#: keyboard.pm:266
#, c-format
msgid "Alt and Shift keys simultaneously"
msgstr ""

#: keyboard.pm:267
#, c-format
msgid "\"Menu\" key"
msgstr ""

#: keyboard.pm:268
#, c-format
msgid "Left \"Windows\" key"
msgstr ""

#: keyboard.pm:269
#, c-format
msgid "Right \"Windows\" key"
msgstr ""

#: keyboard.pm:270
#, c-format
msgid "Both Control keys simultaneously"
msgstr ""

#: keyboard.pm:271
#, c-format
msgid "Both Alt keys simultaneously"
msgstr ""

#: keyboard.pm:272
#, c-format
msgid "Left Shift key"
msgstr ""

#: keyboard.pm:273
#, c-format
msgid "Right Shift key"
msgstr ""

#: keyboard.pm:274
#, c-format
msgid "Left Alt key"
msgstr ""

#: keyboard.pm:275
#, fuzzy, c-format
msgid "Left Control key"
msgstr "Nutolęs spausdintuvas"

#: keyboard.pm:276
#, fuzzy, c-format
msgid "Right Control key"
msgstr "Nutolęs spausdintuvas"

#: keyboard.pm:307
#, c-format
msgid ""
"Here you can choose the key or key combination that will \n"
"allow switching between the different keyboard layouts\n"
"(eg: latin and non latin)"
msgstr ""

#: keyboard.pm:312
#, c-format
msgid ""
"This setting will be activated after the installation.\n"
"During installation, you will need to use the Right Control\n"
"key to switch between the different keyboard layouts."
msgstr ""

#: lang.pm:144
#, c-format
msgid "default:LTR"
msgstr "default:LTR"

#: lang.pm:160
#, c-format
msgid "Afghanistan"
msgstr "Afganistanas"

#: lang.pm:161
#, c-format
msgid "Andorra"
msgstr "Andora"

#: lang.pm:162
#, c-format
msgid "United Arab Emirates"
msgstr "Jungtiniai Arabų Emyratai"

#: lang.pm:163
#, c-format
msgid "Antigua and Barbuda"
msgstr ""

#: lang.pm:164
#, c-format
msgid "Anguilla"
msgstr ""

#: lang.pm:165
#, c-format
msgid "Albania"
msgstr "Albanija"

#: lang.pm:166
#, c-format
msgid "Armenia"
msgstr "Armėnija"

#: lang.pm:167
#, c-format
msgid "Netherlands Antilles"
msgstr ""

#: lang.pm:168
#, c-format
msgid "Angola"
msgstr "Angola"

#: lang.pm:169
#, c-format
msgid "Antarctica"
msgstr "Antarktika"

#: lang.pm:170 standalone/drakxtv:51
#, c-format
msgid "Argentina"
msgstr "Argentina"

#: lang.pm:171
#, c-format
msgid "American Samoa"
msgstr ""

#: lang.pm:173 standalone/drakxtv:49
#, fuzzy, c-format
msgid "Australia"
msgstr "nuoseklioji"

#: lang.pm:174
#, c-format
msgid "Aruba"
msgstr "Aruba"

#: lang.pm:175
#, c-format
msgid "Azerbaijan"
msgstr "Azerbaidžanas"

#: lang.pm:176
#, c-format
msgid "Bosnia and Herzegovina"
msgstr ""

#: lang.pm:177
#, c-format
msgid "Barbados"
msgstr ""

#: lang.pm:178
#, c-format
msgid "Bangladesh"
msgstr "Bangladešas"

#: lang.pm:180
#, c-format
msgid "Burkina Faso"
msgstr ""

#: lang.pm:181
#, c-format
msgid "Bulgaria"
msgstr "Bulgarija"

#: lang.pm:182
#, c-format
msgid "Bahrain"
msgstr "Bahreinas"

#: lang.pm:183
#, c-format
msgid "Burundi"
msgstr "Burundis"

#: lang.pm:184
#, c-format
msgid "Benin"
msgstr "Beninas"

#: lang.pm:185
#, c-format
msgid "Bermuda"
msgstr "Bermudai"

#: lang.pm:186
#, c-format
msgid "Brunei Darussalam"
msgstr ""

#: lang.pm:187
#, c-format
msgid "Bolivia"
msgstr "Bolivija"

#: lang.pm:188
#, c-format
msgid "Brazil"
msgstr "Brazilija"

#: lang.pm:189
#, c-format
msgid "Bahamas"
msgstr "Bahamai"

#: lang.pm:190
#, c-format
msgid "Bhutan"
msgstr "Butanas"

#: lang.pm:191
#, c-format
msgid "Bouvet Island"
msgstr ""

#: lang.pm:192
#, c-format
msgid "Botswana"
msgstr "Botsvana"

#: lang.pm:193
#, c-format
msgid "Belarus"
msgstr "Gudija"

#: lang.pm:194
#, c-format
msgid "Belize"
msgstr "Belizas"

#: lang.pm:195
#, c-format
msgid "Canada"
msgstr "Kanada"

#: lang.pm:196
#, c-format
msgid "Cocos (Keeling) Islands"
msgstr ""

#: lang.pm:197
#, c-format
msgid "Congo (Kinshasa)"
msgstr ""

#: lang.pm:198
#, c-format
msgid "Central African Republic"
msgstr "Centrinė Afrikos respublika"

#: lang.pm:199
#, c-format
msgid "Congo (Brazzaville)"
msgstr ""

#: lang.pm:200
#, c-format
msgid "Switzerland"
msgstr "Šveicarija"

#: lang.pm:201
#, c-format
msgid "Cote d'Ivoire"
msgstr ""

#: lang.pm:202
#, c-format
msgid "Cook Islands"
msgstr ""

#: lang.pm:203
#, c-format
msgid "Chile"
msgstr "Čilė"

#: lang.pm:204
#, c-format
msgid "Cameroon"
msgstr "Kamerūnas"

#: lang.pm:205
#, c-format
msgid "China"
msgstr "Kinija"

#: lang.pm:206
#, c-format
msgid "Colombia"
msgstr "Kolumbija"

#: lang.pm:208
#, c-format
msgid "Cuba"
msgstr "Kuba"

#: lang.pm:209
#, c-format
msgid "Cape Verde"
msgstr "Žaliasis kyšulys"

#: lang.pm:210
#, c-format
msgid "Christmas Island"
msgstr "Kalėdų sala"

#: lang.pm:211
#, c-format
msgid "Cyprus"
msgstr "Kipras"

#: lang.pm:214
#, c-format
msgid "Djibouti"
msgstr "Džibutis"

#: lang.pm:215
#, c-format
msgid "Denmark"
msgstr "Danija"

#: lang.pm:216
#, c-format
msgid "Dominica"
msgstr "Dominika"

#: lang.pm:217
#, c-format
msgid "Dominican Republic"
msgstr "Dominikonų respublika"

#: lang.pm:218
#, c-format
msgid "Algeria"
msgstr "Alžyras"

#: lang.pm:219
#, c-format
msgid "Ecuador"
msgstr "Ekvadoras"

#: lang.pm:220
#, c-format
msgid "Estonia"
msgstr "Estija"

#: lang.pm:221
#, c-format
msgid "Egypt"
msgstr "Egiptas"

#: lang.pm:222
#, c-format
msgid "Western Sahara"
msgstr "Vakarų Sachara"

#: lang.pm:223
#, c-format
msgid "Eritrea"
msgstr "Eritrėja"

#: lang.pm:224 network/adsl_consts.pm:193 network/adsl_consts.pm:200
#: network/adsl_consts.pm:209 network/adsl_consts.pm:220
#, c-format
msgid "Spain"
msgstr "Ispanija"

#: lang.pm:225
#, c-format
msgid "Ethiopia"
msgstr "Etiopija"

#: lang.pm:226 network/adsl_consts.pm:119
#, c-format
msgid "Finland"
msgstr "Suomija"

#: lang.pm:227
#, c-format
msgid "Fiji"
msgstr "Fidžis"

#: lang.pm:228
#, c-format
msgid "Falkland Islands (Malvinas)"
msgstr ""

#: lang.pm:229
#, c-format
msgid "Micronesia"
msgstr "Mikronezija"

#: lang.pm:230
#, c-format
msgid "Faroe Islands"
msgstr ""

#: lang.pm:232
#, c-format
msgid "Gabon"
msgstr "Gabonas"

#: lang.pm:233 network/adsl_consts.pm:237 network/adsl_consts.pm:244
#: network/netconnect.pm:51
#, c-format
msgid "United Kingdom"
msgstr "Jungtinė Karalystė"

#: lang.pm:234
#, c-format
msgid "Grenada"
msgstr "Grenada"

#: lang.pm:235
#, c-format
msgid "Georgia"
msgstr "Gruzija"

#: lang.pm:236
#, c-format
msgid "French Guiana"
msgstr ""

#: lang.pm:237
#, c-format
msgid "Ghana"
msgstr "Gana"

#: lang.pm:238
#, c-format
msgid "Gibraltar"
msgstr "Gibraltaras"

#: lang.pm:239
#, c-format
msgid "Greenland"
msgstr "Grenlandija"

#: lang.pm:240
#, c-format
msgid "Gambia"
msgstr "Gambija"

#: lang.pm:241
#, c-format
msgid "Guinea"
msgstr "Gvinėja"

#: lang.pm:242
#, c-format
msgid "Guadeloupe"
msgstr "Gvadelupė"

#: lang.pm:243
#, c-format
msgid "Equatorial Guinea"
msgstr "Pusiaujo Gvinėja"

#: lang.pm:245
#, c-format
msgid "South Georgia and the South Sandwich Islands"
msgstr ""

#: lang.pm:246
#, c-format
msgid "Guatemala"
msgstr "Gvatemala"

#: lang.pm:247
#, c-format
msgid "Guam"
msgstr "Guamas"

#: lang.pm:248
#, c-format
msgid "Guinea-Bissau"
msgstr ""

#: lang.pm:249
#, c-format
msgid "Guyana"
msgstr "Gajana"

#: lang.pm:250
#, fuzzy, c-format
msgid "China (Hong Kong)"
msgstr "Honkongas"

#: lang.pm:251
#, c-format
msgid "Heard and McDonald Islands"
msgstr ""

#: lang.pm:252
#, c-format
msgid "Honduras"
msgstr "Hondūras"

#: lang.pm:253
#, c-format
msgid "Croatia"
msgstr "Kroatija"

#: lang.pm:254
#, c-format
msgid "Haiti"
msgstr "Haitis"

#: lang.pm:255 network/adsl_consts.pm:144
#, c-format
msgid "Hungary"
msgstr "Vengrija"

#: lang.pm:256
#, c-format
msgid "Indonesia"
msgstr "Indonezija"

#: lang.pm:257 standalone/drakxtv:48
#, fuzzy, c-format
msgid "Ireland"
msgstr "Islandų"

#: lang.pm:258
#, c-format
msgid "Israel"
msgstr "Izraelis"

#: lang.pm:259
#, c-format
msgid "India"
msgstr "Indija"

#: lang.pm:260
#, c-format
msgid "British Indian Ocean Territory"
msgstr ""

#: lang.pm:261
#, c-format
msgid "Iraq"
msgstr ""

#: lang.pm:262
#, fuzzy, c-format
msgid "Iran"
msgstr "Iraniečių"

#: lang.pm:263
#, c-format
msgid "Iceland"
msgstr "Islandija"

#: lang.pm:265
#, c-format
msgid "Jamaica"
msgstr "Jamaika"

#: lang.pm:266
#, fuzzy, c-format
msgid "Jordan"
msgstr "Iraniečių"

#: lang.pm:267
#, c-format
msgid "Japan"
msgstr "Japonija"

#: lang.pm:268
#, c-format
msgid "Kenya"
msgstr "Kenija"

#: lang.pm:269
#, c-format
msgid "Kyrgyzstan"
msgstr "Kirgistanas"

#: lang.pm:270
#, c-format
msgid "Cambodia"
msgstr "Kambodža"

#: lang.pm:271
#, c-format
msgid "Kiribati"
msgstr "Kiribatis"

#: lang.pm:272
#, c-format
msgid "Comoros"
msgstr "Komorai"

#: lang.pm:273
#, c-format
msgid "Saint Kitts and Nevis"
msgstr ""

#: lang.pm:274
#, c-format
msgid "Korea (North)"
msgstr ""

#: lang.pm:275
#, fuzzy, c-format
msgid "Korea"
msgstr "Dar"

#: lang.pm:276
#, c-format
msgid "Kuwait"
msgstr "Kuveitas"

#: lang.pm:277
#, c-format
msgid "Cayman Islands"
msgstr ""

#: lang.pm:278
#, c-format
msgid "Kazakhstan"
msgstr "Kazachstanas"

#: lang.pm:279
#, c-format
msgid "Laos"
msgstr "Laosas"

#: lang.pm:280
#, c-format
msgid "Lebanon"
msgstr "Libanas"

#: lang.pm:281
#, c-format
msgid "Saint Lucia"
msgstr ""

#: lang.pm:282
#, c-format
msgid "Liechtenstein"
msgstr "Lichtenšteinas"

#: lang.pm:283
#, c-format
msgid "Sri Lanka"
msgstr "Šri Lanka"

#: lang.pm:284
#, c-format
msgid "Liberia"
msgstr "Liberija"

#: lang.pm:285
#, c-format
msgid "Lesotho"
msgstr ""

#: lang.pm:286
#, c-format
msgid "Lithuania"
msgstr "Lietuva"

#: lang.pm:287
#, c-format
msgid "Luxembourg"
msgstr "Liuksemburgas"

#: lang.pm:288
#, c-format
msgid "Latvia"
msgstr "Latvija"

#: lang.pm:289
#, fuzzy, c-format
msgid "Libya"
msgstr "Liberija"

#: lang.pm:290
#, c-format
msgid "Morocco"
msgstr "Marokas"

#: lang.pm:291
#, c-format
msgid "Monaco"
msgstr "Monakas"

#: lang.pm:292
#, fuzzy, c-format
msgid "Moldova"
msgstr "Pirmadienis"

#: lang.pm:293
#, c-format
msgid "Madagascar"
msgstr "Madagaskaras"

#: lang.pm:294
#, c-format
msgid "Marshall Islands"
msgstr "Maršalo salos"

#: lang.pm:295
#, c-format
msgid "Macedonia"
msgstr "Makedonija"

#: lang.pm:296
#, c-format
msgid "Mali"
msgstr "Malis"

#: lang.pm:297
#, c-format
msgid "Myanmar"
msgstr ""

#: lang.pm:298
#, c-format
msgid "Mongolia"
msgstr "Mongolija"

#: lang.pm:299
#, c-format
msgid "Northern Mariana Islands"
msgstr ""

#: lang.pm:300
#, c-format
msgid "Martinique"
msgstr "Martinika"

#: lang.pm:301
#, c-format
msgid "Mauritania"
msgstr "Mauritanija"

#: lang.pm:302
#, c-format
msgid "Montserrat"
msgstr ""

#: lang.pm:303
#, c-format
msgid "Malta"
msgstr "Malta"

#: lang.pm:304
#, c-format
msgid "Mauritius"
msgstr "Mauricijus"

#: lang.pm:305
#, c-format
msgid "Maldives"
msgstr "Maldyvai"

#: lang.pm:306
#, c-format
msgid "Malawi"
msgstr ""

#: lang.pm:307
#, c-format
msgid "Mexico"
msgstr "Meksika"

#: lang.pm:308
#, c-format
msgid "Malaysia"
msgstr "Malaizija"

#: lang.pm:309
#, c-format
msgid "Mozambique"
msgstr "Mozambikas"

#: lang.pm:310
#, c-format
msgid "Namibia"
msgstr "Namibija"

#: lang.pm:311
#, c-format
msgid "New Caledonia"
msgstr "Naujoji Kaledonija"

#: lang.pm:312
#, c-format
msgid "Niger"
msgstr "Nigeris"

#: lang.pm:313
#, c-format
msgid "Norfolk Island"
msgstr "Norfolko sala"

#: lang.pm:314
#, c-format
msgid "Nigeria"
msgstr "Nigerija"

#: lang.pm:315
#, c-format
msgid "Nicaragua"
msgstr "Nikaragva"

#: lang.pm:318
#, c-format
msgid "Nepal"
msgstr "Nepalas"

#: lang.pm:319
#, c-format
msgid "Nauru"
msgstr ""

#: lang.pm:320
#, c-format
msgid "Niue"
msgstr ""

#: lang.pm:321
#, c-format
msgid "New Zealand"
msgstr "Naujoji Zelandija"

#: lang.pm:322
#, c-format
msgid "Oman"
msgstr "Omanas"

#: lang.pm:323
#, c-format
msgid "Panama"
msgstr "Panama"

#: lang.pm:324
#, c-format
msgid "Peru"
msgstr "Peru"

#: lang.pm:325
#, c-format
msgid "French Polynesia"
msgstr ""

#: lang.pm:326
#, c-format
msgid "Papua New Guinea"
msgstr "Papua Naujoji Gvinėja"

#: lang.pm:327
#, c-format
msgid "Philippines"
msgstr "Filipinai"

#: lang.pm:328
#, c-format
msgid "Pakistan"
msgstr "Pakistanas"

#: lang.pm:329 network/adsl_consts.pm:177
#, c-format
msgid "Poland"
msgstr "Lenkija"

#: lang.pm:330
#, c-format
msgid "Saint Pierre and Miquelon"
msgstr ""

#: lang.pm:331
#, c-format
msgid "Pitcairn"
msgstr ""

#: lang.pm:332
#, c-format
msgid "Puerto Rico"
msgstr "Puerto Rikas"

#: lang.pm:333
#, fuzzy, c-format
msgid "Palestine"
msgstr "Išsaugoti paketų pasirinkimą"

#: lang.pm:334 network/adsl_consts.pm:187
#, c-format
msgid "Portugal"
msgstr "Portugalija"

#: lang.pm:335
#, c-format
msgid "Paraguay"
msgstr "Paragvajus"

#: lang.pm:336
#, c-format
msgid "Palau"
msgstr ""

#: lang.pm:337
#, c-format
msgid "Qatar"
msgstr "Kvataras"

#: lang.pm:338
#, c-format
msgid "Reunion"
msgstr ""

#: lang.pm:339
#, c-format
msgid "Romania"
msgstr "Rumunija"

#: lang.pm:340
#, fuzzy, c-format
msgid "Russia"
msgstr "Rusų"

#: lang.pm:341
#, c-format
msgid "Rwanda"
msgstr "Ruanda"

#: lang.pm:342
#, c-format
msgid "Saudi Arabia"
msgstr "Saudo Arabija"

#: lang.pm:343
#, c-format
msgid "Solomon Islands"
msgstr ""

#: lang.pm:344
#, c-format
msgid "Seychelles"
msgstr "Seišeliai"

#: lang.pm:345
#, c-format
msgid "Sudan"
msgstr "Sudanas"

#: lang.pm:347
#, c-format
msgid "Singapore"
msgstr "Singapūras"

#: lang.pm:348
#, c-format
msgid "Saint Helena"
msgstr ""

#: lang.pm:349
#, c-format
msgid "Slovenia"
msgstr "Slovėnija"

#: lang.pm:350
#, c-format
msgid "Svalbard and Jan Mayen Islands"
msgstr ""

#: lang.pm:351
#, c-format
msgid "Slovakia"
msgstr "Slovakija"

#: lang.pm:352
#, c-format
msgid "Sierra Leone"
msgstr "Siera Leonė"

#: lang.pm:353
#, c-format
msgid "San Marino"
msgstr "San Marinas"

#: lang.pm:354
#, c-format
msgid "Senegal"
msgstr "Senegalas"

#: lang.pm:355
#, c-format
msgid "Somalia"
msgstr "Somalis"

#: lang.pm:356
#, c-format
msgid "Suriname"
msgstr "Surinamas"

#: lang.pm:357
#, c-format
msgid "Sao Tome and Principe"
msgstr ""

#: lang.pm:358
#, c-format
msgid "El Salvador"
msgstr ""

#: lang.pm:359
#, c-format
msgid "Syria"
msgstr ""

#: lang.pm:360
#, c-format
msgid "Swaziland"
msgstr "Svazilendas"

#: lang.pm:361
#, c-format
msgid "Turks and Caicos Islands"
msgstr ""

#: lang.pm:362
#, c-format
msgid "Chad"
msgstr "Čadas"

#: lang.pm:363
#, c-format
msgid "French Southern Territories"
msgstr ""

#: lang.pm:364
#, c-format
msgid "Togo"
msgstr "Togas"

#: lang.pm:365
#, c-format
msgid "Thailand"
msgstr "Tailandas"

#: lang.pm:366
#, c-format
msgid "Tajikistan"
msgstr "Tadžikistanas"

#: lang.pm:367
#, c-format
msgid "Tokelau"
msgstr ""

#: lang.pm:368
#, c-format
msgid "East Timor"
msgstr "Rytų Timoras"

#: lang.pm:369
#, c-format
msgid "Turkmenistan"
msgstr "Turkmėnistanas"

#: lang.pm:370
#, c-format
msgid "Tunisia"
msgstr "Tunisas"

#: lang.pm:371
#, c-format
msgid "Tonga"
msgstr "Tonga"

#: lang.pm:372
#, c-format
msgid "Turkey"
msgstr "Turkija"

#: lang.pm:373
#, c-format
msgid "Trinidad and Tobago"
msgstr ""

#: lang.pm:374
#, c-format
msgid "Tuvalu"
msgstr ""

#: lang.pm:375
#, fuzzy, c-format
msgid "Taiwan"
msgstr "Vieta"

#: lang.pm:376
#, c-format
msgid "Tanzania"
msgstr ""

#: lang.pm:377
#, c-format
msgid "Ukraine"
msgstr "Ukraina"

#: lang.pm:378
#, c-format
msgid "Uganda"
msgstr "Uganda"

#: lang.pm:379
#, c-format
msgid "United States Minor Outlying Islands"
msgstr ""

#: lang.pm:381
#, c-format
msgid "Uruguay"
msgstr "Urugvajus"

#: lang.pm:382
#, c-format
msgid "Uzbekistan"
msgstr "Uzbekistanas"

#: lang.pm:383
#, fuzzy, c-format
msgid "Vatican"
msgstr "Vieta"

#: lang.pm:384
#, c-format
msgid "Saint Vincent and the Grenadines"
msgstr ""

#: lang.pm:385
#, c-format
msgid "Venezuela"
msgstr "Venesuela"

#: lang.pm:386
#, c-format
msgid "Virgin Islands (British)"
msgstr ""

#: lang.pm:387
#, c-format
msgid "Virgin Islands (U.S.)"
msgstr ""

#: lang.pm:388
#, c-format
msgid "Vietnam"
msgstr ""

#: lang.pm:389
#, c-format
msgid "Vanuatu"
msgstr "Vanuatu"

#: lang.pm:390
#, c-format
msgid "Wallis and Futuna"
msgstr ""

#: lang.pm:391
#, c-format
msgid "Samoa"
msgstr "Samoa"

#: lang.pm:392
#, c-format
msgid "Yemen"
msgstr "Jemenas"

#: lang.pm:393
#, c-format
msgid "Mayotte"
msgstr ""

#: lang.pm:394
#, c-format
msgid "Serbia & Montenegro"
msgstr ""

#: lang.pm:395 standalone/drakxtv:50
#, c-format
msgid "South Africa"
msgstr "Pietų Afrikos respublika"

#: lang.pm:396
#, c-format
msgid "Zambia"
msgstr "Zambija"

#: lang.pm:397
#, c-format
msgid "Zimbabwe"
msgstr "Zimbabvė"

#: lang.pm:966
#, c-format
msgid "Welcome to %s"
msgstr "Sveiki atvykę į %s"

#: loopback.pm:32
#, c-format
msgid "Circular mounts %s\n"
msgstr "Loopback montavimai %s\n"

#: lvm.pm:115
#, c-format
msgid "Remove the logical volumes first\n"
msgstr "Pirmiausia išmeskite loginius tomus\n"

#: modules/interactive.pm:21 standalone/drakconnect:962
#, c-format
msgid "Parameters"
msgstr "Parametrai"

#: modules/interactive.pm:21 standalone/draksec:44
#, c-format
msgid "NONE"
msgstr ""

#: modules/interactive.pm:22
#, fuzzy, c-format
msgid "Module configuration"
msgstr "Nustatymai"

#: modules/interactive.pm:22
#, c-format
msgid "You can configure each parameter of the module here."
msgstr ""

#: modules/interactive.pm:63
#, c-format
msgid "Found %s %s interfaces"
msgstr "Rasti %s %s interfeisai"

#: modules/interactive.pm:64
#, c-format
msgid "Do you have another one?"
msgstr "Ar turi dar vieną?"

#: modules/interactive.pm:65
#, c-format
msgid "Do you have any %s interfaces?"
msgstr "Ar tu turi kokį nors %s interfeisą?"

#: modules/interactive.pm:71
#, c-format
msgid "See hardware info"
msgstr "Pažiūrėk įrangos informaciją"

#. -PO: the first %s is the card type (scsi, network, sound,...)
#. -PO: the second is the vendor+model name
#: modules/interactive.pm:87
#, c-format
msgid "Installing driver for %s card %s"
msgstr "Įdiegiama tvarkyklė %s plokštei %s"

#: modules/interactive.pm:87
#, c-format
msgid "(module %s)"
msgstr "(modulis %s)"

#: modules/interactive.pm:98
#, c-format
msgid ""
"You may now provide options to module %s.\n"
"Note that any address should be entered with the prefix 0x like '0x123'"
msgstr ""

#: modules/interactive.pm:104
#, c-format
msgid ""
"You may now provide options to module %s.\n"
"Options are in format ``name=value name2=value2 ...''.\n"
"For instance, ``io=0x300 irq=7''"
msgstr ""
"Dabar tu gali nustatyti %s modulio nustatymus.\n"
"Opcijų formatas yra toks : ''vardas=reikšmė vardas2=reikšmė2 ...''.\n"
"Pvz, ''io=0x300 irq=7''"

#: modules/interactive.pm:106
#, c-format
msgid "Module options:"
msgstr "Modulio parinktys:"

#. -PO: the %s is the driver type (scsi, network, sound,...)
#: modules/interactive.pm:118
#, c-format
msgid "Which %s driver should I try?"
msgstr "Kokią %s tvarkyklę turėčiau išbandyti?"

#: modules/interactive.pm:127
#, c-format
msgid ""
"In some cases, the %s driver needs to have extra information to work\n"
"properly, although it normally works fine without them. Would you like to "
"specify\n"
"extra options for it or allow the driver to probe your machine for the\n"
"information it needs? Occasionally, probing will hang a computer, but it "
"should\n"
"not cause any damage."
msgstr ""
"Kartais %s tvarkyklei reikia papildomos informacijos, kad dirbtų gerai,\n"
"nors normaliai turi veikti ir be jos. Ar tu nori jai nurodyti papildomas\n"
"parinktis, ar leisi pabandyti nusistatyti pačiai. Bandymas gali\n"
"pakabinti kompiuterį, bet tai neturėtų padaryti žalos."

#: modules/interactive.pm:131
#, c-format
msgid "Autoprobe"
msgstr "Automatinis bandymas"

#: modules/interactive.pm:131
#, c-format
msgid "Specify options"
msgstr "Nurodyti parinktis"

#: modules/interactive.pm:143
#, c-format
msgid ""
"Loading module %s failed.\n"
"Do you want to try again with other parameters?"
msgstr ""
"Modulio %s iškvietimas nepavyko.\n"
"Ar nori bandyti su kitais nustatymais?"

#: modules/parameters.pm:49
#, fuzzy, c-format
msgid "a number"
msgstr "Telefono numeris"

#: modules/parameters.pm:51
#, c-format
msgid "%d comma separated numbers"
msgstr ""

#: modules/parameters.pm:51
#, c-format
msgid "%d comma separated strings"
msgstr ""

#: modules/parameters.pm:53
#, c-format
msgid "comma separated numbers"
msgstr ""

#: modules/parameters.pm:53
#, fuzzy, c-format
msgid "comma separated strings"
msgstr "Sužymėti skirsnius"

#: mouse.pm:25
#, c-format
msgid "Sun - Mouse"
msgstr "Sun - pelė"

#: mouse.pm:31 security/level.pm:12
#, c-format
msgid "Standard"
msgstr "Standartinė"

#: mouse.pm:32
#, c-format
msgid "Logitech MouseMan+"
msgstr "Logitech MouseMan+"

#: mouse.pm:33
#, c-format
msgid "Generic PS2 Wheel Mouse"
msgstr "Paprasta PS2 pelė su ratuku"

#: mouse.pm:34
#, c-format
msgid "GlidePoint"
msgstr "GlidePoint"

#: mouse.pm:36 network/modem.pm:23 network/modem.pm:37 network/modem.pm:42
#: network/modem.pm:73 network/netconnect.pm:481 network/netconnect.pm:482
#: network/netconnect.pm:483 network/netconnect.pm:503
#: network/netconnect.pm:508 network/netconnect.pm:520
#: network/netconnect.pm:525 network/netconnect.pm:541
#: network/netconnect.pm:543
#, fuzzy, c-format
msgid "Automatic"
msgstr "Automatinis IP"

#: mouse.pm:39 mouse.pm:73
#, c-format
msgid "Kensington Thinking Mouse"
msgstr "Kensington Thinking Mouse"

#: mouse.pm:40 mouse.pm:68
#, c-format
msgid "Genius NetMouse"
msgstr "Genius NetMouse"

#: mouse.pm:41
#, c-format
msgid "Genius NetScroll"
msgstr "Genius NetScroll"

#: mouse.pm:42 mouse.pm:52
#, fuzzy, c-format
msgid "Microsoft Explorer"
msgstr "Microsoft IntelliMouse"

#: mouse.pm:47 mouse.pm:79
#, fuzzy, c-format
msgid "1 button"
msgstr "2 klavišų"

#: mouse.pm:48 mouse.pm:57
#, c-format
msgid "Generic 2 Button Mouse"
msgstr "Paprasta 2 klavišų pelė"

#: mouse.pm:50 mouse.pm:59
#, fuzzy, c-format
msgid "Generic 3 Button Mouse with Wheel emulation"
msgstr "Paprasta 3 klavišų pelė"

#: mouse.pm:51
#, c-format
msgid "Wheel"
msgstr "Su ratuku"

#: mouse.pm:55
#, c-format
msgid "serial"
msgstr "nuoseklioji"

#: mouse.pm:58
#, c-format
msgid "Generic 3 Button Mouse"
msgstr "Paprasta 3 klavišų pelė"

#: mouse.pm:60
#, c-format
msgid "Microsoft IntelliMouse"
msgstr "Microsoft IntelliMouse"

#: mouse.pm:61
#, c-format
msgid "Logitech MouseMan"
msgstr "Logitech MouseMan"

#: mouse.pm:62
#, fuzzy, c-format
msgid "Logitech MouseMan with Wheel emulation"
msgstr "Logitech MouseMan"

#: mouse.pm:63
#, c-format
msgid "Mouse Systems"
msgstr "Mouse Systems"

#: mouse.pm:65
#, c-format
msgid "Logitech CC Series"
msgstr "Logitech CC Series"

#: mouse.pm:66
#, fuzzy, c-format
msgid "Logitech CC Series with Wheel emulation"
msgstr "Logitech CC Series"

#: mouse.pm:67
#, c-format
msgid "Logitech MouseMan+/FirstMouse+"
msgstr "Logitech MouseMan+/FirstMouse+"

#: mouse.pm:69
#, c-format
msgid "MM Series"
msgstr "MM Series"

#: mouse.pm:70
#, c-format
msgid "MM HitTablet"
msgstr "MM HitTablet"

#: mouse.pm:71
#, c-format
msgid "Logitech Mouse (serial, old C7 type)"
msgstr "Logitech Mouse (nuoseklioji, seno C7 tipo)"

#: mouse.pm:72
#, fuzzy, c-format
msgid "Logitech Mouse (serial, old C7 type) with Wheel emulation"
msgstr "Logitech Mouse (nuoseklioji, seno C7 tipo)"

#: mouse.pm:74
#, fuzzy, c-format
msgid "Kensington Thinking Mouse with Wheel emulation"
msgstr "Kensington Thinking Mouse"

#: mouse.pm:77
#, c-format
msgid "busmouse"
msgstr "busmouse"

#: mouse.pm:80
#, c-format
msgid "2 buttons"
msgstr "2 klavišų"

#: mouse.pm:81
#, c-format
msgid "3 buttons"
msgstr "3 klavišų"

#: mouse.pm:82
#, c-format
msgid "3 buttons with Wheel emulation"
msgstr ""

#: mouse.pm:86
#, fuzzy, c-format
msgid "Universal"
msgstr "Išeiti iš įdiegimo"

#: mouse.pm:88
#, c-format
msgid "Any PS/2 & USB mice"
msgstr ""

#: mouse.pm:92
#, c-format
msgid "none"
msgstr "jokios"

#: mouse.pm:94
#, c-format
msgid "No mouse"
msgstr "Pelės nėra"

#: mouse.pm:515
#, c-format
msgid "Please test the mouse"
msgstr "Prašom išbandyti pelę"

#: mouse.pm:517
#, c-format
msgid "To activate the mouse,"
msgstr "Kad sužadintum pelę,"

#: mouse.pm:518
#, c-format
msgid "MOVE YOUR WHEEL!"
msgstr "PASUK RATUKĄ!"

#: network/adsl.pm:19
#, c-format
msgid "use pppoe"
msgstr "naudoti pppoe"

#: network/adsl.pm:20
#, c-format
msgid "use pptp"
msgstr "naudoti pptp"

#: network/adsl.pm:21
#, c-format
msgid "use dhcp"
msgstr "naudoti dhcp"

#: network/adsl.pm:22
#, c-format
msgid "Alcatel speedtouch usb"
msgstr ""

#: network/adsl.pm:22 network/adsl.pm:23 network/adsl.pm:24
#, fuzzy, c-format
msgid " - detected"
msgstr "aptiktas %s"

#: network/adsl.pm:23
#, c-format
msgid "Sagem (using pppoa) usb"
msgstr ""

#: network/adsl.pm:24
#, c-format
msgid "Sagem (using dhcp) usb"
msgstr ""

#: network/adsl.pm:35 network/netconnect.pm:679
#, c-format
msgid "Connect to the Internet"
msgstr "Prisijungti prie interneto"

#: network/adsl.pm:36 network/netconnect.pm:680
#, c-format
msgid ""
"The most common way to connect with adsl is pppoe.\n"
"Some connections use pptp, a few use dhcp.\n"
"If you don't know, choose 'use pppoe'"
msgstr ""
"Labiausiai paplitęs būdas prisijungti su ADSL yra pppoe.\n"
"Vis dėlto, kai kurios jungtys gali naudoti PPTP arba DHCP.\n"
"Jei nežinai, pasirink 'naudoti pppoe'"

#: network/adsl.pm:41 network/netconnect.pm:684
#, fuzzy, c-format
msgid "ADSL connection type :"
msgstr "LAN jungtis"

#: network/drakfirewall.pm:12
#, fuzzy, c-format
msgid "Web Server"
msgstr "serveris"

#: network/drakfirewall.pm:17
#, fuzzy, c-format
msgid "Domain Name Server"
msgstr "Domeno vardas"

#: network/drakfirewall.pm:22
#, fuzzy, c-format
msgid "SSH server"
msgstr "NIS serveris"

#: network/drakfirewall.pm:27
#, fuzzy, c-format
msgid "FTP server"
msgstr "NIS serveris"

#: network/drakfirewall.pm:32
#, fuzzy, c-format
msgid "Mail Server"
msgstr "Serveris, Duomenų bazių"

#: network/drakfirewall.pm:37
#, fuzzy, c-format
msgid "POP and IMAP Server"
msgstr "serveris"

#: network/drakfirewall.pm:42
#, fuzzy, c-format
msgid "Telnet server"
msgstr "X serveris"

#: network/drakfirewall.pm:48
#, fuzzy, c-format
msgid "Samba server"
msgstr "NIS serveris"

#: network/drakfirewall.pm:54
#, fuzzy, c-format
msgid "CUPS server"
msgstr "DNS serveris"

#: network/drakfirewall.pm:60
#, c-format
msgid "Echo request (ping)"
msgstr ""

#: network/drakfirewall.pm:125
#, fuzzy, c-format
msgid "No network card"
msgstr "nerasta jokia tinklo plokštė"

#: network/drakfirewall.pm:146
#, c-format
msgid ""
"drakfirewall configurator\n"
"\n"
"This configures a personal firewall for this Mandrake Linux machine.\n"
"For a powerful and dedicated firewall solution, please look to the\n"
"specialized MandrakeSecurity Firewall distribution."
msgstr ""

#: network/drakfirewall.pm:152
#, c-format
msgid ""
"drakfirewall configurator\n"
"\n"
"Make sure you have configured your Network/Internet access with\n"
"drakconnect before going any further."
msgstr ""

#: network/drakfirewall.pm:169
#, c-format
msgid "Which services would you like to allow the Internet to connect to?"
msgstr ""

#: network/drakfirewall.pm:170
#, c-format
msgid ""
"You can enter miscellaneous ports. \n"
"Valid examples are: 139/tcp 139/udp.\n"
"Have a look at /etc/services for information."
msgstr ""

#: network/drakfirewall.pm:176
#, c-format
msgid ""
"Invalid port given: %s.\n"
"The proper format is \"port/tcp\" or \"port/udp\", \n"
"where port is between 1 and 65535.\n"
"\n"
"You can also give a range of ports (eg: 24300:24350/udp)"
msgstr ""

#: network/drakfirewall.pm:186
#, c-format
msgid "Everything (no firewall)"
msgstr ""

#: network/drakfirewall.pm:188
#, fuzzy, c-format
msgid "Other ports"
msgstr "Patikrinti prievadus"

#: network/isdn.pm:127 network/isdn.pm:145 network/isdn.pm:157
#: network/isdn.pm:163 network/isdn.pm:173 network/isdn.pm:183
#: network/netconnect.pm:332
#, c-format
msgid "ISDN Configuration"
msgstr "ISDN konfigūravimas"

#: network/isdn.pm:127
#, c-format
msgid ""
"Select your provider.\n"
"If it isn't listed, choose Unlisted."
msgstr ""
"Pasirink savo tiekėją.\n"
" Jei jo nėra sąraše, pasirink Unlisted"

#: network/isdn.pm:140 standalone/drakconnect:503
#, fuzzy, c-format
msgid "European protocol (EDSS1)"
msgstr "Europa (EDSS1)"

#: network/isdn.pm:140
#, fuzzy, c-format
msgid "European protocol"
msgstr "Įkrovos Protokolas"

#: network/isdn.pm:142 standalone/drakconnect:504
#, fuzzy, c-format
msgid ""
"Protocol for the rest of the world\n"
"No D-Channel (leased lines)"
msgstr ""
"Likęs pasaulis \n"
" be D-Channel (nuomojamos linijos)"

#: network/isdn.pm:142
#, fuzzy, c-format
msgid "Protocol for the rest of the world"
msgstr "Likęs pasaulis"

#: network/isdn.pm:146
#, c-format
msgid "Which protocol do you want to use?"
msgstr "Kurį protokolą nori naudoti?"

#: network/isdn.pm:157
#, c-format
msgid "Found \"%s\" interface do you want to use it ?"
msgstr ""

#: network/isdn.pm:164
#, c-format
msgid "What kind of card do you have?"
msgstr "Kokios rūšies plokštę tu turi?"

#: network/isdn.pm:165
#, c-format
msgid "ISA / PCMCIA"
msgstr "ISA / PCMCIA"

#: network/isdn.pm:165
#, c-format
msgid "PCI"
msgstr "PCI"

#: network/isdn.pm:165
#, c-format
msgid "USB"
msgstr ""

#: network/isdn.pm:165
#, c-format
msgid "I don't know"
msgstr "Nežinau"

#: network/isdn.pm:174
#, c-format
msgid ""
"\n"
"If you have an ISA card, the values on the next screen should be right.\n"
"\n"
"If you have a PCMCIA card, you have to know the \"irq\" and \"io\" of your "
"card.\n"
msgstr ""
"\n"
"Jei tu turi ISA plokštę, reikšmės sekančiame ekrane turėtų būti teisingos.\n"
"\n"
"Jei turi PCMCIA plokštę, tu turi žinoti jos IRQ bei IO.\n"

#: network/isdn.pm:178
#, c-format
msgid "Continue"
msgstr "Tęsti"

#: network/isdn.pm:178
#, c-format
msgid "Abort"
msgstr "Nutraukti"

#: network/isdn.pm:184
#, fuzzy, c-format
msgid "Which of the following is your ISDN card?"
msgstr "Kuri yra tavo ISDN plokštė?"

#: network/netconnect.pm:95
#, c-format
msgid "Ad-hoc"
msgstr ""

#: network/netconnect.pm:96
#, fuzzy, c-format
msgid "Managed"
msgstr "Pasirink savo kalbą"

#: network/netconnect.pm:97
#, fuzzy, c-format
msgid "Master"
msgstr "Pelė"

#: network/netconnect.pm:98
#, fuzzy, c-format
msgid "Repeater"
msgstr "Atstatyti iš bylos"

#: network/netconnect.pm:99
#, fuzzy, c-format
msgid "Secondary"
msgstr "%d sekundės"

#: network/netconnect.pm:100
#, fuzzy, c-format
msgid "Auto"
msgstr "Nutraukti"

#: network/netconnect.pm:103 printer/printerdrake.pm:1118
#, fuzzy, c-format
msgid "Manual configuration"
msgstr "Nustatymai"

#: network/netconnect.pm:104
#, fuzzy, c-format
msgid "Automatic IP (BOOTP/DHCP)"
msgstr "Automatinis IP"

#: network/netconnect.pm:106
#, c-format
msgid "Automatic IP (BOOTP/DHCP/Zeroconf)"
msgstr ""

#: network/netconnect.pm:156
#, fuzzy, c-format
msgid "Alcatel speedtouch USB modem"
msgstr "Prašom išbandyti pelę"

#: network/netconnect.pm:157
#, fuzzy, c-format
msgid "Sagem USB modem"
msgstr "Sistemos režimas"

#: network/netconnect.pm:158
#, c-format
msgid "Bewan USB modem"
msgstr ""

#: network/netconnect.pm:159
#, c-format
msgid "Bewan PCI modem"
msgstr ""

#: network/netconnect.pm:160
#, c-format
msgid "ECI Hi-Focus modem"
msgstr ""

#: network/netconnect.pm:164
#, c-format
msgid "Dynamic Host Configuration Protocol (DHCP)"
msgstr ""

#: network/netconnect.pm:165
#, fuzzy, c-format
msgid "Manual TCP/IP configuration"
msgstr "Nustatymai"

#: network/netconnect.pm:166
#, c-format
msgid "Point to Point Tunneling Protocol (PPTP)"
msgstr ""

#: network/netconnect.pm:167
#, c-format
msgid "PPP over Ethernet (PPPoE)"
msgstr ""

#: network/netconnect.pm:168
#, c-format
msgid "PPP over ATM (PPPoA)"
msgstr ""

#: network/netconnect.pm:172
#, fuzzy, c-format
msgid "Bridged Ethernet LLC"
msgstr "Ethernet Korta"

#: network/netconnect.pm:173
#, fuzzy, c-format
msgid "Bridged Ethernet VC"
msgstr "Ethernet Korta"

#: network/netconnect.pm:174
#, c-format
msgid "Routed IP LLC"
msgstr ""

#: network/netconnect.pm:175
#, c-format
msgid "Routed IP VC"
msgstr ""

#: network/netconnect.pm:176
#, c-format
msgid "PPPOA LLC"
msgstr ""

#: network/netconnect.pm:177
#, c-format
msgid "PPPOA VC"
msgstr ""

#: network/netconnect.pm:181 standalone/drakconnect:443
#: standalone/drakconnect:917
#, c-format
msgid "Script-based"
msgstr "Paremtas skriptu"

#: network/netconnect.pm:182 standalone/drakconnect:443
#: standalone/drakconnect:917
#, c-format
msgid "PAP"
msgstr "PAP"

#: network/netconnect.pm:183 standalone/drakconnect:443
#: standalone/drakconnect:917
#, c-format
msgid "Terminal-based"
msgstr "Paremtas terminalu"

#: network/netconnect.pm:184 standalone/drakconnect:443
#: standalone/drakconnect:917
#, c-format
msgid "CHAP"
msgstr "CHAP"

#: network/netconnect.pm:185
#, fuzzy, c-format
msgid "PAP/CHAP"
msgstr "CHAP"

#: network/netconnect.pm:199 standalone/drakconnect:54
#, fuzzy, c-format
msgid "Network & Internet Configuration"
msgstr "Tinklo konfigūravimas"

#: network/netconnect.pm:205
#, fuzzy, c-format
msgid "(detected on port %s)"
msgstr "aptiktas prievade %s"

#. -PO: here, "(detected)" string will be appended to eg "ADSL connection"
#: network/netconnect.pm:207
#, fuzzy, c-format
msgid "(detected %s)"
msgstr "aptiktas %s"

#: network/netconnect.pm:207
#, fuzzy, c-format
msgid "(detected)"
msgstr "aptiktas %s"

#: network/netconnect.pm:209
#, fuzzy, c-format
msgid "Modem connection"
msgstr "Nustatyti normalią jungtį per modemą"

#: network/netconnect.pm:210
#, c-format
msgid "ISDN connection"
msgstr "ISDN jungtis"

#: network/netconnect.pm:211
#, fuzzy, c-format
msgid "ADSL connection"
msgstr "LAN jungtis"

#: network/netconnect.pm:212
#, c-format
msgid "Cable connection"
msgstr "Kabelinė jungtis"

#: network/netconnect.pm:213
#, c-format
msgid "LAN connection"
msgstr "LAN jungtis"

#: network/netconnect.pm:214 network/netconnect.pm:228
#, fuzzy, c-format
msgid "Wireless connection"
msgstr "Kabelinė jungtis"

#: network/netconnect.pm:224
#, fuzzy, c-format
msgid "Choose the connection you want to configure"
msgstr "Pasirink kurį įrankį norėtum naudoti"

#: network/netconnect.pm:241
#, fuzzy, c-format
msgid ""
"We are now going to configure the %s connection.\n"
"\n"
"\n"
"Press \"%s\" to continue."
msgstr ""
"\n"
"Tu gali atsijungti arba iš naujo nustatyti jungtį."

#: network/netconnect.pm:249 network/netconnect.pm:710
#, c-format
msgid "Connection Configuration"
msgstr "Jungties konfigūravimas"

#: network/netconnect.pm:250 network/netconnect.pm:711
#, c-format
msgid "Please fill or check the field below"
msgstr "Prašom užpildyti arba patikrinti šį laukelį"

#: network/netconnect.pm:256 standalone/drakconnect:494
#: standalone/drakconnect:899
#, c-format
msgid "Card IRQ"
msgstr "Plokštės IRQ"

#: network/netconnect.pm:257 standalone/drakconnect:495
#: standalone/drakconnect:900
#, c-format
msgid "Card mem (DMA)"
msgstr "Plokštės mem (DMA)"

#: network/netconnect.pm:258 standalone/drakconnect:496
#: standalone/drakconnect:901
#, c-format
msgid "Card IO"
msgstr "Plokštės IO"

#: network/netconnect.pm:259 standalone/drakconnect:497
#: standalone/drakconnect:902
#, c-format
msgid "Card IO_0"
msgstr "Plokštės IO_0"

#: network/netconnect.pm:260 standalone/drakconnect:903
#, c-format
msgid "Card IO_1"
msgstr "Plokštės IO_1"

#: network/netconnect.pm:261 standalone/drakconnect:904
#, c-format
msgid "Your personal phone number"
msgstr "Tavo asmeninis tel. numeris"

#: network/netconnect.pm:262 network/netconnect.pm:714
#: standalone/drakconnect:905
#, c-format
msgid "Provider name (ex provider.net)"
msgstr "Tiekėjo pavadinimas (pvz. tiekejas.lt)"

#: network/netconnect.pm:263 standalone/drakconnect:440
#: standalone/drakconnect:906
#, c-format
msgid "Provider phone number"
msgstr "Tiekėjo telefono numeris"

#: network/netconnect.pm:264
#, fuzzy, c-format
msgid "Provider DNS 1 (optional)"
msgstr "Tiekėjo DNS 1 (pasirinktinai)"

#: network/netconnect.pm:265
#, fuzzy, c-format
msgid "Provider DNS 2 (optional)"
msgstr "Tiekėjo DNS 2 (pasirinktinai)"

#: network/netconnect.pm:266 standalone/drakconnect:396
#: standalone/drakconnect:462 standalone/drakconnect:911
#, c-format
msgid "Dialing mode"
msgstr "Skambinimo režimas"

#: network/netconnect.pm:267 standalone/drakconnect:401
#: standalone/drakconnect:459 standalone/drakconnect:923
#, fuzzy, c-format
msgid "Connection speed"
msgstr "Jungties tipas: "

#: network/netconnect.pm:268 standalone/drakconnect:406
#: standalone/drakconnect:924
#, fuzzy, c-format
msgid "Connection timeout (in sec)"
msgstr "Jungties tipas: "

#: network/netconnect.pm:271 network/netconnect.pm:717
#: standalone/drakconnect:438 standalone/drakconnect:909
#, c-format
msgid "Account Login (user name)"
msgstr "Pasisveikinimas (vartotojo vardas)"

#: network/netconnect.pm:272 network/netconnect.pm:718
#: standalone/drakconnect:439 standalone/drakconnect:910
#: standalone/drakconnect:944
#, c-format
msgid "Account Password"
msgstr "Slaptažodis"

#: network/netconnect.pm:300
#, c-format
msgid "What kind is your ISDN connection?"
msgstr "Kokios rūšies tavo ISDN jungtis?"

#: network/netconnect.pm:301
#, c-format
msgid "Internal ISDN card"
msgstr "Vidinė ISDN plokštė"

#: network/netconnect.pm:301
#, c-format
msgid "External ISDN modem"
msgstr "Išorinė ISDN plokštė"

#: network/netconnect.pm:332
#, fuzzy, c-format
msgid "Do you want to start a new configuration ?"
msgstr "Ar tu nori išbandyti nustatymus?"

#: network/netconnect.pm:335
#, c-format
msgid ""
"I have detected an ISDN PCI card, but I don't know its type. Please select a "
"PCI card on the next screen."
msgstr ""
"Aš aptikau ISDN PCI plokštę, tačiau nežinau jos tipo. Pasirink vieną PCI "
"plokštę sekančiame ekrane."

#: network/netconnect.pm:344
#, c-format
msgid "No ISDN PCI card found. Please select one on the next screen."
msgstr "Jokia ISDN PCI plokštė nerasta. prašom pasirinkti vieną kitame ekrane."

#: network/netconnect.pm:353
#, c-format
msgid ""
"Your modem isn't supported by the system.\n"
"Take a look at http://www.linmodems.org"
msgstr ""

#: network/netconnect.pm:364
#, fuzzy, c-format
msgid "Select the modem to configure:"
msgstr "Pasirink tinklo interfeisą"

#: network/netconnect.pm:403
#, c-format
msgid "Please choose which serial port your modem is connected to."
msgstr ""
"Prašom pasirinkti, prie kurios nuosekliosios jungties yra prijungtas tavo "
"modemas."

#: network/netconnect.pm:427
#, fuzzy, c-format
msgid "Select your provider:"
msgstr "Pasirink spausdintuvo jungtį"

#: network/netconnect.pm:429 network/netconnect.pm:599
#, fuzzy, c-format
msgid "Provider:"
msgstr "Profailas: "

#: network/netconnect.pm:481 network/netconnect.pm:482
#: network/netconnect.pm:483 network/netconnect.pm:508
#: network/netconnect.pm:525 network/netconnect.pm:541
#, fuzzy, c-format
msgid "Manual"
msgstr "Vanuatu"

#: network/netconnect.pm:485
#, fuzzy, c-format
msgid "Dialup: account options"
msgstr "Prisiskambinimo nustatymai"

#: network/netconnect.pm:488 standalone/drakconnect:913
#, c-format
msgid "Connection name"
msgstr "Jungties pavadinimas"

#: network/netconnect.pm:489 standalone/drakconnect:914
#, c-format
msgid "Phone number"
msgstr "Telefono numeris"

#: network/netconnect.pm:490 standalone/drakconnect:915
#, c-format
msgid "Login ID"
msgstr "Pasisveikinimo ID"

#: network/netconnect.pm:505 network/netconnect.pm:538
#, fuzzy, c-format
msgid "Dialup: IP parameters"
msgstr "Parametrai"

#: network/netconnect.pm:508
#, fuzzy, c-format
msgid "IP parameters"
msgstr "Parametrai"

#: network/netconnect.pm:509 network/netconnect.pm:829
#: printer/printerdrake.pm:431 standalone/drakconnect:113
#: standalone/drakconnect:306 standalone/drakconnect:764
#, c-format
msgid "IP address"
msgstr "IP adresas"

#: network/netconnect.pm:510
#, fuzzy, c-format
msgid "Subnet mask"
msgstr "Netmask"

#: network/netconnect.pm:522
#, c-format
msgid "Dialup: DNS parameters"
msgstr ""

#: network/netconnect.pm:525
#, fuzzy, c-format
msgid "DNS"
msgstr "Naudoti NIS"

#: network/netconnect.pm:526 standalone/drakconnect:918
#, c-format
msgid "Domain name"
msgstr "Domeno vardas"

#: network/netconnect.pm:527 network/netconnect.pm:715
#: standalone/drakconnect:919
#, fuzzy, c-format
msgid "First DNS Server (optional)"
msgstr "Pirmasis DNS serveris"

#: network/netconnect.pm:528 network/netconnect.pm:716
#: standalone/drakconnect:920
#, fuzzy, c-format
msgid "Second DNS Server (optional)"
msgstr "Antrasis DNS serveris"

#: network/netconnect.pm:529
#, fuzzy, c-format
msgid "Set hostname from IP"
msgstr "Spausdintuvo hosto vardas"

#: network/netconnect.pm:541 standalone/drakconnect:317
#: standalone/drakconnect:912
#, c-format
msgid "Gateway"
msgstr "Šliuzas (Gateway)"

#: network/netconnect.pm:542
#, fuzzy, c-format
msgid "Gateway IP address"
msgstr "IP adresas"

#: network/netconnect.pm:567
#, fuzzy, c-format
msgid "ADSL configuration"
msgstr "LAN konfiguravimas"

#: network/netconnect.pm:567 network/netconnect.pm:746
#, fuzzy, c-format
msgid "Select the network interface to configure:"
msgstr "Pasirink tinklo interfeisą"

#: network/netconnect.pm:568 network/netconnect.pm:748 network/shorewall.pm:77
#: standalone/drakconnect:602 standalone/drakgw:218 standalone/drakvpn:217
#, fuzzy, c-format
msgid "Net Device"
msgstr "Spausdinimo serveris"

#: network/netconnect.pm:597
#, fuzzy, c-format
msgid "Please choose your ADSL provider"
msgstr "Prašom pasirinkti savo pelės rūšį."

#: network/netconnect.pm:616
#, c-format
msgid ""
"You need the Alcatel microcode.\n"
"You can provide it now via a floppy or your windows partition,\n"
"or skip and do it later."
msgstr ""

#: network/netconnect.pm:620 network/netconnect.pm:625
#, fuzzy, c-format
msgid "Use a floppy"
msgstr "Išsaugoti į diskelį"

#: network/netconnect.pm:620 network/netconnect.pm:629
#, fuzzy, c-format
msgid "Use my Windows partition"
msgstr "Skaičiuojami Windows bylų sistemos rėžiai"

#: network/netconnect.pm:620 network/netconnect.pm:633
#, c-format
msgid "Do it later"
msgstr ""

#: network/netconnect.pm:640
#, c-format
msgid "Firmware copy failed, file %s not found"
msgstr ""

#: network/netconnect.pm:647
#, c-format
msgid "Firmware copy succeeded"
msgstr ""

#: network/netconnect.pm:662
#, c-format
msgid ""
"You need the Alcatel microcode.\n"
"Download it at:\n"
"%s\n"
"and copy the mgmt.o in /usr/share/speedtouch"
msgstr ""

#: network/netconnect.pm:719
#, c-format
msgid "Virtual Path ID (VPI):"
msgstr ""

#: network/netconnect.pm:720
#, c-format
msgid "Virtual Circuit ID (VCI):"
msgstr ""

#: network/netconnect.pm:721
#, fuzzy, c-format
msgid "Encapsulation :"
msgstr "Sveikiname!"

#: network/netconnect.pm:736
#, c-format
msgid ""
"The ECI Hi-Focus modem cannot be supported due to binary driver distribution "
"problem.\n"
"\n"
"You can find a driver on http://eciadsl.flashtux.org/"
msgstr ""

#: network/netconnect.pm:753
#, fuzzy, c-format
msgid "No wireless network adapter on your system!"
msgstr "Tavo sistemoje nerasta jokia tinklo plokštė!"

#: network/netconnect.pm:754 standalone/drakgw:240 standalone/drakpxe:137
#, c-format
msgid "No network adapter on your system!"
msgstr "Tavo sistemoje nerasta jokia tinklo plokštė!"

#: network/netconnect.pm:766
#, c-format
msgid ""
"WARNING: this device has been previously configured to connect to the "
"Internet.\n"
"Simply accept to keep this device configured.\n"
"Modifying the fields below will override this configuration."
msgstr ""
"PERSPĖJIMAS: Gis įrenginys jau anksčiau buvo sutvarkytas prisijungimui prie\n"
"interneto. \n"
"Paprasčiausiai spausk Gerai, jei nori palikti jį tokį.\n"
"Jei pakeisi ką nors žemiau esančiuose laukuose, tai įsigalios vietoj senųjų "
"nuostatų."

#: network/netconnect.pm:784
#, fuzzy, c-format
msgid "Zeroconf hostname resolution"
msgstr "Hosto vardas"

#: network/netconnect.pm:785 network/netconnect.pm:816
#, fuzzy, c-format
msgid "Configuring network device %s (driver %s)"
msgstr "Konfigūruojamas tinklo įrenginys %s"

#: network/netconnect.pm:786
#, c-format
msgid ""
"The following protocols can be used to configure an ethernet connection. "
"Please choose the one you want to use"
msgstr ""

#: network/netconnect.pm:817
#, c-format
msgid ""
"Please enter the IP configuration for this machine.\n"
"Each item should be entered as an IP address in dotted-decimal\n"
"notation (for example, 1.2.3.4)."
msgstr ""
"Prašom įrašyti šio kompiuterio IP konfigūraciją.\n"
"Kiekvienas laukas turi būti įrašytas kaip IP adresas\n"
"dešimtainiais skaičiais su taškais (pvz. 192.168.2.36)."

#: network/netconnect.pm:824
#, fuzzy, c-format
msgid "Assign host name from DHCP address"
msgstr "Prašom išbandyti pelę"

#: network/netconnect.pm:825
#, fuzzy, c-format
msgid "DHCP host name"
msgstr "Hosto vardas"

#: network/netconnect.pm:830 standalone/drakconnect:311
#: standalone/drakconnect:765 standalone/drakgw:313
#, c-format
msgid "Netmask"
msgstr "Netmask"

#: network/netconnect.pm:832 standalone/drakconnect:389
#, c-format
msgid "Track network card id (useful for laptops)"
msgstr ""

#: network/netconnect.pm:833 standalone/drakconnect:390
#, fuzzy, c-format
msgid "Network Hotplugging"
msgstr "Tinklo konfigūravimas"

#: network/netconnect.pm:834 standalone/drakconnect:384
#, fuzzy, c-format
msgid "Start at boot"
msgstr "Startavo įkrovos metu"

#: network/netconnect.pm:836 standalone/drakconnect:768
#, c-format
msgid "DHCP client"
msgstr "DHCP klientas"

#: network/netconnect.pm:846 printer/printerdrake.pm:1349
#: standalone/drakconnect:569
#, c-format
msgid "IP address should be in format 1.2.3.4"
msgstr "IP adresas turėtų būti 1.2.3.4 formato"

#: network/netconnect.pm:849
#, c-format
msgid "Warning : IP address %s is usually reserved !"
msgstr ""

#: network/netconnect.pm:879 network/netconnect.pm:908
#, c-format
msgid "Please enter the wireless parameters for this card:"
msgstr ""

#: network/netconnect.pm:882 standalone/drakconnect:355
#, fuzzy, c-format
msgid "Operating Mode"
msgstr "Experto režimas"

#: network/netconnect.pm:884 standalone/drakconnect:356
#, c-format
msgid "Network name (ESSID)"
msgstr ""

#: network/netconnect.pm:885 standalone/drakconnect:357
#, fuzzy, c-format
msgid "Network ID"
msgstr "Tinklo interfeisas"

#: network/netconnect.pm:886 standalone/drakconnect:358
#, c-format
msgid "Operating frequency"
msgstr ""

#: network/netconnect.pm:887 standalone/drakconnect:359
#, c-format
msgid "Sensitivity threshold"
msgstr ""

#: network/netconnect.pm:888 standalone/drakconnect:360
#, c-format
msgid "Bitrate (in b/s)"
msgstr ""

#: network/netconnect.pm:894
#, c-format
msgid ""
"Freq should have the suffix k, M or G (for example, \"2.46G\" for 2.46 GHz "
"frequency), or add enough '0' (zeroes)."
msgstr ""

#: network/netconnect.pm:898
#, c-format
msgid ""
"Rate should have the suffix k, M or G (for example, \"11M\" for 11M), or add "
"enough '0' (zeroes)."
msgstr ""

#: network/netconnect.pm:911 standalone/drakconnect:371
#, c-format
msgid "RTS/CTS"
msgstr ""

#: network/netconnect.pm:912
#, c-format
msgid ""
"RTS/CTS adds a handshake before each packet transmission to make sure that "
"the\n"
"channel is clear. This adds overhead, but increase performance in case of "
"hidden\n"
"nodes or large number of active nodes. This parameter sets the size of the\n"
"smallest packet for which the node sends RTS, a value equal to the maximum\n"
"packet size disable the scheme. You may also set this parameter to auto, "
"fixed\n"
"or off."
msgstr ""

#: network/netconnect.pm:919 standalone/drakconnect:372
#, fuzzy, c-format
msgid "Fragmentation"
msgstr "Žaidimų stotis"

#: network/netconnect.pm:920 standalone/drakconnect:373
#, c-format
msgid "Iwconfig command extra arguments"
msgstr ""

#: network/netconnect.pm:921
#, c-format
msgid ""
"Here, one can configure some extra wireless parameters such as:\n"
"ap, channel, commit, enc, power, retry, sens, txpower (nick is already set "
"as the hostname).\n"
"\n"
"See iwpconfig(8) man page for further information."
msgstr ""

#. -PO: split the "xyz command extra argument" translated string into two lines if it's bigger than the english one
#: network/netconnect.pm:928 standalone/drakconnect:374
#, c-format
msgid "Iwspy command extra arguments"
msgstr ""

#: network/netconnect.pm:929
#, c-format
msgid ""
"Iwspy is used to set a list of addresses in a wireless network\n"
"interface and to read back quality of link information for each of those.\n"
"\n"
"This information is the same as the one available in /proc/net/wireless :\n"
"quality of the link, signal strength and noise level.\n"
"\n"
"See iwpspy(8) man page for further information."
msgstr ""

#: network/netconnect.pm:937 standalone/drakconnect:375
#, c-format
msgid "Iwpriv command extra arguments"
msgstr ""

#: network/netconnect.pm:938
#, c-format
msgid ""
"Iwpriv enable to set up optionals (private) parameters of a wireless "
"network\n"
"interface.\n"
"\n"
"Iwpriv deals with parameters and setting specific to each driver (as opposed "
"to\n"
"iwconfig which deals with generic ones).\n"
"\n"
"In theory, the documentation of each device driver should indicate how to "
"use\n"
"those interface specific commands and their effect.\n"
"\n"
"See iwpriv(8) man page for further information."
msgstr ""

#: network/netconnect.pm:965
#, c-format
msgid ""
"No ethernet network adapter has been detected on your system.\n"
"I cannot set up this connection type."
msgstr ""
"Neradau jokio ethernet tinklo adapterio tavo sistemoje.\n"
"Aš negaliu sutvarkyti šio jungties tipo."

#: network/netconnect.pm:969 standalone/drakgw:254 standalone/drakpxe:142
#, c-format
msgid "Choose the network interface"
msgstr "Pasirink tinklo interfeisą"

#: network/netconnect.pm:970
#, c-format
msgid ""
"Please choose which network adapter you want to use to connect to Internet."
msgstr ""
"Prašom pasirinkti, kurią tinklo plokštę tu nori naudoti prisijungimui prie "
"interneto"

#: network/netconnect.pm:991
#, c-format
msgid ""
"Please enter your host name.\n"
"Your host name should be a fully-qualified host name,\n"
"such as ``mybox.mylab.myco.com''.\n"
"You may also enter the IP address of the gateway if you have one."
msgstr ""
"Prašom įvesti savo hosto vardą, jei jį žinai.\n"
"tai turėtų būti pilnai aprašytas hosto vardas, panašus\n"
 \"mano.filialas.istaiga.lt\".\n"
"Taip pat gali įvesti šliuzo (gateway) IP adresą, jeigu tokį turi"

#: network/netconnect.pm:995
#, c-format
msgid "Last but not least you can also type in your DNS server IP addresses."
msgstr ""

#: network/netconnect.pm:997
#, fuzzy, c-format
msgid "Host name (optional)"
msgstr "Nustatymai"

#: network/netconnect.pm:997
#, c-format
msgid "Host name"
msgstr "Hosto vardas"

#: network/netconnect.pm:998
#, fuzzy, c-format
msgid "DNS server 1"
msgstr "DNS serveris"

#: network/netconnect.pm:999
#, fuzzy, c-format
msgid "DNS server 2"
msgstr "DNS serveris"

#: network/netconnect.pm:1000
#, fuzzy, c-format
msgid "DNS server 3"
msgstr "DNS serveris"

#: network/netconnect.pm:1001
#, fuzzy, c-format
msgid "Search domain"
msgstr "NIS domenas"

#: network/netconnect.pm:1002
#, c-format
msgid "By default search domain will be set from the fully-qualified host name"
msgstr ""

#: network/netconnect.pm:1003
#, c-format
msgid "Gateway (e.g. %s)"
msgstr ""

#: network/netconnect.pm:1005
#, c-format
msgid "Gateway device"
msgstr "Šliuzo (gateway) įrenginys"

#: network/netconnect.pm:1014
#, fuzzy, c-format
msgid "DNS server address should be in format 1.2.3.4"
msgstr "IP adresas turėtų būti 1.2.3.4 formato"

#: network/netconnect.pm:1019 standalone/drakconnect:571
#, fuzzy, c-format
msgid "Gateway address should be in format 1.2.3.4"
msgstr "IP adresas turėtų būti 1.2.3.4 formato"

#: network/netconnect.pm:1030
#, c-format
msgid ""
"Enter a Zeroconf host name which will be the one that your machine will get "
"back to other machines on the network:"
msgstr ""

#: network/netconnect.pm:1031
#, fuzzy, c-format
msgid "Zeroconf Host name"
msgstr "Hosto vardas"

#: network/netconnect.pm:1034
#, c-format
msgid "Zeroconf host name must not contain a ."
msgstr ""

#: network/netconnect.pm:1044
#, c-format
msgid ""
"You have configured multiple ways to connect to the Internet.\n"
"Choose the one you want to use.\n"
"\n"
msgstr ""

#: network/netconnect.pm:1046
#, fuzzy, c-format
msgid "Internet connection"
msgstr "Interneto jungties dalinimas"

#: network/netconnect.pm:1054
#, fuzzy, c-format
msgid "Configuration is complete, do you want to apply settings ?"
msgstr "Kurią XFree konfigūraciją tu nori turėti?"

#: network/netconnect.pm:1070
#, c-format
msgid "Do you want to start the connection at boot?"
msgstr "Ar tu nori prisijungti tik įjungus?"

#: network/netconnect.pm:1094
#, fuzzy, c-format
msgid "The network needs to be restarted. Do you want to restart it ?"
msgstr "Kokius jūs norite įdiegti paketus"

#: network/netconnect.pm:1100 network/netconnect.pm:1165
#, c-format
msgid "Network Configuration"
msgstr "Tinklo konfigūravimas"

#: network/netconnect.pm:1101
#, fuzzy, c-format
msgid ""
"A problem occured while restarting the network: \n"
"\n"
"%s"
msgstr "Ar tu nori iš naujo paleisti tinklą"

#: network/netconnect.pm:1110
#, c-format
msgid "Do you want to try to connect to the Internet now?"
msgstr "Ar nori pabandyti prisijungti prie interneto dabar?"

#: network/netconnect.pm:1118 standalone/drakconnect:958
#, c-format
msgid "Testing your connection..."
msgstr "Išbandoma jungtis..."

#: network/netconnect.pm:1134
#, fuzzy, c-format
msgid "The system is now connected to the Internet."
msgstr "Sistema dabar prijungta prie interneto."

#: network/netconnect.pm:1135
#, c-format
msgid "For security reasons, it will be disconnected now."
msgstr ""

#: network/netconnect.pm:1136
#, fuzzy, c-format
msgid ""
"The system doesn't seem to be connected to the Internet.\n"
"Try to reconfigure your connection."
msgstr ""
"Neatrodo, kad sistema dabar prijungta prie interneto.\n"
"Bandyk iš naujo konfigūruoti jungtį."

#: network/netconnect.pm:1150
#, fuzzy, c-format
msgid ""
"Congratulations, the network and Internet configuration is finished.\n"
"\n"
msgstr ""
"Sveikiname, jūsų tinklo ir Internet konfiguracija baigta.\n"
"\n"
"Dabar konfiguraciją pritaikysime sistemai.\n"

#: network/netconnect.pm:1153
#, c-format
msgid ""
"After this is done, we recommend that you restart your X environment to "
"avoid any hostname-related problems."
msgstr ""
"Po to rekomenduojame jums perleisti X aplinką,\n"
"kad išvengti problemų su kompiuterio vardu."

#: network/netconnect.pm:1154
#, c-format
msgid ""
"Problems occured during configuration.\n"
"Test your connection via net_monitor or mcc. If your connection doesn't "
"work, you might want to relaunch the configuration."
msgstr ""

#: network/netconnect.pm:1166
#, fuzzy, c-format
msgid ""
"Because you are doing a network installation, your network is already "
"configured.\n"
"Click on Ok to keep your configuration, or cancel to reconfigure your "
"Internet & Network connection.\n"
msgstr ""
"Kadangi jūs diegiate per tinklą jūsų tinklo nustatymai yra padaryti.\n"
"Spragtelėkite ant Gerai kad perkonfiguruoti Network/Internet pasijungimą "
"arbaatšaukti, kad praleisti šį punktą.\n"

#: network/network.pm:314
#, c-format
msgid "Proxies configuration"
msgstr "Proxy konfigūracija"

#: network/network.pm:315
#, c-format
msgid "HTTP proxy"
msgstr "HTTP proxy"

#: network/network.pm:316
#, c-format
msgid "FTP proxy"
msgstr "FTP proxy"

#: network/network.pm:319
#, c-format
msgid "Proxy should be http://..."
msgstr "Proxy turėtų būti http://..."

#: network/network.pm:320
#, fuzzy, c-format
msgid "URL should begin with 'ftp:' or 'http:'"
msgstr "Proxy turėtų būti http://..."

#: network/shorewall.pm:26
#, c-format
msgid "Firewalling configuration detected!"
msgstr "Aptikta ugniasienės konfigūracija!"

#: network/shorewall.pm:27
#, c-format
msgid ""
"Warning! An existing firewalling configuration has been detected. You may "
"need some manual fixes after installation."
msgstr ""
"Įspėjimas! Aptikta ugniasienės konfigūracija! Tau gali tekti kai ką "
"ištaisyti rankomis po įdiegimo."

#: network/shorewall.pm:70
#, c-format
msgid ""
"Please enter the name of the interface connected to the "
"internet.              \n"
"                \n"
"Examples:\n"
"                ppp+ for modem or DSL connections, \n"
"                eth0, or eth1 for cable connection, \n"
"                ippp+ for a isdn connection.\n"
msgstr ""

#: network/tools.pm:207
#, fuzzy, c-format
msgid "Insert floppy"
msgstr "Įdėk diskelį į kaupiklį %s"

#: network/tools.pm:208
#, fuzzy, c-format
msgid ""
"Insert a FAT formatted floppy in drive %s with %s in root directory and "
"press %s"
msgstr "Įdėk FAT formatuotą diskelį į kaupiklį %s"

#: network/tools.pm:209
#, fuzzy, c-format
msgid "Floppy access error, unable to mount device %s"
msgstr "Kur nori primontuoti įrenginį %s?"

#: partition_table.pm:642
#, c-format
msgid "mount failed: "
msgstr "primontuoti nepavyko: "

#: partition_table.pm:747
#, c-format
msgid "Extended partition not supported on this platform"
msgstr "Išplėstiniai skirsniai šioje platformoje nepalaikomi"

#: partition_table.pm:765
#, c-format
msgid ""
"You have a hole in your partition table but I can't use it.\n"
"The only solution is to move your primary partitions to have the hole next "
"to the extended partitions."
msgstr ""
"Skirsnių lentelėje yra tuščios vietos, bet ji negali būti panaudota.\n"
"Vienintelis sprendimas yra perkelti pirminius skirsnius taip, kad tuščia "
"vieta būtų šalia išplėstinių skirsnių"

#: partition_table.pm:852
#, c-format
msgid "Restoring from file %s failed: %s"
msgstr "Nepavyko atstatyti iš bylos %s: %s"

#: partition_table.pm:854
#, c-format
msgid "Bad backup file"
msgstr "Bloga atsarginė byla"

#: partition_table.pm:874
#, c-format
msgid "Error writing to file %s"
msgstr "Klaida įrašant į bylą %s"

#: partition_table/raw.pm:181
#, fuzzy, c-format
msgid ""
"Something bad is happening on your drive. \n"
"A test to check the integrity of data has failed. \n"
"It means writing anything on the disk will end up with random, corrupted "
"data."
msgstr ""
"Kažkas blogo nutiko jūsų kaupikliui. \n"
"Bandymas pabandyti jo vientisumą nepavyko. \n"
"Tai sako, kad rašymas į jį bus visiškas mėšlas. "

#: pkgs.pm:24
#, c-format
msgid "must have"
msgstr "turi turėti"

#: pkgs.pm:25
#, c-format
msgid "important"
msgstr "svarbus"

#: pkgs.pm:26
#, c-format
msgid "very nice"
msgstr "labai gerai"

#: pkgs.pm:27
#, c-format
msgid "nice"
msgstr "nuostabu"

#: pkgs.pm:28
#, c-format
msgid "maybe"
msgstr "galbūt"

#: printer/cups.pm:87
#, fuzzy, c-format
msgid "(on %s)"
msgstr "(modulis %s)"

#: printer/cups.pm:87
#, c-format
msgid "(on this machine)"
msgstr ""

#: printer/cups.pm:99 standalone/printerdrake:197
#, fuzzy, c-format
msgid "Configured on other machines"
msgstr "Nustatyti servisus"

#: printer/cups.pm:101
#, fuzzy, c-format
msgid "On CUPS server \"%s\""
msgstr "CUPS serverio IP"

#: printer/cups.pm:101 printer/printerdrake.pm:3784
#: printer/printerdrake.pm:3793 printer/printerdrake.pm:3934
#: printer/printerdrake.pm:3945 printer/printerdrake.pm:4157
#, c-format
msgid " (Default)"
msgstr " (Įprastas)"

#: printer/data.pm:21
#, c-format
msgid "PDQ - Print, Don't Queue"
msgstr ""

#: printer/data.pm:22
#, c-format
msgid "PDQ"
msgstr ""

#: printer/data.pm:33
#, c-format
msgid "LPD - Line Printer Daemon"
msgstr ""

#: printer/data.pm:34
#, c-format
msgid "LPD"
msgstr ""

#: printer/data.pm:55
#, c-format
msgid "LPRng - LPR New Generation"
msgstr ""

#: printer/data.pm:56
#, c-format
msgid "LPRng"
msgstr ""

#: printer/data.pm:81
#, c-format
msgid "CUPS - Common Unix Printing System"
msgstr ""

#: printer/detect.pm:148 printer/detect.pm:226 printer/detect.pm:428
#: printer/detect.pm:465 printer/printerdrake.pm:679
#, c-format
msgid "Unknown Model"
msgstr ""

#: printer/main.pm:28
#, c-format
msgid "Local printer"
msgstr "Vietinis spausdintuvas"

#: printer/main.pm:29
#, c-format
msgid "Remote printer"
msgstr "Nutolęs spausdintuvas"

#: printer/main.pm:30
#, fuzzy, c-format
msgid "Printer on remote CUPS server"
msgstr "Nutolęs CUPS serveris"

#: printer/main.pm:31 printer/printerdrake.pm:1372
#, fuzzy, c-format
msgid "Printer on remote lpd server"
msgstr "Nutolęs lpd serveris"

#: printer/main.pm:32
#, c-format
msgid "Network printer (TCP/Socket)"
msgstr "Tinklo spausdintuvas (TCP/lizdas)"

#: printer/main.pm:33
#, fuzzy, c-format
msgid "Printer on SMB/Windows 95/98/NT server"
msgstr "SMB/Windows 95/98/NT"

#: printer/main.pm:34
#, fuzzy, c-format
msgid "Printer on NetWare server"
msgstr "Spausdinimo serveris"

#: printer/main.pm:35 printer/printerdrake.pm:1376
#, fuzzy, c-format
msgid "Enter a printer device URI"
msgstr "Spausdintuvo įrenginio URI"

#: printer/main.pm:36
#, c-format
msgid "Pipe job into a command"
msgstr ""

#: printer/main.pm:306 printer/main.pm:574 printer/main.pm:1544
#: printer/main.pm:2217 printer/printerdrake.pm:1781
#: printer/printerdrake.pm:4191
#, c-format
msgid "Unknown model"
msgstr ""

#: printer/main.pm:331 standalone/printerdrake:196
#, fuzzy, c-format
msgid "Configured on this machine"
msgstr "Pelės nustatymas"

#: printer/main.pm:337 printer/printerdrake.pm:948
#, c-format
msgid " on parallel port #%s"
msgstr ""

#: printer/main.pm:340 printer/printerdrake.pm:950
#, c-format
msgid ", USB printer #%s"
msgstr ""

#: printer/main.pm:342
#, fuzzy, c-format
msgid ", USB printer"
msgstr "Spausdintuvo nėra"

#: printer/main.pm:347
#, c-format
msgid ", multi-function device on parallel port #%s"
msgstr ""

#: printer/main.pm:350
#, fuzzy, c-format
msgid ", multi-function device on a parallel port"
msgstr "Spausdintuvo hosto vardas"

#: printer/main.pm:352
#, c-format
msgid ", multi-function device on USB"
msgstr ""

#: printer/main.pm:354
#, c-format
msgid ", multi-function device on HP JetDirect"
msgstr ""

#: printer/main.pm:356
#, c-format
msgid ", multi-function device"
msgstr ""

#: printer/main.pm:359
#, fuzzy, c-format
msgid ", printing to %s"
msgstr "Klaida įrašant į bylą %s"

#: printer/main.pm:361
#, c-format
msgid " on LPD server \"%s\", printer \"%s\""
msgstr ""

#: printer/main.pm:363
#, c-format
msgid ", TCP/IP host \"%s\", port %s"
msgstr ""

#: printer/main.pm:367
#, c-format
msgid " on SMB/Windows server \"%s\", share \"%s\""
msgstr ""

#: printer/main.pm:371
#, c-format
msgid " on Novell server \"%s\", printer \"%s\""
msgstr ""

#: printer/main.pm:373
#, c-format
msgid ", using command %s"
msgstr ""

#: printer/main.pm:388
#, fuzzy, c-format
msgid "Parallel port #%s"
msgstr "Spausdintuvo hosto vardas"

#: printer/main.pm:391 printer/printerdrake.pm:964 printer/printerdrake.pm:987
#: printer/printerdrake.pm:1005
#, fuzzy, c-format
msgid "USB printer #%s"
msgstr "Spausdintuvo nėra"

#: printer/main.pm:393
#, fuzzy, c-format
msgid "USB printer"
msgstr "Spausdintuvo nėra"

#: printer/main.pm:398
#, fuzzy, c-format
msgid "Multi-function device on parallel port #%s"
msgstr "Spausdintuvo hosto vardas"

#: printer/main.pm:401
#, fuzzy, c-format
msgid "Multi-function device on a parallel port"
msgstr "Spausdintuvo hosto vardas"

#: printer/main.pm:403
#, c-format
msgid "Multi-function device on USB"
msgstr ""

#: printer/main.pm:405
#, c-format
msgid "Multi-function device on HP JetDirect"
msgstr ""

#: printer/main.pm:407
#, c-format
msgid "Multi-function device"
msgstr ""

#: printer/main.pm:410
#, fuzzy, c-format
msgid "Prints into %s"
msgstr "Klaida įrašant į bylą %s"

#: printer/main.pm:412
#, fuzzy, c-format
msgid "LPD server \"%s\", printer \"%s\""
msgstr "Išjungiamas tinklas"

#: printer/main.pm:414
#, c-format
msgid "TCP/IP host \"%s\", port %s"
msgstr ""

#: printer/main.pm:418
#, fuzzy, c-format
msgid "SMB/Windows server \"%s\", share \"%s\""
msgstr "SMB/Windows 95/98/NT"

#: printer/main.pm:422
#, fuzzy, c-format
msgid "Novell server \"%s\", printer \"%s\""
msgstr "Tinklo spausdintuvas (TCP/lizdas)"

#: printer/main.pm:424
#, fuzzy, c-format
msgid "Uses command %s"
msgstr "Prievadas"

#: printer/main.pm:426
#, c-format
msgid "URI: %s"
msgstr ""

#: printer/main.pm:571 printer/printerdrake.pm:725
#: printer/printerdrake.pm:2331
#, c-format
msgid "Raw printer (No driver)"
msgstr ""

#: printer/main.pm:1085 printer/printerdrake.pm:179
#: printer/printerdrake.pm:191
#, fuzzy, c-format
msgid "Local network(s)"
msgstr "nerasta jokia tinklo plokštė"

#: printer/main.pm:1087 printer/printerdrake.pm:195
#, fuzzy, c-format
msgid "Interface \"%s\""
msgstr "Interfeisas"

#: printer/main.pm:1089
#, fuzzy, c-format
msgid "Network %s"
msgstr "Tinklo interfeisas"

#: printer/main.pm:1091
#, fuzzy, c-format
msgid "Host %s"
msgstr "Hosto vardas"

#: printer/main.pm:1120
#, fuzzy, c-format
msgid "%s (Port %s)"
msgstr "Prievadas"

#: printer/printerdrake.pm:22
#, c-format
msgid ""
"The HP LaserJet 1000 needs its firmware to be uploaded after being turned "
"on. Download the Windows driver package from the HP web site (the firmware "
"on the printer's CD does not work) and extract the firmware file from it by "
"uncompresing the self-extracting '.exe' file with the 'unzip' utility and "
"searching for the 'sihp1000.img' file. Copy this file into the '/etc/"
"printer' directory. There it will be found by the automatic uploader script "
"and uploaded whenever the printer is connected and turned on.\n"
msgstr ""

#: printer/printerdrake.pm:62
#, fuzzy, c-format
msgid "CUPS printer configuration"
msgstr "Modemo Nustatymai"

#: printer/printerdrake.pm:63
#, c-format
msgid ""
"Here you can choose whether the printers connected to this machine should be "
"accessable by remote machines and by which remote machines."
msgstr ""

#: printer/printerdrake.pm:64
#, c-format
msgid ""
"You can also decide here whether printers on remote machines should be "
"automatically made available on this machine."
msgstr ""

#: printer/printerdrake.pm:67
#, c-format
msgid "The printers on this machine are available to other computers"
msgstr ""

#: printer/printerdrake.pm:69
#, c-format
msgid "Automatically find available printers on remote machines"
msgstr ""

#: printer/printerdrake.pm:71
#, fuzzy, c-format
msgid "Printer sharing on hosts/networks: "
msgstr "Spausdintuvas"

#: printer/printerdrake.pm:73
#, fuzzy, c-format
msgid "Custom configuration"
msgstr "Nustatymai"

#: printer/printerdrake.pm:78 standalone/scannerdrake:554
#: standalone/scannerdrake:571
#, fuzzy, c-format
msgid "No remote machines"
msgstr "Nutolęs spausdintuvas"

#: printer/printerdrake.pm:88
#, fuzzy, c-format
msgid "Additional CUPS servers: "
msgstr "CUPS serverio IP"

#: printer/printerdrake.pm:93
#, fuzzy, c-format
msgid "None"
msgstr "Atlikta"

#: printer/printerdrake.pm:95
#, c-format
msgid ""
"To get access to printers on remote CUPS servers in your local network you "
"only need to turn on the \"Automatically find available printers on remote "
"machines\" option; the CUPS servers inform your machine automatically about "
"their printers. All printers currently known to your machine are listed in "
"the \"Remote printers\" section in the main window of Printerdrake. If your "
"CUPS server(s) is/are not in your local network, you have to enter the IP "
"address(es) and optionally the port number(s) here to get the printer "
"information from the server(s)."
msgstr ""

#: printer/printerdrake.pm:100
#, fuzzy, c-format
msgid "Japanese text printing mode"
msgstr "Nustatyti tinklą"

#: printer/printerdrake.pm:101
#, c-format
msgid ""
"Turning on this allows to print plain text files in japanese language. Only "
"use this function if you really want to print text in japanese, if it is "
"activated you cannot print accentuated characters in latin fonts any more "
"and you will not be able to adjust the margins, the character size, etc. "
"This setting only affects printers defined on this machine. If you want to "
"print japanese text on a printer set up on a remote machine, you have to "
"activate this function on that remote machine."
msgstr ""

#: printer/printerdrake.pm:105
#, fuzzy, c-format
msgid "Automatic correction of CUPS configuration"
msgstr "Įdiegimo Tipo Konfiguracija"

#: printer/printerdrake.pm:107
#, c-format
msgid ""
"When this option is turned on, on every startup of CUPS it is automatically "
"made sure that\n"
"\n"
"- if LPD/LPRng is installed, /etc/printcap will not be overwritten by CUPS\n"
"\n"
"- if /etc/cups/cupsd.conf is missing, it will be created\n"
"\n"
"- when printer information is broadcasted, it does not contain \"localhost\" "
"as the server name.\n"
"\n"
"If some of these measures lead to problems for you, turn this option off, "
"but then you have to take care of these points."
msgstr ""

#: printer/printerdrake.pm:129 printer/printerdrake.pm:205
#, fuzzy, c-format
msgid "Sharing of local printers"
msgstr "Vietinis spausdintuvas"

#: printer/printerdrake.pm:130
#, c-format
msgid ""
"These are the machines and networks on which the locally connected printer"
"(s) should be available:"
msgstr ""

#: printer/printerdrake.pm:141
#, c-format
msgid "Add host/network"
msgstr ""

#: printer/printerdrake.pm:147
#, c-format
msgid "Edit selected host/network"
msgstr ""

#: printer/printerdrake.pm:156
#, fuzzy, c-format
msgid "Remove selected host/network"
msgstr "Pašalinti eilę"

#: printer/printerdrake.pm:187 printer/printerdrake.pm:197
#: printer/printerdrake.pm:210 printer/printerdrake.pm:217
#: printer/printerdrake.pm:248 printer/printerdrake.pm:266
#, c-format
msgid "IP address of host/network:"
msgstr ""

#: printer/printerdrake.pm:206
#, c-format
msgid ""
"Choose the network or host on which the local printers should be made "
"available:"
msgstr ""

#: printer/printerdrake.pm:213
#, c-format
msgid "Host/network IP address missing."
msgstr ""

#: printer/printerdrake.pm:221
#, c-format
msgid "The entered host/network IP is not correct.\n"
msgstr ""

#: printer/printerdrake.pm:222 printer/printerdrake.pm:400
#, c-format
msgid "Examples for correct IPs:\n"
msgstr ""

#: printer/printerdrake.pm:246
#, c-format
msgid "This host/network is already in the list, it cannot be added again.\n"
msgstr ""

#: printer/printerdrake.pm:316 printer/printerdrake.pm:387
#, fuzzy, c-format
msgid "Accessing printers on remote CUPS servers"
msgstr "Nutolęs CUPS serveris"

#: printer/printerdrake.pm:317
#, c-format
msgid ""
"Add here the CUPS servers whose printers you want to use. You only need to "
"do this if the servers do not broadcast their printer information into the "
"local network."
msgstr ""

#: printer/printerdrake.pm:328
#, fuzzy, c-format
msgid "Add server"
msgstr "Pridėti vartotoją"

#: printer/printerdrake.pm:334
#, fuzzy, c-format
msgid "Edit selected server"
msgstr "aptiktas %s"

#: printer/printerdrake.pm:343
#, fuzzy, c-format
msgid "Remove selected server"
msgstr "Pašalinti eilę"

#: printer/printerdrake.pm:388
#, c-format
msgid "Enter IP address and port of the host whose printers you want to use."
msgstr ""

#: printer/printerdrake.pm:389
#, c-format
msgid "If no port is given, 631 will be taken as default."
msgstr ""

#: printer/printerdrake.pm:393
#, fuzzy, c-format
msgid "Server IP missing!"
msgstr "Spausdintuvo hosto vardas"

#: printer/printerdrake.pm:399
#, fuzzy, c-format
msgid "The entered IP is not correct.\n"
msgstr "Ar taip teisinga?"

#: printer/printerdrake.pm:411 printer/printerdrake.pm:1582
#, fuzzy, c-format
msgid "The port number should be an integer!"
msgstr "Prievado numeris turi būti skaičius"

#: printer/printerdrake.pm:422
#, c-format
msgid "This server is already in the list, it cannot be added again.\n"
msgstr ""

#: printer/printerdrake.pm:433 printer/printerdrake.pm:1603
#: standalone/harddrake2:64
#, c-format
msgid "Port"
msgstr "Prievadas"

#: printer/printerdrake.pm:478 printer/printerdrake.pm:545
#: printer/printerdrake.pm:605 printer/printerdrake.pm:621
#: printer/printerdrake.pm:704 printer/printerdrake.pm:761
#: printer/printerdrake.pm:787 printer/printerdrake.pm:1800
#: printer/printerdrake.pm:1808 printer/printerdrake.pm:1830
#: printer/printerdrake.pm:1857 printer/printerdrake.pm:1892
#: printer/printerdrake.pm:1929 printer/printerdrake.pm:1939
#: printer/printerdrake.pm:2182 printer/printerdrake.pm:2187
#: printer/printerdrake.pm:2326 printer/printerdrake.pm:2436
#: printer/printerdrake.pm:2901 printer/printerdrake.pm:2966
#: printer/printerdrake.pm:3000 printer/printerdrake.pm:3003
#: printer/printerdrake.pm:3122 printer/printerdrake.pm:3184
#: printer/printerdrake.pm:3256 printer/printerdrake.pm:3277
#: printer/printerdrake.pm:3286 printer/printerdrake.pm:3377
#: printer/printerdrake.pm:3475 printer/printerdrake.pm:3481
#: printer/printerdrake.pm:3488 printer/printerdrake.pm:3534
#: printer/printerdrake.pm:3574 printer/printerdrake.pm:3586
#: printer/printerdrake.pm:3597 printer/printerdrake.pm:3606
#: printer/printerdrake.pm:3619 printer/printerdrake.pm:3689
#: printer/printerdrake.pm:3740 printer/printerdrake.pm:3805
#: printer/printerdrake.pm:4065 printer/printerdrake.pm:4108
#: printer/printerdrake.pm:4254 printer/printerdrake.pm:4312
#: printer/printerdrake.pm:4341 standalone/printerdrake:65
#: standalone/printerdrake:85 standalone/printerdrake:515
#, c-format
msgid "Printerdrake"
msgstr "Printerdrake"

#: printer/printerdrake.pm:479
#, fuzzy, c-format
msgid "Restarting CUPS..."
msgstr "griežta"

#: printer/printerdrake.pm:502
#, c-format
msgid "Select Printer Connection"
msgstr "Pasirink spausdintuvo jungtį"

#: printer/printerdrake.pm:503
#, c-format
msgid "How is the printer connected?"
msgstr "Kaip yra prijungtas spausdintuvas?"

#: printer/printerdrake.pm:505
#, fuzzy, c-format
msgid ""
"\n"
"Printers on remote CUPS servers do not need to be configured here; these "
"printers will be automatically detected."
msgstr ""
"Su nutolusiu CUPS serveriu, tau šioje vietoje nereikia nustatinėti\n"
"jokių spausdintuvų; jie bus automatiškai atpažįstami.\n"
"Jeigu abejoji, pasirink \"Nutolęs CUPS serveris\"."

#: printer/printerdrake.pm:508 printer/printerdrake.pm:3807
#, c-format
msgid ""
"\n"
"WARNING: No local network connection active, remote printers can neither be "
"detected nor tested!"
msgstr ""

#: printer/printerdrake.pm:515
#, c-format
msgid "Printer auto-detection (Local, TCP/Socket, and SMB printers)"
msgstr ""

#: printer/printerdrake.pm:545
#, fuzzy, c-format
msgid "Checking your system..."
msgstr "Kurią spausdinimo sistemą nori naudoti?"

#: printer/printerdrake.pm:560
#, fuzzy, c-format
msgid "and one unknown printer"
msgstr "Spausdintuvo nėra"

#: printer/printerdrake.pm:562
#, fuzzy, c-format
msgid "and %d unknown printers"
msgstr "Spausdintuvo nėra"

#: printer/printerdrake.pm:566
#, fuzzy, c-format
msgid ""
"The following printers\n"
"\n"
"%s%s\n"
"are directly connected to your system"
msgstr "Tavo sistemoje nerasta jokia tinklo plokštė!"

#: printer/printerdrake.pm:568
#, fuzzy, c-format
msgid ""
"The following printer\n"
"\n"
"%s%s\n"
"are directly connected to your system"
msgstr "Tavo sistemoje nerasta jokia tinklo plokštė!"

#: printer/printerdrake.pm:569
#, fuzzy, c-format
msgid ""
"The following printer\n"
"\n"
"%s%s\n"
"is directly connected to your system"
msgstr "Tavo sistemoje nerasta jokia tinklo plokštė!"

#: printer/printerdrake.pm:573
#, c-format
msgid ""
"\n"
"There is one unknown printer directly connected to your system"
msgstr ""

#: printer/printerdrake.pm:574
#, c-format
msgid ""
"\n"
"There are %d unknown printers directly connected to your system"
msgstr ""

#: printer/printerdrake.pm:577
#, c-format
msgid ""
"There are no printers found which are directly connected to your machine"
msgstr ""

#: printer/printerdrake.pm:580
#, fuzzy, c-format
msgid " (Make sure that all your printers are connected and turned on).\n"
msgstr ""
"Prašom pasirinkti, prie kurios nuosekliosios jungties yra prijungtas tavo "
"modemas."

#: printer/printerdrake.pm:593
#, c-format
msgid ""
"Do you want to enable printing on the printers mentioned above or on "
"printers in the local network?\n"
msgstr ""

#: printer/printerdrake.pm:594
#, fuzzy, c-format
msgid "Do you want to enable printing on printers in the local network?\n"
msgstr "Ar tu nori išbandyti spausdinimą?"

#: printer/printerdrake.pm:596
#, fuzzy, c-format
msgid "Do you want to enable printing on the printers mentioned above?\n"
msgstr "Ar tu nori prisijungti tik įjungus?"

#: printer/printerdrake.pm:597
#, c-format
msgid "Are you sure that you want to set up printing on this machine?\n"
msgstr ""

#: printer/printerdrake.pm:598
#, c-format
msgid ""
"NOTE: Depending on the printer model and the printing system up to %d MB of "
"additional software will be installed."
msgstr ""

#: printer/printerdrake.pm:622
#, fuzzy, c-format
msgid "Searching for new printers..."
msgstr "Vietinis spausdintuvas"

#: printer/printerdrake.pm:706
#, fuzzy, c-format
msgid "Configuring printer ..."
msgstr "Nustatyti spausdintuvą"

#: printer/printerdrake.pm:707 printer/printerdrake.pm:762
#: printer/printerdrake.pm:3598
#, fuzzy, c-format
msgid "Configuring printer \"%s\"..."
msgstr "Nustatyti spausdintuvą"

#: printer/printerdrake.pm:727
#, c-format
msgid "("
msgstr ""

#: printer/printerdrake.pm:728
#, c-format
msgid " on "
msgstr ""

#: printer/printerdrake.pm:729 standalone/scannerdrake:130
#, c-format
msgid ")"
msgstr ""

#: printer/printerdrake.pm:734 printer/printerdrake.pm:2338
#, fuzzy, c-format
msgid "Printer model selection"
msgstr "Spausdintuvo jungtis"

#: printer/printerdrake.pm:735 printer/printerdrake.pm:2339
#, fuzzy, c-format
msgid "Which printer model do you have?"
msgstr "Kokio tipo yra tavo spausdintuvas?"

#: printer/printerdrake.pm:736
#, c-format
msgid ""
"\n"
"\n"
"Printerdrake could not determine which model your printer %s is. Please "
"choose the correct model from the list."
msgstr ""

#: printer/printerdrake.pm:739 printer/printerdrake.pm:2344
#, c-format
msgid ""
"If your printer is not listed, choose a compatible (see printer manual) or a "
"similar one."
msgstr ""

#: printer/printerdrake.pm:788 printer/printerdrake.pm:3587
#: printer/printerdrake.pm:3741 printer/printerdrake.pm:4066
#: printer/printerdrake.pm:4109 printer/printerdrake.pm:4313
#, fuzzy, c-format
msgid "Configuring applications..."
msgstr "Nustatyti spausdintuvą"

#: printer/printerdrake.pm:824 printer/printerdrake.pm:836
#: printer/printerdrake.pm:894 printer/printerdrake.pm:1787
#: printer/printerdrake.pm:3823 printer/printerdrake.pm:4006
#, fuzzy, c-format
msgid "Add a new printer"
msgstr "Spausdintuvo nėra"

#: printer/printerdrake.pm:825
#, c-format
msgid ""
"\n"
"Welcome to the Printer Setup Wizard\n"
"\n"
"This wizard allows you to install local or remote printers to be used from "
"this machine and also from other machines in the network.\n"
"\n"
"It asks you for all necessary information to set up the printer and gives "
"you access to all available printer drivers, driver options, and printer "
"connection types."
msgstr ""

#: printer/printerdrake.pm:838
#, c-format
msgid ""
"\n"
"Welcome to the Printer Setup Wizard\n"
"\n"
"This wizard will help you to install your printer(s) connected to this "
"computer, connected directly to the network or to a remote Windows machine.\n"
"\n"
"Please plug in and turn on all printers connected to this machine so that it/"
"they can be auto-detected. Also your network printer(s) and your Windows "
"machines must be connected and turned on.\n"
"\n"
"Note that auto-detecting printers on the network takes longer than the auto-"
"detection of only the printers connected to this machine. So turn off the "
"auto-detection of network and/or Windows-hosted printers when you don't need "
"it.\n"
"\n"
" Click on \"Next\" when you are ready, and on \"Cancel\" if you do not want "
"to set up your printer(s) now."
msgstr ""

#: printer/printerdrake.pm:847
#, c-format
msgid ""
"\n"
"Welcome to the Printer Setup Wizard\n"
"\n"
"This wizard will help you to install your printer(s) connected to this "
"computer.\n"
"\n"
"Please plug in and turn on all printers connected to this machine so that it/"
"they can be auto-detected.\n"
"\n"
" Click on \"Next\" when you are ready, and on \"Cancel\" if you do not want "
"to set up your printer(s) now."
msgstr ""

#: printer/printerdrake.pm:855
#, c-format
msgid ""
"\n"
"Welcome to the Printer Setup Wizard\n"
"\n"
"This wizard will help you to install your printer(s) connected to this "
"computer or connected directly to the network.\n"
"\n"
"If you have printer(s) connected to this machine, Please plug it/them in on "
"this computer and turn it/them on so that it/they can be auto-detected. Also "
"your network printer(s) must be connected and turned on.\n"
"\n"
"Note that auto-detecting printers on the network takes longer than the auto-"
"detection of only the printers connected to this machine. So turn off the "
"auto-detection of network printers when you don't need it.\n"
"\n"
" Click on \"Next\" when you are ready, and on \"Cancel\" if you do not want "
"to set up your printer(s) now."
msgstr ""

#: printer/printerdrake.pm:864
#, c-format
msgid ""
"\n"
"Welcome to the Printer Setup Wizard\n"
"\n"
"This wizard will help you to install your printer(s) connected to this "
"computer.\n"
"\n"
"If you have printer(s) connected to this machine, Please plug it/them in on "
"this computer and turn it/them on so that it/they can be auto-detected.\n"
"\n"
" Click on \"Next\" when you are ready, and on \"Cancel\" if you do not want "
"to set up your printer(s) now."
msgstr ""

#: printer/printerdrake.pm:873
#, fuzzy, c-format
msgid "Auto-detect printers connected to this machine"
msgstr "Nutolęs spausdintuvas"

#: printer/printerdrake.pm:876
#, c-format
msgid "Auto-detect printers connected directly to the local network"
msgstr ""

#: printer/printerdrake.pm:879
#, c-format
msgid "Auto-detect printers connected to machines running Microsoft Windows"
msgstr ""

#: printer/printerdrake.pm:895
#, c-format
msgid ""
"\n"
"Congratulations, your printer is now installed and configured!\n"
"\n"
"You can print using the \"Print\" command of your application (usually in "
"the \"File\" menu).\n"
"\n"
"If you want to add, remove, or rename a printer, or if you want to change "
"the default option settings (paper input tray, printout quality, ...), "
"select \"Printer\" in the \"Hardware\" section of the %s Control Center."
msgstr ""

#: printer/printerdrake.pm:930 printer/printerdrake.pm:1060
#: printer/printerdrake.pm:1276 printer/printerdrake.pm:1516
#, fuzzy, c-format
msgid "Printer auto-detection"
msgstr "Naudokite automatinį aptikimą"

#: printer/printerdrake.pm:930
#, c-format
msgid "Detecting devices..."
msgstr "Ieškoma įranga..."

#: printer/printerdrake.pm:952
#, c-format
msgid ", network printer \"%s\", port %s"
msgstr ""

#: printer/printerdrake.pm:954
#, fuzzy, c-format
msgid ", printer \"%s\" on SMB/Windows server \"%s\""
msgstr "SMB/Windows 95/98/NT"

#: printer/printerdrake.pm:958
#, fuzzy, c-format
msgid "Detected %s"
msgstr "aptiktas %s"

#: printer/printerdrake.pm:962 printer/printerdrake.pm:985
#: printer/printerdrake.pm:1002
#, fuzzy, c-format
msgid "Printer on parallel port #%s"
msgstr "Spausdintuvo hosto vardas"

#: printer/printerdrake.pm:966
#, fuzzy, c-format
msgid "Network printer \"%s\", port %s"
msgstr "Tinklo spausdintuvas (TCP/lizdas)"

#: printer/printerdrake.pm:968
#, fuzzy, c-format
msgid "Printer \"%s\" on SMB/Windows server \"%s\""
msgstr "SMB/Windows 95/98/NT"

#: printer/printerdrake.pm:1047
#, fuzzy, c-format
msgid "Local Printer"
msgstr "Vietinis spausdintuvas"

#: printer/printerdrake.pm:1048
#, c-format
msgid ""
"No local printer found! To manually install a printer enter a device name/"
"file name in the input line (Parallel Ports: /dev/lp0, /dev/lp1, ..., "
"equivalent to LPT1:, LPT2:, ..., 1st USB printer: /dev/usb/lp0, 2nd USB "
"printer: /dev/usb/lp1, ...)."
msgstr ""

#: printer/printerdrake.pm:1052
#, fuzzy, c-format
msgid "You must enter a device or file name!"
msgstr "Spausdintuvo įrenginio URI"

#: printer/printerdrake.pm:1061
#, fuzzy, c-format
msgid "No printer found!"
msgstr "Vietinis spausdintuvas"

#: printer/printerdrake.pm:1069
#, fuzzy, c-format
msgid "Local Printers"
msgstr "Vietinis spausdintuvas"

#: printer/printerdrake.pm:1070
#, fuzzy, c-format
msgid "Available printers"
msgstr "Vietinis spausdintuvas"

#: printer/printerdrake.pm:1074 printer/printerdrake.pm:1083
#, fuzzy, c-format
msgid "The following printer was auto-detected. "
msgstr "Ruošiamasi pašalinti šiuos paketus"

#: printer/printerdrake.pm:1076
#, c-format
msgid ""
"If it is not the one you want to configure, enter a device name/file name in "
"the input line"
msgstr ""

#: printer/printerdrake.pm:1077
#, c-format
msgid ""
"Alternatively, you can specify a device name/file name in the input line"
msgstr ""

#: printer/printerdrake.pm:1078 printer/printerdrake.pm:1087
#, c-format
msgid "Here is a list of all auto-detected printers. "
msgstr ""

#: printer/printerdrake.pm:1080
#, c-format
msgid ""
"Please choose the printer you want to set up or enter a device name/file "
"name in the input line"
msgstr ""

#: printer/printerdrake.pm:1081
#, c-format
msgid ""
"Please choose the printer to which the print jobs should go or enter a "
"device name/file name in the input line"
msgstr ""

#: printer/printerdrake.pm:1085
#, c-format
msgid ""
"The configuration of the printer will work fully automatically. If your "
"printer was not correctly detected or if you prefer a customized printer "
"configuration, turn on \"Manual configuration\"."
msgstr ""

#: printer/printerdrake.pm:1086
#, c-format
msgid "Currently, no alternative possibility is available"
msgstr ""

#: printer/printerdrake.pm:1089
#, c-format
msgid ""
"Please choose the printer you want to set up. The configuration of the "
"printer will work fully automatically. If your printer was not correctly "
"detected or if you prefer a customized printer configuration, turn on "
"\"Manual configuration\"."
msgstr ""

#: printer/printerdrake.pm:1090
#, fuzzy, c-format
msgid "Please choose the printer to which the print jobs should go."
msgstr ""
"Prašom pasirinkti, prie kurios nuosekliosios jungties yra prijungtas tavo "
"modemas."

#: printer/printerdrake.pm:1092
#, c-format
msgid ""
"Please choose the port that your printer is connected to or enter a device "
"name/file name in the input line"
msgstr ""

#: printer/printerdrake.pm:1093
#, fuzzy, c-format
msgid "Please choose the port that your printer is connected to."
msgstr ""
"Prašom pasirinkti, prie kurios nuosekliosios jungties yra prijungtas tavo "
"modemas."

#: printer/printerdrake.pm:1095
#, c-format
msgid ""
" (Parallel Ports: /dev/lp0, /dev/lp1, ..., equivalent to LPT1:, LPT2:, ..., "
"1st USB printer: /dev/usb/lp0, 2nd USB printer: /dev/usb/lp1, ...)."
msgstr ""

#: printer/printerdrake.pm:1099
#, fuzzy, c-format
msgid "You must choose/enter a printer/device!"
msgstr "Spausdintuvo įrenginio URI"

#: printer/printerdrake.pm:1168
#, c-format
msgid "Remote lpd Printer Options"
msgstr "Nutolusio lpd spausdintuvo nuostatos"

#: printer/printerdrake.pm:1169
#, fuzzy, c-format
msgid ""
"To use a remote lpd printer, you need to supply the hostname of the printer "
"server and the printer name on that server."
msgstr ""
"Norėdamas naudotis nutolusia lpd spausdinimo eile, tu turi\n"
"nurodyti to serverio hosto vardą ir pavadinimą eilės, kurioje\n"
"bus talpinami darbai."

#: printer/printerdrake.pm:1170
#, fuzzy, c-format
msgid "Remote host name"
msgstr "Nutolusio hosto vardas"

#: printer/printerdrake.pm:1171
#, fuzzy, c-format
msgid "Remote printer name"
msgstr "Nutolęs spausdintuvas"

#: printer/printerdrake.pm:1174
#, fuzzy, c-format
msgid "Remote host name missing!"
msgstr "Nutolusio hosto vardas"

#: printer/printerdrake.pm:1178
#, fuzzy, c-format
msgid "Remote printer name missing!"
msgstr "Nutolusio hosto vardas"

#: printer/printerdrake.pm:1200 printer/printerdrake.pm:1714
#: standalone/drakTermServ:442 standalone/drakTermServ:725
#: standalone/drakTermServ:741 standalone/drakTermServ:1332
#: standalone/drakTermServ:1340 standalone/drakTermServ:1351
#: standalone/drakbackup:767 standalone/drakbackup:874
#: standalone/drakbackup:908 standalone/drakbackup:1027
#: standalone/drakbackup:1891 standalone/drakbackup:1895
#: standalone/drakconnect:254 standalone/drakconnect:283
#: standalone/drakconnect:512 standalone/drakconnect:516
#: standalone/drakconnect:540 standalone/harddrake2:159
#, fuzzy, c-format
msgid "Information"
msgstr "Rodyti informaciją"

#: printer/printerdrake.pm:1200 printer/printerdrake.pm:1714
#, fuzzy, c-format
msgid "Detected model: %s %s"
msgstr "aptiktas %s"

#: printer/printerdrake.pm:1276 printer/printerdrake.pm:1516
#, fuzzy, c-format
msgid "Scanning network..."
msgstr "Išbandoma jungtis..."

#: printer/printerdrake.pm:1287 printer/printerdrake.pm:1308
#, c-format
msgid ", printer \"%s\" on server \"%s\""
msgstr ""

#: printer/printerdrake.pm:1290 printer/printerdrake.pm:1311
#, fuzzy, c-format
msgid "Printer \"%s\" on server \"%s\""
msgstr "Išjungiamas tinklas"

#: printer/printerdrake.pm:1332
#, c-format
msgid "SMB (Windows 9x/NT) Printer Options"
msgstr "SMB (Windows 9x/NT) spausdintuvo nuostatos"

#: printer/printerdrake.pm:1333
#, fuzzy, c-format
msgid ""
"To print to a SMB printer, you need to provide the SMB host name (Note! It "
"may be different from its TCP/IP hostname!) and possibly the IP address of "
"the print server, as well as the share name for the printer you wish to "
"access and any applicable user name, password, and workgroup information."
msgstr ""
"Norėdamas spausdinti į SMB spausdintuvą, tu turi\n"
"nurodyti SMB hosto vardą, (Atkreipk dėmesį, kad jis gali skirtis nuo\n"
"jo TCP/IP hosto vardo!) ir galbūt spausdinimo serverio IP adresą,\n"
"spausdintuvo share'o vardą, vartotojo vardą, slaptažodį ir darbo grupės vardą"

#: printer/printerdrake.pm:1334
#, c-format
msgid ""
" If the desired printer was auto-detected, simply choose it from the list "
"and then add user name, password, and/or workgroup if needed."
msgstr ""

#: printer/printerdrake.pm:1336
#, c-format
msgid "SMB server host"
msgstr "SMB serverio hostas"

#: printer/printerdrake.pm:1337
#, c-format
msgid "SMB server IP"
msgstr "SMB serverio IP"

#: printer/printerdrake.pm:1338
#, c-format
msgid "Share name"
msgstr "Share'o vardas"

#: printer/printerdrake.pm:1341
#, c-format
msgid "Workgroup"
msgstr "Darbo grupė"

#: printer/printerdrake.pm:1343
#, fuzzy, c-format
msgid "Auto-detected"
msgstr "Naudokite automatinį aptikimą"

#: printer/printerdrake.pm:1353
#, c-format
msgid "Either the server name or the server's IP must be given!"
msgstr ""

#: printer/printerdrake.pm:1357
#, c-format
msgid "Samba share name missing!"
msgstr ""

#: printer/printerdrake.pm:1363
#, c-format
msgid "SECURITY WARNING!"
msgstr ""

#: printer/printerdrake.pm:1364
#, c-format
msgid ""
"You are about to set up printing to a Windows account with password. Due to "
"a fault in the architecture of the Samba client software the password is put "
"in clear text into the command line of the Samba client used to transmit the "
"print job to the Windows server. So it is possible for every user on this "
"machine to display the password on the screen by issuing commands as \"ps "
"auxwww\".\n"
"\n"
"We recommend to make use of one of the following alternatives (in all cases "
"you have to make sure that only machines from your local network have access "
"to your Windows server, for example by means of a firewall):\n"
"\n"
"Use a password-less account on your Windows server, as the \"GUEST\" account "
"or a special account dedicated for printing. Do not remove the password "
"protection from a personal account or the administrator account.\n"
"\n"
"Set up your Windows server to make the printer available under the LPD "
"protocol. Then set up printing from this machine with the \"%s\" connection "
"type in Printerdrake.\n"
"\n"
msgstr ""

#: printer/printerdrake.pm:1374
#, c-format
msgid ""
"Set up your Windows server to make the printer available under the IPP "
"protocol and set up printing from this machine with the \"%s\" connection "
"type in Printerdrake.\n"
"\n"
msgstr ""

#: printer/printerdrake.pm:1377
#, c-format
msgid ""
"Connect your printer to a Linux server and let your Windows machine(s) "
"connect to it as a client.\n"
"\n"
"Do you really want to continue setting up this printer as you are doing now?"
msgstr ""

#: printer/printerdrake.pm:1449
#, c-format
msgid "NetWare Printer Options"
msgstr "NetWare spausdintuvo nuostatos"

#: printer/printerdrake.pm:1450
#, fuzzy, c-format
msgid ""
"To print on a NetWare printer, you need to provide the NetWare print server "
"name (Note! it may be different from its TCP/IP hostname!) as well as the "
"print queue name for the printer you wish to access and any applicable user "
"name and password."
msgstr ""
"Norėdamas spausdinti į NetWare spausdintuvą, tu turi\n"
"nurodyti spausdinimo serverio vardą, (Atkreipk dėmesį, kad jis gali\n"
"skirtis nuo jo TCP/IP hosto vardo!), spausdintuvo eilės vardą "
"spausdintuvui,\n"
"prie kurio nori prieiti, bei reikalingus vartotojo vardą ir slaptažodį."

#: printer/printerdrake.pm:1451
#, c-format
msgid "Printer Server"
msgstr "Spausdinimo serveris"

#: printer/printerdrake.pm:1452
#, c-format
msgid "Print Queue Name"
msgstr "Spausdinimo eilės pavadinimas"

#: printer/printerdrake.pm:1457
#, c-format
msgid "NCP server name missing!"
msgstr ""

#: printer/printerdrake.pm:1461
#, c-format
msgid "NCP queue name missing!"
msgstr ""

#: printer/printerdrake.pm:1527 printer/printerdrake.pm:1547
#, c-format
msgid ", host \"%s\", port %s"
msgstr ""

#: printer/printerdrake.pm:1530 printer/printerdrake.pm:1550
#, c-format
msgid "Host \"%s\", port %s"
msgstr ""

#: printer/printerdrake.pm:1571
#, fuzzy, c-format
msgid "TCP/Socket Printer Options"
msgstr "Lizdinio spausdintuvo nuostatos"

#: printer/printerdrake.pm:1573
#, c-format
msgid ""
"Choose one of the auto-detected printers from the list or enter the hostname "
"or IP and the optional port number (default is 9100) in the input fields."
msgstr ""

#: printer/printerdrake.pm:1574
#, fuzzy, c-format
msgid ""
"To print to a TCP or socket printer, you need to provide the host name or IP "
"of the printer and optionally the port number (default is 9100). On HP "
"JetDirect servers the port number is usually 9100, on other servers it can "
"vary. See the manual of your hardware."
msgstr ""
"Kad galėtum spausdinti į lizdinį spausdintuvą, turi pateikti\n"
"spausdintuvo hosto vardą ir, galbūt, prievado numerį."

#: printer/printerdrake.pm:1578
#, fuzzy, c-format
msgid "Printer host name or IP missing!"
msgstr "Spausdintuvo hosto vardas"

#: printer/printerdrake.pm:1601
#, fuzzy, c-format
msgid "Printer host name or IP"
msgstr "Spausdintuvo hosto vardas"

#: printer/printerdrake.pm:1649 printer/printerdrake.pm:1651
#, c-format
msgid "Printer Device URI"
msgstr "Spausdintuvo įrenginio URI"

#: printer/printerdrake.pm:1650
#, c-format
msgid ""
"You can specify directly the URI to access the printer. The URI must fulfill "
"either the CUPS or the Foomatic specifications. Note that not all URI types "
"are supported by all the spoolers."
msgstr ""

#: printer/printerdrake.pm:1668
#, c-format
msgid "A valid URI must be entered!"
msgstr ""

#: printer/printerdrake.pm:1749
#, c-format
msgid "Pipe into command"
msgstr ""

#: printer/printerdrake.pm:1750
#, c-format
msgid ""
"Here you can specify any arbitrary command line into which the job should be "
"piped instead of being sent directly to a printer."
msgstr ""

#: printer/printerdrake.pm:1751
#, fuzzy, c-format
msgid "Command line"
msgstr "Domeno vardas"

#: printer/printerdrake.pm:1755
#, c-format
msgid "A command line must be entered!"
msgstr ""

#: printer/printerdrake.pm:1788
#, c-format
msgid ""
"Is your printer a multi-function device from HP or Sony (OfficeJet, PSC, "
"LaserJet 1100/1200/1220/3200/3300 with scanner, DeskJet 450, Sony IJP-V100), "
"an HP PhotoSmart or an HP LaserJet 2200?"
msgstr ""

#: printer/printerdrake.pm:1801
#, fuzzy, c-format
msgid "Installing HPOJ package..."
msgstr "Įdiegiamas paketas %s"

#: printer/printerdrake.pm:1809 printer/printerdrake.pm:1893
#, c-format
msgid "Checking device and configuring HPOJ..."
msgstr ""

#: printer/printerdrake.pm:1831
#, fuzzy, c-format
msgid "Installing SANE packages..."
msgstr "Įdiegiamas paketas %s"

#: printer/printerdrake.pm:1858
#, fuzzy, c-format
msgid "Installing mtools packages..."
msgstr "Įdiegiamas paketas %s"

#: printer/printerdrake.pm:1873
#, c-format
msgid "Scanning on your HP multi-function device"
msgstr ""

#: printer/printerdrake.pm:1881
#, c-format
msgid "Photo memory card access on your HP multi-function device"
msgstr ""

#: printer/printerdrake.pm:1930
#, c-format
msgid "Making printer port available for CUPS..."
msgstr ""

#: printer/printerdrake.pm:1939 printer/printerdrake.pm:2183
#: printer/printerdrake.pm:2327
#, fuzzy, c-format
msgid "Reading printer database..."
msgstr "Skaitoma CUPS tvarkyklių duomenų  bazė"

#: printer/printerdrake.pm:2149
#, c-format
msgid "Enter Printer Name and Comments"
msgstr ""

#: printer/printerdrake.pm:2153 printer/printerdrake.pm:3241
#, c-format
msgid "Name of printer should contain only letters, numbers and the underscore"
msgstr ""

#: printer/printerdrake.pm:2159 printer/printerdrake.pm:3246
#, c-format
msgid ""
"The printer \"%s\" already exists,\n"
"do you really want to overwrite its configuration?"
msgstr ""

#: printer/printerdrake.pm:2168
#, c-format
msgid ""
"Every printer needs a name (for example \"printer\"). The Description and "
"Location fields do not need to be filled in. They are comments for the users."
msgstr ""

#: printer/printerdrake.pm:2169
#, c-format
msgid "Name of printer"
msgstr "Spausdintuvo vardas"

#: printer/printerdrake.pm:2170 standalone/drakconnect:521
#: standalone/harddrake2:40 standalone/printerdrake:212
#: standalone/printerdrake:219
#, c-format
msgid "Description"
msgstr "Aprašymas"

#: printer/printerdrake.pm:2171 standalone/printerdrake:212
#: standalone/printerdrake:219
#, c-format
msgid "Location"
msgstr "Vieta"

#: printer/printerdrake.pm:2188
#, fuzzy, c-format
msgid "Preparing printer database..."
msgstr "Skaitoma CUPS tvarkyklių duomenų  bazė"

#: printer/printerdrake.pm:2306
#, fuzzy, c-format
msgid "Your printer model"
msgstr "Nutolęs spausdintuvas"

#: printer/printerdrake.pm:2307
#, c-format
msgid ""
"Printerdrake has compared the model name resulting from the printer auto-"
"detection with the models listed in its printer database to find the best "
"match. This choice can be wrong, especially when your printer is not listed "
"at all in the database. So check whether the choice is correct and click "
"\"The model is correct\" if so and if not, click \"Select model manually\" "
"so that you can choose your printer model manually on the next screen.\n"
"\n"
"For your printer Printerdrake has found:\n"
"\n"
"%s"
msgstr ""

#: printer/printerdrake.pm:2312 printer/printerdrake.pm:2315
#, fuzzy, c-format
msgid "The model is correct"
msgstr "Ar taip teisinga?"

#: printer/printerdrake.pm:2313 printer/printerdrake.pm:2314
#: printer/printerdrake.pm:2317
#, fuzzy, c-format
msgid "Select model manually"
msgstr "Nutolęs spausdintuvas"

#: printer/printerdrake.pm:2340
#, c-format
msgid ""
"\n"
"\n"
"Please check whether Printerdrake did the auto-detection of your printer "
"model correctly. Find the correct model in the list when a wrong model or "
"\"Raw printer\" is highlighted."
msgstr ""

#: printer/printerdrake.pm:2359
#, c-format
msgid "Install a manufacturer-supplied PPD file"
msgstr ""

#: printer/printerdrake.pm:2390
#, c-format
msgid ""
"Every PostScript printer is delivered with a PPD file which describes the "
"printer's options and features."
msgstr ""

#: printer/printerdrake.pm:2391
#, c-format
msgid ""
"This file is usually somewhere on the CD with the Windows and Mac drivers "
"delivered with the printer."
msgstr ""

#: printer/printerdrake.pm:2392
#, c-format
msgid "You can find the PPD files also on the manufacturer's web sites."
msgstr ""

#: printer/printerdrake.pm:2393
#, c-format
msgid ""
"If you have Windows installed on your machine, you can find the PPD file on "
"your Windows partition, too."
msgstr ""

#: printer/printerdrake.pm:2394
#, c-format
msgid ""
"Installing the printer's PPD file and using it when setting up the printer "
"makes all options of the printer available which are provided by the "
"printer's hardware"
msgstr ""

#: printer/printerdrake.pm:2395
#, c-format
msgid ""
"Here you can choose the PPD file to be installed on your machine, it will "
"then be used for the setup of your printer."
msgstr ""

#: printer/printerdrake.pm:2397
#, fuzzy, c-format
msgid "Install PPD file from"
msgstr "Įdiegti"

#: printer/printerdrake.pm:2399 printer/printerdrake.pm:2406
#: standalone/scannerdrake:174 standalone/scannerdrake:182
#: standalone/scannerdrake:233 standalone/scannerdrake:240
#, c-format
msgid "CD-ROM"
msgstr ""

#: printer/printerdrake.pm:2400 printer/printerdrake.pm:2408
#: standalone/scannerdrake:175 standalone/scannerdrake:184
#: standalone/scannerdrake:234 standalone/scannerdrake:242
#, fuzzy, c-format
msgid "Floppy Disk"
msgstr "Išsaugoti į diskelį"

#: printer/printerdrake.pm:2401 printer/printerdrake.pm:2410
#: standalone/scannerdrake:176 standalone/scannerdrake:186
#: standalone/scannerdrake:235 standalone/scannerdrake:244
#, fuzzy, c-format
msgid "Other place"
msgstr "Patikrinti prievadus"

#: printer/printerdrake.pm:2416
#, fuzzy, c-format
msgid "Select PPD file"
msgstr "Pasirink bylą"

#: printer/printerdrake.pm:2420
#, c-format
msgid "The PPD file %s does not exist or is unreadable!"
msgstr ""

#: printer/printerdrake.pm:2426
#, c-format
msgid "The PPD file %s does not conform with the PPD specifications!"
msgstr ""

#: printer/printerdrake.pm:2437
#, fuzzy, c-format
msgid "Installing PPD file..."
msgstr "Įdiegiamas paketas %s"

#: printer/printerdrake.pm:2539
#, fuzzy, c-format
msgid "OKI winprinter configuration"
msgstr "Modemo Nustatymai"

#: printer/printerdrake.pm:2540
#, c-format
msgid ""
"You are configuring an OKI laser winprinter. These printers\n"
"use a very special communication protocol and therefore they work only when "
"connected to the first parallel port. When your printer is connected to "
"another port or to a print server box please connect the printer to the "
"first parallel port before you print a test page. Otherwise the printer will "
"not work. Your connection type setting will be ignored by the driver."
msgstr ""

#: printer/printerdrake.pm:2564 printer/printerdrake.pm:2593
#, fuzzy, c-format
msgid "Lexmark inkjet configuration"
msgstr "Interneto konfigūravimas"

#: printer/printerdrake.pm:2565
#, c-format
msgid ""
"The inkjet printer drivers provided by Lexmark only support local printers, "
"no printers on remote machines or print server boxes. Please connect your "
"printer to a local port or configure it on the machine where it is connected "
"to."
msgstr ""

#: printer/printerdrake.pm:2594
#, c-format
msgid ""
"To be able to print with your Lexmark inkjet and this configuration, you "
"need the inkjet printer drivers provided by Lexmark (http://www.lexmark."
"com/). Click on the \"Drivers\" link. Then choose your model and afterwards "
"\"Linux\" as operating system. The drivers come as RPM packages or shell "
"scripts with interactive graphical installation. You do not need to do this "
"configuration by the graphical frontends. Cancel directly after the license "
"agreement. Then print printhead alignment pages with \"lexmarkmaintain\" and "
"adjust the head alignment settings with this program."
msgstr ""

#: printer/printerdrake.pm:2597
#, c-format
msgid "Firmware-Upload for HP LaserJet 1000"
msgstr ""

#: printer/printerdrake.pm:2710
#, c-format
msgid ""
"Printer default settings\n"
"\n"
"You should make sure that the page size and the ink type/printing mode (if "
"available) and also the hardware configuration of laser printers (memory, "
"duplex unit, extra trays) are set correctly. Note that with a very high "
"printout quality/resolution printing can get substantially slower."
msgstr ""

#: printer/printerdrake.pm:2835
#, fuzzy, c-format
msgid "Printer default settings"
msgstr "Spausdintuvo jungtis"

#: printer/printerdrake.pm:2842
#, c-format
msgid "Option %s must be an integer number!"
msgstr ""

#: printer/printerdrake.pm:2846
#, c-format
msgid "Option %s must be a number!"
msgstr ""

#: printer/printerdrake.pm:2850
#, c-format
msgid "Option %s out of range!"
msgstr ""

#: printer/printerdrake.pm:2901
#, fuzzy, c-format
msgid ""
"Do you want to set this printer (\"%s\")\n"
"as the default printer?"
msgstr "Ar tu nori išbandyti spausdinimą?"

#: printer/printerdrake.pm:2916
#, fuzzy, c-format
msgid "Test pages"
msgstr "Patikrinti prievadus"

#: printer/printerdrake.pm:2917
#, c-format
msgid ""
"Please select the test pages you want to print.\n"
"Note: the photo test page can take a rather long time to get printed and on "
"laser printers with too low memory it can even not come out. In most cases "
"it is enough to print the standard test page."
msgstr ""

#: printer/printerdrake.pm:2921
#, fuzzy, c-format
msgid "No test pages"
msgstr "Taip, spausdinti abu bandomuosius puslapius"

#: printer/printerdrake.pm:2922
#, fuzzy, c-format
msgid "Print"
msgstr "Spausdintuvas"

#: printer/printerdrake.pm:2947
#, fuzzy, c-format
msgid "Standard test page"
msgstr "Standartinė"

#: printer/printerdrake.pm:2950
#, c-format
msgid "Alternative test page (Letter)"
msgstr ""

#: printer/printerdrake.pm:2953
#, fuzzy, c-format
msgid "Alternative test page (A4)"
msgstr "Spausdinamas bandomasis puslapis..."

#: printer/printerdrake.pm:2955
#, fuzzy, c-format
msgid "Photo test page"
msgstr "Spausdinamas bandomasis puslapis..."

#: printer/printerdrake.pm:2959
#, fuzzy, c-format
msgid "Do not print any test page"
msgstr "Spausdinamas bandomasis puslapis..."

#: printer/printerdrake.pm:2967 printer/printerdrake.pm:3123
#, c-format
msgid "Printing test page(s)..."
msgstr "Spausdinamas bandomasis puslapis..."

#: printer/printerdrake.pm:2992
#, fuzzy, c-format
msgid ""
"Test page(s) have been sent to the printer.\n"
"It may take some time before the printer starts.\n"
"Printing status:\n"
"%s\n"
"\n"
msgstr ""
"Bandomasis puslapis buvo nusiųstas spausdinimo demonui.\n"
"Kol bus pradėta spausdinti, gali tekti palaukti.\n"
"Spausdinimo būsena:\n"
"%s\n"
"\n"
"Ar jis veikia teisingai?"

#: printer/printerdrake.pm:2996
#, fuzzy, c-format
msgid ""
"Test page(s) have been sent to the printer.\n"
"It may take some time before the printer starts.\n"
msgstr ""
"Bandomasis puslapis buvo nusiųstas spausdinimo demonui.\n"
"Kol bus pradėta spausdinti, gali tekti palaukti.\n"
"Ar jis veikia teisingai?"

#: printer/printerdrake.pm:3003
#, c-format
msgid "Did it work properly?"
msgstr ""

#: printer/printerdrake.pm:3024 printer/printerdrake.pm:4192
#, fuzzy, c-format
msgid "Raw printer"
msgstr "Spausdintuvo nėra"

#: printer/printerdrake.pm:3054
#, c-format
msgid ""
"To print a file from the command line (terminal window) you can either use "
"the command \"%s <file>\" or a graphical printing tool: \"xpp <file>\" or "
"\"kprinter <file>\". The graphical tools allow you to choose the printer and "
"to modify the option settings easily.\n"
msgstr ""

#: printer/printerdrake.pm:3056
#, c-format
msgid ""
"These commands you can also use in the \"Printing command\" field of the "
"printing dialogs of many applications, but here do not supply the file name "
"because the file to print is provided by the application.\n"
msgstr ""

#: printer/printerdrake.pm:3059 printer/printerdrake.pm:3076
#: printer/printerdrake.pm:3086
#, c-format
msgid ""
"\n"
"The \"%s\" command also allows to modify the option settings for a "
"particular printing job. Simply add the desired settings to the command "
"line, e. g. \"%s <file>\". "
msgstr ""

#: printer/printerdrake.pm:3062 printer/printerdrake.pm:3102
#, c-format
msgid ""
"To know about the options available for the current printer read either the "
"list shown below or click on the \"Print option list\" button.%s%s%s\n"
"\n"
msgstr ""

#: printer/printerdrake.pm:3066
#, c-format
msgid ""
"Here is a list of the available printing options for the current printer:\n"
"\n"
msgstr ""

#: printer/printerdrake.pm:3071 printer/printerdrake.pm:3081
#, c-format
msgid ""
"To print a file from the command line (terminal window) use the command \"%s "
"<file>\".\n"
msgstr ""

#: printer/printerdrake.pm:3073 printer/printerdrake.pm:3083
#: printer/printerdrake.pm:3093
#, c-format
msgid ""
"This command you can also use in the \"Printing command\" field of the "
"printing dialogs of many applications. But here do not supply the file name "
"because the file to print is provided by the application.\n"
msgstr ""