diff options
14 files changed, 614 insertions, 0 deletions
diff --git a/extensions/Mageia/Config.pm b/extensions/Mageia/Config.pm new file mode 100644 index 000000000..ce0eae39d --- /dev/null +++ b/extensions/Mageia/Config.pm @@ -0,0 +1,22 @@ +# 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. + +package Bugzilla::Extension::Mageia; + +use 5.10.1; +use strict; +use warnings; + +use constant NAME => 'Mageia'; + +use constant REQUIRED_MODULES => [ +]; + +use constant OPTIONAL_MODULES => [ +]; + +__PACKAGE__->NAME; diff --git a/extensions/Mageia/Extension.pm b/extensions/Mageia/Extension.pm new file mode 100644 index 000000000..5580e583a --- /dev/null +++ b/extensions/Mageia/Extension.pm @@ -0,0 +1,111 @@ +# 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. + +package Bugzilla::Extension::Mageia; + +use 5.10.1; +use strict; +use warnings; + +use parent qw(Bugzilla::Extension); + +use Bugzilla::Bug qw(LogActivityEntry); +use Bugzilla::Field qw(get_field_id); +use Bugzilla::User qw(); +use Bugzilla::Extension::Mageia::Util; + +use Email::Address; +use Encode qw(encode); + +# Let's match the Bugzilla version it's written for. +our $VERSION = '5.0'; + +# sysadmin-bugs@ml.mageia.org user ID = 175. +use constant SYSADMIN_USER_ID => 175; + +sub bug_end_of_create_validators { + my ($self, $args) = @_; + + # If a user enters 'validated_update' as keyword, + # automatically CC sysadmin-bugs@ml.mageia.org. + my $keywords = $args->{params}->{keywords}; + + if (grep { $_->name eq 'validated_update' } @$keywords) { + my $cc_list = $args->{params}->{cc}; + if (!grep { $_ == SYSADMIN_USER_ID } @$cc_list) { + push(@$cc_list, SYSADMIN_USER_ID); + } + } +} + +sub bug_end_of_update { + my ($self, $args) = @_; + my $bug = $args->{bug}; + my $dbh = Bugzilla->dbh; + my $user = Bugzilla->user; + + # If a user enters 'validated_update' as keyword, + # automatically CC sysadmin-bugs@ml.mageia.org. + my $new_keywords_str = $args->{changes}->{keywords}->[1]; + + if ($new_keywords_str) { + my @new_keywords = split(/[,\s]+/, $new_keywords_str); + if (grep { $_ eq 'validated_update' } @new_keywords + and !grep { $_->id == SYSADMIN_USER_ID } @{$bug->cc_users}) + { + # Safer to clear the cache and let Bugzilla regenerate them if needed. + delete $bug->{cc_users}; + delete $bug->{cc}; + $dbh->do('INSERT INTO cc (bug_id, who) VALUES (?, ?)', + undef, ($bug->id, SYSADMIN_USER_ID)); + + # We also have to update the bug history to reflect this change. + my $changed_cc = $args->{changes}->{cc}; + my $sysadmin_login = Bugzilla::User->new(SYSADMIN_USER_ID)->login; + + if ($changed_cc->[1]) { + $changed_cc->[1] .= ", $sysadmin_login"; + } + else { + $changed_cc->[1] = $sysadmin_login; + } + + my $field_id = get_field_id('cc'); + $dbh->do('DELETE FROM bugs_activity + WHERE bug_id = ? AND bug_when = ? AND fieldid = ?', + undef, ($bug->id, $args->{timestamp}, $field_id)); + + LogActivityEntry($bug->id, 'cc', $changed_cc->[0] // '', $changed_cc->[1], + $user->id, $args->{timestamp}); + } + } +} + +sub enter_bug_entrydefaultvars { + my ($self, $vars) = @_; + my $cgi = Bugzilla->cgi; + + # By default, users should get the guided form when reporting a new bug. + # Pass &normal=1 to the URL to get the official bug form. + my $format = $cgi->param('normal') ? '' : 'guided'; + $cgi->param('format', $format); +} + +sub mailer_before_send { + my ($self, $args) = @_; + my $email = $args->{email}; + + # Include the changer's name in the "From:" field. + if (my $changer = $email->header('X-Bugzilla-Who')) { + $changer = Bugzilla::User->new({ name => $changer }); + return unless $changer; + my $address = Email::Address->new($changer->name, $email->header('From')); + $email->header_set('From', encode('MIME-Header', $address->format)); + } +} + +__PACKAGE__->NAME; diff --git a/extensions/Mageia/lib/Util.pm b/extensions/Mageia/lib/Util.pm new file mode 100644 index 000000000..f13ee2091 --- /dev/null +++ b/extensions/Mageia/lib/Util.pm @@ -0,0 +1,24 @@ +# 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. + +package Bugzilla::Extension::Mageia::Util; + +use 5.10.1; +use strict; +use warnings; + +use parent qw(Exporter); + +our @EXPORT = qw( +); + +# This file can be loaded by your extension via +# "use Bugzilla::Extension::Mageia::Util". You can put functions +# used by your extension in here. (Make sure you also list them in +# @EXPORT.) + +1; diff --git a/extensions/Mageia/template/en/default/bug/create/comment-guided.txt.tmpl b/extensions/Mageia/template/en/default/bug/create/comment-guided.txt.tmpl new file mode 100644 index 000000000..7b5018e6d --- /dev/null +++ b/extensions/Mageia/template/en/default/bug/create/comment-guided.txt.tmpl @@ -0,0 +1,10 @@ +[%# 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. + #%] + +[% USE Bugzilla %] +[% Bugzilla.cgi.param("comment") %] diff --git a/extensions/Mageia/template/en/default/bug/create/create-guided.html.tmpl b/extensions/Mageia/template/en/default/bug/create/create-guided.html.tmpl new file mode 100644 index 000000000..82eb61a6c --- /dev/null +++ b/extensions/Mageia/template/en/default/bug/create/create-guided.html.tmpl @@ -0,0 +1,321 @@ +[%# 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: + # This template has the same interface as create.html.tmpl + #%] + +[% USE Bugzilla %] +[% cgi = Bugzilla.cgi %] + +[% PROCESS global/header.html.tmpl + title = "Enter $terms.ABug" + onload = "PutDescription()" + style_urls = ['skins/standard/bug.css'] + javascript_urls = ['js/util.js', 'js/field.js'] + yui = ['autocomplete'] + %] + +[% defaultcontent = "Description of problem:\n\n\n" _ + "Version-Release number of selected component (if applicable):\n\n\n" _ + "How reproducible:\n\n\nSteps to Reproduce:\n1.\n2.\n3.\n" %] + +[%# This script displays the descriptions for selected components. %] +<script type="text/javascript"> +var descriptions = [ +[% FOREACH c = product.components %] + [% NEXT IF NOT c.is_active %] + '[% c.description FILTER js %]', +[% END %] +]; + +function PutDescription() { + var description = document.getElementById('description'); + var componentIndex = document.getElementById('component').selectedIndex; + YAHOO.util.Dom.removeClass("description", "bz_default_hidden"); + if (componentIndex != -1) { + description.innerHTML = descriptions[componentIndex]; + } +} + +function CheckDetails(e) { + if (e.form.comment.value == '[% defaultcontent FILTER js FILTER html %]') { + alert('Please enter some details about this [% terms.bug %].'); + e.form.comment.focus(); + return false; + } + return true; +} +</script> + +<p> + Submit [% terms.abug %] using the + <a href="enter_bug.cgi?product=[% product.name FILTER html %]&normal=1">expert [% terms.bug %] form</a>. +</p> + +<form id="guided_form" method="post" action="post_bug.cgi"> + <input type="hidden" name="format" value="guided"> + <input type="hidden" name="priority" value="[% default.priority FILTER html %]"> + <input type="hidden" name="token" value="[% token FILTER html %]"> + +<table> + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.product %] + <td> + <input type="hidden" name="product" value="[% product.name FILTER html %]"> + [% product.name FILTER html %] + </td> + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.component editable = 1 %] + <td> + <select name="component" id="component" size="5" onchange="PutDescription()" + aria-required="true" class="required" required> + [% IF NOT default.component_ %] + [% default.component_ = "RPM Packages" %] + [% END %] + [% FOREACH c = product.components %] + [% NEXT IF NOT c.is_active %] + <option value="[% c.name FILTER html %]" + [%+ 'selected="selected"' IF c.name == default.component_ %]> + [% c.name FILTER html %] + </option> + [% END %] + </select> + + <div id="description" class="comment bz_default_hidden"> + Select a component to see its description here. + </div> + + <p> + The area where the problem occurs. + To pick the right component, you could use the same one as + similar [% terms.bugs %] you found in your search, or read the full list of + <a href="describecomponents.cgi?product=[% product.name FILTER uri %]" + target="_blank" >component descriptions</a> (opens in new window) if + you need more help. + </p> + </td> + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.version editable = 1 %] + <td> + <select name="version" id="version" size="5" aria-required="true" class="required" required> + [% FOREACH v = version %] + [% NEXT IF NOT v.is_active %] + <option value="[% v.name FILTER html %]" + [% ' selected="selected"' IF v.name == default.version %]>[% v.name FILTER html -%] + </option> + [% END %] + </select> + + <p> + The version in which the problem occurs. + </p> + </td> + </tr> + + <tr> + [% INCLUDE bug/field.html.tmpl + bug = default, field = bug_fields.rep_platform, editable = 1, + value = default.rep_platform %] + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.cf_rpmpkg editable = 1 %] + <td> + <input size="80" name="cf_rpmpkg" id="cf_rpmpkg"> + <p> + This is where you can identify exactly which RPM package is involved in + this [% terms.bug %] report. For instance, if you know the problem you + are having is with the program <tt>mysqld</tt>, then execute + <tt>rpm -qif /usr/sbin/mysqld</tt>. This will tell you the name and version + of the RPM package (i.e. mariadb-core-10.0.23-1.mga5) as well as other + information. In particular, you are looking for the "Source RPM" field + (i.e. mariadb-10.0.23-1.mga5.src.rpm) -- this is the information you should + provide here. Alternatively, you may use + <tt>rpm -qf /usr/sbin/mysqld --qf '%{SOURCERPM}\n'</tt> to obtain the + information. If you do not know the location of the program in question, + use <tt>rpm -qf `which mysqld`</tt> to obtain it. Please enter that + information above. + </p> + </td> + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.bug_file_loc editable = 1 %] + <td> + <input size="80" name="bug_file_loc" placeholder="https://"> + <p> + URL that demonstrates the problem you are submitting (optional). + </p> + </td> + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.short_desc editable = 1 %] + <td> + <input size="80" name="short_desc" id="short_desc" maxlength="255" + spellcheck="true" aria-required="true" class="required" required> + <p> + A sentence which summarizes the problem. + Please be descriptive and use lots of keywords. + </p> + <p> + <kbd> + <span class="bad">Bad example</span>: mail crashed + </kbd> + <br> + <kbd> + <span class="good">Good example</span>: + crash in Evolution while checking for new POP mail + </kbd> + </p> + </td> + </tr> + + <tr> + <th id="field_label_details" class="field_label required">Details</th> + <td> + [% INCLUDE global/textarea.html.tmpl + id = 'comment' + name = 'comment' + minrows = 13 + cols = constants.COMMENT_COLS + mandatory = 1 + defaultcontent = defaultcontent + %] + + [% IF user.is_insider %] + <br> + <input type="checkbox" id="comment_is_private" name="comment_is_private" + [% ' checked="checked"' IF comment_is_private %] + onClick="updateCommentTagControl(this, 'comment')"> + <label for="comment_is_private"> + Initial description is private (visible only to members + of the <strong>[% Param('insidergroup') FILTER html %]</strong> group) + </label> + <script> + updateCommentTagControl(document.getElementById('comment_is_private'), 'comment'); + </script> + [% END %] + <p> + Expand on the Summary. Please be as specific as possible about what is wrong. + </p> + <p> + <kbd> + <span class="bad">Bad example</span>: I can't seem to login to the system. Please help! + </kbd> + <br> + <kbd> + <span class="good">Good example</span>: Description of problem: + <br><br> + I'm unable to login to the system via ssh. The /var/log/messages log + indicates there is a problem with the pam module pam_ldap, but the + /etc/pam.d/system-auth file doesn't contain that module and I'm not + using LDAP. I looked at /etc/pam.d/sshd and it does contain that module + but I'm not sure how it got there, unless it was due to the super-spiffy + super-ldap-mojo package I installed yesterday. + <br><br> + Version-Release number of selected component (if applicable): + <br><br> + openldap-2.4.40-3.1.mga5, pam-1.1.8-10.1.mga5 + <br><br> + How reproducible: + <br><br> + Every time I attempt to login. + <br><br> + Steps to Reproduce:<br> + 1. ssh user@host<br> + 2. see the rejection + </kbd> + </p> + </td> + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.bug_severity editable = 1 %] + <td> + <select name="bug_severity"> + <option name="critical" value="critical"> + Critical: The software crashes, hangs, or causes you to + lose data. + </option> + <option name="major" value="major"> + Major: A major feature is broken. + </option> + <option name="normal" value="normal" selected="selected"> + Normal: It's [% terms.abug %] that should be fixed. + </option> + <option name="minor" value="minor"> + Minor: Minor loss of function, and there's an easy workaround. + </option> + <option name="enhancement" value="enhancement"> + Enhancement: Request for new feature or enhancement. + </option> + </select> + <p> + Indicate how serious the problem is, or if your [% terms.bug %] is a + request for a new feature. + </p> + </td> + </tr> + + <tr> + [% INCLUDE "bug/field-label.html.tmpl" field = bug_fields.assigned_to editable = 1 %] + <td> + [% INCLUDE global/userselect.html.tmpl + id => "assigned_to" + name => "assigned_to" + value => assigned_to + disabled => assigned_to_disabled + size => 30 + emptyok => 1 + %] + <p>Leave blank to assign to the default component owner.</p> + </td> + </tr> + + [% Hook.process('form') %] +</table> + +<p> + <input type="submit" id="report" value="Submit [% terms.Bug %] Report" + onclick="var res = CheckDetails(this); return res"> +</p> + +<p> + That's it! Thanks very much. You'll be notified by email about any progress + that is made on fixing your [% terms.bug %]. Thank you for choosing Mageia! +</p> + +</form> + +[% PROCESS global/footer.html.tmpl %] + +[%############################################################################%] +[%# Block for SELECT fields #%] +[%############################################################################%] + +[% BLOCK select %] + <select name="[% sel %]"> + [%- IF default.$sel %] + <option value="[% default.$sel FILTER html %]" selected="selected"> + [% default.$sel FILTER html -%] + </option> + [% END %] + [%- FOREACH x = $sel %] + [% NEXT IF x == default.$sel %] + <option value="[% x FILTER html %]"> + [% x FILTER html -%] + </option> + [%- END %] + </select> +[% END %] diff --git a/extensions/Mageia/template/en/default/global/banner.html.tmpl b/extensions/Mageia/template/en/default/global/banner.html.tmpl new file mode 100644 index 000000000..76f1d123e --- /dev/null +++ b/extensions/Mageia/template/en/default/global/banner.html.tmpl @@ -0,0 +1,11 @@ +[%# 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. + #%] + +<script src="https://nav.mageia.org/js/" type="text/javascript"></script> + +<div id="banner"></div> diff --git a/extensions/Mageia/template/en/default/hook/README b/extensions/Mageia/template/en/default/hook/README new file mode 100644 index 000000000..e6c4add58 --- /dev/null +++ b/extensions/Mageia/template/en/default/hook/README @@ -0,0 +1,5 @@ +Template hooks go in this directory. Template hooks are called in normal +Bugzilla templates like [% Hook.process('some-hook') %]. +More information about them can be found in the documentation of +Bugzilla::Extension. (Do "perldoc Bugzilla::Extension" from the main +Bugzilla directory to see that documentation.)
\ No newline at end of file diff --git a/extensions/Mageia/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl b/extensions/Mageia/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl new file mode 100644 index 000000000..675af49f1 --- /dev/null +++ b/extensions/Mageia/template/en/default/hook/account/auth/login-small-additional_methods.html.tmpl @@ -0,0 +1,23 @@ +[%# 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. + #%] + +[% UNLESS user.id %] + [% UNLESS Param('createemailregexp') AND user.authorizer.user_can_create_account %] + <li id="new_account_container[% qs_suffix FILTER html %]"> + <span class="separator">| </span> + <a href="https://identity.mageia.org/register">New Account</a> + </li> + [% END %] + + [% UNLESS user.authorizer.can_change_password %] + <li id="forgot_container[% qs_suffix FILTER html %]"> + <span class="separator">| </span> + <a href="https://identity.mageia.org/forgot_password">Forgot Password</a> + </li> + [% END %] +[% END %] diff --git a/extensions/Mageia/template/en/default/hook/global/header-start.html.tmpl b/extensions/Mageia/template/en/default/hook/global/header-start.html.tmpl new file mode 100644 index 000000000..01fab7fab --- /dev/null +++ b/extensions/Mageia/template/en/default/hook/global/header-start.html.tmpl @@ -0,0 +1,10 @@ +[%# 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. + #%] + +[% favicon_url = "https://www.mageia.org/g/favicon.png" %] +[% style_urls.push("extensions/Mageia/web/style.css") %] diff --git a/extensions/Mageia/template/en/default/hook/global/variables-end.none.tmpl b/extensions/Mageia/template/en/default/hook/global/variables-end.none.tmpl new file mode 100644 index 000000000..4f651a5ae --- /dev/null +++ b/extensions/Mageia/template/en/default/hook/global/variables-end.none.tmpl @@ -0,0 +1,9 @@ +[%# 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. + #%] + +[% terms.Bugzilla = "Mageia Bugzilla" %] diff --git a/extensions/Mageia/template/en/default/hook/index-additional_links.html.tmpl b/extensions/Mageia/template/en/default/hook/index-additional_links.html.tmpl new file mode 100644 index 000000000..3c2585887 --- /dev/null +++ b/extensions/Mageia/template/en/default/hook/index-additional_links.html.tmpl @@ -0,0 +1,14 @@ +[%# 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. + #%] + +[% UNLESS user.id %] + <p id="create_account"> + Don't have an account on [% terms.Bugzilla %]? + <a href="https://identity.mageia.org/register">Create one</a>. + </p> +[% END %] diff --git a/extensions/Mageia/template/en/default/mageia/README b/extensions/Mageia/template/en/default/mageia/README new file mode 100644 index 000000000..099d1a41a --- /dev/null +++ b/extensions/Mageia/template/en/default/mageia/README @@ -0,0 +1,16 @@ +Normal templates go in this directory. You can load them in your +code like this: + +use Bugzilla::Error; +my $template = Bugzilla->template; +$template->process('mageia/some-template.html.tmpl') + or ThrowTemplateError($template->error()); + +That would be how to load a file called some-template.html.tmpl that +was in this directory. + +Note that you have to be careful that the full path of your template +never conflicts with a template that exists in Bugzilla or in +another extension, or your template might override that template. That's why +we created this directory called 'mageia' for you, so you +can put your templates in here to help avoid conflicts.
\ No newline at end of file diff --git a/extensions/Mageia/web/README b/extensions/Mageia/web/README new file mode 100644 index 000000000..c3c41862f --- /dev/null +++ b/extensions/Mageia/web/README @@ -0,0 +1,7 @@ +Web-accessible files, like JavaScript, CSS, and images go in this +directory. You can reference them directly in your HTML. For example, +if you have a file called "style.css" and your extension is called +"Mageia", you would put it in "extensions/Mageia/web/style.css", and then +you could link to it in HTML like: + +<link href="extensions/Mageia/web/style.css" rel="stylesheet" type="text/css"> diff --git a/extensions/Mageia/web/style.css b/extensions/Mageia/web/style.css new file mode 100644 index 000000000..b43d174d8 --- /dev/null +++ b/extensions/Mageia/web/style.css @@ -0,0 +1,31 @@ +/* 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. + */ + +body { + margin: 0; + padding-top: 0; + background-color: #fff !important; +} + +#create_account { + border: solid 1px; + background-color: #ffd386; + color: #9b1a1a; + padding: 1em; + text-align: center; + max-width: 30em; + margin: 1em auto; +} + +#guided_form { + padding: 1em; +} + +#guided_form .field_label { + white-space: nowrap; +} |