Полезная информация

Вы можете получить техническую поддержку и просто поболтать в jabber-конференциях Mozilla Россия: support@conference.mozilla-russia.org — для решения проблем с программами Mozilla, talks@conference.mozilla-russia.org — для общения на свободные темы.
  • Форумы
  •  » Bugzilla
  •  » как добавить свои поля в рассылку оповещений по почте

№111-02-2010 12:00:35

_SlaSh_
Участник
 
Группа: Members
Зарегистрирован: 11-02-2010
Сообщений: 2
UA: Firefox 3.5

как добавить свои поля в рассылку оповещений по почте

Всем доброго времени суток.

Прошу помощи у сообщества, т.к. нужны глубокие познания в Perl-е и в исходном коде Багзиллы.
В общем, есть задача: в письмах, присылаемых скриптом whine.pl, потребовалось вставить дополнительное поле - Продукт, заодно переставить местами уже существующие.
Начал с правки шаблона: bugzilla/template/ru/default/whine/mail.html.tmpl

Выделить код

Код:

 <table width="100%">
    <tr>
      <th align="left">Номер</th>
      <th align="left">Серьезность</th>
      <th align="left">Приоритет</th>
     <th align="left">Продукт</th> #--------------------------- ДОБАВЛЕНО
      <th align="left">Состояние</th>
      <th align="left">Аннотация</th>
      <th align="left">Исполнитель</th>
    </tr>

    [% FOREACH bug=query.bugs %]
      <tr>
        <td align="left"><a href="[%+ urlbase FILTER html %]show_bug.cgi?id=
            [%- bug.bug_id %]">[% bug.bug_id %]</a></td>
        <td align="left">[% get_severity(bug.bug_severity) FILTER html %]</td>
        <td align="left">[% bug.priority FILTER html %]</td>
<td align="left">[% get_product_name(bug.product_id) FILTER html %]</td> #-------------------- ДОБАВЛЕНО
        <td align="left">[% get_status(bug.bug_status) FILTER html %]</td>
        <td align="left">[% bug.short_desc FILTER html %]</td>
        <td align="left">[% bug.$assignee_login_string FILTER html %]</td>
      </tr>
    [% END %]

Попутно выяснилось, что в таблице bugs есть только поле product_id, поэтому пришлось дописать макрос get_product_name в подключаемый шаблон bugzilla/template/ru/default/global/field-descs.none.tmpl (благо, что продуктов не так много, и этот обходной путь показался гораздо проще, чем внедрять полноценные sql-запросы:

Выделить код

Код:

[% product_descs = { "1"     => "Product-1",
                      "2"    => "GoodProduct-1",
                      "3"       => "BadProduct-1",
                      "4" => "GoodProduct-2" } %]

[% MACRO get_product_name(id) GET product_descs.$id || id %]

Затем оказалось, что шаблон bugzilla/template/ru/default/whine/mail.html.tmpl теперь оперирует полем product_id, которое ему вообще не передаётся. Пришлось править сам скрипт bugzilla/whine.pl:

Выделить код

Код:

        # Execute the saved query 
        my @searchfields = (
            'bugs.bug_id',
            'bugs.bug_severity',
            'bugs.priority',
            'bugs.rep_platform',
            'bugs.assigned_to',
            'bugs.bug_status',
            'bugs.resolution',
            'bugs.short_desc',
            'map_assigned_to.login_name',
            'bugs.product_id', #---------------------- ДОБАВЛЕНО
        );

Вуаля, всё работает! Но только в версии 3.2.4 (ru: 3.2.3-20090405).
С переходом на версию 3.4.4 (ru: 3.4.3) скрипт bugzilla/whine.pl "слегка" поменялся:
$diff whine.pl.old whine.pl.new

Выделить код

Код:

> use Bugzilla::Group;
253c254
<                             @{Bugzilla::User->flatten_group_membership(
---
>                             @{Bugzilla::Group->flatten_group_membership(
427,436c428,437
<         my @searchfields = (
<             'bugs.bug_id',
<             'bugs.bug_severity',
<             'bugs.priority',
<             'bugs.rep_platform',
<             'bugs.assigned_to',
<             'bugs.bug_status',
<             'bugs.resolution',
<             'bugs.short_desc',
<             'map_assigned_to.login_name',
---
>         my @searchfields = qw(
>             bug_id
>             bug_severity
>             priority
>             rep_platform
>             assigned_to
>             bug_status
>             resolution
>             short_desc
>             assigned_to

И теперь после вставки строки product_id в объявление массива @searchfields при попытке выполниться скрипт вываливается с ошибкой:

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS product_id, SUBSTRING(map_assigned_to.login_name FROM 1 FOR INSTR(CAST(map_as' at line 1 [for Statement "SELECT bugs.bug_id AS bug_id, bugs.bug_severity AS bug_severity, bugs.priority AS priority,  AS product_id, SUBSTRING(map_assigned_to.login_name FROM 1 FOR INSTR(CAST(map_assigned_to.login_name AS BINARY), CAST('@' AS BINARY)) - 1) AS assigned_to, bugs.bug_status AS bug_status, bugs.resolution AS resolution, bugs.short_desc AS short_desc FROM bugs  INNER JOIN profiles AS map_assigned_to ON (bugs.assigned_to = map_assigned_to.userid) LEFT JOIN bug_group_map  ON bug_group_map.bug_id = bugs.bug_id  AND bug_group_map.group_id NOT IN (1,12,10,11,13,9,4,8,5,6,7,3,2,14)  LEFT JOIN cc ON cc.bug_id = bugs.bug_id AND cc.who = 1 WHERE (( bugs.bug_status IN ('NEW','ASSIGNED','REOPENED') ) AND ( bugs.product_id IN (7,5,4,6,2,3) )) AND ((bugs.cf_otpravlen = 'обсуждение')) AND bugs.creation_ts IS NOT NULL AND ((bug_group_map.group_id IS NULL)    OR (bugs.reporter_accessible = 1 AND bugs.reporter = 1)     OR (bugs.cclist_accessible = 1 AND cc.who IS NOT NULL)     OR (bugs.assigned_to = 1) ) GROUP BY bugs.bug_id"] at ./whine.pl.new line 449
    main::run_queries('HASH(0x988b610)') called at ./whine.pl.new line 317

Подозреваю, что нужно править еще и подключаемые Bugzilla::Search, Bugzilla::User, Bugzilla::Group и т.д. Но не понимаю, что именно.
Прошу помощи в освоение Перла на практике и заодно пояснения, для чего в списке полей 2 раза используется assigned_to.

Спасибо.

Отредактировано _SlaSh_ (11-02-2010 12:26:44)

Отсутствует

 

№212-02-2010 05:11:48

SnowyOwl
Участник
 
Группа: Extensions
Зарегистрирован: 13-01-2007
Сообщений: 274
UA: Firefox 3.6

Re: как добавить свои поля в рассылку оповещений по почте

_SlaSh_ пишет:

И теперь после вставки строки product_id в объявление массива @searchfields при попытке выполниться скрипт вываливается с ошибкой:

У Bugzilla/Search.pm можно просить 'product'. Это автоматически приведет к добавлению подзапроса для выборки названия продукта и т.п. Увидеть это можно здесь:

http://mxr.mozilla.org/mozilla/source/w … rch.pm#146

А прочесть об этом... м-дя... только здесь: https://bugzilla.mozilla.org/show_bug.cgi?id=545795 :blush:

Отсутствует

 

№312-02-2010 09:40:55

_SlaSh_
Участник
 
Группа: Members
Зарегистрирован: 11-02-2010
Сообщений: 2
UA: Firefox 3.5

Re: как добавить свои поля в рассылку оповещений по почте

SnowyOwl
Хм. Действительно. Как неочевидно :) Дописал Product в 'my @searchfields = qw(' и убрал использование своего макроса. Всё сразу встало на свои места.

Спасибо!

Отсутствует

 

№421-02-2010 19:43:26

SnowyOwl
Участник
 
Группа: Extensions
Зарегистрирован: 13-01-2007
Сообщений: 274
UA: Firefox 3.6

Re: как добавить свои поля в рассылку оповещений по почте

_SlaSh_ пишет:

Как неочевидно :)


(с) А.Добротворский пишет:

Нельзя в числе достоинств конструкции приводить ее простоту, ибо техника развивается по пути усложнения конструкции и упрощения эксплуатации

Отсутствует

 
  • Форумы
  •  » Bugzilla
  •  » как добавить свои поля в рассылку оповещений по почте

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]