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

Apply ru templates by Alexandr Hanadeev

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