Commit b4c54b84 authored by Дмитрий Никулин's avatar Дмитрий Никулин Committed by Vitaly Lipatov

Apply ru templates by Alexandr Hanadeev

parent 23c3cbce
......@@ -27,6 +27,8 @@
<a id="login_link[% qs_suffix %]" href="[% script_url FILTER html %]"
onclick="return show_mini_login_form('[% qs_suffix %]')">Log In</a>
[% Hook.process('additional_methods') %]
<form action="[% login_target FILTER html %]" method="POST"
class="mini_login bz_default_hidden"
id="mini_login[% qs_suffix FILTER html %]">
......@@ -54,28 +56,24 @@
<a href="#" onclick="return hide_mini_login_form('[% qs_suffix %]')">[x]</a>
</form>
</li>
[% Hook.process('additional_methods') %]
[% IF user.authorizer.can_change_password %]
<li id="forgot_container[% qs_suffix %]">
<span class="separator">| </span>
<a id="forgot_link[% qs_suffix %]" href="[% script_url FILTER html %]#forgot"
onclick="return show_forgot_form('[% qs_suffix %]')">Forgot Password</a>
<form action="token.cgi" method="post" id="forgot_form[% qs_suffix %]"
class="mini_forgot bz_default_hidden">
<label for="login[% qs_suffix FILTER html %]">Login:</label>
<input name="loginname" size="20" id="login[% qs_suffix FILTER html %]" required
[% IF login_not_email %]
placeholder="Your Login"
[% ELSE %]
type="email" placeholder="Your Email Address"
[% END %]>
<input id="forgot_button[% qs_suffix %]" value="Reset Password" type="submit">
<input type="hidden" name="a" value="reqpw">
<input type="hidden" id="token[% qs_suffix FILTER html %]" name="token"
value="[% issue_hash_token(['reqpw']) FILTER html %]">
<a href="#" onclick="return hide_forgot_form('[% qs_suffix %]')">[x]</a>
</form>
</li>
[% END %]
<li id="forgot_container[% qs_suffix %]">
<span class="separator">| </span>
<a id="forgot_link[% qs_suffix %]" href="[% script_url FILTER html %]#forgot"
onclick="return show_forgot_form('[% qs_suffix %]')">Forgot Password</a>
<form action="token.cgi" method="post" id="forgot_form[% qs_suffix %]"
class="mini_forgot bz_default_hidden">
<label for="login[% qs_suffix FILTER html %]">Login:</label>
<input name="loginname" size="20" id="login[% qs_suffix FILTER html %]" required
[% IF login_not_email %]
placeholder="Your Login"
[% ELSE %]
type="email" placeholder="Your Email Address"
[% END %]>
<input id="forgot_button[% qs_suffix %]" value="Reset Password"
type="submit">
<input type="hidden" name="a" value="reqpw">
<input type="hidden" id="token[% qs_suffix FILTER html %]" name="token"
value="[% issue_hash_token(['reqpw']) FILTER html %]">
<a href="#" onclick="return hide_forgot_form('[% qs_suffix %]')">[x]</a>
</form>
</li>
......@@ -23,7 +23,7 @@
title = title
style_urls = ['skins/standard/admin.css']
onload="var f = document.forms['flagtype_properties'];
selectProduct(f.product, f.component, '__Any__');"
selectProduct(f.product, f.component, null, null, '__Any__');"
javascript_urls=["js/productform.js"]
doc_section = "administering/flags.html"
%]
......@@ -92,7 +92,7 @@
id => "product"
name => "product"
add => "__Any__"
onchange => "selectProduct(this, this.form.component, '__Any__');"
onchange => "selectProduct(this, this.form.component, null, null, '__Any__');"
products => products
%]<br>
<select name="component">
......
......@@ -11,7 +11,7 @@
[% PROCESS global/header.html.tmpl
title = 'Administer Flag Types'
style_urls = ['skins/standard/admin.css']
onload="var f = document.flagtype_form; selectProduct(f.product, f.component, '__All__');"
onload="var f = document.flagtype_form; selectProduct(f.product, f.component, null, null, '__All__');"
javascript_urls=["js/productform.js"]
doc_section = "administering/flags.html"
%]
......@@ -43,7 +43,7 @@
id => "product"
name => "product"
add => "__Any__"
onchange => "selectProduct(this, this.form.component, '__Any__');"
onchange => "selectProduct(this, this.form.component, null, null, '__Any__');"
products => products
%]
</div>
......
......@@ -20,19 +20,6 @@
showElementById('attachment_false'); showElementById('btn_no_attachment');"
%]
[% PROCESS etersoft/timersplash.html.tmpl %]
<script type="text/javascript">
function myform() {
if (!validateEnterBug(document.Create)) {
return false;
}
mysubmitnew();
return false;
}
</script>
<script type="text/javascript">
<!--
......@@ -92,7 +79,7 @@ TUI_hide_default('attachment_text_field');
<form name="Create" id="Create" method="post" action="post_bug.cgi"
class="enter_bug_form" enctype="multipart/form-data"
onsubmit="return myform();">
onsubmit="return validateEnterBug(this)">
<input type="hidden" name="product" value="[% product.name FILTER html %]">
<input type="hidden" name="token" value="[% token FILTER html %]">
......@@ -266,13 +253,6 @@ TUI_hide_default('attachment_text_field');
[% END %]
<td colspan="2">&nbsp;</td>
[% IF Param('letsubmitterchoosepriority') && user.in_group('Etersoft') %]
[% INCLUDE bug/field.html.tmpl
bug = default, field = bug_fields.priority, editable = 1,
value = default.priority %]
[% ELSE %]
<td colspan="2">&nbsp;</td>
[% END %]
</tr>
</tbody>
......@@ -387,7 +367,6 @@ TUI_hide_default('attachment_text_field');
%]
<td colspan="2">
<input name="estimated_time" size="6" maxlength="6" value="[% estimated_time FILTER html %]">
<input name="work_time" id="work_time" value="0" hidden>
</td>
</tr>
<tr>
......
......@@ -39,7 +39,6 @@
</script>
[% END %]
[% END %]
[% PROCESS etersoft/timersplash.html.tmpl %]
<script type="text/javascript">
<!--
......@@ -209,48 +208,6 @@
%]
[% PROCESS input inputname => "short_desc" size => "80"
maxlength => 255 spellcheck => "true" no_td => 1 %]
<!-- Etersoft -->
&nbsp;&nbsp;<a title="Создать копию текущей [% terms.bug_gen %] по основным параметрам"
href="enter_bug.cgi?product=[% bug.product %]&component=[% bug.component %]&blocked=[% bug_blocked_string %]&assigned_to=[% bug.assigned_to.email %]&cc=[% bug_cc_string %]&qa_contact=[% bug.qa_contact.email %]">Создать подобную</a>
<!-- Etersoft END -->
<div id="summary_alias_input">
<table id="summary">
<tr>
[% IF bug.check_can_change_field('alias', 0, 1) %]
[% INCLUDE "bug/field-label.html.tmpl"
field = bug_fields.alias
editable = 1
%]
<td>
[% ELSIF bug.alias %]
<td colspan="2">(
[% ELSE %]
<td colspan="2">
[% END %]
[% PROCESS input inputname => "alias"
size => "20"
maxlength => "20"
no_td => 1
%][% ")" IF NOT bug.check_can_change_field('alias', 0, 1)
&& bug.alias %]
</td>
</tr>
[%# *** Summary *** %]
<tr>
[% INCLUDE "bug/field-label.html.tmpl"
field = bug_fields.short_desc
editable = 1
accesskey = "s"
%]
<td>
[% PROCESS input inputname => "short_desc" size => "80" colspan => 2
maxlength => 255 spellcheck => "true" no_td => 1 %]
</td>
</tr>
</table>
</div>
</div>
<script type="text/javascript">
......@@ -296,17 +253,7 @@
[%# Component #%]
[%###############%]
<tr>
<th class="field_label">
List:
</th>
<td>
<a title="Displays a list of all [% terms.bugs_gen %] on this component"
href="buglist.cgi?product=[% bug.product %]&component=[% bug.component %]">Display</a>
</td>
</tr>
<tr>
[% INCLUDE "bug/field.html.tmpl"
[% INCLUDE bug/field.html.tmpl
bug = bug, field = bug_fields.component, value = bug.component
override_legal_values = bug.choices.component
desc_url = "describecomponents.cgi?product=$bug.product"
......@@ -1135,7 +1082,7 @@
[% PROCESS formattimeunit time_unit=bug.actual_time %] +
<input name="work_time" id="work_time"
value="0" size="3" maxlength="6"
onchange="adjustRemainingTime();" readonly>
onchange="adjustRemainingTime();">
</td>
<td>
<input name="remaining_time" id="remaining_time"
......@@ -1298,8 +1245,8 @@
[% BLOCK commit_button %]
[% IF user.id %]
<div class="knob-buttons">
<input type="button" value="Save Changes"
id="commit[% id FILTER css_class_quote %]" onclick="mysubmit();">
<input type="submit" value="Save Changes"
id="commit[% id FILTER css_class_quote %]">
</div>
[% END %]
[% END %]
......@@ -49,7 +49,7 @@
the error [% bug.error FILTER html %].
[% ELSIF error == "chart_data_not_generated" %]
[% docslinks = {'using/reports-and-charts.html' => 'Setting up Charting'} %]
[% admindocslinks = {'extraconfig.html' => 'Setting up Charting'} %]
[% IF product.id %]
Charts for the <em>[% product.name FILTER html %]</em> product are not
available yet because no charting data has been collected for it since it
......@@ -290,14 +290,6 @@
a <code>[% param FILTER html %]</code> argument, and that
argument was not set.
[% ELSIF error == "param_integer_required" %]
The function <code>[% function FILTER html %]</code> requires
that <code>[% param FILTER html %]</code> be an integer.
[% ELSIF error == "param_scalar_array_required" %]
The <code>[% param FILTER html %]</code> parameter must be an array of scalars
(integers and/or strings).
[% ELSIF error == "params_required" %]
[% title = "Missing Parameter" %]
The function <code>[% function FILTER html %]</code> requires
......
......@@ -7,29 +7,29 @@
#%]
[%# INTERFACE:
# docslinks: hash. Hash values will be used as text of the documentation links,
# hash keys will be used as links to the document, relative to
# docslinks: hash. Hash keys will be used as text of the documentation links,
# hash values will be used as links to the document, relative to
# the main Bugzilla documentation directory.
# Example: If you want a 'FAQ' link to point to, the "faq-general"
# named anchor on faq.html, assign
# { "faq.html#faq-general" => 'FAQ' }
# { 'FAQ' => "faq.html#faq-general" }
# to docslinks.
# You may only link to sections by their given ID; it is not allowed
# to link to a section which is not given an ID (thus getting
# assigned an automatically generated ID). Otherwise, the link
# would break on a recompilation of the documentation.
# admindocslinks: hash. Same as docslinks, but will only be displayed to
# members of the 'editcomponents' group.
# members of the admin group.
#%]
[% IF docslinks.keys.size || (admindocslinks.keys.size && user.in_group('editcomponents')) %]
[% IF docslinks.keys.size || (admindocslinks.keys.size && user.in_group('admin')) %]
<div id="docslinks">
<h2>Related documentation</h2>
<ul>
[% IF user.in_group('editcomponents') %]
[% PROCESS docslinkslist docstype = admindocslinks admin = 1 %]
[% IF user.in_group('admin') %]
[% PROCESS docslinkslist docstype = admindocslinks %]
[% END %]
[% PROCESS docslinkslist docstype = docslinks admin = 0 %]
[% PROCESS docslinkslist docstype = docslinks %]
</ul>
</div>
[% END %]
......@@ -37,7 +37,7 @@
[% BLOCK docslinkslist %]
[% FOREACH docslink = docstype.keys %]
<li>
<a href="[% docs_urlbase FILTER html %][% "administering/" IF admin %]
<a href="[% docs_urlbase FILTER html %]
[% docslink FILTER none %]">[% docstype.$docslink FILTER html %]</a>
</li>
[% END %]
......
......@@ -35,7 +35,6 @@
javascript_urls = []
yui = []
generate_api_token = 0
favicon_url = "images/favicon.ico"
%]
[% SET yui_css = {
......@@ -209,7 +208,7 @@
[%# Required for the 'Autodiscovery' feature in Firefox 2 and IE 7. %]
<link rel="search" type="application/opensearchdescription+xml"
title="[% terms.Bugzilla %]" href="./search_plugin.cgi">
<link rel="shortcut icon" href="[% favicon_url FILTER html %]">
<link rel="shortcut icon" href="images/favicon.ico" >
[% Hook.process("additional_header") %]
</head>
......
......@@ -8,13 +8,14 @@
[%# The javascript block gets used in header.html.tmpl. %]
[% javascript = BLOCK %]
var useclassification = false; // No classification level in use
var first_load = true; // Is this the first time we load the page?
var last_sel = []; // Caches last selection
var cpts = new Array();
[% n = 1 %]
[% FOREACH prod = products %]
cpts['[% n %]'] = [[% FOREACH comp = prod.components %]'[% comp.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%]];
cpts['[% n %]'] = [
[%- FOREACH comp = prod.components %]'[% comp.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%] ];
[% n = n+1 %]
[% END %]
[% END %]
......@@ -879,16 +879,9 @@
[% title = "$terms.Bugzilla is Down" %]
[% Param("shutdownhtml") %]
[% IF userid %]
<p>
For security reasons, you have been logged out automatically.
The cookie that was remembering your login is now gone.
</p>
<p>For security reasons, you have been logged out automatically.
The cookie that was remembering your login is now gone.
[% END %]
<p>
If you are an administrator, you can
<a href="editparams.cgi?section=general">reactivate [% terms.Bugzilla %]</a>
by clearing the <kbd>shutdownhtml</kbd> parameter.
</p>
[% ELSIF message_tag == "term" %]
[% terms.$term FILTER html %]
......
......@@ -25,7 +25,7 @@
[% tab.label FILTER html %]</td>
[% ELSE %]
<td id="tab_[% tab.name FILTER html %]" class="clickable_area"
onClick="document.location='[% tab.link FILTER js FILTER html %]'">
onClick="document.location='[% tab.link FILTER html %]'">
<a href="[% tab.link FILTER html %]">[% tab.label FILTER html %]</a>
</td>
[% END %]
......
......@@ -9,17 +9,40 @@
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
[% PROCESS "global/js-products.html.tmpl" %]
[% PROCESS global/header.html.tmpl
title="Request Queue"
generate_api_token = 1
onload="var f = document.request_form; selectProduct(f.product, f.component, 'Any');"
onload="var f = document.request_form; selectProduct(f.product, f.component, null, null, 'Any');"
javascript_urls=["js/productform.js", "js/field.js"]
style_urls = ['skins/standard/buglist.css']
yui = ['autocomplete']
%]
<script type="text/javascript">
var useclassification = false; // No classification level in use
var first_load = true; // Is this the first time we load the page?
var last_sel = []; // Caches last selection
var cpts = new Array();
[% n = 1 %]
[% IF Param('useclassification') %]
[% FOREACH clas = user.get_selectable_classifications %]
[% FOREACH prod = user.get_selectable_products(clas.id) %]
[%+ PROCESS js_comp %]
[% END %]
[% END %]
[% ELSE %]
[% FOREACH prod = user.get_selectable_products %]
[%+ PROCESS js_comp %]
[% END %]
[% END %]
</script>
[% BLOCK js_comp %]
cpts['[% n %]'] = [
[%- FOREACH comp = prod.components %]'[% comp.name FILTER js %]'[% ", " UNLESS loop.last %] [%- END -%]];
[% n = n+1 %]
[% END %]
<p>
When you are logged in, only requests made by you or addressed to you
are shown by default. You can change the criteria using the form below.
......@@ -49,7 +72,7 @@ to some group are shown by default.
id => "product"
name => "product"
add => "Any"
onchange => "selectProduct(this, this.form.component, 'Any');"
onchange => "selectProduct(this, this.form.component, null, null, 'Any');"
%]
</td>
<th>Flag:</th>
......
......@@ -247,7 +247,7 @@ TUI_hide_default('information_query');
[% FOREACH qv = [
{ name => "substring", description => "contains" },
{ name => "notsubstring", description => "doesn't contain" },
{ name => "equals", description => "is" },
{ name => "exact", description => "is" },
{ name => "notequals", description => "is not" },
{ name => "regexp", description => "matches regexp" },
{ name => "notregexp", description => "doesn't match regexp" } ] %]
......
......@@ -6,11 +6,12 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
[%# Use the current script name. If an empty name is returned,
# then we are accessing the home page. %]
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
[% login_target = cgi.url("-relative" => 1, "-query" => 1) %]
[% IF !login_target OR login_target.match("^token.cgi") %]
[% login_target = "index.cgi" %]
......@@ -27,76 +28,31 @@
onclick="return show_mini_login_form('[% qs_suffix %]')">Войти</a>
[% Hook.process('additional_methods') %]
<form action="[% login_target FILTER html %]" method="POST"
<form action="[% login_target FILTER html %]" method="POST"
class="mini_login bz_default_hidden"
id="mini_login[% qs_suffix FILTER html %]"
onsubmit="return check_mini_login_fields( '[% qs_suffix FILTER html %]' );"
>
<input id="Bugzilla_login[% qs_suffix FILTER html %]"
class="bz_login"
name="Bugzilla_login"
title="Login"
onfocus="mini_login_on_focus('[% qs_suffix FILTER js %]')"
>
<input class="bz_password"
id="Bugzilla_password[% qs_suffix FILTER html %]"
name="Bugzilla_password"
type="password"
title="Password"
>
<input class="bz_password bz_default_hidden bz_mini_login_help" type="text"
id="Bugzilla_password_dummy[% qs_suffix %]" value="password"
title="Password"
onfocus="mini_login_on_focus('[% qs_suffix FILTER js %]')"
>
id="mini_login[% qs_suffix FILTER html %]">
<input id="Bugzilla_login[% qs_suffix FILTER html %]" required
name="Bugzilla_login" class="bz_login"
[% IF login_not_email %]
placeholder="Login"
[% ELSE %]
type="email" placeholder="Email Address"
[% END %]>
<input class="bz_password" name="Bugzilla_password" type="password"
id="Bugzilla_password[% qs_suffix FILTER html %]" required
placeholder="Password">
[% IF Param('rememberlogin') == 'defaulton' ||
Param('rememberlogin') == 'defaultoff'
%]
Param('rememberlogin') == 'defaultoff' %]
<input type="checkbox" id="Bugzilla_remember[% qs_suffix %]"
name="Bugzilla_remember" value="on" class="bz_remember"
[%+ "checked" IF Param('rememberlogin') == "defaulton" %]>
[%+ "checked" IF Param('rememberlogin') == "defaulton" %]>
<label for="Bugzilla_remember[% qs_suffix %]">Запомнить</label>
[% END %]
<input type="hidden" name="Bugzilla_login_token"
value="[% get_login_request_token() FILTER html %]">
<input type="submit" name="GoAheadAndLogIn" value="Войти"
<input type="submit" name="GoAheadAndLogIn" value="Войти"
id="log_in[% qs_suffix %]">
<script type="text/javascript">
mini_login_constants = {
"login" : "Пользователь",
"warning" : "Для входа укажите имя пользователя и пароль."
};
[%# We need this event to fire after autocomplete, because it does
# something different depending on whether or not there's already
# data in the login and password box.
# However, autocomplete happens at all sorts of different times in
# different browsers (before or after onDOMReady, before or after
# window.onload, in almost all combinations you can imagine).
# The only good solution I found is to time the event 200
# milliseconds after window.onload for WebKit (doing it immediately
# at onload works in Chrome but not in Safari, but I can't detect
# them separately using YUI), and right after onDOMReady in Gecko.
# The WebKit solution is also fairly guaranteed to work on any
# browser (it's just strange, since the fields only populate 200 ms
# after the page loads), so it's the default. IE doesn't even
# recognize our forms as login forms, so I made it use the Gecko
# method also (since it's nicer visually). Opera never autocompletes
# forms without user interaction, so it also uses the Gecko method.
#%]
if (YAHOO.env.ua.gecko || YAHOO.env.ua.ie || YAHOO.env.ua.opera) {
YAHOO.util.Event.onDOMReady(function() {
init_mini_login_form('[% qs_suffix FILTER html %]');
});
}
else {
YAHOO.util.Event.on(window, 'load', function () {
window.setTimeout(function() {
init_mini_login_form('[% qs_suffix FILTER html %]');
}, 200);
});
}
</script>
<a href="#" onclick="return hide_mini_login_form('[% qs_suffix %]')">[x]</a>
</form>
</li>
......@@ -107,11 +63,17 @@
<form action="token.cgi" method="post" id="forgot_form[% qs_suffix %]"
class="mini_forgot bz_default_hidden">
<label for="login[% qs_suffix FILTER html %]">Пользователь:</label>
<input type="text" name="loginname" size="20" id="login[% qs_suffix FILTER html %]">
<input name="loginname" size="20" id="login[% qs_suffix FILTER html %]" required
[% IF login_not_email %]
placeholder="Your Login"
[% ELSE %]
type="email" placeholder="Your Email Address"
[% END %]>
<input id="forgot_button[% qs_suffix %]" value="Сбросить пароль"
type="submit">
<input type="hidden" name="a" value="reqpw">
<input type="hidden" id="token[% qs_suffix FILTER html %]" name="token" value="[% issue_hash_token(['reqpw']) FILTER html %]">
<input type="hidden" id="token[% qs_suffix FILTER html %]" name="token"
value="[% issue_hash_token(['reqpw']) FILTER html %]">
<a href="#" onclick="return hide_forgot_form('[% qs_suffix %]')">[x]</a>
</form>
</li>
......@@ -13,12 +13,9 @@
[% IF !target %]
[% target = "index.cgi" %]
[% END %]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
title = "Вход в систему $terms.Bugzilla",
onload = "document.forms['login'].Bugzilla_login.focus()"
title = "Вход в систему $terms.Bugzilla"
%]
[% USE Bugzilla %]
......@@ -27,20 +24,29 @@
Для продолжения работы в [% terms.Bugzilla %] введите свои регистрационные данные.
</p>
<form name="login" action="[% target FILTER html %]" method="POST"
<form name="login" action="[% urlbase FILTER html %][% target FILTER html %]" method="POST"
[%- IF Bugzilla.cgi.param("data") %] enctype="multipart/form-data"[% END %]>
<table>
<tr>
<th align="right"><label for="Bugzilla_login">Пользователь:</label></th>
<th>
<label for="Bugzilla_login">
[% IF login_not_email %]
Login:
[% ELSE %]
Your Email Address:
[% END %]
</label>
</th>
<td>
<input size="35" id="Bugzilla_login" name="Bugzilla_login">
<input size="35" id="Bugzilla_login" name="Bugzilla_login"
[%- ' type="email"' UNLESS login_not_email %] autofocus required>
[% Param('emailsuffix') FILTER html %]
</td>
</tr>
<tr>
<th align="right"><label for="Bugzilla_password">Пароль:</label></th>
<th><label for="Bugzilla_password">Пароль:</label></th>
<td>
<input type="password" size="35" id="Bugzilla_password" name="Bugzilla_password">
<input type="password" size="35" id="Bugzilla_password" name="Bugzilla_password" required>
</td>
</tr>
......@@ -94,13 +100,13 @@
Если вы ещё не зарегистрированы в [% terms.Bugzilla %], вы можете
<a href="createaccount.cgi">создать новую учётную запись</a>.
[% IF Param("requirelogin") %]
Необходимо иметь учётную запись, так как эта [% terms.Bugzilla %]
Необходимо иметь учётную запись, так как эта Bugzilla
доступна только для аутентифицированных пользователей.
[% ELSIF target.match("_bug\.cgi$") %]
Для регистрации новой [% terms.bug_gen %] или добавления комментариев в
Для регистрации новой [% terms.bug %] или добавления комментариев в
существующие ошибки необходимо иметь учётную запись, чтобы с вами могли связаться,
если потребуется дополнительная информация.
[% END %]
[% END %]
</p>
[% END %]
......@@ -111,8 +117,8 @@
<input type="hidden" name="a" value="reqpw">
Если у вас уже есть учётная запись, но вы забыли свой пароль,
введите в поле ниже свой адрес электронной почты, чтобы сменить пароль.<br>
<input size="35" name="loginname">
<input type="hidden" id="token" name="token" value="[% issue_hash_token(['reqpw']) FILTER html %]">
<input size="35" name="loginname" required>
<input type="hidden" id="token" name="token" value="[% issue_hash_token(['reqpw']) FILTER html %]">
<input type="submit" id="request" value="Сменить пароль">
</form>
[% END %]
......
......@@ -6,25 +6,24 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
From: [% Param('mailfrom') %]
To: [% emailaddress %]
Subject: [% PROCESS subject %]
X-Bugzilla-Type: admin
Запрос был аннулирован с адреса [% remoteaddress %].
[% PROCESS subject %] с адреса [% remoteaddress %].
[%# Раньше писалось так: Запрос был аннулирован с адреса [% remoteaddress %]. #%]
Если вы этого не делали, это может быть чья-либо ошибка
либо намеренная попытка взлома вашей учетной записи.
либо намеренная попытка взлома вашей учетной записи [% terms.Bugzilla %].
Ознакомьтесь с параметрами жетона и перешлите это сообщение
Ознакомьтесь с параметрами токена и перешлите это сообщение
по адресу [% Param('maintainer') %], если у вас есть подозрения.
Жетон: [% token %]
Тип жетона: [% tokentype %]
Токен: [% token %]
Тип токена: [% tokentype %]
Пользователь: [% emailaddress %]
Дата выдачи: [% issuedate FILTER time("%Y-%m-%d %H:%M:%S %Z", timezone)%]
Дата выдачи: [% issuedate FILTER time("%Y-%m-%d %H:%M:%S %Z", timezone) %]
Данные: [% eventdata %]
Причина отказа: [% PROCESS cancelactionmessage %]
......@@ -36,7 +35,7 @@ X-Bugzilla-Type: admin
[% ELSIF tokentype == 'emailnew' OR tokentype == 'emailold' %]
Отменен запрос на изменение адреса электронной почты
[% ELSE %]
Отменен жетон типа [% tokentype %]
Отменен токен типа [% tokentype %]
[% END %]
[% END %]
......@@ -54,7 +53,7 @@ X-Bugzilla-Type: admin
[% ELSIF cancelaction == 'emailold_change_canceled' %]
Отменен запрос на изменение адреса электронной почты
на [% new_email %].
на [% new_email %].
[% ELSIF cancelaction == 'password_change_canceled' %]
Запрос на изменение пароля отменен пользователем.
......@@ -67,21 +66,21 @@ X-Bugzilla-Type: admin
Запрос на изменение пароля отменен входом в систему.
[% ELSIF cancelaction == 'wrong_token_for_changing_passwd' %]
Попытка использовать жетон для смены пароля.
Попытка использовать токен для смены пароля.
[% ELSIF cancelaction == 'wrong_token_for_cancelling_email_change' %]
Попытка использовать жетон для отмены изменения адреса.
Попытка использовать токен для отмены изменения адреса.
[% ELSIF cancelaction == 'wrong_token_for_confirming_email_change' %]
Попытка использовать жетон для подтверждения изменения адреса.
Попытка использовать токен для подтверждения изменения адреса.
[% ELSIF cancelaction == 'wrong_token_for_creating_account' %]
Попытка использовать жетон для создания учетной записи.
Попытка использовать токен для создания учетной записи.
[% ELSE %]
[%# Give sensible error if the cancel-token function is used incorrectly.
#%]
Неправильное использование жетонов [% terms.Bugzilla %]. Передан
Неправильное использование токенов [% terms.Bugzilla %]. Передан
параметр '[% cancelaction %]'. Правильный метод: передать код
события и описать его в файле <kbd>cancel-token.txt.tmpl</kbd>.
......
......@@ -13,38 +13,44 @@
# Param("emailsuffix") is used to pre-fill the email field.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]
Регистрация пользователя [% terms.Bugzilla %]
[% END %]
[% PROCESS global/header.html.tmpl
title = title
onload = "document.forms['account_creation_form'].login.focus();" %]
title = "Регистрация пользователя $terms.Bugzilla]"
%]
<p>
Чтобы зарегистрироваться, достаточно указать
Чтобы зарегистрировать новый аккаунт [% terms.Bugzilla %], необходимо
[% IF Param('emailsuffix') == '' %]
адрес электронной почты.
действующий адрес электронной почты.
[% ELSE %]
имя почтового ящика, которое в комбинации с [% Param('emailsuffix') %]
соответствует Вашему адресу электронной почты.
[% END %]
По этому адресу будет отправлено сообщение с подтверждением.
<b>Вы не сможете войти в систему до того как получите сообщение.</b>
По этому адресу будет отправлено сообщение с подтверждением создания аккаунта.
<b>Вы не сможете войти в систему до того, как получите это сообщение.</b>
Если сообщение не будет получено, свяжитесь с администратором
[% terms.Bugzilla %]
<a href="mailto:[% Param("maintainer") %]">[% Param("maintainer") %]</a>.
at <a href="mailto:[% Param("maintainer") %]">[% Param("maintainer") %]</a>.
</p>
[% IF Param('allowemailchange') %]
<p>
Если у Вас уже есть аккаунт, и Вы хотите поменять
[% IF Param('emailsuffix') == '' %]
адресс электронной почты,
[% ELSE %]
логин,
[% END %]
то это можно сдлеать на странице Настроек после входа в систему.
</p>
[% END %]
<p>
Для регистрации новых [% terms.bugs_gen %] или добавления комментариев в
существующие ошибки необходимо иметь учётную запись, чтобы с вами могли
связаться, если потребуется дополнительная информация.
Это также позволит другим пользователям чётко определить, кто является
автором комментариев или изменений, произведённых в [% terms.bugs_dat %].
<b>Обратите внимание, что ваш адрес электронной почты <u>никогда</u> не будет
автором комментариев или изменений, произведённых в [% terms.bugs_dat %].
<b>Обратите внимание, что ваш адрес электронной почты <em>никогда</em> не будет
показан незарегистрированным пользователям. Его смогут увидеть только
зарегистрированные пользователи.</b>
</p>
......@@ -52,30 +58,26 @@
[% IF Param('createemailregexp') == '.*' && Param('emailsuffix') == '' %]
<p>
<b>ОБРАТИТЕ ВНИМАНИЕ:</b> [% terms.Bugzilla %] — общедоступная система
отслеживания [% terms.bugs_gen %]. Данные о многих [% terms.bugs_obj %],
отслеживания [% terms.bugs_gen %]. Данные о многих [% terms.bugs_obj %],
включая адреса электронной почты, доступны зарегистрированным пользователям.
<!--
<b>Рекомендуется</b> использовать неосновной почтовый ящик или
бесплатную почтовую службу (например, Gmail, Яндекс.Почта, Mail.ru и т.п.)
во избежание получения нежелательной почты (спама) в основной почтовый ящик.
-->
<b>Рекомендуется</b> использовать неосновной почтовый ящик или
бесплатную почтовую службу (например, Gmail, Яндекс.Почта, Mail.ru и т.п.)
во избежание получения нежелательной почты (спама) в основной почтовый ящик.
</p>
[% END %]
<form id="account_creation_form" method="get" action="createaccount.cgi">
<table>
<tr>
<td align="right">
<b>Адрес электронной почты:</b>
</td>
<td>
<input size="35" id="login" name="login">
[% Param('emailsuffix') FILTER html %]
</td>
</tr>
</table>
<br>
<input type="hidden" id="token" name="token" value="[% issue_hash_token(['create_account']) FILTER html %]">
<span class="label">
[% IF Param('emailsuffix') %]
Логин:
[% ELSE %]
Адрес электронной почты:
[% END %]
</span>
<input size="35" id="login" name="login" autofocus
[%- ' type="email"' UNLESS Param('emailsuffix') %] required>
[% Param('emailsuffix') FILTER html %]
<input type="hidden" id="token" name="token" value="[% issue_hash_token(['create_account']) FILTER html %]">
<input type="submit" id="send" value="Зарегистрироваться">
</form>
......
......@@ -10,8 +10,6 @@
# login: string. The user's Bugzilla login email address.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]
Запрос на создание учетной записи '[% login FILTER html %]' зарегистрирован
[% END %]
......
......@@ -6,15 +6,13 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
From: [% Param('mailfrom') %]
To: [% emailaddress %]
Subject: Запрос на изменение адреса email пользователя [% terms.Bugzilla %]
To: [% newemailaddress %]
Subject: [% terms.Bugzilla %] Запрос на изменение адреса email пользователя
X-Bugzilla-Type: admin
Получен запрос на изменение адреса электронной почты пользователя
[% terms.Bugzilla %] [% oldemailaddress %] на ваш адрес.
[%+ terms.Bugzilla %] получила запрос на изменения адреса электронной
почты аккаунта [% user.email %] на этот адрес.
Для подтверждения изменения выберите ссылку:
......@@ -25,5 +23,5 @@ X-Bugzilla-Type: admin
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=cxlem
Если вы не ответите, запрос будет автоматически аннулирован через [% constants.MAX_TOKEN_AGE %]
дней ([% expiration_ts FILTER time("%d.%m.%Y %H:%M %Z") %]).
Если вы не ответите, запрос будет автоматически аннулирован через [% constants.MAX_TOKEN_AGE %] дней
(on [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]).
......@@ -7,21 +7,21 @@
#%]
From: [% Param('mailfrom') %]
To: [% emailaddress %]
To: [% user.email %]
Subject: Запрос на изменение адреса email пользователя [% terms.Bugzilla %]
Importance: High
X-MSMail-Priority: High
X-Priority: 1
X-Bugzilla-Type: admin
Получен запрос на изменение Вашего адреса электронной почты в
[%+ terms.Bugzilla %] на [% newemailaddress %].
Получен запрос на изменение Вашего адреса электронной почты в
[%+ terms.Bugzilla %] на [%+ newemailaddress %].
Если Вы не запрашивали этого изменения либо хотите его аннулировать,
выберите ссылку:
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=cxlem
Если Вы не ответите и [% newemailaddress %] подтвердит изменение,
новый адрес вступит в силу через [%- constants.MAX_TOKEN_AGE %] дней
([% expiration_ts FILTER time("%d.%m.%Y %H:%M %Z") %]).
Если Вы не ответите и [%+ newemailaddress %] подтвердит изменение,
новый адрес вступит в силу через [% constants.MAX_TOKEN_AGE %] дней
(on [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]).
......@@ -15,7 +15,9 @@
[% title = BLOCK %]Создание учетной записи для '[% email FILTER html %]'[% END %]
[% PROCESS "global/header.html.tmpl"
title = title
onload = "document.forms['confirm_account_form'].realname.focus();" %]
%]
[% password_complexity = Param('password_complexity') %]
<p>
Для создания учетной записи установите пароль. Кроме того, можно
......@@ -27,35 +29,42 @@
<input type="hidden" name="a" value="confirm_new_account">
<table>
<tr>
<th align="right">Адрес электронной почты:</th>
<th>Адрес электронной почты:</th>
<td>[% email FILTER html %]</td>
</tr>
<tr>
<th align="right"><small><i>(НЕ ОБЯЗАТЕЛЬНО)</i></small> <label for="realname">Полное имя</label>:</th>
<td><input type="text" id="realname" name="realname" value=""></td>
<th><small><i>(НЕ ОБЯЗАТЕЛЬНО)</i></small> <label for="realname">Полное имя</label>:</th>
<td><input id="realname" name="realname" autofocus></td>
</tr>
<tr>
<th align="right"><label for="passwd1">Введите пароль</label>:</th>
<th><label for="passwd1">Введите пароль</label>:</th>
<td>
<input type="password" id="passwd1" name="passwd1" value="">
(минимум [% constants.USER_PASSWORD_MIN_LENGTH FILTER none %] символов)
<input type="password" id="passwd1" name="passwd1" value="" required>
(Password should be a minimum of [% constants.USER_PASSWORD_MIN_LENGTH FILTER none %] characters long
[% IF password_complexity == "mixed_letters" %]
and must contain at least one UPPER and one lowercase letter
[% ELSIF password_complexity == "letters_numbers" %]
and must contain at least one UPPER and one lowercase letter and a number
[% ELSIF password_complexity == "letters_numbers_specialchars" %]
and must contain at least one letter, a number and a special character
[% END ~%]
.)
</td>
</tr>
<tr>
<th align="right"><label for="passwd2">Повторите ввод пароля</label>:</th>
<td><input type="password" id="passwd2" name="passwd2" value=""></td>
<th><label for="passwd2">Подтвердите пароль</label>:</th>
<td><input type="password" id="passwd2" name="passwd2" value="" required></td>
</tr>
<tr>
<th align="right">&nbsp;</th>
<th>&nbsp;</th>
<td><input type="submit" id="confirm" value="Создать"></td>
</tr>
</table>
</form>
<p>
Если форма не будет заполнена до
<u>[%+ expiration_ts FILTER time("%d.%m.%Y %H:%M %Z") %]</u>,
учетная запись не будет создана.
Учетная запись не будет создана, если форма не будет заполнена до
<b>[% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]</b>.
</p>
<p>
......
......@@ -10,7 +10,7 @@
# token: string. The token to be used in this address change.
#%]
[% title = " Подтверждение изменения адреса электронной почты" %]
[% title = "Подтверждение изменения адреса электронной почты" %]
[% PROCESS global/header.html.tmpl %]
<p>
......@@ -22,11 +22,11 @@
<input type="hidden" name="a" value="chgem">
<table>
<tr>
<th align="right">Пароль:</th>
<td><input type="password" name="password" size="36"></td>
<th>Пароль::</th>
<td><input type="password" name="password" size="36" required></td>
</tr>
<tr>
<th align="right">&nbsp;</th>
<th>&nbsp;</th>
<td><input type="submit" id="confirm" value="Продолжить"></td>
</tr>
</table>
......
......@@ -12,8 +12,6 @@
# email: email address of the new account.
#%]
[% PROCESS global/variables.none.tmpl %]
From: [% Param('mailfrom') %]
To: [% email %]
Subject: [% terms.Bugzilla %]: подтверждение создания учетной записи
......@@ -23,22 +21,21 @@ X-Bugzilla-Type: admin
с адресом электронной почты ([% email %]).
Для подтверждения создания учетной записи с этим адресом электронной
почты перейдите по ссылке не позднее [%+ expiration_ts FILTER time("%H:%M %Z %d.%m.%Y") %]:
почты перейдите по ссылке не позднее [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %]:
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=request_new_account
Если Вы не получили этого сообщения до [%+ expiration_ts FILTER time("%H:%M %Z %d.%m.%Y") %] или
Если Вы не получили этого сообщения до [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z") %] или
хотите создать учетную запись с другим адресом электронной почты, Вы можете
начать регистрацию заново:
[%+ urlbase %]createaccount.cgi
[% IF Param('createemailregexp') == '.*' && Param('emailsuffix') == '' %]
ОБРАТИТЕ ВНИМАНИЕ: [% terms.Bugzilla %] — общедоступная система отслеживания [% terms.bugs_gen %].
Данные о многих [% terms.bugs_obj %], включая адреса электронной почты, находятся в
открытом доступе. Рекомендуется использовать неосновной почтовый ящик или
бесплатную почтовую службу (например, Gmail, mail.ru, Яндекс.Почта и т.п.)
во избежание получения нежелательной почты (спама) в основной почтовый ящик.
ОБРАТИТЕ ВНИМАНИЕ: [% terms.Bugzilla %] — общедоступная система отслеживания [% terms.bug %].
Данные о многих [%+ terms.bugs %], включая адреса электронной почты, находятся в открытом доступе.
Рекомендуется использовать неосновной почтовый ящик или бесплатную почтовую службу (например, Gmail,
mail.ru, Яндекс.Почта и т.п.) во избежание получения нежелательной почты (спама) в основной почтовый ящик.
[% END %]
Если вы не делали такой заявки или хотите её аннулировать, перейдите
......
......@@ -6,15 +6,15 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
From: [% Param('mailfrom') %]
To: [% emailaddress %]
Subject: Запрос на изменение пароля [% terms.Bugzilla %]
X-Bugzilla-Type: admin
Вами (или кем-то от Вашего имени) была запрошена смена пароля
[%+ terms.Bugzilla %]. Для смены пароля выберите ссылку:
[%+ terms.Bugzilla %]. Запрос от [% ip_addr %].
Для смены пароля выберите ссылку:
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=cfmpw
......@@ -23,6 +23,9 @@ X-Bugzilla-Type: admin
[%+ urlbase %]token.cgi?t=[% token FILTER uri %]&a=cxlpw
Если Вы не ответите, запрос будет автоматически аннулирован через
[% constants.MAX_TOKEN_AGE %] дней ([% expiration_ts FILTER time("%d.%m.%Y %H:%M %Z", timezone) -%])
или при следующем входе в систему.
Если Вы не ответите, запрос будет автоматически аннулирован через [% constants.MAX_TOKEN_AGE %] дней
(on [% expiration_ts FILTER time("%B %e, %Y at %H:%M %Z", timezone) %]) или при следующем входе в систему.
Если Вы думаете, что кто-то скомпрометировал Ваш аккаунт, пожалуйста, сообщите об этом
[%+ Param('maintainer') %] с указанием IP-адреса, с которого пришел запрос на смену пароля, и
точное время, когда Вы получили это письмо.
......@@ -28,21 +28,21 @@
<input type="hidden" name="a" value="chgpw">
<table>
<tr>
<th align="right">Новый пароль:</th>
<th>Новый пароль:</th>
<td>
<input type="password" name="password">
<input type="password" name="password" required>
</td>
</tr>
<tr>
<th align="right">Подтверждение пароля:</th>
<th>Подтверждение пароля:</th>
<td>
<input type="password" name="matchpassword">
<input type="password" name="matchpassword" required>
</td>
</tr>
<tr>
<th align="right">&nbsp;</th>
<th>&nbsp;</th>
<td>
<input type="submit" id="update" value="Изменить">
</td>
......
......@@ -21,7 +21,7 @@
</td>
</tr>
<tr>
<th align="right">Пароль:</th>
<th>Пароль:</th>
<td>
<input type="hidden" name="old_login" value="[% user.login FILTER html %]">
<input type="password" name="old_password">
......@@ -34,22 +34,22 @@
[% IF user.authorizer.can_change_password %]
<tr>
<th align="right">Новый пароль:</th>
<th>Новый пароль:</th>
<td>
<input type="password" name="new_password1">
</td>
</tr>
</tr>
<tr>
<th align="right">Подтверждение пароля:</th>
<th>Подтверждение пароля:</th>
<td>
<input type="password" name="new_password2">
</td>
</tr>
</tr>
[% END %]
<tr>
<th align="right">Полное имя (необязательно, но желательно):</th>
<th>Полное имя (необязательно, но желательно):</th>
<td>
<input size="35" name="realname" value="[% realname FILTER html %]">
</td>
......@@ -59,28 +59,35 @@
[% IF login_change_date %]
[% IF new_login_name %]
<tr>
<th align="right">Новый адрес электронной почты:</th>
<th>Новый адрес электронной почты:</th>
<td>[% new_login_name FILTER html %]</td>
</tr>
<tr>
<th align="right">Срок подтверждения:</th>
<th>Срок подтверждения:</th>
<td>[% login_change_date FILTER time %]</td>
</tr>
[% ELSE %]
<tr>
<th align="right">Текущий адрес электронной почты:</th>
<th>Текущий адрес электронной почты:</th>
<td>[% user.login FILTER html %]</td>
</tr>
<tr>
<th align="right">Срок подтверждения:</th>
<th>Срок подтверждения:</th>
<td>[% login_change_date FILTER time %]</td>
</tr>
[% END %]
[% ELSE %]
<tr>
<th align="right">Новый адрес электронной почты:</th>
<th>
[% IF Param('emailsuffix') %]
Новый логин:
[% ELSE %]
Новый адрес электронной почты:
[% END %]
</th>
<td>
<input size="35" name="new_login_name">
<input size="35" id="new_login_name" name="new_login_name"
[%- ' type="email"' UNLESS Param('emailsuffix') %]>
</td>
</tr>
[% END %]
......
[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]
[%# INTERFACE:
# api_keys: array. Array of api keys this user has.
# any_revoked: boolean. True is any keys have been revoked.
#%]
<p>
API keys are used to authenticate WebService API calls. You can create more than
one API key if required. Each API key has an optional description which can help
you record what each key is used for. Documentation on how to log in is
available from
<a href="[% docs_urlbase FILTER html %]api/core/v1/general.html#authentication">here</a>.
</p>
<h3>Existing API keys</h3>
<p>You can update the description, and revoke or unrevoke existing API keys
here.</p>
<table id="email_prefs">
<tr class="column_header">
<th>API key</th>
<th>Description (optional)</th>
<th>Last used</th>
<th>Revoked</th>
</tr>
[% FOREACH api_key IN api_keys %]
<tr[% IF api_key.revoked %] class="apikey_revoked"[% END %]>
<td>[% api_key.api_key FILTER html %]</td>
<td>
<input name="description_[% api_key.id FILTER html %]"
id="description_[% api_key.id FILTER html %]"
value="[% api_key.description FILTER html %]">
</td>
[% IF api_key.last_used %]
<td>[% api_key.last_used FILTER time %]</td>
[% ELSE %]
<td class="center"><i>never used</i></td>
[% END %]
<td class="center">
<input type="checkbox" value="1"
name="revoked_[% api_key.id FILTER html %]"
id="revoked_[% api_key.id FILTER html %]"
[% IF api_key.revoked %] checked="checked" [% END %]>
</td>
</tr>
[% END %]
[% UNLESS api_keys.size %]
<tr><td colspan="4">You don't have any API keys.</td></tr>
[% END %]
</table>
[% IF any_revoked %]
<a id="apikey_revoked_controller" class="bz_default_hidden"
href="javascript:TUI_toggle_class('apikey_revoked')">Hide Revoked Keys</a>
[%# Show the link if the browser supports JS %]
<script type="text/javascript">
TUI_hide_default('apikey_revoked');
TUI_alternates['apikey_revoked'] = 'Show Revoked Keys';
YAHOO.util.Dom.removeClass('apikey_revoked_controller',
'bz_default_hidden');
</script>
[% END %]
<h3>New API key</h3>
<p>You can generate a new API key by ticking the check box below and optionally
providing a description for the API key. The API key will be randomly
generated for you.</p>
<p>
<input type="checkbox" name="new_key" id="new_key">
Generate a new API key with optional description
<input name="new_description" id="new_description">
</p>
......@@ -17,14 +17,11 @@
# other people.
#%]
[% PROCESS global/variables.none.tmpl %]
<table align="center">
<tr>
<td>
<div id="permissions">
[% IF has_bits.size %]
Для вашей учетной записи установлены права:
<table align="center">
<p>Для вашей учетной записи установлены права:</p>
<table>
[% FOREACH bit_description = has_bits %]
<tr>
<td>[% bit_description.name FILTER html %]</td>
......@@ -36,46 +33,46 @@
[% FOREACH privs = ["editcomponents", "canconfirm", "editbugs"] %]
[% SET products = ${"local_$privs"} %]
[% IF products && products.size %]
<br>
<p>
Также установлены права '[% privs FILTER html %]'
для следующих продуктов:
Также установлены права '[% privs FILTER html %]' для следующих продуктов:
</p>
<p>
<ul>
[% FOREACH product = products %]
[% product.name FILTER html %]<br>
<li>[% product.name FILTER html %]</li>
[% END %]
</p>
</ul>
[% END %]
[% END %]
[% ELSE %]
Для вашей учетной записи прав не установлено.
<p>Для вашей учетной записи прав не установлено.</p>
[% END %]
[% IF user.in_group('editusers') %]
<br>
У вас есть право редактировать пользователей. Вы можете
включать и выключать все разрешения всем пользователям.
<p>
У вас есть право редактировать пользователей. Вы можете
включать и выключать все разрешения всем пользователям.
</p>
[% ELSIF set_bits.size %]
<br>
А также Вы можете управлять следующими правами
<a href="editusers.cgi">других пользователей</a>:
<table align="center">
<p>
А также Вы можете управлять следующими правами
<a href="editusers.cgi">других пользователей</a>:
</p>
<table>
[% FOREACH bit_description = set_bits %]
<tr>
<td>[% bit_description.name FILTER html %]</td>
<td>[% bit_description.desc FILTER html_light %]</td>
</tr>
[% END %]
</table>
</table>
[% END %]
[% IF user.in_group('bz_sudoers') %]
<br>
Вы включены в группу <b>bz_sudoers</b> и можете
<a href="relogin.cgi?action=prepare-sudo">работать от имени другого пользователя</a>.
<p>
Вы включены в группу <b>bz_sudoers</b> и можете
<a href="relogin.cgi?action=prepare-sudo">работать от имени другого пользователя</a>.
</p>
[% END %]
</td>
</tr>
</table>
</div>
......@@ -23,25 +23,25 @@
#%]
[% filtered_login = user.login FILTER html %]
[% PROCESS global/header.html.tmpl
title = "Параметры пользователя"
subheader = filtered_login
style_urls = ['skins/standard/admin.css']
javascript_urls = ['js/util.js', 'js/field.js']
doc_section = "userpreferences.html"
yui = ['autocomplete']
%]
[% tabs = [ { name => "settings", label => "Общие параметры",
link => "userprefs.cgi?tab=settings", saveable => "1" },
{ name => "email", label => "Электронная почта",
link => "userprefs.cgi?tab=email", saveable => "1" },
{ name => "saved-searches", label => "Условия отбора",
link => "userprefs.cgi?tab=saved-searches", saveable => "1" },
[% tabs = [{ name => "settings", label => "Общие параметры",
link => "userprefs.cgi?tab=settings", saveable => "1",
doc_section => "using/preferences.html#general-preferences" },
{ name => "email", label => "Электронная почта",
link => "userprefs.cgi?tab=email", saveable => "1",
doc_section => "using/preferences.html#email-preferences" },
{ name => "saved-searches", label => "Условия отбора",
link => "userprefs.cgi?tab=saved-searches", saveable => "1",
doc_section => "using/preferences.html#saved-searches" },
{ name => "account", label => "Учетная запись",
link => "userprefs.cgi?tab=account", saveable => "1" },
{ name => "permissions", label => "Разрешения",
link => "userprefs.cgi?tab=permissions", saveable => "0" } ] %]
link => "userprefs.cgi?tab=account", saveable => "1",
doc_section => "using/preferences.html#account-information" },
{ name => "apikey", label => "API Keys",
link => "userprefs.cgi?tab=apikey", saveable => "1",
doc_section => "using/preferences.html#api-keys" },
{ name => "permissions", label => "Разрешения",
link => "userprefs.cgi?tab=permissions", saveable => "0",
doc_section => "using/preferences.html#permissions" } ] %]
[% Hook.process('tabs') %]
......@@ -52,6 +52,16 @@
[% END %]
[% END %]
[% PROCESS global/header.html.tmpl
title = current_tab.label
subheader = filtered_login
generate_api_token = 1
style_urls = ['skins/standard/admin.css']
javascript_urls = ['js/util.js', 'js/field.js', 'js/TUI.js']
doc_section = current_tab.doc_section
yui = ['autocomplete']
%]
[% WRAPPER global/tabs.html.tmpl
tabs = tabs
current_tab = current_tab
......@@ -63,8 +73,10 @@
[% IF email_changes_saved %]
<p>
По старому и по новому адресу отправлены сообщения
для подтверждения изменения адреса электронной почты.
Для подтверждения изменения на новый адрес электронной почты было отправлено письмо.
Также, письмо было отправлено и на старый адрес, чтобы можно было отменить изменения,
если это необходимо. Если Вы не получаете электронную почту, то можете использовать
<a href="token.cgi?t=[% email_token FILTER uri %]&amp;a=cxlem"> для отмены изменений.
</p>
[% END %]
</div>
......@@ -83,16 +95,10 @@
[% IF current_tab.saveable %]
<input type="hidden" name="dosave" value="1">
[% UNLESS dont_show_button %]
<table>
<tr>
<td width="150">&nbsp;</td>
<td>
<input type="submit" id="update" value="Сохранить">
</td>
</tr>
</table>
<p>
<input type="submit" id="update" value="Сохранить">
</p>
[% END %]
</form>
[% END %]
......
......@@ -30,61 +30,44 @@
<p>Сохраненные условия отбора:</p>
<blockquote>
<table border="1" cellpadding="3">
<tr>
<th>
Условие
</th>
<th>
Отобрать
</th>
<th>
Изменить
</th>
<th>
Удалить
</th>
<th>
Показывать внизу страницы
</th>
<table id="saved_search_prefs">
<tr class="column_header">
<th>Условие</th>
<th>Запустить</th>
<th>Изменить</th>
<th>Удалить</th>
<th>Показывать внизу страницы</th>
[% may_share = user.in_group(Param('querysharegroup')) && queryshare_groups.size %]
[% IF may_share %]
<th>
Опубликовать для группы
</th>
<th>Опубликовать для группы</th>
[% END %]
[% Hook.process('saved-header') %]
</tr>
<tr>
<td>Мои [% terms.bugs %]</td>
<td>
[% filtered_username = user.login FILTER uri %]
<a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">Отобрать</a>
<a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">Запустить</a>
</td>
<td>
&nbsp;
</td>
<td>
&nbsp;
</td>
<td align="center">
<input type="checkbox"
name="showmybugslink"
value="1"
[% " checked" IF user.showmybugslink %]>
<td></td>
<td></td>
<td class="center">
<input type="checkbox" name="showmybugslink" value="1"
[%+ 'checked="checked"' IF user.showmybugslink %]>
</td>
[% IF may_share %]
<td>
&mdash;
</td>
<td>&mdash;</td>
[% END %]
[% Hook.process('saved-row') %]
</tr>
[% FOREACH q = user.queries %]
<tr>
<tr [% 'class="shared_search"' IF q.shared_with_group.id %]>
<td>[% q.name FILTER html %]</td>
<td>
<a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=[% q.name FILTER uri %]
[% IF q.shared_with_group.id %]&amp;sharer_id=[% user.id FILTER uri %][% END %]">Отобрать</a>
[% IF q.shared_with_group.id %]&amp;sharer_id=[% user.id FILTER uri %][% END %]">Запустить</a>
</td>
<td>
<a href="query.cgi?[% q.edit_link FILTER html %]&amp;known_name=
......@@ -99,7 +82,7 @@
[% issue_hash_token([q.id, q.name]) FILTER uri %]">Удалить</a>
[% END %]
</td>
<td align="center">
<td class="center">
<input type="checkbox"
name="link_in_footer_[% q.id FILTER html %]"
value="1"
......@@ -118,12 +101,17 @@
>[% group.name FILTER html %]</option>
[% END %]
</select>
[% IF q.shared_with_group.id %]
(<a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=
[% q.name FILTER uri %]&amp;sharer_id=
[% user.id FILTER uri %]">Link</a>)
[% END %]
[% IF user.can_bless %]
<span [% IF !bless_group_ids.grep("^$q.shared_with_group.id\$").0
%]class="bz_default_hidden"[% END %]>
<input type="checkbox" id="force_[% q.id FILTER html %]"
name="force_[% q.id FILTER html %]" value="1">
<label for="force_[% q.id FILTER html %]">Показывать внизу страницы</label>
<input type="checkbox" id="force_[% q.id FILTER html %]"
name="force_[% q.id FILTER html %]" value="1">
<label for="force_[% q.id FILTER html %]">Показывать внизу страницы</label>
</span>
[% END %]
[% IF q.shared_with_users %]
......@@ -132,41 +120,30 @@
[% END %]
</td>
[% END %]
[% Hook.process('saved-row') %]
</tr>
[% END %]
</table>
[% IF user.can_bless %]
<p>Обратите внимание: для каждого условия, отмеченного "Показывать внизу страницы",
ссылка будет добавлена в набор условий каждого пользователя, входящего в группу
на момент сохранения этих изменений.</p>
[% END %]
</blockquote>
[% IF user.queries_available.size %]
<p>Условия отбора, опубликованные другими пользователями:</p>
<table border="1" cellpadding="3">
<tr>
<th>
Условие
</th>
<th>
Автор
</th>
<th>
Опубликовано для
</th>
<th>
Отобрать
</th>
<th>
Изменить
</th>
<th>
Показывать
внизу страницы
</th>
<table id="shared_search_prefs">
<tr class="column_header">
<th>Условие</th>
<th>Автор</th>
<th>Опубликовано для</th>
<th>Запустить</th>
<th>Изменить</th>
<th>Показывать внизу страницы</th>
</tr>
[% FOREACH q = user.queries_available %]
<tr>
<td>[% q.name FILTER html %]</td>
......@@ -175,13 +152,13 @@
<td>
<a href="buglist.cgi?cmdtype=dorem&amp;remaction=run&amp;namedcmd=
[% q.name FILTER uri %]&amp;sharer_id=
[% q.user.id FILTER uri %]">Отобрать</a>
[% q.user.id FILTER uri %]">Запустить</a>
</td>
<td>
<a href="query.cgi?[% q.edit_link FILTER html %]&amp;known_name=
[% q.name FILTER uri %]">Изменить</a>
</td>
<td align="center">
<td class="center">
<input type="checkbox"
name="link_in_footer_[% q.id FILTER html %]"
value="1"
......
......@@ -29,12 +29,12 @@
</p>
[% END %]
<table border="0" cellpadding="8">
<table id="user_prefs">
[% FOREACH name = setting_names %]
[% default_name = name _ '-isdefault' %]
[% default_val = settings.${name}.default_value %]
<tr>
<td align="right">
<td class="right">
[% setting_descs.$name OR name FILTER html %]
</td>
<td>
......
......@@ -22,12 +22,13 @@
#%]
[% title = BLOCK %]
Журнал изменений учетной записи '[% otheruser.login FILTER html %]'
Журнал изменений учетной записи '[% otheruser.identity FILTER html %]'
[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
%]
[% PROCESS admin/users/listselectvars.html.tmpl
......@@ -62,7 +63,7 @@
<p><a href="editusers.cgi?action=edit&amp;userid=
[%- otheruser.id FILTER uri %]"
title="Изменить данные пользователя '[% otheruser.login FILTER html %]'">Изменить пользователя</a> или
<a title="Поиск пользователей" href="editusers.cgi">Искать другие учетные записи</a>
<a title="Поиск пользователей" href="editusers.cgi">искать другие учетные записи</a>
[% IF listselectionvalues.matchtype != 'exact' %]
или <a title="Вернуться к списку пользователей"
href="editusers.cgi?action=list[% INCLUDE listselectionurlparams %]">вернуться
......
......@@ -6,8 +6,6 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]
Администрирование экземпляра ([% terms.Bugzilla %]
[%+ constants.BUGZILLA_VERSION FILTER html %])
......@@ -15,7 +13,7 @@
[% PROCESS global/header.html.tmpl title = title
style_urls = ['skins/standard/admin.css']
doc_section = "administration.html"
doc_section = "administering/index.html"
%]
<div>
......@@ -31,7 +29,7 @@
<dl>
[% class = user.in_group('tweakparams') ? "" : "forbidden" %]
<dt id="parameters" class="[% class %]"><a href="editparams.cgi">Настройки системы</a></dt>
<dd class="[% class %]">Установка основных параметров системы. Здесь устанавливается
<dd class="[% class %]">Установка основных параметров системы. Здесь устанавливается
адрес (URL) для доступа к системе, правила аутентификации пользователей,
выбор полей для отображения, настройка почтовых оповещений, выбор групп
пользователей для определенных задач и многое другое.</dd>
......@@ -45,7 +43,7 @@
<dt id="sanitycheck" class="[% class %]"><a href="sanitycheck.cgi">Проверка целостности</a></dt>
<dd class="[% class %]">Запуск проверки целостности для поиска проблем в базе данных.
Это может занять несколько десятков минут, в зависимости от размера базы данных.
Проверку можно автоматизировать, настроив запуск <tt>sanitycheck.pl</tt> по расписанию.
Проверку можно автоматизировать, настроив запуск <kbd>sanitycheck.pl</kbd> по расписанию.
В случае обнаружения ошибок оповещение будет отправлено указанному пользователю по
электронной почте.</dd>
......@@ -84,7 +82,7 @@
<td class="admin_links">
<dl>
[% class = user.in_group('admin') ? "" : "forbidden" %]
<dt id="custom_fields" class="[% class %]"><a href="editfields.cgi">Атрибуты</a></dt>
<dt id="custom_fields" class="[% class %]"><a href="editfields.cgi">Настраиваемые атрибуты</a></dt>
<dd class="[% class %]">[% terms.Bugzilla %] позволяет определить новые поля,
не реализованные изначально, для учета специфических требований.
Эти поля могут использоваться наряду со стандартными: принимать некоторые значения для
......@@ -95,7 +93,7 @@
<dt id="field_values" class="[% class %]"><a href="editvalues.cgi">Значения атрибутов</a></dt>
<dd class="[% class %]">Определение допустимых значений для атрибутов, выбор в
которых ограничен некоторым списком. Здесь же определяются значения настраиваемых
которых ограничен некоторым списком. Здесь же определяются значения настраиваемых
атрибутов некоторых типов.</dd>
<dt id="status_workflow" class="[% class %]"><a href="editworkflow.cgi">Состояния [%terms.bugs_gen %]</a></dt>
......@@ -117,9 +115,13 @@
[% class = user.in_group('bz_canusewhines') ? "" : "forbidden" %]
<dt id="whining" class="[% class %]"><a href="editwhines.cgi">Оповещения</a></dt>
<dd class="[% class %]">Настройка запросов, запускаемых по расписанию и
рассылающих результаты по электронной почте. Это удобный способ напоминаний
рассылающих результаты по электронной почте. Это удобный способ напоминаний
о назначениях и отслеживания изменений [% terms.bugs_gen %].</dd>
<dt id="release_notes">
<a href="page.cgi?id=release-notes.html">Информация о сборке</a></dt>
<dd>Подробная информация о текущей сборке [% terms.Bugzilla %].</dd>
[% Hook.process('end_links_right') %]
</dl>
</td>
......
......@@ -8,10 +8,11 @@
[% PROCESS global/header.html.tmpl
title = "Создание раздела"
style_urls = ['skins/standard/admin.css']
%]
<form method=post action="editclassifications.cgi">
<table border=0 cellpadding=4 cellspacing=0>
<table id="admin_table_edit">
[% PROCESS "admin/classifications/edit-common.html.tmpl" %]
......
......@@ -8,32 +8,32 @@
[% PROCESS global/header.html.tmpl
title = "Удаление раздела"
style_urls = ['skins/standard/admin.css']
%]
<table border=1 cellpadding=4 cellspacing=0>
<tr bgcolor="#6666ff">
<th valign="top" align="left">Поле</th>
<th valign="top" align="left">Значение</th>
</tr><tr>
<td valign="top">Раздел:</td>
<td valign="top">[% classification.name FILTER html %]</td>
</tr><tr>
<td valign="top">Описание:</td>
<td valign="top">
[% IF classification.description %]
[% classification.description FILTER html_light %]
[% ELSE %]
<font color="red">не указано</font>
[% END %]
</td>
</tr><tr>
<td valign="top">Порядок сортировки:</td>
<td valign="top">[% classification.sortkey FILTER html %]</td>
</tr>
<table id="admin_table">
<tr class="column_header">
<th>Поле</th>
<th>Значение</th>
</tr>
<tr>
<td>Раздел</td>
<td>[% classification.name FILTER html %]</td>
</tr>
<tr>
<td>Описание</td>
<td>
[% IF classification.description %]
[% classification.description FILTER html_light %]
[% ELSE %]
<span class="warning">не указано</span>
[% END %]
</td>
</tr>
<tr>
<td>Порядок сортировки</td>
<td>[% classification.sortkey FILTER html %]</td>
</tr>
</table>
<h2>Подтверждение</h2>
......
......@@ -11,12 +11,12 @@
#%]
<tr>
<th align="right">Раздел:</th>
<th>Раздел:</th>
<td><input size=64 maxlength=64 name="classification"
value="[% classification.name FILTER html %]"></td>
value="[% classification.name FILTER html %]" required></td>
</tr>
<tr>
<th align="right">Описание:</th>
<th>Описание:</th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = 'description'
......@@ -27,7 +27,7 @@
</td>
</tr>
<tr>
<th align="right"><label for="sortkey">Порядок сортировки:</label></th>
<th><label for="sortkey">Порядок сортировки:</label></th>
<td><input id="sortkey" size="20" maxlength="20" name="sortkey"
value="[%- classification.sortkey FILTER html %]"></td>
</tr>
......
......@@ -8,15 +8,16 @@
[% PROCESS global/header.html.tmpl
title = "Изменение раздела"
style_urls = ['skins/standard/admin.css']
%]
<form method=post action="editclassifications.cgi">
<table border=0 cellpadding=4 cellspacing=0>
<table id="admin_table_edit">
[% PROCESS "admin/classifications/edit-common.html.tmpl" %]
<tr valign=top>
<th align="right">
<tr>
<th>
<a href="editproducts.cgi?classification=[% classification.name FILTER uri %]">
Продукты</a>:
</th>
......@@ -25,19 +26,13 @@
<table>
[% FOREACH product = classification.products %]
<tr>
<th align=right valign=top>[% product.name FILTER html %]</th>
<td valign=top>
[% IF product.description %]
[% product.description FILTER html_light %]
[% ELSE %]
<font color="red">нет описания</font>
[% END %]
</td>
<th>[% product.name FILTER html %]</th>
<td>[% product.description FILTER html_light %]</td>
</tr>
[% END %]
</table>
[% ELSE %]
<font color="red">нет продуктов</font>
<span class="warning">нет продуктов</span>
[% END %]
</td>
</tr>
......
......@@ -6,7 +6,5 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
<p>Вернуться <a href="./">в начало</a>
или <a href="editclassifications.cgi"> изменить</a> другие разделы.
или <a href="editclassifications.cgi"> изменить</a> другие разделы.</p>
......@@ -8,38 +8,39 @@
[% PROCESS global/header.html.tmpl
title = "Переместить продукты"
style_urls = ['skins/standard/admin.css']
%]
<form method=post action="editclassifications.cgi">
<table border=0 cellpadding=4 cellspacing=0>
<table id="admin_table_edit">
<tr>
<th align="right">Раздел:</th>
<td valign="top" colspan=3>[% classification.name FILTER html %]</td>
</tr><tr>
<th align="right">Описание:</th>
<td valign="top" colspan=3>
<th>Раздел:</th>
<td colspan=3>[% classification.name FILTER html %]</td>
</tr>
<tr>
<th>Описание:</th>
<td colspan=3>
[% IF classification.description %]
[% classification.description FILTER html_light %]
[% ELSE %]
<font color="red">не указано</font>
<span class="warning">не указано</span>
[% END %]
</td>
</tr><tr>
<th align="right">Порядок сортировки:</th>
<td valign="top" colspan=3>[% classification.sortkey FILTER html %]</td>
</tr><tr>
<th align="right">Продукты:</th>
<td valign="top">Другие разделы</td>
</tr>
<tr>
<th>Порядок сортировки:</th>
<td colspan=3>[% classification.sortkey FILTER html %]</td>
</tr>
<tr>
<th>Продукты:</th>
<td>Другие разделы</td>
<td></td>
<td valign="top">Этот раздел</td>
</tr><tr>
<td>Этот раздел</td>
</tr>
<tr>
<td></td>
<td valign="top">
<select name="prodlist" id="prodlist" multiple="multiple" size="20">
<td>
<select name="prodlist" id="prodlist" multiple="multiple" size="20">
[% FOREACH class = classifications %]
[% IF class.id != classification.id %]
[% FOREACH product = class.products %]
......@@ -49,21 +50,23 @@
[% END %]
[% END %]
[% END %]
</select></td>
</select>
</td>
<td align="center">
<input type=submit value="Добавить &gt;&gt;" name="add_products"><br><br>
<td>
<input type=submit value=" Добавить &gt;&gt; " name="add_products"><br><br>
<input type=submit value="&lt;&lt; Исключить" name="remove_products">
</td>
<td valign="middle" rowspan=2>
<td rowspan=2 class="max-width">
<select name="myprodlist" id="myprodlist" multiple="multiple" size="20">
[% FOREACH product = classification.products %]
<option value="[% product.name FILTER html %]">
[% product.name FILTER html %]
</option>
[% END %]
</select></td>
</select>
</td>
</tr>
</table>
......
......@@ -8,39 +8,49 @@
[% PROCESS global/header.html.tmpl
title = "Выберите раздел"
style_urls = ['skins/standard/admin.css']
%]
<table border=1 cellpadding=4 cellspacing=0>
<tr bgcolor="#6666ff">
<th align="left">Изменить...</th>
<th align="left">Описание</th>
<th align="left">Порядок сортировки</th>
<th align="left">Продукты</th>
<th align="left">Действие</th>
<table id="admin_table">
<tr class="column_header">
<th>Изменить...</th>
<th>Описание</th>
<th>Порядок сортировки</th>
<th>Продукты</th>
<th>Действие</th>
</tr>
[% FOREACH cl = classifications %]
<tr>
<td valign="top"><a href="editclassifications.cgi?action=edit&amp;classification=[% cl.name FILTER uri %]"><b>[% cl.name FILTER html %]</b></a></td>
<td valign="top">
<td>
<a href="editclassifications.cgi?action=edit&amp;classification=[% cl.name FILTER uri %]">
<b>[% cl.name FILTER html %]</b>
</a>
</td>
<td>
[% IF cl.description %]
[% cl.description FILTER html_light %]
[% ELSE %]
<font color="red">нет</font>
<span class="warning">нет</span>
[% END %]
</td>
<td valign="top">[% cl.sortkey FILTER html %]</td>
<td>[% cl.sortkey FILTER html %]</td>
[% IF (cl.id == 1) %]
<td valign="top">[% cl.product_count FILTER html %]</td>
<td>[% cl.product_count FILTER html %]</td>
[% ELSE %]
<td valign="top"><a href="editclassifications.cgi?action=reclassify&amp;classification=[% cl.name FILTER uri %]">переклассифицировать ([% cl.product_count FILTER html %])</a></td>
<td>
<a href="editclassifications.cgi?action=reclassify&amp;classification=[% cl.name FILTER uri %]">
переклассифицировать&nbsp;([% cl.product_count FILTER html %])</a>
</td>
[% END %]
[%# don't allow user to delete the default id. %]
[% IF (cl.id == 1) %]
<td valign="top">&nbsp;</td>
<td></td>
[% ELSE %]
<td valign="top"><a href="editclassifications.cgi?action=del&amp;classification=[% cl.name FILTER uri %]">удалить</a></td>
<td>
<a href="editclassifications.cgi?action=del&amp;classification=[% cl.name FILTER uri %]">удалить</a>
</td>
[% END %]
</tr>
[% END %]
......
......@@ -22,100 +22,103 @@
style_urls = ['skins/standard/admin.css']
%]
<table border="1" cellpadding="4" cellspacing="0">
<tr bgcolor="#6666FF">
<th valign="top" align="left">Поле</th>
<th valign="top" align="left">Значение</th>
</tr>
<tr>
<td valign="top">Компонент:</td>
<td valign="top">[% comp.name FILTER html %]</td>
</tr>
<tr>
<td valign="top">Описание компонента:</td>
<td valign="top">[% comp.description FILTER html_light %]</td>
</tr>
<tr>
<td valign="top">Ответственный исполнитель:</td>
<td valign="top">[% comp.default_assignee.login FILTER html %]</td>
[% IF Param('useqacontact') %]
</tr>
<tr>
<td valign="top">Ответственный за приемку:</td>
<td valign="top">[% comp.default_qa_contact.login FILTER html %]</td>
[% END %]
</tr>
<tr>
<td valign="top">Компонент продукта:</td>
<td valign="top">[% product.name FILTER html %]</td>
[% IF product.description %]
</tr>
<tr>
<td valign="top">Описание продукта:</td>
<td valign="top">[% product.description FILTER html_light %]</td>
[% END %]
<table id="admin_table">
<tr class="column_header">
<th>Поле</th>
<th>Значение</th>
</tr>
<tr>
<td>Компонент:</td>
<td>[% comp.name FILTER html %]</td>
</tr>
<tr>
<td>Описание компонента:</td>
<td>[% comp.description FILTER html_light %]</td>
</tr>
<tr>
<td>Ответственный исполнитель:</td>
<td>[% comp.default_assignee.login FILTER html %]</td>
</tr>
[% IF Param('useqacontact') %]
<tr>
<td>Ответственный за приемку:</td>
<td>[% comp.default_qa_contact.login FILTER html %]</td>
</tr>
[% END %]
[% IF Param('usetargetmilestone') %]
</tr>
<tr>
<td valign="top">Планы продукта:</td>
<td valign="top">
<a href="[% product.milestone_url FILTER html %]">
[% product.milestone_url FILTER html %]
</a>
</td>
[% END %]
<tr>
<td>Компонент продукта:</td>
<td>[% product.name FILTER html %]</td>
</tr>
</tr>
<tr>
<TD VALIGN="top">Открыт для регистрации [% terms.bugs_gen %]:</TD>
<TD VALIGN="top">[% IF product.is_active && comp.isactive %]Да[% ELSE %]Нет[% END %]</td>
</tr>
<tr>
<td valign="top">[% terms.Bugs_gen %]:</td>
<td valign="top">
[% IF comp.bug_count %]
<a title="Список [% terms.bugs_gen %] компонента '[% comp.name FILTER html %]'"
href="buglist.cgi?component=[% comp.name FILTER uri %]&amp;product=
[%- product.name FILTER uri %]">[% comp.bug_count %]</a>
[% ELSE %]
Не зарегистрировано
[% END %]
</td>
</tr>
[% IF product.description %]
<tr>
<td>Описание продукта:</td>
<td>[% product.description FILTER html_light %]</td>
</tr>
[% END %]
[% IF Param('usetargetmilestone') %]
<tr>
<td>Планы продукта:</td>
<td>
<a href="[% product.milestone_url FILTER html %]">
[% product.milestone_url FILTER html %]</a>
</td>
</tr>
[% END %]
<tr>
<td>Открыт для регистрации [% terms.bugs_gen %]</td>
<td>[% IF product.is_active && comp.isactive %]Да[% ELSE %]Нет[% END %]</td>
</tr>
<tr>
<td>[% terms.Bugs_gen %]</td>
<td>
[% IF comp.bug_count %]
<a title="Список [% terms.bugs_gen %] компонента '[% comp.name FILTER html %]'"
href="buglist.cgi?component=[% comp.name FILTER uri %]&amp;product=
[%- product.name FILTER uri %]">[% comp.bug_count %]</a>
[% ELSE %]
Не зарегистрировано
[% END %]
</td>
</tr>
</table>
<h2>Подтверждение</h2>
[% IF comp.bug_count %]
[% IF !Param("allowbugdeletion") %]
<p class="confirmation">
Для компонента
[% numeral(comp.bug_count,
"зарегистрирована ${comp.bug_count} ${terms.bug}",
"зарегистрировано ${comp.bug_count} ${terms.bug_gen}",
"зарегистрировано ${comp.bug_count} ${terms.bugs_gen}")
FILTER html %].
Без переноса их в другие компоненты удаление невозможно.
</p>
<p class="confirmation">
Для компонента
[% numeral(comp.bug_count,
"зарегистрирована ${comp.bug_count} ${terms.bug}",
"зарегистрировано ${comp.bug_count} ${terms.bug_gen}",
"зарегистрировано ${comp.bug_count} ${terms.bugs_gen}")
FILTER html %].
Без переноса
[% IF comp.bug_count > 1 %]
их [% terms.bugs %]
[% ELSE %]
её [% terms.bug %]
[% END %]
в другие компоненты удаление невозможно.
</p>
[% ELSE %]
<table border="0" cellpadding="20" width="70%" bgcolor="red"><tr><td>
<p class="confirmation">
Для компонента
[% numeral(comp.bug_count,
"зарегистрирована ${comp.bug_count} ${terms.bug}",
"зарегистрировано ${comp.bug_count} ${terms.bugs}",
"зарегистрировано ${comp.bug_count} ${terms.bugs_gen}")
FILTER html %]! Удаление
компонента приведет к удалению <b>ВСЕХ</b> его
FILTER html %]!
Удаление компонента приведет к удалению <b>ВСЕХ</b> его
[% terms.bugs_gen %] и переписки по ним.
</td></tr></table>
</p>
[% END %]
[% END %]
......
......@@ -10,21 +10,23 @@
# product: object; Bugzilla::Product object representing the product to
# which the component belongs.
#%]
[% title = BLOCK %]Создание компонента продукта '[% product.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
title = title
generate_api_token = 1
style_urls = ['skins/standard/admin.css']
yui = [ 'autocomplete' ]
javascript_urls = [ "js/field.js" ]
title = title
%]
<form method="post" action="editcomponents.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
[% PROCESS "admin/components/edit-common.html.tmpl" %]
</table>
<hr>
<input type="submit" id="create" value="Создать">
<input type="hidden" name="action" value="new">
<input type="hidden" name='product' value="[% product.name FILTER html %]">
......
......@@ -15,37 +15,39 @@
[% DEFAULT desc_name = "description" %]
<tr>
<th class="field_label"><label for="component">Компонент:</label></th>
<th><label for="component">Компонент:</label></th>
<td><input size="64" maxlength="64" name="component" id="component"
value="[%- comp.name FILTER html %]"></td>
value="[%- comp.name FILTER html %]" required></td>
</tr>
<tr>
<th class="field_label"><label for="[% desc_name FILTER html %]">Описание:</label></th>
<th><label for="[% desc_name FILTER html %]">Описание компонента:</label></th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = desc_name
id = desc_name
id = desc_name
minrows = 4
cols = 64
wrap = 'virtual'
defaultcontent = comp.description
mandatory = 1
%]
</td>
</tr>
<tr>
<th class="field_label"><label for="initialowner">Ответственный исполнитель:</label></th>
<th><label for="initialowner">Ответственный исполнитель:</label></th>
<td>
[% INCLUDE global/userselect.html.tmpl
name => "initialowner"
id => "initialowner"
value => comp.default_assignee.login
size => 64
mandatory => 1
%]
</td>
</tr>
[% IF Param('useqacontact') %]
<tr>
<th class="field_label"><label for="initialqacontact">Ответственный за приемку:</label></th>
<th><label for="initialqacontact">Ответственный за приемку:</label></th>
<td>
[% INCLUDE global/userselect.html.tmpl
name => "initialqacontact"
......@@ -58,7 +60,7 @@
</tr>
[% END %]
<tr>
<th class="field_label"><label for="initialcc">Подписать пользователей:</label></th>
<th><label for="initialcc">Список подписчиков:</label></th>
<td>
[% INCLUDE global/userselect.html.tmpl
name => "initialcc"
......@@ -69,7 +71,7 @@
%]
<br>
[% IF !Param("usemenuforusers") %]
<em>Введите имена пользователей через запятую.</em>
<span class="bz_info">Введите имена пользователей через запятую.</span>
[% END %]
</td>
</tr>
......
......@@ -13,52 +13,50 @@
# which the component belongs.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]
Изменение компонента '[% comp.name FILTER html %]' продукта '[% product.name FILTER html %]'
[% END %]
[% PROCESS global/header.html.tmpl
title = title
generate_api_token = 1
style_urls = ['skins/standard/admin.css']
yui = [ 'autocomplete' ]
javascript_urls = [ "js/field.js" ]
%]
<form method="post" action="editcomponents.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
[% PROCESS "admin/components/edit-common.html.tmpl" %]
<tr>
<th class="field_label"><label for="isactive">Доступен для [% terms.Bugs_gen %]:</label></th>
<th><label for="isactive">Доступен для [% terms.bugs_gen %]:</label></th>
<td><input id="isactive" name="isactive" type="checkbox" value="1"
[% 'checked="checked"' IF comp.isactive %]></td>
</tr>
<tr>
<th class="field_label">[% terms.Bugs %]:</th>
<th>[% terms.Bugs %]:</th>
<td>
[% IF comp.bug_count > 0 %]
<a title="[% terms.Bugs %] компонента '[% comp.name FILTER html %]'"
href="buglist.cgi?component=
[%- comp.name FILTER uri %]&amp;product=
[%- product.name FILTER uri %]">[% comp.bug_count %]</a>
[% ELSE %]
Нет
[% END %]
[% IF comp.bug_count > 0 %]
<a title="[% terms.Bugs %] компонента '[% comp.name FILTER html %]'"
href="buglist.cgi?component=
[%- comp.name FILTER uri %]&amp;product=
[%- product.name FILTER uri %]">[% comp.bug_count %]</a>
[% ELSE %]
Нет
[% END %]
</td>
</tr>
</table>
<input type="hidden" name="action" value="update">
<input type="hidden" name="componentold" value="[% comp.name FILTER html %]">
<input type="hidden" name="product" value="[% product.name FILTER html %]">
<input type="hidden" name="token" value="[% token FILTER html %]">
<input type="submit" value="Сохранить изменения" id="update"> или <a
href="editcomponents.cgi?action=del&amp;product=
[%- product.name FILTER uri %]&amp;component=
[%- comp.name FILTER uri %]">удалить</a> компонент.
<input type="submit" value="Сохранить изменения" id="update"> или
<a href="editcomponents.cgi?action=del&amp;product=
[%- product.name FILTER uri %]&amp;component=
[%- comp.name FILTER uri %]">удалить</a> компонент.
</form>
[% PROCESS admin/components/footer.html.tmpl
......
......@@ -28,7 +28,7 @@
[% IF !no_edit_other_components_link %]
другие компоненты продукта <a
title="Выберите компонент продукта '[% product.name FILTER html %]' to edit"
title="Выберите компонент продукта '[% product.name FILTER html %]'"
href="editcomponents.cgi?product=
[%- product.name FILTER uri %]">'[% product.name FILTER html %]'</a>,
или
......
......@@ -12,12 +12,11 @@
# which the component belongs.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]Выберите компонент продукта
'[% product.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
%]
[% edit_contentlink = BLOCK %]editcomponents.cgi?action=edit&amp;product=
......@@ -31,7 +30,7 @@
[% columns = [
{
name => "name"
heading => "Изменить..."
heading => "Изменить компонент..."
contentlink => edit_contentlink
},
{
......@@ -65,13 +64,12 @@
yesno_field => 1
}) %]
[% IF showbugcounts %]
[% columns.push({
name => 'bug_count'
heading => "$terms.Bugs_gen"
align => "right"
class => "right"
contentlink => bug_count_contentlink
}) %]
......@@ -119,7 +117,7 @@
overrides = overrides
%]
<p><a href="editcomponents.cgi?action=add&amp;product=[% product.name FILTER uri %]">Создать</a>
<p><a href="editcomponents.cgi?action=add&amp;product=[% product.name FILTER uri %]">Добавить</a>
новый компонент продукта '[% product.name FILTER html %]'</p>
[% IF ! showbugcounts %]
......
......@@ -11,10 +11,9 @@
# showbugcounts: if defined, then bug counts should be included in the table
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
title = "Выберите продукт"
style_urls = ['skins/standard/admin.css']
%]
[% columns = [
......@@ -36,7 +35,7 @@
[% columns.push({
name => 'bug_count'
heading => "$terms.Bugs_gen"
align => "right"
class => "right"
contentlink => "buglist.cgi?product=%%name%%"
})
%]
......
......@@ -12,59 +12,48 @@
# expected_action: the action the user was going to do.
# script_name: the script generating this warning.
# alternate_script: the suggested script to redirect the user to
# if he declines submission.
# if they decline submission.
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS global/header.html.tmpl title = "Подозрительные действия"
style_urls = ['skins/standard/global.css'] %]
[% PROCESS global/header.html.tmpl
title = "Подозрительные действия"
%]
[% IF abuser %]
<div class="throw_error">
<p>При использовании административного интерфейса [% terms.Bugzilla %] генерируется
случайный идентификатор, который хранится в экранной форме и базе данных.
Он используется для контроля того, что запрашиваемые изменения подготовлены при
помощи штатных форм [% terms.Bugzilla %]. В данный момент идентификатор некорректен,
помощи штатных форм [% terms.Bugzilla %]. В данный момент идентификатор некорректен,
это означает что форма данных заполнена на неверной странице.
Используемый идентификатор:</p>
<table border="0" cellpadding="5" cellspacing="0">
[% IF token_action != expected_action %]
<tr>
<th>Запрошенное&nbsp;действие:</th>
<td>[% token_action FILTER html %]</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>
Это действие не совпадает с ожидаемым ([% expected_action FILTER html %]).
</td>
</tr>
[% END %]
[% IF token_action != expected_action %]
<p>
<span class="label">Запрошенное&nbsp;действие:</span>
[%+ token_action FILTER html %]
<br>
Это действие не совпадает с ожидаемым ([% expected_action FILTER html %]).
</p>
[% END %]
[% IF abuser != user.identity %]
<tr>
<th>Создан&nbsp;пользователем:</th>
<td>[% abuser FILTER html %]</td>
</tr>
<tr>
<th>&nbsp;</th>
<td>
Идентификатор создан не Вами. Это может указывать на попытку несанкционированного
[% IF abuser != user.identity %]
<p>
<span class="label">Создан&nbsp;пользователем:</span>
[%+ abuser FILTER html %]
<br>
Идентификатор создан не Вами. Это может указывать на попытку несанкционированного
доступа от Вашего имени!
</td>
</tr>
[% END %]
</table>
<p>Обратитесь к администратору: [%+ Param("maintainer") FILTER html %].</p>
</p>
[% END %]
</div>
<p>Обратитесь к администратору: [% Param("maintainer") FILTER html %].</p>
[% ELSE %]
<div class="throw_error">
Изменение запрошено без использования штатных форм (отсутствует контрольный
идентификатор действия <em>[% expected_action FILTER html %]</em> при вызове
скрипта '[% script_name FILTER html%]' ). Возможные причины:<br>
скрипта '[% script_name FILTER html%]'). Возможные причины:<br>
<ul>
<li>После успешных изменений нажата кнопка "Назад", как правило это
нехорошая идея, но безобидная.</li>
......@@ -73,7 +62,7 @@
<li>Вы выбрали ссылку, которая <b>неожиданно для Вас</b> направила сюда,
в этом случае действие может являться опасным.</li>
</ul>
Подтвердите сохранение предлагаемых изменений. Помните, это может привести
Подтвердите сохранение предлагаемых изменений. Помните, это может привести
к неожиданным и нежелательным результатам.
</div>
......
[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]
// Disable a checkbox based on the state of another one.
function toggleCheckbox(this_checkbox, other_checkbox_id) {
var other_checkbox = document.getElementById(other_checkbox_id);
other_checkbox.disabled = !this_checkbox.checked;
}
var select_values = new Array();
[% USE Bugzilla %]
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
select_values[[% sel_field.id FILTER js %]] = [
[% FOREACH legal_value = sel_field.legal_values %]
[%# Prefix components with the name of their product so that admins
know which component we're talking about. #%]
[% IF sel_field.name == 'component' %]
[% SET value_name = display_value('product', legal_value.product.name) _ ': '
_ display_value(sel_field.name, legal_value.name) %]
[% ELSE %]
[% SET value_name = display_value(sel_field.name, legal_value.name) %]
[% END %]
[[% legal_value.id FILTER js %], '[% value_name FILTER js %]'][% ',' UNLESS loop.last %]
[% END %]
];
[% END %]
function onChangeType(type_field) {
var value_field = document.getElementById('value_field_id');
if (type_field.value == [% constants.FIELD_TYPE_SINGLE_SELECT %]
|| type_field.value == [% constants.FIELD_TYPE_MULTI_SELECT %])
{
value_field.disabled = false;
}
else {
value_field.disabled = true;
}
var reverse_desc = document.getElementById('reverse_desc');
if (type_field.value == [% constants.FIELD_TYPE_BUG_ID %])
{
reverse_desc.disabled = false;
}
else {
reverse_desc.disabled = true;
reverse_desc.value = '';
}
}
function onChangeVisibilityField() {
var vis_field = document.getElementById('visibility_field_id');
var vis_value = document.getElementById('visibility_values');
if (vis_field.value) {
var values = select_values[vis_field.value];
bz_populateSelectFromArray(vis_value, values);
}
else {
bz_clearOptions(vis_value);
}
}
......@@ -19,34 +19,34 @@
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
doc_section = "custom-fields.html#delete-custom-fields"
style_urls = ['skins/standard/admin.css']
doc_section = "administering/custom-fields.html#deleting-custom-fields"
%]
<table border="1" cellpadding="4" cellspacing="0">
<tr bgcolor="#6666FF">
<th valign="top" align="left">Поле</th>
<th valign="top" align="left">Значение</th>
</tr>
<tr>
<td valign="top">Настраиваемый атрибут:</td>
<td valign="top">[% field.name FILTER html %]</td>
</tr>
<tr>
<td valign="top">Описание:</td>
<td valign="top">[% field.description FILTER html %]</td>
</tr>
<tr>
<td valign="top">Тип:</td>
<td valign="top">[% field_types.${field.type} FILTER html %]</td>
</tr>
<table id="admin_table">
<tr class="column_header">
<th>Поле</th>
<th>Значение</th>
</tr>
<tr>
<td>Настраиваемый атрибут</td>
<td>[% field.name FILTER html %]</td>
</tr>
<tr>
<td>Описание:</td>
<td>[% field.description FILTER html %]</td>
</tr>
<tr>
<td>Тип:</td>
<td>[% field_types.${field.type} FILTER html %]</td>
</tr>
</table>
<h2>Подтверждение</h2>
<p class="confirmation">
Подтвердите удаление настраиваемого атрибута из базы данных.<br>
<em>Удаление возможно только для неактивного атрибута, который
<em>Удаление возможно только для неактивного атрибута, который
никогда не использовался при регистрации [% terms.bugs_gen FILTER html %].</em>
</p>
......
......@@ -10,8 +10,6 @@
# none
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% javascript = BLOCK %]
[% INCLUDE "admin/custom_fields/cf-js.js.tmpl" %]
[% END %]
......@@ -20,158 +18,39 @@
title = "Создание атрибута"
onload = "document.getElementById('new_bugmail').disabled = true;"
javascript_urls = [ 'js/util.js' ]
doc_section = "custom-fields.html#add-custom-fields"
doc_section = "administering/custom-fields.html#adding-custom-fields"
style_urls = ['skins/standard/admin.css']
%]
[%# set initial editability of fields such as Reverse Relationship Description %]
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function() {onChangeType(document.getElementById('type'))});
YAHOO.util.Event.onDOMReady(function() {onChangeType(document.getElementById('type'))});
</script>
<p>
Добавление новых атрибутов может сделать интерфейс [% terms.Bugzilla %]
очень сложным. Многие неопытные администраторы начинают с настройки
очень сложным. Многие неопытные администраторы начинают с настройки
большого количества атрибутов и впоследствии получают от пользователей
жалобы о сложности регистрации [% terms.bugs %]. Рекомендуется
хорошо обдумать создание каждого дополнительного поля. Может оказаться,
что требуемый функционал уже реализован в [% terms.Bugzilla %] и
жалобы о сложности интерфейса. Рекомендуется
хорошо обдумать создание каждого дополнительного поля. Может оказаться,
что требуемый функционал уже реализован в [% terms.Bugzilla %] и
надо лишь включить нужный параметр настройки.
</p>
<ul>
<li>Имена пользовательских атрибутов должны начинаться с "cf_", чтобы не
допустить совпадения с именами стандартных полей. Если не указать, "cf_"
допустить совпадения с именами стандартных полей. Если не указать, "cf_"
будет автоматически добавлено в начало имени.</li>
<li>Описание — короткий текст, объясняющий смысл атрибута, и используемый
в качестве обозначения атрибута в элементах интерфейса.</li>
</ul>
<form id="add_field" action="editfields.cgi" method="GET">
<table border="0" cellspacing="0" cellpadding="5" id="edit_custom_field">
<tr>
<th class="narrow_label"><label for="name">Имя:</label></th>
<td>
<input type="text" id="name" name="name" value="cf_" size="40" maxlength="64">
</td>
<th>
<label for="enter_bug">Может быть установлен при регистрации [% terms.bug_gen %]:</label>
</th>
<td>
<input type="checkbox" id="enter_bug" name="enter_bug" value="1"
onchange="toggleCheckbox(this, 'new_bugmail');">
</td>
</tr>
<tr>
<th class="narrow_label"><label for="desc">Описание:</label></th>
<td><input type="text" id="desc" name="desc" value="" size="40"></td>
[%# FIXME-ru: show localized value here %]
<th>
<label for="new_bugmail">Включать в почтовые оповещения для новых [% terms.bugs_gen %]:</label>
</th>
<td><input type="checkbox" id="new_bugmail" name="new_bugmail" value="1"></td>
</tr>
<tr>
<th class="narrow_label"><label for="type">Тип:</label></th>
<td>
<select id="type" name="type" onchange="onChangeType(this)">
[% FOREACH type = field_types.keys %]
[% NEXT IF type == constants.FIELD_TYPE_UNKNOWN %]
<option value="[% type FILTER html %]">[% field_types.$type FILTER html %]</option>
[% END %]
</select>
</td>
<th><label for="obsolete">Неактивен:</label></th>
<td><input type="checkbox" id="obsolete" name="obsolete" value="1"></td>
</tr>
<tr>
<th class="narrow_label"><label for="sortkey">Порядок сортировки:</label></th>
<td>
<input type="text" id="sortkey" name="sortkey" size="6" maxlength="6">
</td>
<th align="right"><label for="is_mandatory">Обязателен:</label></th>
<td><input type="checkbox" id="is_mandatory" name="is_mandatory" value="1"></td>
</tr>
<tr>
<th class="narrow_label">Длинное описание:</th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = 'long_desc'
id = 'long_desc'
minrows = 3
maxrows = 5
cols = 46
defaultcontent = defaultcontent
%]
</td>
<th>
<label for="visibility_field_id">Условия отображения:</label>
</th>
<td>
<select name="visibility_field_id" id="visibility_field_id"
onchange="onChangeVisibilityField()">
<option></option>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
<option value="[% sel_field.id FILTER html %]">
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
</option>
[% END %]
</select>
<label for="visibility_values">
<strong>принимает любое из значений:</strong>
</label>
<select multiple="multiple" size="5" name="visibility_values"
id="visibility_values" class="field_value">
<option value=""></option>
</select>
</td>
</tr>
<tr>
<th class="narrow_label">
<label for="reverse_desc">Описание обратного отношения:</label>
</th>
<td>
<input type="text" id="reverse_desc" name="reverse_desc" value="" size="40" disabled="disabled">
<br/>
Используйте эту метку для списка [% terms.bugs_gen %], который ссылается на
[%+ terms.abug %] с этим полем
[%+ field_types.${constants.FIELD_TYPE_BUG_ID} FILTER html %].
Например, если описанием является "Дубликат", то
обратным описанием будет "Дубликаты этой [% terms.bugs %]".
Для отключения списка для этого поля оставьте его пустым.
</td>
<th>
<label for="value_field_id">
Атрибут, от которого зависит <br>
отображение значений этого атрибута:
</label>
</th>
[% PROCESS "admin/custom_fields/edit-common.html.tmpl" %]
<td>
<select disabled="disabled" name="value_field_id" id="value_field_id">
<option></option>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
<option value="[% sel_field.id FILTER html %]">
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
</option>
[% END %]
</select>
</td>
</tr>
</table>
<p>
<input type="hidden" name="action" value="new">
<input type="hidden" name="token" value="[% token FILTER html %]">
<input type="submit" id="create" value="Создать">
</p>
<input type="hidden" name="action" value="new">
<input type="hidden" name="token" value="[% token FILTER html %]">
<input type="submit" id="create" value="Создать">
</form>
<p>
......
[%# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.
#%]
[%# INTERFACE:
# field: Bugzila::Field; the current field being edited
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
<table id="admin_table_edit">
<tr>
<th><label for="name">Имя:</label></th>
<td>
[% IF field %]
[% field.name FILTER html %]
[% ELSE %]
<input type="text" id="name" name="name" value="cf_" size="40" maxlength="64" required>
[% END %]
</td>
<th>
<label for="enter_bug">Может быть установлен при регистрации [% terms.bug_gen %]:</label>
</th>
<td>
<input type="checkbox" id="enter_bug" name="enter_bug" value="1"
[%- " checked" IF field.enter_bug %]
onchange="toggleCheckbox(this, 'new_bugmail');">
</td>
</tr>
<tr>
<th><label for="desc">Описание:</label></th>
<td>
<input type="text" id="desc" name="desc" size="40"
value="[% field.description FILTER html %]" required>
</td>
<th>
<label for="new_bugmail">Включать в почтовые оповещения для новых [% terms.bugs_gen %]:</label>
</th>
<td>
<input type="checkbox" id="new_bugmail" name="new_bugmail" value="1"
[%- " checked" IF field.mailhead %]>
</td>
</tr>
<tr>
<th><label for="type">Тип:</label></th>
<td>
[% IF field %]
[% field_types.${field.type} FILTER html %]
[% ELSE %]
<select id="type" name="type" onchange="onChangeType(this)">
[% FOREACH type = field_types.keys %]
[% NEXT IF type == constants.FIELD_TYPE_UNKNOWN %]
<option value="[% type FILTER html %]">[% field_types.$type FILTER html %]</option>
[% END %]
</select>
[% END %]
</td>
<th><label for="obsolete">Неактивен:</label></th>
<td>
<input type="checkbox" id="obsolete" name="obsolete" value="1"
[%- " checked" IF field.obsolete %]>
</td>
</tr>
<tr>
<th><label for="sortkey">Порядок сортировки:</label></th>
<td>
<input type="text" id="sortkey" name="sortkey" size="6" maxlength="6"
value="[% field.sortkey FILTER html %]">
</td>
<th><label for="is_mandatory">Обязателен:</label></th>
<td>
<input type="checkbox" id="is_mandatory" name="is_mandatory" value="1"
[%- ' checked="checked"' IF field.is_mandatory %]>
</td>
</tr>
<tr>
<th>Длинное описание:</th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = 'long_desc'
id = 'long_desc'
minrows = 3
maxrows = 5
cols = 46
defaultcontent = field.long_desc
%]
</td>
<th>
<label for="visibility_field_id">Условия отображения:</label>
</th>
<td>
<select name="visibility_field_id" id="visibility_field_id"
onchange="onChangeVisibilityField()">
<option></option>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF field && sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
[% ' selected="selected"'
IF field && sel_field.id == field.visibility_field.id %]>
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
</option>
[% END %]
</select>
<br>
<label for="visibility_values">
<strong>принимает любое из значений:</strong>
</label>
<br>
<select multiple="multiple" size="5" name="visibility_values"
id="visibility_values" class="field_value">
[% IF field %]
[% FOREACH value = field.visibility_field.legal_values %]
<option value="[% value.id FILTER html %]"
[% " selected" IF field.visibility_values.contains(value) %]>
[% IF field.visibility_field.name == 'component' %]
[% display_value('product', value.product.name) FILTER html %]:
[% END %]
[%+ display_value(field.visibility_field.name, value.name) FILTER html %]
</option>
[% END %]
[% ELSE %]
<option value=""></option>
[% END %]
</select>
</td>
</tr>
[% IF !field || field.is_select || field.type == constants.FIELD_TYPE_BUG_ID %]
<tr>
[% IF field.is_select %]
<th>&nbsp;</th>
<td>
<a href="editvalues.cgi?field=[% field.name FILTER uri %]">Допустимые
значения атрибута</a>.
</td>
[% ELSE %]
<th>
<label for="reverse_desc">Описание обратного отношения:</label>
</th>
<td>
<input type="text" id="reverse_desc" name="reverse_desc" size="40"
value="[% field.reverse_desc FILTER html %]"
[% ' disabled="disabled"' IF !field %]>
<br>
Используйте эту метку для списка [% terms.bugs_gen %], который ссылается на
[% terms.bug_acc %] с этим полем
[% field_types.${constants.FIELD_TYPE_BUG_ID} FILTER html %].
Например, если описанием является "Дубликат", то
обратным описанием будет "Дубликаты этой [% terms.bugs %]".
Для отключения списка для этого поля оставьте его пустым.
</td>
[% END %]
[% IF !field || field.is_select %]
<th>
<label for="value_field_id">
Атрибут, от которого зависит <br>
отображение значений этого атрибута:
</label>
</th>
<td>
<select name="value_field_id" id="value_field_id"
[% ' disabled="disabled"' IF !field %]>
<option></option>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF field && sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
[% ' selected="selected"' IF field && sel_field.id == field.value_field.id %]>
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
</option>
[% END %]
</select>
</td>
[% ELSE %]
<th></th>
<td></td>
[% END %]
</tr>
[% END %]
</table>
......@@ -10,10 +10,8 @@
# field: Bugzila::Field; the current field being edited
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% title = BLOCK %]
Изменение атрибута '[% field.name FILTER html %]' ([% field_descs.${field.name} FILTER html %])
Изменение атрибута '[% field.name FILTER html %]' ([% field.description FILTER html %])
[% END %]
[% javascript = BLOCK %]
......@@ -24,7 +22,7 @@
title = title
onload = "toggleCheckbox(document.getElementById('enter_bug'), 'new_bugmail');"
javascript_urls = [ 'js/util.js' ]
doc_section = "custom-fields.html#edit-custom-fields"
doc_section = "administering/custom-fields.html#editing-custom-fields"
style_urls = ['skins/standard/admin.css']
%]
......@@ -34,146 +32,8 @@
</p>
<form id="edit_field" action="editfields.cgi" method="GET">
<table border="0" cellspacing="0" cellpadding="5" id="edit_custom_field">
<tr>
<th class="narrow_label">Имя:</th>
<td>[% field.name FILTER html %]</td>
<th>
<label for="enter_bug">Может быть установлен при регистрации [% terms.bug_gen %]:</label>
</th>
<td><input type="checkbox" id="enter_bug" name="enter_bug" value="1"
[%- " checked" IF field.enter_bug %]
onchange="toggleCheckbox(this, 'new_bugmail');"></td>
</tr>
<tr>
<th class="narrow_label"><label for="desc">Описание:</label></th>
<td><input type="text" id="desc" name="desc" size="40"
value="[% field.description FILTER html %]"></td>
[%# FIXME-ru: show localized value here %]
<th>
<label for="new_bugmail">Включать в почтовые оповещения для новых [% terms.bugs_gen %]:</label>
</th>
<td><input type="checkbox" id="new_bugmail" name="new_bugmail" value="1"
[%- " checked" IF field.mailhead %]></td>
</tr>
<tr>
<th class="narrow_label">Тип:</th>
<td>[% field_types.${field.type} FILTER html %]</td>
<th><label for="obsolete">Неактивен:</label></th>
<td><input type="checkbox" id="obsolete" name="obsolete" value="1"
[%- " checked" IF field.obsolete %]></td>
</tr>
<tr>
<th class="narrow_label"><label for="sortkey">Порядок сортировки:</label></th>
<td>
<input type="text" id="sortkey" name="sortkey" size="6" maxlength="6"
value="[% field.sortkey FILTER html %]">
</td>
<th align="right"><label for="is_mandatory">Обязателен:</label></th>
<td><input type="checkbox" id="is_mandatory" name="is_mandatory" value="1"
[%- ' checked="checked"' IF field.is_mandatory %]></td>
</tr>
<tr>
<th class="narrow_label">Длинное описание:</th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = 'long_desc'
id = 'long_desc'
minrows = 3
maxrows = 5
cols = 46
defaultcontent = field.long_desc
%]
</td>
<th>
<label for="visibility_field_id">Условия отображения:</label>
</th>
<td>
<select name="visibility_field_id" id="visibility_field_id"
onchange="onChangeVisibilityField()">
<option></option>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
[% ' selected="selected"'
IF sel_field.id == field.visibility_field.id %]>
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
</option>
[% END %]
</select>
<label for="visibility_values">
<strong>принимает любое из значений:</strong>
</label>
<select multiple="multiple" size="5" name="visibility_values"
id="visibility_values" class="field_value">
[% FOREACH value = field.visibility_field.legal_values %]
<option value="[% value.id FILTER html %]"
[% " selected" IF field.visibility_values.contains(value) %]>
[% IF field.visibility_field.name == 'component' %]
[% display_value('product', value.product.name) FILTER html %]:
[% END %]
[%+ display_value(field.visibility_field.name, value.name) FILTER html %]
</option>
[% END %]
</select>
</td>
</tr>
[% IF field.type == constants.FIELD_TYPE_BUG_ID %]
<tr>
<th class="narrow_label">
<label for="reverse_desc">Описание обратного отношения:</label>
</th>
<td>
<input type="text" id="reverse_desc" name="reverse_desc" size="40"
value="[% field.reverse_desc FILTER html %]">
<br/>
Используйте эту метку для списка [% terms.bugs_gen %], который ссылается на
[%+ terms.abug %] с этим полем
[%+ field_types.${constants.FIELD_TYPE_BUG_ID} FILTER html %].
Например, если описанием является "Дубликат", то
обратным описанием будет "Дубликаты этой [% terms.bugs %]".
Для отключения списка для этого поля оставьте его пустым.
</td>
<td colspan="2">&nbsp;</td>
</tr>
[% END %]
[% IF field.is_select %]
<tr>
<th>&nbsp;</th>
<td>
<a href="editvalues.cgi?field=[% field.name FILTER uri %]">Допустимые
значения атрибута</a>.
</td>
<th>
<label for="value_field_id">
Атрибут, от которого зависит <br>
отображение значений этого атрибута:
</label>
</th>
[% PROCESS "admin/custom_fields/edit-common.html.tmpl" field = field %]
<td>
<select name="value_field_id" id="value_field_id">
<option></option>
[% FOREACH sel_field = Bugzilla.fields({ is_select => 1 }) %]
[% NEXT IF sel_field.id == field.id %]
<option value="[% sel_field.id FILTER html %]"
[% ' selected="selected"'
IF sel_field.id == field.value_field.id %]>
[% sel_field.description FILTER html %]
([% sel_field.name FILTER html %])
</option>
[% END %]
</select>
</td>
</tr>
[% END %]
</table>
<br>
<input type="hidden" name="action" value="update">
<input type="hidden" name="name" value="[% field.name FILTER html %]">
<input type="hidden" name="token" value="[% token FILTER html %]">
......
......@@ -13,8 +13,9 @@
[% PROCESS "global/field-descs.none.tmpl" %]
[% PROCESS global/header.html.tmpl
title = "Атрибуты"
doc_section = "custom-fields.html"
title = "Настраиваемые атрибуты"
style_urls = ['skins/standard/admin.css']
doc_section = "administering/custom-fields.html"
%]
[% delete_contentlink = BLOCK %]editfields.cgi?action=del&amp;name=%%name%%[% END %]
......
......@@ -12,11 +12,9 @@
# field: object; the field the value is being deleted from.
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% title = BLOCK %]
Удаление значения '[% value.name FILTER html %]' атрибута
'[% field_descs.${field.name} FILTER html %]' ([% field.name FILTER html %])
Удаление значения '[% value.name FILTER html %]' атрибута
'[% field.description FILTER html %]' ([% field.name FILTER html %])
[% END %]
[% PROCESS global/header.html.tmpl
......@@ -24,34 +22,34 @@
style_urls = ['skins/standard/admin.css']
%]
<table border="1" cellpadding="4" cellspacing="0">
<tr bgcolor="#6666FF">
<th valign="top" align="left">Поле</th>
<th valign="top" align="left">Значение</th>
</tr>
<tr>
<td valign="top">Атрибут:</td>
<td valign="top">[% field_descs.${field.name} FILTER html %]</td>
</tr>
<tr>
<td valign="top">Значение атрибута:</td>
<td valign="top">[% value.name FILTER html %]</td>
</tr>
<tr>
<td valign="top">[% terms.Bugs_gen %]:</td>
<td valign="top">
[% IF value.bug_count %]
<a title="Список [% terms.bugs_gen %], использующих значение
'[% value.name FILTER html %]'
атрибута '[% field_descs.${field.name} FILTER html %]'"
href="buglist.cgi?[% field.name FILTER uri %]=
[%- value.name FILTER uri %]">
[%- value.bug_count FILTER html %]</a>
[% ELSE %]
Нет
[% END %]
</td>
</tr>
<table id="admin_table">
<tr class="column_header">
<th>Поле</th>
<th>Значение</th>
</tr>
<tr>
<td>Атрибут:</td>
<td>[% field.description FILTER html %]</td>
</tr>
<tr>
<td>Значение атрибута:</td>
<td>[% value.name FILTER html %]</td>
</tr>
<tr>
<td>[[% terms.Bugs_gen %]:</td>
<td>
[% IF value.bug_count %]
<a title="Список [% terms.bugs_gen %], использующих значение
'[%- value.name FILTER html %]' атрибута
'[%- field.description FILTER html %]'"
href="buglist.cgi?[% field.name FILTER uri %]=
[%- value.name FILTER uri %]">
[%- value.bug_count FILTER html %]</a>
[% ELSE %]
Нет
[% END %]
</td>
</tr>
</table>
<h2>Подтверждение</h2>
......@@ -61,16 +59,16 @@
|| value.controlled_values_array.size
%]
<p>Значение '[% value FILTER html %]' атрибута
'[% field_descs.${field.name} FILTER html %]' не может быть удалено:</p>
<p>Значение '[% value.name FILTER html %]' атрибута
'[% field.description FILTER html %]' не может быть удалено:</p>
<ul class="warningmessages">
[% IF value.is_default %]
<li>Значение '[% value.name FILTER html %]' используется по умолчанию
для атрибута '[% field_descs.${field.name} FILTER html %]'.
для атрибута '[% field.description FILTER html %]'.
[% IF user.in_group('tweakparams') %]
Перед удалением следует <a href="editparams.cgi?section=bugfields">изменить
умолчание</a>.
Перед удалением следует <a href="editparams.cgi?section=bugfields">изменить
значение по умолчанию</a> для этого атрибута.
[% END %]
</li>
[% END %]
......@@ -81,9 +79,9 @@
[% numeral(value.bug_count,
"${terms.bug_obj}", "${terms.bugs_obj}", "${terms.bugs_obj}")
FILTER html -%].
Перед удалением следует выбрать другое значение атрибута для
<a title="Список [% terms.bugs_gen %], использующих значение '[% value FILTER html %]'
атрибута '[% field_descs.${field.name} FILTER html %]'"
Перед удалением следует выбрать другое значение атрибута для
<a title="Список [% terms.bugs_gen %], использующих значение '[%- value.name FILTER html %]'
атрибута '[%- field.description FILTER html %]'"
href="buglist.cgi?[% field.name FILTER uri %]=
[%- value.name FILTER uri %]">
этих [%+ terms.bugs_gen %]</a>
......@@ -92,7 +90,7 @@
[% IF value_count == 1 %]
<li>Значение '[% value.name FILTER html %]' является единственным допустимым для атрибута
'[%- field_descs.${field.name} FILTER html %]' и не может быть удалено.
'[%- field.description FILTER html %]' и не может быть удалено.
</li>
[% END %]
......@@ -115,7 +113,7 @@
<a href="editvalues.cgi?action=edit&field=
[%- controlled.field.name FILTER uri %]&value=
[%- controlled.name FILTER uri %]">
[% field_descs.${controlled.field.name} FILTER html %]
[% controlled.field.description FILTER html %]
([% controlled.field.name FILTER html %]):
[%+ controlled.name FILTER html %]</a><br>
[% END %]
......@@ -126,7 +124,7 @@
[% ELSE %]
<p>Удалить значение?<p>
<p>Удалить значение?</p>
<form method="post" action="editvalues.cgi">
<input type="submit" value="Да, удалить" id="delete">
......@@ -140,6 +138,6 @@
[% PROCESS admin/fieldvalues/footer.html.tmpl
no_edit_link = 1
+%]
%]
[% PROCESS global/footer.html.tmpl %]
......@@ -10,36 +10,35 @@
# field: object; the field the value is being created for
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% title = BLOCK %]
Создание значения атрибута '[% field_descs.${field.name} FILTER html %]' ([% field.name FILTER html %])
Создание значения атрибута '[% field.description FILTER html %]' ([% field.name FILTER html %])
[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
%]
<p>
Добавление нового значения для атрибута
'[% field_descs.${field.name} FILTER html %]'.
На этой странице можно добавить новое значения для атрибута
'[% field.description FILTER html %]'.
</p>
<form method="post" action="editvalues.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
<tr>
<th align="right"><label for="value">Значение:</label></th>
<th><label for="value">Значение:</label></th>
<td>
<input id="value" name="value" size="30"
maxlength="[% constants.MAX_FIELD_VALUE_SIZE FILTER none %]">
maxlength="[% constants.MAX_FIELD_VALUE_SIZE FILTER none %]" required>
</td>
</tr>
<tr>
<th align="right"><label for="sortkey">Порядок сортировки:</label></th>
<th><label for="sortkey">Порядок сортировки:</label></th>
<td><input id="sortkey" name="sortkey" size="6" maxlength="6"></td>
</tr>
[% IF field.name == "bug_status" %]
<tr>
<th align="right"><label for="is_open">Тип состояния:</label></th>
<th><label for="is_open">Тип состояния:</label></th>
<td>
<input type="radio" id="open_status" name="is_open" value="1"
checked="checked">
......@@ -51,16 +50,16 @@
<tr>
<th>&nbsp;</th>
<td>
Обратите внимание: Тип состояния может быть указан только при создании,
Обратите внимание: Тип состояния может быть указан только при создании,
изменение впоследствии запрещено.
</td>
</tr>
[% END %]
[% IF field.value_field %]
<tr>
<th align="right">
<th>
<label for="visibility_value_id">Условие отображения: атрибут
'[% field_descs.${field.value_field.name} FILTER html %]' принимает значения
'[%+ field.value_field.description FILTER html %]' принимает значения:
</label>
</th>
<td>
......@@ -76,7 +75,7 @@
</option>
[% END %]
</select>
<small>(Чтобы значение отображалось непрерывно, оставьте без выбора.)</small>
<span class="bz_info">(Чтобы значение отображалось непрерывно, оставьте без выбора.)</span>
</td>
</tr>
[% END %]
......
......@@ -11,24 +11,19 @@
# field: Bugzilla::Field; The field this value belongs to.
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS "global/field-descs.none.tmpl" %]
[% title = BLOCK %]
Изменение значения '[% value.name FILTER html %]' атрибута
'[% field_descs.${field.name} FILTER html %]' ([% field.name FILTER html %])
'[% field.description FILTER html %]' ([% field.name FILTER html %])
[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
%]
<form method="post" action="editvalues.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
<tr>
<th valign="top" align="right">
<label for="value_new">Значение атрибута:</label>
</th>
<th><label for="value_new">Значение атрибута:</label></th>
<td>
[% IF value.is_static %]
<input type="hidden" name="value_new" id="value_new"
......@@ -37,26 +32,26 @@
[% ELSE %]
<input id="value_new" name="value_new" size="20"
maxlength="[% constants.MAX_FIELD_VALUE_SIZE FILTER none %]"
value="[% value.name FILTER html %]">
value="[% value.name FILTER html %]" required>
[% END %]
</td>
</tr>
<tr>
<th align="right"><label for="sortkey">Порядок сортировки:</label></th>
<th><label for="sortkey">Порядок сортировки:</label></th>
<td><input id="sortkey" size="6" maxlength="6" name="sortkey"
value="[%- value.sortkey FILTER html %]"></td>
</tr>
[% IF field.name == "bug_status" %]
<tr>
<th align="right"><label for="is_open">Тип состояния:</label></th>
<th><label for="is_open">Тип состояния:</label></th>
<td>[% IF value.is_open %]В работе[% ELSE %]Закрыта[% END %]</td>
</tr>
[% END %]
[% IF field.value_field %]
<tr>
<th align="right">
<th>
<label for="visibility_value_id">Условие отображения: атрибут
'[% field_descs.${field.value_field.name} FILTER html %]' принимает значения
'[%+ field.value_field.description FILTER html %]' принимает значения:
</label>
</th>
<td>
......@@ -74,12 +69,12 @@
</option>
[% END %]
</select>
<small>(Чтобы значение отображалось непрерывно, оставьте без выбора.)</small>
<span class="bz_info">(Чтобы значение отображалось непрерывно, оставьте без выбора.)</span>
</td>
</tr>
[% END %]
<tr>
<th align="right"><label for="is_active">Разрешено для использования:</label></th>
<th><label for="is_active">Разрешено для использования:</label></th>
<td><input id="is_active" name="is_active" type="checkbox" value="1"
[%+ 'checked="checked"' IF value.is_active %]
[%+ 'disabled="disabled"' IF value.is_default OR value.is_static %]>
......@@ -91,8 +86,8 @@
[% IF !(value.is_default OR value.is_static) %]
<input id="defined_is_active" name="defined_is_active"
type="hidden" value="1">
[% END %]
</td>
[% END %]
</td>
</tr>
</table>
<input type="hidden" name="value" value="[% value.name FILTER html %]">
......
......@@ -18,14 +18,12 @@
# no_add_link
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
<hr>
<p>
[% UNLESS no_add_link %]
<a title="Создать значение атрибута '[% field_descs.${field.description} FILTER html %]'."
<a title="Создать значение атрибута '[% field.description FILTER html %]'."
href="editvalues.cgi?action=add&amp;field=
[%- field.name FILTER uri %]">Создать</a> новое значение.
[% END %]
......@@ -33,7 +31,7 @@
[% IF value.defined && !no_edit_link %]
Изменить значение <a
title="Изменить значение '[% value.name FILTER html %]' атрибута '
[%- field_descs.${field.name} FILTER html %]'"
[%- field.name FILTER html %]'"
href="editvalues.cgi?action=edit&amp;field=
[%- field.name FILTER uri %]&amp;value=
[%- value.name FILTER uri %]">
......@@ -43,7 +41,7 @@
[% UNLESS no_edit_other_link %]
Изменить другие значения атрибута <a
href="editvalues.cgi?field=
[%- field.name FILTER uri %]">'[% field_descs.${field.name} FILTER html %]'</a>.
[%- field.name FILTER uri %]">'[% field.description FILTER html %]'</a>.
[% END %]
......
......@@ -19,13 +19,11 @@
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS "global/field-descs.none.tmpl" %]
[% title = BLOCK %]Выберите значение атрибута '[% field_descs.${field.name} FILTER html %]'
[% title = BLOCK %]Выберите значение атрибута '[% field.description FILTER html %]'
([% field.name FILTER html %])[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
%]
[% edit_contentlink = BLOCK %]editvalues.cgi?action=edit&amp;field=
......@@ -37,7 +35,7 @@
[% columns = [
{
name => "name"
heading => "Изменить..."
heading => "Изменить значение..."
contentlink => edit_contentlink
},
{
......
......@@ -15,10 +15,9 @@
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
title = "Выберите атрибут"
style_urls = ['skins/standard/admin.css']
%]
[% columns = [
......
......@@ -6,13 +6,12 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]Подтвердите удаление вида согласования '[% flag_type.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
title = title
doc_section = "flags-overview.html#flags-delete"
style_urls = ['skins/standard/admin.css']
doc_section = "administering/flags.html#deleting-a-flag"
%]
<p>
......@@ -26,31 +25,22 @@
вида [% flag_type.name FILTER html %].
Если вы удалите этот вид, соответствующие запросы тоже будут удалены.
[% END %]
Вместо удаления вида вы можете
Вместо удаления вида вы можете
<a href="editflagtypes.cgi?action=deactivate&amp;id=[% flag_type.id %]&amp;token=
[%- token FILTER html %]">запретить его</a>.
В этом случае согласования этого типа останутся в базе данных, но не будут
отображаться на экране.
</p>
<table>
<tr>
<td colspan="2">
Вы в самом деле хотите удалить этот вид согласования?
</td>
</tr>
<tr>
<td>
<a href="editflagtypes.cgi?action=delete&amp;id=[% flag_type.id %]&amp;token=
[%- token FILTER html %]">Да, удалить
</a>
</td>
<td align="right">
<a href="editflagtypes.cgi">
Нет, не удалять
</a>
</td>
</tr>
</table>
<p class="confirmation">
Вы в самом деле хотите удалить этот вид согласования?
</p>
<p>
<a href="editflagtypes.cgi?action=delete&amp;id=[% flag_type.id %]&amp;token=
[%- token FILTER html %]">Да, удалить</a> -
<a href="editflagtypes.cgi">Нет, не удалять</a>
</p>
[% PROCESS global/footer.html.tmpl %]
......@@ -6,26 +6,19 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS "global/js-products.html.tmpl" %]
[% PROCESS global/header.html.tmpl
title = 'Настройка видов согласования'
style = "
table#flag_types_bugs tr th,
table#flag_types_attachments tr th { text-align: left; }
.inactive { color: #787878; }
.multiplicable { display: block; }
"
onload="var f = document.flagtype_form; selectProduct(f.product, f.component, null, null, '__All__');"
style_urls = ['skins/standard/admin.css']
onload="var f = document.flagtype_form; selectProduct(f.product, f.component, null, null, '__Все__');"
javascript_urls=["js/productform.js"]
doc_section = "flags-overview.html#flag-types"
doc_section = "administering/flags.html"
%]
<p>
Согласования — это пометки, определяющие одобрено или отклонено некоторое
состояние для [% terms.bug_gen %] или приложения. Согласования видны
состояние для [% terms.bug_gen %] или приложения. Согласования видны
как пометки ("+" для одобренных, "-" для отклоненных, и "?" для запрошенных)
против названия вида.
</p>
......@@ -33,7 +26,7 @@
<p>
Например, вы можете описать согласование "review" для пользователей, которые
запрашивают инспекцию предлагаемых изменений. Когда автор запросит инспекцию,
приложение будет помечено "review?". Когда рецензент изучит изменения,
приложение будет помечено "review?". Когда рецензент изучит изменения,
пометка изменится на "review+" либо "review-" в зависимости от принятого решения.
</p>
......@@ -44,38 +37,36 @@
</p>
<form id="flagtype_form" name="flagtype_form" action="editflagtypes.cgi" method="get">
<table>
<tr>
<th><label for="product">Продукт:</label></th>
<td>
<select name="product" onchange="selectProduct(this, this.form.component, null, null, '__Все__');">
<option value="">__Все__</option>
[% FOREACH prod = products %]
<option value="[% prod.name FILTER html %]"
[% " selected" IF selected_product == prod.name %]>
[% prod.name FILTER html %]</option>
[% END %]
</select>
</td>
<th><label for="component">Компонент:</label></th>
<td>
<select name="component">
<option value="">__Все__</option>
[% FOREACH comp = components %]
<option value="[% comp FILTER html %]"
[% " selected" IF selected_component == comp %]>
[% comp FILTER html %]</option>
[% END %]
</select>
</td>
<td>
<input type="checkbox" id="show_flag_counts" name="show_flag_counts" value="1"
[%+ 'checked="checked"' IF show_flag_counts %]>
<label for="show_flag_counts">Показать статистику согласований</label>
</td>
<td><input type="submit" id="submit" value="Выбрать"></td>
</tr>
</table>
<div class="inline">
<label for="product">Продукт:</label>
[% INCLUDE "global/product-select.html.tmpl"
id => "product"
name => "product"
add => "__Все__"
onchange => "selectProduct(this, this.form.component, null, null, '__Все__');"
products => products
%]
</div>
<div class="inline">
<label for="component">Компонент:</label>
<select name="component">
<option value="">__Все__</option>
[% FOREACH comp = components %]
<option value="[% comp FILTER html %]"
[%+ 'selected="selected"' IF selected_component == comp %]>
[%- comp FILTER html %]</option>
[% END %]
</select>
</div>
<div class="inline">
<input type="checkbox" id="show_flag_counts" name="show_flag_counts" value="1"
[%+ 'checked="checked"' IF show_flag_counts %]>
<label for="show_flag_counts">Показать счетчик согласований</label>
</div>
<input type="submit" id="submit" value="Показать">
</form>
<h3>Виды согласований для [% terms.bugs_gen %]</h3>
......@@ -98,10 +89,10 @@
[% BLOCK display_flag_types %]
<table id="flag_types_[% types_id FILTER html %]" cellspacing="0" cellpadding="4" border="1">
<table id="flag_types_[% types_id FILTER html %]">
<tr>
<th>Изменить имя ...</th>
<tr class="column_header">
<th>Изменить имя...</th>
<th>Описание</th>
<th>Порядок сортировки</th>
<th>Параметры</th>
......@@ -117,10 +108,12 @@
[% FOREACH type = types %]
<tr class="[% IF type.is_active %]разрешено[% ELSE %]запрещено[% END %]">
<td><a href="editflagtypes.cgi?action=edit&amp;id=[% type.id %]">[% type.name FILTER html FILTER no_break %]</a></td>
<tr class="[% IF type.is_active %]active[% ELSE %]inactive[% END %]">
<td class="nowrap">
<a href="editflagtypes.cgi?action=edit&amp;id=[% type.id %]">[% type.name FILTER html %]</a>
</td>
<td>[% type.description FILTER html %]</td>
<td align="right">[% type.sortkey FILTER html %]</td>
<td class="right">[% type.sortkey FILTER html %]</td>
<td>
[% IF type.is_requestable %]
<span class="requestable">по запросу</span>
......@@ -150,8 +143,8 @@
</td>
[% END %]
<td>
<a href="editflagtypes.cgi?action=copy&amp;id=[% type.id %]">Размножить</a>
| <a href="editflagtypes.cgi?action=confirmdelete&amp;id=[% type.id %]">Удалить</a>
<a href="editflagtypes.cgi?action=copy&amp;id=[% type.id %]">Copy</a>
| <a href="editflagtypes.cgi?action=confirmdelete&amp;id=[% type.id %]">Delete</a>
</td>
</tr>
......
......@@ -19,7 +19,7 @@
[% PROCESS global/header.html.tmpl
title = title
doc_section = "groups.html"
doc_section = "administering/groups.html"
%]
[% IF regexp %]
......@@ -27,8 +27,8 @@
чьи учетные записи соответствуют шаблону:
'[% regexp FILTER html %]'</p>
[% ELSE %]
<p>Подтвердите удаление из группы '[% group.name FILTER html %]
всех явно заданных пользователей.'</p>
<p>Подтвердите удаление из группы '[% group.name FILTER html %]'
всех явно заданных пользователей.</p>
[% END %]
<p>Обычно эти функции требуются только при настройке групп, созданных
......
......@@ -13,30 +13,35 @@
[% PROCESS global/header.html.tmpl
title = "Добавление группы"
subheader = "Эта страница позволит вам определить новую группу пользователей."
doc_section = "groups.html#create-groups"
style_urls = ['skins/standard/admin.css']
doc_section = "administering/groups.html#creating-groups"
%]
<form method="post" action="editgroups.cgi">
<table border="1" cellpadding="4" cellspacing="0"><tr>
<th>Новое имя</th>
<th>Новое описание</th>
<th>Новый шаблон пользователя</th>
<th>Использовать для [% terms.bugs_gen %]</th>
</tr><tr>
<td><input size="20" name="name"></td>
<td><input size="40" name="desc"></td>
<td><input size="30" name="regexp"></td>
<td><input type="checkbox" name="isactive" value="1" checked></td>
</tr>
<tr>
<th>Значок (URL):</th>
<td colspan="3"><input type="text" size="70" maxlength="255" id="icon_url" name="icon_url"></td>
</tr>
[% Hook.process('field') %]
<table id="admin_table_edit">
<tr>
<th>Имя группы:</th>
<td><input size="60" maxlength="255" name="name" required></td>
</tr>
<tr>
<th>Описание:</th>
<td><input size="60" name="desc" required></td>
</tr>
<tr>
<th>Шаблон пользователей:</th>
<td><input size="60" name="regexp"></td>
</tr>
<tr>
<th>URL значка:</th>
<td><input type="text" size="60" id="icon_url" name="icon_url"></td>
</tr>
<tr>
<th>Использовать для [% terms.bugs_gen %]:</th>
<td><input type="checkbox" name="isactive" value="1" checked></td>
</tr>
[% Hook.process('field') %]
</table>
<hr>
<input type="checkbox" id="insertnew" name="insertnew" value="1"
[% IF Param("makeproductgroups") %] checked[% END %]>
<label for="insertnew">Добавить новую группу во все имеющиеся продукты.</label>
......@@ -46,36 +51,38 @@
<input type="hidden" name="token" value="[% token FILTER html %]">
</form>
<p><b>Имя</b> это то, что использует функция B<!-- blah -->ugzilla->user->in_group() в специальных
файлах cgi, которые вы пишете для использования данной группой. Оно также может
<hr>
<p><b>Имя группы</b> это то, что использует функция [% terms.Bugzilla %]->user->in_group()
в специальных файлах cgi, которые вы пишете для использования данной группой. Оно также может
использоваться людьми, регистрирующими [% terms.bugs_acc %]
по электронной почте, чтобы ограничить доступ к [% terms.bug_obj %]
некоторым набором групп.</p>
<p><b>Описание</b> это то, что будет показано при редактировании [% terms.bugs_gen %]
членам группы. Они должны определить, будет ли [% terms.bug %]
членам группы. Они должны определить, будет ли [% terms.bug %]
доступна всем или только членам этой группы.</p>
<p>Флажок <b>Использовать для [% terms.bugs_gen %]</b> определяет,
может ли группа использоваться для управления доступом к [% terms.bugs_dat %].
Если его снять, пользователи впредь не смогут добавить [% terms.bugs_acc %]
к этой группе, хотя уже имеющиеся в группе [% terms.bugs %], будут принадлежать
ей. Это менее радикальный способ остановить рост группы, нежели
удаление группы. <b>Обратите внимание: Если вы создаете группу, вы, вероятно,
хотите, чтобы она могла быть использована для работы с [% terms.bugs_abl %].
В этом случае вы должны оставить флажок включенным.</b></p>
<p><b>Шаблон пользователя</b> необязателен, если он указан,
<p><b>Шаблон пользователей</b> необязателен, если он указан,
членство в этой группе автоматически предоставлено любому, чей адрес
электронной почты соответствует указанному шаблону.</p>
<p>
<b>Значок</b> — необязательный параметр, адрес URL изображения, используемого
для символического представления группы. Адрес URL может быть относительным
(от базового URL этого экземпляра) или абсолютным. Значок отображается
для символического представления группы. Адрес URL может быть относительным
(от базового URL этой [% terms.Bugzilla %]) или абсолютным. Значок отображается
в комментариях к [% terms.bugs_dat %] рядом с именем автора.
</p>
<p>Флажок <b>Использовать для [% terms.bugs_gen %]</b> определяет,
может ли группа использоваться для управления доступом к [% terms.bugs_dat %].
Если его снять, пользователи впредь не смогут добавить [% terms.bugs_acc %]
к этой группе, хотя уже имеющиеся в группе [% terms.bugs %], будут принадлежать
ей. Это менее радикальный способ остановить рост группы, нежели ее
удаление. <b>Обратите внимание: Если вы создаете группу, вы, вероятно,
хотите, чтобы она могла быть использована для работы с [% terms.bugs_abl %].
В этом случае вы должны оставить флажок включенным.</b></p>
[% IF Param("makeproductgroups") %]
<p>По умолчанию новая группа ассоциируется с имеющимися продуктами.
Отмена опции "Добавлять новую группу во все имеющиеся продукты" предотвратит
......@@ -88,8 +95,6 @@
тогда, когда будет добавлена к продукту.</p>
[% END %]
<p>Вернуться к <a href="./">в начало</a>
или к <a href="editgroups.cgi">списку групп</a>.
<p>Вернуться к <a href="editgroups.cgi">списку групп</a>.</p>
[% PROCESS global/footer.html.tmpl %]
......@@ -13,39 +13,46 @@
# group.
#%]
[% title = BLOCK %]Delete group '[% group.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
title = "Удаление группы"
doc_section = "groups.html"
title = title
style_urls = ['skins/standard/admin.css']
doc_section = "administering/groups.html"
%]
<table border="1">
<tr>
<th>ID</th>
<th>Имя</th>
<th>Описание</th>
<table id="admin_table">
<tr class="column_header">
<th>Field</th>
<th>Value</th>
</tr>
<tr>
<td>Id</td>
<td>[% group.id FILTER html %]</td>
</tr>
<tr>
<td>Name</td>
<td>[% group.name FILTER html %]</td>
</tr>
<tr>
<td>Description</td>
<td>[% group.description FILTER html_light %]</td>
</tr>
</table>
<form method="post" action="editgroups.cgi">
[% IF group.members_non_inherited.size %]
<p><b>В состав этой группы напрямую включены
[% group.members_non_inherited.size FILTER html %] пользователей.
Непустая группа не подлежит удалению.</b>
<p><b>[% group.members_non_inherited.size FILTER html %] users belong
directly to this group. You cannot delete this group while there are
users in it.</b>
<br><a href="editusers.cgi?action=list&amp;groupid=
[%- group.id FILTER uri %]&amp;grouprestrict=1">Показать
список членов группы</a> - <label><input type="checkbox" name="removeusers">Исключить
всех автоматически.</label></p>
[%- group.id FILTER uri %]&amp;grouprestrict=1">Show
me which users</a> - <label><input type="checkbox" name="removeusers">Remove
all users from this group for me.</label></p>
[% END %]
[% IF group.granted_by_direct(constants.GROUP_MEMBERSHIP).size %]
<p><b>Члены этой группы унаследовали членство в следующих группах:</b></p>
<p><b>Members of this group inherit membership in the following groups:</b></p>
<ul>
[% FOREACH grantor = group.granted_by_direct(constants.GROUP_MEMBERSHIP) %]
<li>[% grantor.name FILTER html %]</li>
......@@ -54,23 +61,24 @@
[% END %]
[% IF group.bugs.size %]
<p><b>Зарегистрированы [% group.bugs.size FILTER html %] [%+ terms.bug %], доступ
к которым дан только членам этой группы reports. Группа, используемая для разграничения
доступа к [% terms.bugs_dat %] не подлежит удалению.</b>
<p><b>[% group.bugs.size FILTER html %] [%+ terms.bug %] reports are
visible only to this group. You cannot delete this group while any
[%+ terms.bugs %] are using it.</b>
<br><a href="buglist.cgi?field0-0-0=bug_group&amp;type0-0-0=equals&amp;value0-0-0=
[%- group.name FILTER uri %]">Показать
список [% terms.bugs_gen %]</a> -
<label><input type="checkbox" name="removebugs">Удалить
все связи с этой группой автоматически.</label></p>
<p><b>Внимание:</b> Использование этой функции может сделать некоторые [% terms.bugs %]
общедоступными. <b>Настоятельно рекомендуется</b> изучить все принадлежащие
группе [% terms.bugs %] и проверить права доступа.</p>
[%- group.name FILTER uri %]">Show me
which [% terms.bugs %]</a> -
<label><input type="checkbox" name="removebugs">Remove
all [% terms.bugs %] from this group restriction for me.</label></p>
<p><b>NOTE:</b> It's quite possible to make confidential [% terms.bugs %]
public by checking this box. It is <B>strongly</B> suggested
that you review the [% terms.bugs %] in this group before checking
the box.</p>
[% END %]
[% IF group.products.size %]
<p><b>Эта группа сопоставлена со следующими продуктами:</b></p>
<p><b>This group is tied to the following products:</b></p>
[% SET any_hidden = 0 %]
<ul>
[% FOREACH data = group.products %]
......@@ -106,55 +114,68 @@
[%- data.product.name FILTER html %]</a>
([% active.join(', ') FILTER html %])
[% IF hidden %]
<strong>ПРЕДУПРЕЖДЕНИЕ: Этот продукт в данное время скрыт.
Удаление этой группы сделает этот продукт общедоступным,
если он не подпадает под другую группу.
<strong>WARNING: This product is currently hidden.
Deleting this group could make this product publicly visible
if no other group applies.
</strong>
[% END %]</li>
[% END %]
</ul>
<p><label><input type="checkbox" name="unbind">Удалить группу и удалить
эти права доступа.</label></p>
<p><label><input type="checkbox" name="unbind">Delete this group anyway,
and remove these controls.</label></p>
[% END %]
[% IF group.flag_types.size %]
<p><b>Эта группа используется при определении прав на согласование.
Группа, используемая для контроля согласований, не подлежит удалению.</b>
<p><b>This group restricts who can make changes to flags of certain types.
You cannot delete this group while there are flag types using it.</b>
<br><a href="editflagtypes.cgi?action=list&amp;group=
[%- group.id FILTER uri %]">Показать
список видов согласований</a> -
<label><input type="checkbox" name="removeflags">Удалить
соответствующие ограничения для согласований.</label></p>
[%- group.id FILTER uri %]">Show
me which types</a> -
<label><input type="checkbox" name="removeflags">Remove all
flag types from this group for me.</label></p>
[% END %]
[% IF shared_queries %]
<p>
<b>Для этой группы опубликовано условий отбора: [% shared_queries %]</b>
Удаление группы приведет к тому, что эти условия будут доступны
только их владельцам.
<b>There
[% IF shared_queries > 1 %]
are [% shared_queries %] saved searches
[% ELSE %]
is a saved search
[% END %]
being shared with this group.</b>
If you delete this group,
[% IF shared_queries > 1 %]
these saved searches
[% ELSE %]
this saved search
[% END %]
will fall back to being private again.
</p>
[% END %]
<h2>Подтверждение</h2>
<h2>Confirmation</h2>
<p>Вы действительно хотите удалить группу.?</p>
<p class="confirmation">
Do you really want to delete this group?
</p>
[% IF group.users.size || group.bugs.size || group.products.size
|| group.flags.size
%]
<p><b>Вы должны отметить все флаги на этой странице или исправить описанные
проблемы вручную до начала удаления.</b></p>
<p><b>You must check all of the above boxes or correct the
indicated problems first before you can proceed.</b></p>
[% END %]
<p>
<input type="submit" id="delete" value="Да, удалить">
<input type="submit" id="delete" value="Yes, delete">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="group" value="[% group.id FILTER html %]">
<input type="hidden" name="token" value="[% token FILTER html %]">
</p>
</form>
Вернуться к <a href="editgroups.cgi">списку групп</a>.
Go back to the <a href="editgroups.cgi">group list</a>.
[% PROCESS global/footer.html.tmpl %]
......@@ -19,7 +19,8 @@
[% PROCESS global/header.html.tmpl
title = "Группы пользователей"
subheader = "Позволяет настраивать группы для включения пользователей."
doc_section = "groups.html"
style_urls = ['skins/standard/admin.css']
doc_section = "administering/groups.html"
%]
[% edit_contentlink = "editgroups.cgi?action=changeform&amp;group=%%id%%" %]
......@@ -35,22 +36,21 @@
allow_html_content => 1
}
{name => 'userregexp'
heading => 'Шаблон пользователя'
heading => 'Шаблон пользователей'
}
{name => 'is_active_bug_group'
heading => "Использовать для $terms.bugs_gen"
align => 'center'
class => 'center'
}
{name => 'type'
heading => 'Тип'
align => 'center'
class => 'center'
}
{name => 'action'
heading => 'Действие'
}
]
%]
[%# FIXME-ru: переводы описаний стандартных групп %]
[% overrides.is_active_bug_group = {
'is_active_bug_group' => {
......@@ -75,13 +75,14 @@
}
%]
[% FOREACH group IN ["chartgroup", "insidergroup", "timetrackinggroup", "querysharegroup"] %]
[% FOREACH group IN ["chartgroup", "comment_taggers_group", "debug_group",
"insidergroup", "querysharegroup", "timetrackinggroup"] %]
[% special_group = Param(group) %]
[% IF special_group %]
[% overrides.action.name.$special_group = {
override_content => 1
content => "(используется в параметре '$group')"
content => "используется как '$group'"
}
%]
[% END %]
......@@ -117,34 +118,32 @@
<p><a href="editgroups.cgi?action=add">Создать группу</a></p>
<p>
<b>Имя</b> — это то, что использует функция B<!-- blah -->ugzilla->user->in_group() в
<b>Имя</b> — это то, что использует функция [% terms.Bugzilla %]->user->in_group() в
специальных файлах cgi, которые вы пишете для использования данной
группой. Оно также может использоваться пользователями, регистрирующими
[% terms.bugs_acc %] по электронной почте, чтобы ограничить доступ к
[% terms.bug_obj %] некоторым набором групп. Имя не может содержать
пробелов.
[% terms.bug_obj %] некоторым набором групп. Имя не может содержать пробелов.
</p>
<p>
<b>Описание</b> отображается в форме редактирования
[% terms.bugs_gen %] членам группы. Они должны определить, будет ли
[% terms.bug %] доступна всем или только членам этой группы.
<p><b>Описание</b> это то, что будет показано при редактировании [% terms.bugs_gen %]
членам группы. Они должны определить, будет ли [% terms.bug %]
доступна всем или только членам этой группы.</p>
</p>
<p>
<b>Шаблон пользователя</b> необязателен, если он указан, членство в
этой группе автоматически предоставлено любому, чей адрес электронной
почты соответствует указанному шаблону. Синтаксис шаблона соответствует
<b>Шаблон пользователей</b> необязателен, если он указан,
членство в этой группе автоматически предоставлено любому, чей адрес
электронной почты соответствует указанному шаблону. Синтаксис шаблона соответствует
регулярному выражению Perl. Пример: '@mycompany\.com$'
</p>
<p>
Флажок <b>Использовать для [% terms.bugs_gen %]</b> определяет,
может ли группа использоваться для управления доступом к
[% terms.bugs_dat %]. Если его снять, пользователи впредь не смогут
добавить [% terms.bugs_acc %] к этой группе, хотя уже имеющиеся в
группе [% terms.bugs %] будут принадлежать ей. Это менее радикальный
способ остановить рост группы, нежели ее удаление. Кроме того,
может ли группа использоваться для управления доступом к [% terms.bugs_dat %].
Если его снять, пользователи впредь не смогут добавить [% terms.bugs_acc %]
к этой группе, хотя уже имеющиеся в группе [% terms.bugs %], будут принадлежать
ей. Это менее радикальный способ остановить рост группы, нежели ее удаление. Кроме того,
ненужные группы не загромождают форму редактирования [% terms.bugs_gen %].
</p>
......
......@@ -12,9 +12,12 @@
[% PROCESS global/header.html.tmpl
title = "Удаление ключевого слова"
style_urls = ['skins/standard/admin.css']
%]
<p>
<h2>Подтверждение</h2>
<p class="confirmation">
[% IF keyword.bug_count > 0 %]
[% numeral(keyword.bug_count,
"Найдена ${keyword.bug_count} ${terms.bug}",
......@@ -22,7 +25,9 @@
"Найдено ${keyword.bug_count} ${terms.bugs_gen}")
FILTER html %] со ссылкой на это ключевое слово.
[% END %]
</p>
<p>
Вы <b>уверены</b>, что хотите удалить ключевое слово
<code>[% keyword.name FILTER html %]</code>?
</p>
......@@ -31,8 +36,7 @@
<input type="hidden" name="id" value="[% keyword.id FILTER html %]">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="token" value="[% token FILTER html %]">
<input type="submit" id="delete"
value="Да, удалить это ключевое слово">
<input type="submit" id="delete" value="Да, удалить">
</form>
<p><a href="editkeywords.cgi">Редактировать другие ключевые слова</a>.</p>
......
......@@ -9,37 +9,41 @@
[%# INTERFACE:
# none
#%]
[% PROCESS global/header.html.tmpl
title = "Добавьте ключевое слово"
subheader = "Эта страница позволит вам добавить новое ключевое слово."
title = "Добавление ключевых слов"
subheader = "Эта страница позволяет добавлять новые ключевые слова."
style_urls = ['skins/standard/admin.css']
%]
<form method="post" action="editkeywords.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
<tr>
<th align="right">Имя:</th>
<td><input size="64" maxlength="64" name="name" value=""></td>
<th>Имя:</th>
<td><input size="64" maxlength="64" name="name" value="" required></td>
</tr>
<tr>
<th align="right">Описание:</th>
<th>Описание:</th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = 'description'
minrows = 4
cols = 64
wrap = 'virtual'
mandatory = 1
%]
</td>
</tr>
</table>
<hr>
<input type="hidden" name="id" value="-1">
<input type="submit" id="create" value="Добавить">
<input type="hidden" name="action" value="new">
<input type="hidden" name="token" value="[% token FILTER html %]">
</form>
<hr>
<p><a href="editkeywords.cgi">Редактировать другие ключевые слова</a>.</p>
[% PROCESS global/footer.html.tmpl %]
......@@ -10,21 +10,20 @@
# keyword: A Bugzilla::Keyword object.
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
title = "Изменение ключевого слова"
style_urls = ['skins/standard/admin.css']
%]
<form method="post" action="editkeywords.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
<tr>
<th align="right">Имя:</th>
<th>Имя:</th>
<td><input size="64" maxlength="64" name="name"
value="[% keyword.name FILTER html %]"></td>
value="[% keyword.name FILTER html %]" required></td>
</tr>
<tr>
<th align="right">Описание:</th>
<th>Описание:</th>
<td>
[% INCLUDE global/textarea.html.tmpl
name = 'description'
......@@ -32,11 +31,12 @@
cols = 64
wrap = 'virtual'
defaultcontent = keyword.description
mandatory = 1
%]
</td>
</tr>
<tr>
<th align="right">[% terms.Bugs %]:</th>
<th>[% terms.Bugs %]:</th>
<td>
[% IF keyword.bug_count > 0 %]
<a href="buglist.cgi?keywords=[% keyword.name FILTER uri %]">
......
......@@ -14,10 +14,9 @@
# - bug_count: number. The number of bugs with the keyword.
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
title = "Выберите ключевое слово"
style_urls = ['skins/standard/admin.css']
%]
[% columns = [
......@@ -34,7 +33,7 @@
{
name => "bug_count"
heading => "$terms.Bugs_gen"
align => "right"
class => "right"
contentlink => "buglist.cgi?keywords=%%name%%"
},
{
......
......@@ -21,33 +21,33 @@
style_urls = ['skins/standard/admin.css']
%]
<table border="1" cellpadding="4" cellspacing="0">
<tr bgcolor="#6666FF">
<th valign="top" align="left">Поле</th>
<th valign="top" align="left">Значение</th>
</tr>
<tr>
<td valign="top">Название плана:</td>
<td valign="top">[% milestone.name FILTER html %]</td>
</tr>
<tr>
<td valign="top">Продукт:</td>
<td valign="top">[% product.name FILTER html %]</td>
</tr>
<tr>
<td valign="top">[% terms.Bugs %]:</td>
<td valign="top">
[% IF milestone.bug_count %]
<a title="Список [% terms.bugs_gen %] запланированных в '
[% milestone.name FILTER html %]'"
href="buglist.cgi?target_milestone=[% milestone.name FILTER uri %]&amp;product=
[%- product.name FILTER uri %]">
<table id="admin_table">
<tr class="column_header">
<th>Поле</th>
<th>Значение</th>
</tr>
<tr>
<td>Название плана:</td>
<td>[% milestone.name FILTER html %]</td>
</tr>
<tr>
<td>Продукт:</td>
<td>[% product.name FILTER html %]</td>
</tr>
<tr>
<td>[% terms.Bugs %]</td>
<td>
[% IF milestone.bug_count %]
<a title="Список [% terms.bugs_gen %] запланированных в
'[%- milestone.name FILTER html %]'"
href="buglist.cgi?target_milestone=[% milestone.name FILTER uri %]&amp;product=
[%- product.name FILTER uri %]">
[% milestone.bug_count FILTER none %]</a>
[% ELSE %]
нет
[% END %]
</td>
</tr>
[% ELSE %]
Нет
[% END %]
</td>
</tr>
</table>
<h2>Подтверждение</h2>
......@@ -58,7 +58,7 @@
Данное значение используется в [% milestone.bug_count FILTER none %]
[% numeral(milestone.bug_count,
"${terms.bug_obj}", "${terms.bugs_obj}", "${terms.bugs_obj}")
FILTER html -%]!
FILTER html -%]!
Удаление значения плана приведет к переносу <b>ВСЕХ</b>
[% terms.bugs_obj %] на
[% product.default_milestone FILTER html %], план по умолчанию
......
......@@ -11,26 +11,25 @@
# which the milestone belongs.
#%]
[% title = BLOCK %]Создание плана продукта '[% product.name FILTER html %]'[% END %]
[% title = BLOCK %]Создание плана для продукта '[% product.name FILTER html %]'[% END %]
[% subheader = BLOCK %]Страница добавления нового плана для продукта
'[% product.name FILTER html %]'.[% END %]
[% PROCESS global/header.html.tmpl
title = title
subheader = subheader
onload = "document.forms['f'].milestone.focus()"
style_urls = ['skins/standard/admin.css']
%]
<form name="f" method="post" action="editmilestones.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
<tr>
<th align="right"><label for="milestone">Название плана:</label></th>
<th><label for="milestone">Название плана:</label></th>
<td><input id="milestone" size="64" maxlength="64" name="milestone"
value=""></td>
autofocus required></td>
</tr>
<tr>
<th align="right"><label for="sortkey">Порядок сортировки:</label></th>
<td><input id="sortkey" size="20" maxlength="20" name="sortkey"
value=""></td>
<th><label for="sortkey">Порядок сортировки:</label></th>
<td><input id="sortkey" size="20" maxlength="20" name="sortkey"></td>
</tr>
</table>
<input type="submit" id="create" value="Создать">
......
......@@ -13,30 +13,28 @@
# milestone the user wants to edit.
#%]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]Изменение плана '[% milestone.name FILTER html %]' продукта '
[% title = BLOCK %]Изменение плана '[% milestone.name FILTER html %]' продукта'
[%- product.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
onload = "document.forms['f'].milestone.select()"
%]
<form name="f" method="post" action="editmilestones.cgi">
<table border="0" cellpadding="4" cellspacing="0">
<table id="admin_table_edit">
<tr>
<th class="field_label"><label for="milestone">Название плана:</label></th>
<th><label for="milestone">Название плана:</label></th>
<td><input id="milestone" size="64" maxlength="64" name="milestone" value="
[%- milestone.name FILTER html %]"></td>
[%- milestone.name FILTER html %]" required></td>
</tr>
<tr>
<th class="field_label"><label for="sortkey">Порядок сортировки:</label></th>
<th><label for="sortkey">Порядок сортировки:</label></th>
<td><input id="sortkey" size="20" maxlength="20" name="sortkey" value="
[%- milestone.sortkey FILTER html %]"></td>
</tr>
<tr>
<th class="field_label"><label for="isactive">Доступен для [% terms.Bugs_gen %]:</label></th>
<th><label for="isactive">Доступен для [% terms.Bugs_gen %]:</label></th>
<td><input id="isactive" name="isactive" type="checkbox" value="1"
[% 'checked="checked"' IF milestone.isactive %]></td>
</tr>
......
......@@ -33,7 +33,7 @@
[% IF milestone.name && !no_edit_milestone_link %]
Изменить план <a
title="Изменить план '[% milestone.name FILTER html %]' продукта '
title="Изменить план '[% milestone.name FILTER html %]' продукта'
[%- product.name FILTER html %]'"
href="editmilestones.cgi?action=edit&amp;product=
[%- product.name FILTER uri %]&amp;milestone=
......
......@@ -15,12 +15,11 @@
[% USE Bugzilla %]
[% cgi = Bugzilla.cgi %]
[% PROCESS global/variables.none.tmpl %]
[% title = BLOCK %]Выберите план для продукта
'[% product.name FILTER html %]'[% END %]
[% PROCESS global/header.html.tmpl
title = title
style_urls = ['skins/standard/admin.css']
%]
[% edit_contentlink = BLOCK %]editmilestones.cgi?action=edit&amp;product=
......@@ -44,7 +43,7 @@
{
name => "isactive"
heading => "Активен"
yesno_field => 1
yesno_field => 1
}
]
%]
......@@ -54,7 +53,7 @@
[% columns.push({
name => "bug_count"
heading => "$terms.Bugs_gen"
align => "right"
class => "right"
contentlink => bug_count_contentlink
})
%]
......
......@@ -11,10 +11,9 @@
# showbugcounts: if defined, then bug counts should be included in the table
#%]
[% PROCESS global/variables.none.tmpl %]
[% PROCESS global/header.html.tmpl
title = "Выберите продукт"
style_urls = ['skins/standard/admin.css']
%]
[% columns = [
......@@ -36,7 +35,7 @@
[% columns.push({
name => 'bug_count'
heading => "$terms.Bugs_gen"
align => "right"
class => "right"
contentlink => "buglist.cgi?product=%%name%%"
})
%]
......
......@@ -14,7 +14,7 @@
allowbugdeletion => "При редактировании продуктов и компонентов разрешить удаление " _
"связанных $terms.bugs_gen при удалении продукта (компонента). " _
"Поскольку функция весьма опасная, ее необходимо включить " _
"явным образом перед попыткой удаления .",
"явным образом перед попыткой удаления.",
allowemailchange => "Разрешить изменение адреса электронной почты через страницу настроек. " _
"Изменение адреса сопровождается проверкой обоих адресов, поэтому " _
......@@ -23,5 +23,8 @@
allowuserdeletion => "Разрешить удаление учетных записей пользователей. " _
"$terms.Bugzilla выдает предупреждения о потенциальных нарушениях " _
"целостности базы данных, но в любом случае функция является опасной. " _
"Поэтому ее требуется включать явным образом." }
"Поэтому ее требуется включать явным образом.",
last_visit_keep_days => "Этот параметр определяет, сколько дней $terms.Bugzilla будет " _
"хранить данные о просмотрах пользователями конкретных ${terms.bugs_gen}."}
%]
......@@ -14,14 +14,14 @@
[% sts_desc = BLOCK %]
Включает отправку заголовка
<a href="http://en.wikipedia.org/wiki/Strict_Transport_Security">Strict-Transport-Security</a>
при отправке HTTP запросов по SSL-соединениям. Это повышает защищённость
ваших SSL-соединений заставляя браузер всегда соединяться с вашим доменом с использованием
SSL и никогда не принимать некорректный сертификат.
Однако, его следует использовать только если вы включили параметр <code>ssl_redirect</code>,
[% terms.Bugzilla %] является единственной службой работающей в этом домене
(т.е., ваш <code>urlbase</code> это что-то вроде
<code>http://bugzilla.example.com/</code>) и вы планируете никогда не отключать
параметр <code>ssl_redirect</code>.
header along with HTTP responses on SSL connections. This adds greater
security to your SSL connections by forcing the browser to always
access your domain over SSL and never accept an invalid certificate.
However, it should only be used if you have the <code>ssl_redirect</code>
parameter turned on, Bugzilla is the only thing running
on its domain (i.e., your <code>urlbase</code> is something like
<code>http://bugzilla.example.com/</code>), and you never plan to disable
the <code>ssl_redirect</code> parameter.
<ul>
<li>
off - Не отправлять с запросами заголовок Strict-Transport-Security.
......@@ -31,36 +31,38 @@
но поддерживать его только для текущего домена.
</li>
<li>
include_subdomains - Отправлять заголовок Strict-Transport-Security вместе с
флагом <code>includeSubDomains</code>, что применяет политику безопасности к
всем субдоменам. Это особенно полезно в комбинации с <code>attachment_base</code>
который существует как субдомен в главном домене [% terms.Bugzilla %].
include_subdomains - Send the Strict-Transport-Security header along
with the <code>includeSubDomains</code> flag, which will apply the
security change to all subdomains. This is especially useful when
combined with an <code>attachment_base</code> that exists as (a)
subdomain(s) under the main Bugzilla domain.
</li>
</ul>
[% END %]
[% param_descs = {
cookiedomain =>
"Для сайта с адресом 'www.foo.com' установка значения"
_ " '.foo.com' даёт доступ к cookies $terms.Bugzilla"
_ " также сайту 'bar.foo.com'. Используется в случаях когда доступ"
_ " к серверу возможен под разными именами и требуется сохранить"
_ " значения $terms.Bugzilla cookie.",
"If your website is at 'www.foo.com', setting this to"
_ " '.foo.com' will also allow 'bar.foo.com' to access"
_ " Bugzilla cookies. This is useful if you have more than"
_ " one hostname pointing at the same web server, and you"
_ " want them to share the Bugzilla cookie.",
inbound_proxies =>
"Когда трафик, входящий в $terms.Bugzilla проходит через прокси,"
_ " $terms.Bugzilla думает, что IP-адрес каждого пользователя"
_ " равен IP-адресу прокси. Если вы введете в это поле список IP-адресов,"
_ " разделённых запятыми, то $terms.Bugzilla будет доверять любому"
_ " заголовку <code>X-Forwarded-For</code> отправленному с этих IP, и"
_ " использовать значение этого заголовка в качестве IP-адрес конечного пользователя.",
"When inbound traffic to Bugzilla goes through a proxy,"
_ " Bugzilla thinks that the IP address of every single"
_ " user is the IP address of the proxy. If you enter a comma-separated"
_ " list of IPs in this parameter, then Bugzilla will trust any"
_ " <code>X-Forwarded-For</code> header sent from those IPs,"
_ " and use the value of that header as the end user's IP address.",
proxy_url =>
"$terms.Bugzilla использует доступ в Интернет для оповещения о новых"
_ " релизах, согласно значению параметра <tt>upgrade_notification</tt>. Если для"
_ " доступа обязательно использование прокси, может потребоваться указание его адреса здесь,"
_ " если для сервера Web не установлена переменная окружения HTTP_PROXY. Если для доступа"
_ " требуются имя и пароль, укажите их в виде <code>http://имя:пароль@proxy_url/</code>.",
"Bugzilla may have to access the web to get notifications about"
_ " new releases (see the <var>upgrade_notification</var> parameter)."
_ " If your Bugzilla server is behind a proxy, it may be"
_ " necessary to enter its URL if the web server cannot access the"
_ " HTTP_PROXY environment variable. If you have to authenticate,"
_ " use the <code>http://user:pass@proxy_url/</code> syntax.",
strict_transport_security => sts_desc,
} %]
......@@ -6,58 +6,57 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[%
title = "Приложения"
desc = "Настройка параметров приложений"
title = "Attachments"
desc = "Set up attachment options"
%]
[% param_descs = {
allow_attachment_display =>
"Позволяет пользователям просматривать приложения через веб-обозреватель,"
_ " если он поддерживает соответствующий тип данных MIME."
_ " При отключенном параметре пользователи должны загружать приложения, "
_ " даже если веб-обозреватель может их отобразить."
_ "<p>Эта мера безопасности предназначена для систем, в которых пользователь"
_ " может создать приложение, способное нанести вред при просмотре напрямую "
_ " через веб-обозреватель.</p>"
_ "<p>При включении этого параметра рекомендуется также настроить параметр "
_ " <tt>attachment_base</tt>.",
"If this option is on, users will be able to view attachments from"
_ " their browser, if their browser supports the attachment's MIME type."
_ " If this option is off, users are forced to download attachments,"
_ " even if the browser is able to display them."
_ "<p>This is a security restriction for installations where untrusted"
_ " users may upload attachments that could be potentially damaging if"
_ " viewed directly in the browser.</p>"
_ "<p>It is highly recommended that you set the <var>attachment_base</var>"
_ " parameter if you turn this parameter on.",
attachment_base =>
"При включенном параметре <tt>allow_attachment_display</tt>, приложение,"
_ " написанное злоумышленно, может получить доступ к cookie или"
_ " атаковать $terms.Bugzilla с использованием учетных данных пользователя."
_ "<p>Во избежание этого в качестве дополнительной меры безопасности"
_ " установите в этом параметре альтернативный адрес URL экземпляра ${terms.Bugzilla},"
_ " не совпадающий ни с <tt>urlbase</tt> ни с <tt>sslbase</tt>."
_ " Это должно быть другое доменное имя, указывающее на этот же"
_ " экземпляр ${terms.Bugzilla}.</p>"
_ "<p>Если установлен"
_ " <a href=\"editparams.cgi?section=advanced#cookiedomain_desc\">параметр <tt>cookiedomain</tt></a>,"
_" параметр <tt>attachment_base</tt> должен использовать"
_ " домен, который <em>не совпадает</em> с"
_ " <tt>cookiedomain</tt>.</p>"
_ "<p>Для большей безопасности разрешается использовать в URL конструкцию <tt>%bugid%</tt>,"
_ " которая заменяется номером текущей ${terms.bug_gen}, к которой"
_ " относится приложение. Это ограничит возможности приложения"
_ " доступом только к приложениям той же "
_ " ${terms.bug_gen}. Помните, что все эти доменные имена "
_ " (такие как <tt>1234.your.domain.com</tt>) должны указывать на"
_ " этот экземпляр ${terms.Bugzilla}.",
"When the <var>allow_attachment_display</var> parameter is on, it is "
_ " possible for a malicious attachment to steal your cookies or"
_ " perform an attack on Bugzilla using your credentials."
_ "<p>If you would like additional security on attachments to avoid"
_ " this, set this parameter to an alternate URL for your Bugzilla"
_ " that is not the same as <var>urlbase</var> or <var>sslbase</var>."
_ " That is, a different domain name that resolves to this exact"
_ " same Bugzilla installation.</p>"
_ "<p>Note that if you have set the"
_ " <a href=\"editparams.cgi?section=advanced#cookiedomain_desc\"><var>cookiedomain</var>"
_" parameter</a>, you should set <var>attachment_base</var> to use a"
_ " domain that would <em>not</em> be matched by"
_ " <var>cookiedomain</var>.</p>"
_ "<p>For added security, you can insert <var>%bugid%</var> into the URL,"
_ " which will be replaced with the ID of the current $terms.bug that"
_ " the attachment is on, when you access an attachment. This will limit"
_ " attachments to accessing only other attachments on the same"
_ " ${terms.bug}. Remember, though, that all those possible domain names "
_ " (such as <kbd>1234.your.domain.com</kbd>) must point to this same"
_ " Bugzilla instance.",
allow_attachment_deletion => "Разрешает администраторам удалять " _
"содержимое приложений.",
allow_attachment_deletion => "If this option is on, administrators will be able to delete " _
"the content of attachments.",
maxattachmentsize => "Максимальный размер приложений в килобайтах, хранимых " _
"в базе данных. Если к ${terms.bug_obj} прикладывается " _
"файл большего размера, $terms.Bugzilla проверяет " _
"значение <a href=\"#maxlocalattachment\">параметра <tt>maxlocalattachment</tt></a>, " _
"чтобы определить, можно ли сохранить файл локально на веб-сервере. " _
"Если размер файла превышает оба лимита, то запрос на " _
"сохранение приложения отклоняется. Установка обоих " _
"параметров в 0 сделает добавление приложений к ${terms.bugs} невозможным.",
maxattachmentsize => "The maximum size (in kilobytes) of attachments to be stored " _
"in the database. If a file larger than this size is attached " _
"to ${terms.abug}, Bugzilla will look at the " _
"<a href=\"#maxlocalattachment\"><var>maxlocalattachment</var> parameter</a> " _
"to determine if the file can be stored locally on the web server. " _
"If the file size exceeds both limits, then the attachment is rejected. " _
"Settings both parameters to 0 will prevent attaching files to ${terms.bugs}.",
maxlocalattachment => "Максимальный размер приложений в мегабайтах, хранимых " _
"локально на веб-сервере. Если этот параметр установлен в " _
"значение меньшее чем <a href=\"#maxattachmentsize\">параметр <tt>maxattachmentsize</tt></a>, " _
"приложения никогда не будут сохраняться на локальной файловой системе." }
maxlocalattachment => "The maximum size (in megabytes) of attachments to be stored " _
"locally on the web server. If set to a value lower than the " _
"<a href=\"#maxattachmentsize\"><var>maxattachmentsize</var> parameter</a>, " _
"attachments will never be kept on the local filesystem." }
%]
......@@ -10,8 +10,6 @@
desc = "Настройка параметров редактирования ${terms.bugs_gen}"
%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% accept_status = display_value('bug_status', 'IN_PROGRESS') FILTER html %]
[% param_descs = {
......@@ -28,8 +26,8 @@
"Если параметр не включен, все $terms.bugs изначально имеют " _
"значение, установленное по умолчанию для продукта.",
musthavemilestoneonaccept => "При использовании ${field_descs.target_milestone} требовать указания"
_ " значения плана для перевода ${terms.bug_gen} в состояние ${accept_status}.",
musthavemilestoneonaccept => "При использовании ${field_descs.target_milestone} требовать указания " _
"значения плана для перевода ${terms.bug_gen} в состояние ${accept_status}.",
commentonchange_resolution => "Обязателен комментарий при изменении " _
"решения по ${terms.bug_dat}.",
......
......@@ -13,7 +13,7 @@
[% param_descs = {
useclassification => "Использовать разделение продуктов по разделам. " _
"Для настройки принадлежности продуктов разделам " _
"требуется принадлежность к группе 'editclassification' .",
"требуется принадлежность к группе 'editclassification'.",
usetargetmilestone => "Использовать поле 'Запланировано'",
......@@ -22,10 +22,10 @@
usestatuswhiteboard => "Использовать поле 'Заметки'",
use_see_also =>
"Хотите использовать поле Ссылки? Оно позволяет ссылаться на"
_ " $terms.bugs в других экземплярах ${terms.Bugzilla}. Если поле будет отключено,"
_ " уже установленные связи $terms.bugs_gen по прежнему будут отображаться в виде гиперссылок"
_ " без возможности их удалить.",
"Хотите использовать поле 'Ссылки'? Оно позволяет ссылаться на " _
"$terms.bugs в других экземплярах ${terms.Bugzilla}. Если поле будет отключено, " _
"уже установленные связи $terms.bugs_gen по прежнему будут отображаться в виде гиперссылок " _
"без возможности их удалить.",
defaultpriority => "Значение приоритета по умолчанию для регистрируемых ${terms.bugs_gen}.",
......@@ -41,5 +41,9 @@
"регистрации ${terms.bug_gen}.<br> " _
"Значение можно оставить пустым: " _
"при этом $terms.Bugzilla определит значение автоматически " _
"по данным, сообщаемым веб-обозревателем." }
"по данным, сообщаемым веб-обозревателем.",
collapsed_comment_tags => "Комментарии, при наличии у них следующих тегов " _
"(указать через запятую), по умолчанию свернуты",
}
%]
......@@ -6,8 +6,6 @@
# defined by the Mozilla Public License, v. 2.0.
#%]
[% PROCESS "global/field-descs.none.tmpl" %]
[% sortlist_separator = '---' %]
<dl>
......@@ -28,13 +26,13 @@
[% ELSIF param.type == "b" %]
<input type="radio" name="[% param.name FILTER html %]" id="[% param.name FILTER html %]-on"
value=1 [% "checked=\"checked\"" IF Param(param.name) %]>
<label for="[% param.name FILTER html %]-on">Вкл.</label>
<label for="[% param.name FILTER html %]-on">Вкл</label>
<input type="radio" name="[% param.name FILTER html %]" id="[% param.name FILTER html %]-off"
value=0 [% "checked=\"checked\"" IF !Param(param.name) %]>
<label for="[% param.name FILTER html %]-off">Откл.</label>
<label for="[% param.name FILTER html %]-off">Откл</label>
[% ELSIF param.type == "m" %]
[% boxSize = 5 %]
[% boxSize = param.choices.size IF param.choices.size < 5 %]
[% SET boxSize = param.choices.size IF param.choices.size < 5 %]
<select multiple="multiple" size="[% boxSize FILTER html %]"
name="[% param.name FILTER html %]" id="[% param.name FILTER html %]">
......@@ -50,7 +48,7 @@
name="[% param.name FILTER html %]"
value="[% Param(param.name) FILTER html %]"><br>
[% boxSize = 7 %]
[% boxSize = 3 + param.choices.size IF param.choices.size < 7 %]
[% SET boxSize = 3 + param.choices.size IF param.choices.size < 7 %]
[% plist = Param(param.name).split(',') %]
<table id="table_[% param.name FILTER html %]" class="bz_default_hidden">
......@@ -71,14 +69,14 @@
[% END %]
</select>
</td>
<td style="vertical-align: bottom">
<td class="bottom">
<button type="button"
onClick="sortedList_moveItem('[% param.name FILTER html %]', -1, '[% sortlist_separator %]');">&uarr;</button>
</td>
</tr>
<tr>
<td style="vertical-align: top">
<td class="top">
<button type="button"
onClick="sortedList_moveItem('[% param.name FILTER html %]', +1, '[% sortlist_separator %]');">&darr;</button>
</td>
......@@ -109,10 +107,10 @@
[% END %]
</select>
[% ELSE %]
<font color="red">
<span class="warning">
Неизвестный тип параметра [% param.type FILTER html %]!!!
</font>
[% END %]
</span>
[% END %]
</p>
[% UNLESS param.no_reset %]
<p>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment