BugzillaORM — различия между версиями

Материал из YourcmcWiki
Перейти к: навигация, поиск
м
м
Строка 38: Строка 38:
 
product | single-select | да | нет | контролируется classification (или никем), у поля есть привязка к правам пользователя
 
product | single-select | да | нет | контролируется classification (или никем), у поля есть привязка к правам пользователя
 
component | single-select | да | нет | контролируется product
 
component | single-select | да | нет | контролируется product
version | single-select | да | да | контролируется product, если тип = single-select
+
version | single-select | да | да | контролируется product, если тип = single-select. значение по умолчанию контролируется component
 
rep_platform | single-select | '''да''' | да | специальная функция «угадывания» дефолтного значения
 
rep_platform | single-select | '''да''' | да | специальная функция «угадывания» дефолтного значения
 
bug_file_loc | строка | да | да |
 
bug_file_loc | строка | да | да |
Строка 48: Строка 48:
 
bug_severity | single-select | да | нет |
 
bug_severity | single-select | да | нет |
 
priority | single-select | да | да | есть желание сделать decimal
 
priority | single-select | да | да | есть желание сделать decimal
assigned_to | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
+
assigned_to | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
 
reporter | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
 
reporter | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
qa_contact | single-select | '''да''' | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
+
qa_contact | single-select | '''да''' | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
 
votes | decimal(,0) | '''да''' | нет |
 
votes | decimal(,0) | '''да''' | нет |
cc | multi-select | да | нет | показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени)
+
cc | multi-select | да | нет | показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
 
dependson | multi-select | да | нет | показ в виде списка
 
dependson | multi-select | да | нет | показ в виде списка
 
blocked | multi-select | да | нет | показ в виде списка
 
blocked | multi-select | да | нет | показ в виде списка
Строка 106: Строка 106:
 
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах
 
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах
 
</tab>
 
</tab>
 +
 +
Текущая логика страницы создания бага:
 +
* выбор classification, если она включена
 +
* classification выбрана &rarr; выбор product, если он не вообще один
 +
* тот же выбор продукта/классификации при клонировании багов
 +
* продукт выбран &rarr; форма создания бага
 +
* показ корректных списков возможных значений полей:
 +
** типы флагов в зависимости от компонента
 +
** cf_agreement в зависимости от продукта
 +
** списки пользователей, относящихся к багу в combo-box’ы
 +
** опциональный запрет на ввод приоритета на основе конфигурации (letsubmitterchoosepriority)
 +
** список флажков — ограничителей доступа группами
 +
* значения полей по умолчанию:
 +
** которые совсем по умолчанию
 +
** угадывание op_sys и rep_platform на основе заголовков запроса
 +
** версия, qa_contact, assigned_to, cc по умолчанию для компонента
 +
** хитрая логика для изменения списков cc при выборе компонентов
 +
** assigned_to=ты при выборе статуса ASSIGNED
 +
** показ поля resolution при выборе закрытого статуса
 +
** версия из cookies
 +
** загруженные из шаблона ввода бага
 +
** загруженные из клонированного бага
 +
*** ссылка на старый аттач в описании нового клонированного бага
 +
*** хитрая логика для CC при клонировании багов
 +
* напоминания о вводе времени
 +
* предпросмотр комментариев
 +
* постановка вложения сразу при создании бага
 +
* переключатель Show Expert Fields
  
 
[[Категория:Разработка]]
 
[[Категория:Разработка]]

Версия 17:46, 4 августа 2010

В Bugzilla (например, 3.6) половина кода в шаблонах, половина на основе полу-ORM’а, а большая часть не пойми как. А ORM бы туда, было бы классно, что-то в духе:

Есть сущности:

  • баг
  • классификация, продукт, компонент
  • ключевое слово, milestone, версия, статус бага, agreement (кастомное поле!)
  • вложение, комментарий, флаг, тип флага
  • пользователь, группа
  • как ни странно, «сущность» — «метакласс» (класс сущности)

У сущностей есть:

  • ID — первичный ключ
  • атрибуты
  • ссылка на контролирующую сущность (тип + ID)
    то есть если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую
  • способ преобразования в строку
  • Возможно, права доступа к сущности — привязка действий над сущностью (просмотр, правка, возможно, другие) к группам пользователей. Возможно, не нужно это сюда пихать.

Типы атрибутов:

  • Строка
  • Boolean
  • Decimal
  • Дата
  • Время
  • Дата+время
  • Single-Select → ссылка на сущность (то есть «многие к 1»)
    • Необязательный вариант синглселекта — «1 к 1».
  • Multi-Select → ссылка на несколько сущностей одного типа (то есть «многие ко многим»)
    • Атрибут атрибута — в каком виде показывать список (если в коде/шаблонах не задано специального поведения).
    • Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу.

У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).

Поля багов перечислены ниже. Жирное «да» в колонке «можно отключить» означает, что отключать можно уже сейчас (скорее всего, через параметры типа usevotes и т. п.). Нежирное «да» в колонках «можно отключить» и «можно менять тип» означают, что чисто теоретически логика работы Bugzilla это позволяет.

поле тип можно отключить? можно менять тип? примечания
short_desc строка нет нет
classification single-select да нет
product single-select да нет контролируется classification (или никем), у поля есть привязка к правам пользователя
component single-select да нет контролируется product
version single-select да да контролируется product, если тип = single-select. значение по умолчанию контролируется component
rep_platform single-select да да специальная функция «угадывания» дефолтного значения
bug_file_loc строка да да
op_sys single-select да да специальная функция «угадывания» дефолтного значения
bug_status single-select нет нет есть функция валидации (Bug Status Workflow)
resolution single-select да нет у атрибута есть контролирующая видимость сущность (показывается только при bug_status.closed=1)
status_whiteboard строка да да
keywords multi-select да да показ в виде списка
bug_severity single-select да нет
priority single-select да да есть желание сделать decimal
assigned_to single-select нет нет показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
reporter single-select нет нет показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
qa_contact single-select да нет показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
votes decimal(,0) да нет
cc multi-select да нет показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
dependson multi-select да нет показ в виде списка
blocked multi-select да нет показ в виде списка
target_milestone single-select да да контролируется product, если тип = single-select
see_also multi-select да да показ в виде списка (багов), если тип = single-select
alias строка да да
reporter_accessible boolean нет нет
cclist_accessible boolean нет нет
estimated_time время да нет
remaining_time время да нет
deadline дата да нет
creation_ts дата+время нет нет
delta_ts дата+время нет нет
cf_agreement single-select да да контролируется product
*** нет в fielddescs ***
lastdiffed дата+время нет нет скрыто в интерфейсе
attachments multi-select нет нет 1 ко многим
longdescs multi-select нет нет 1 ко многим
flags multi-select да нет 1 ко многим

Устаревшие поля / поля, которые ХЗ зачем нужны в таблице полей багов:

  • assignee_accessible
  • qacontact_accessible
  • longdesc
  • commenter
  • longdescs.isprivate
  • content
  • bug_group
  • flagtypes.name
  • requestees.login_name
  • setters.login_name

Вычисляемые поля багов:

work_time Сумма work_time от связанных longdescs
percentage_complete (Сумма work_time от dependson)/(Сумма estimated_time от dependson)
owner_idle_time Текущая дата минус MAX(дата последнего коммента от Assignee, дата последней активности от Assignee)
days_elapsed Текущая дата минус delta_ts
everconfirmed Менялся ли статус хоть раз на != UNCONFIRMED

Поля вложений:

submitter single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
description single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
filename строка
mimetype строка
ispatch boolean
isobsolete boolean
isprivate boolean
isurl boolean
thedata потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах

Текущая логика страницы создания бага:

  • выбор classification, если она включена
  • classification выбрана → выбор product, если он не вообще один
  • тот же выбор продукта/классификации при клонировании багов
  • продукт выбран → форма создания бага
  • показ корректных списков возможных значений полей:
    • типы флагов в зависимости от компонента
    • cf_agreement в зависимости от продукта
    • списки пользователей, относящихся к багу в combo-box’ы
    • опциональный запрет на ввод приоритета на основе конфигурации (letsubmitterchoosepriority)
    • список флажков — ограничителей доступа группами
  • значения полей по умолчанию:
    • которые совсем по умолчанию
    • угадывание op_sys и rep_platform на основе заголовков запроса
    • версия, qa_contact, assigned_to, cc по умолчанию для компонента
    • хитрая логика для изменения списков cc при выборе компонентов
    • assigned_to=ты при выборе статуса ASSIGNED
    • показ поля resolution при выборе закрытого статуса
    • версия из cookies
    • загруженные из шаблона ввода бага
    • загруженные из клонированного бага
      • ссылка на старый аттач в описании нового клонированного бага
      • хитрая логика для CC при клонировании багов
  • напоминания о вводе времени
  • предпросмотр комментариев
  • постановка вложения сразу при создании бага
  • переключатель Show Expert Fields