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

Материал из YourcmcWiki
Перейти к: навигация, поиск
м
м
Строка 15: Строка 15:
 
* способ преобразования в строку
 
* способ преобразования в строку
 
* ''Возможно, права доступа к сущности — привязка действий над сущностью (просмотр, правка, возможно, другие) к группам пользователей. Возможно, не нужно это сюда пихать.''
 
* ''Возможно, права доступа к сущности — привязка действий над сущностью (просмотр, правка, возможно, другие) к группам пользователей. Возможно, не нужно это сюда пихать.''
 +
 +
У каждого атрибута есть:
 +
* Тип
 +
* Значение по умолчанию
 +
* Вид показа в интерфейсе
 +
* Копируется ли значение атрибута при клонировании сущности
 +
* Показывается ли атрибут в форме создания сущности
 +
* Ссылка на контролирующий атрибут той же сущности, что и этот, и на его значения
 +
*: Если выбрано, означает, что атрибут показывается, только если другой атрибут той же сущности, которой принадлежит этот, имеет одно из заданных значений
  
 
Типы атрибутов:
 
Типы атрибутов:
Строка 27: Строка 36:
 
** {{ok}} существует в частичном виде — без выбора желаемой сущности
 
** {{ok}} существует в частичном виде — без выбора желаемой сущности
 
* Multi-Select → ссылка на несколько сущностей одного типа (то есть «многие ко многим»)
 
* Multi-Select → ссылка на несколько сущностей одного типа (то есть «многие ко многим»)
** Атрибут атрибута — в каком виде показывать список (если в коде/шаблонах не задано специального поведения).
 
 
** Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу.
 
** Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу.
 
** {{ok}} существует в частичном виде — без выбора желаемой сущности
 
** {{ok}} существует в частичном виде — без выбора желаемой сущности
 
+
* Файл (вложение).
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).
+
  
 
Поля багов перечислены ниже. Жирное «да» в колонке «можно отключить» означает, что отключать можно уже сейчас (скорее всего, через параметры типа usevotes и т. п.). Нежирное «да» в колонках «можно отключить» и «можно менять тип» означают, что чисто теоретически логика работы Bugzilla это позволяет.
 
Поля багов перечислены ниже. Жирное «да» в колонке «можно отключить» означает, что отключать можно уже сейчас (скорее всего, через параметры типа usevotes и т. п.). Нежирное «да» в колонках «можно отключить» и «можно менять тип» означают, что чисто теоретически логика работы Bugzilla это позволяет.
Строка 50: Строка 57:
 
bug_severity | single-select | да | нет |
 
bug_severity | single-select | да | нет |
 
priority | single-select | да | да | есть желание сделать decimal
 
priority | single-select | да | да | есть желание сделать decimal
assigned_to | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
+
assigned_to | single-select | нет | нет | ссылка на пользователя. значение по умолчанию контролируется component
reporter | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
+
reporter | single-select | нет | нет | ссылка на пользователя
qa_contact | single-select | '''да''' | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
+
qa_contact | single-select | '''да''' | нет | ссылка на пользователя. значение по умолчанию контролируется component
 
votes | decimal(,0) | '''да''' | нет |
 
votes | decimal(,0) | '''да''' | нет |
cc | multi-select | да | нет | показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени). значение по умолчанию контролируется component
+
cc | multi-select | да | нет | ссылка на пользователей. значение по умолчанию контролируется component
dependson | multi-select | да | нет | показ в виде списка
+
dependson | multi-select | да | нет | ссылка на баги. показ в виде списка
blocked | multi-select | да | нет | показ в виде списка
+
blocked | multi-select | да | нет | ссылка на баги. показ в виде списка
 
target_milestone | single-select | да | да | контролируется product, если тип = single-select
 
target_milestone | single-select | да | да | контролируется product, если тип = single-select
see_also | multi-select | да | да | показ в виде списка (багов), если тип = single-select
+
see_also | multi-select | да | да | ссылка на баги. показ в виде списка (багов), если тип = single-select
 
alias | строка | '''да''' | да |
 
alias | строка | '''да''' | да |
 
reporter_accessible | boolean | нет | нет |
 
reporter_accessible | boolean | нет | нет |
Строка 74: Строка 81:
 
flags | multi-select | да | нет | 1 ко многим
 
flags | multi-select | да | нет | 1 ко многим
 
</tab>
 
</tab>
 +
 +
Примечания:
 +
* Все поля-ссылки на пользователей показываются в виде строки либо в виде combo-box’а, и у них есть функция валидации — она угадывает юзеров по некорректным именам.
  
 
Устаревшие поля / поля, которые ХЗ зачем нужны в таблице полей багов:
 
Устаревшие поля / поля, которые ХЗ зачем нужны в таблице полей багов:
Строка 99: Строка 109:
 
<tab sep=bar class=simpletable head=left>
 
<tab sep=bar class=simpletable head=left>
 
submitter | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
 
submitter | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
description | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
+
description | строка
 
filename | строка
 
filename | строка
 
mimetype | строка
 
mimetype | строка
Строка 108: Строка 118:
 
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах
 
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах
 
</tab>
 
</tab>
 +
 +
Поля компонентов:
 +
 +
<tab sep=bar class=simpletable head=top>
 +
поле | тип | можно отключить? | можно менять тип? | примечания
 +
name | строка | нет | нет |
 +
initialowner | single-select | да | нет | ссылка на пользователя
 +
initialqacontact| single-select | да | нет | ссылка на пользователя
 +
initialcc | multi-select | да | нет | ссылка на пользователей
 +
default_version | single-select | да | нет | ссылка на версию
 +
description | строка | да | да |
 +
product_id | single-select | нет | нет |
 +
wiki_url | строка | да | нет |
 +
is_active | boolean | да | нет |
 +
</tab>
 +
 +
Что ушло бы в ORM?
 +
 +
* Custom Fields, то есть, управление полями багов.
 +
* Отключение стандартных полей типа OS, Hardware.
 +
* Изменение типов стандартных полей типа целочисленных приоритетов.
 +
* Добавление спецполей в продукты, компоненты и т. д. — сейчас это делается в коде.
 +
* Версионирование всех объектов. История бы хранилась унифицированно. Не было бы отдельно таблиц bugs_activity и longdescs, соответственно не было бы и тормозов при проверке «Only bugs changed between…»
 +
* Простые интерфейсы типа CRUD (Create/Read/Update/Delete), сейчас созданные непонятно каким копипастом. В основном имеется ввиду админка.
 +
* Права на редактирование объектов.
 +
* Валидаторы и подсказки значений.
 +
* Корректная валидация зависимостей полей друг от друга.
 +
* Часть SQL-запросов, написанных ручками в коде.
 +
* Создание новых объектов типа SCRUM карточек.
 +
* Мохнатая логика автоматической постановки/обновления багов из обработки входящих e-mailов и Excel-импорта
 +
 +
* Можно было бы прикрутить статистику по любым объектам, причём с Time Machine, то есть просмотром статистики за любой прошедший момент времени. :)
  
 
Текущая логика страницы создания бага:
 
Текущая логика страницы создания бага:
 +
 
* выбор classification, если она включена
 
* выбор classification, если она включена
 
* classification выбрана &rarr; выбор product, если он не вообще один
 
* classification выбрана &rarr; выбор product, если он не вообще один
Строка 138: Строка 181:
 
* Submit по Ctrl-Enter
 
* Submit по Ctrl-Enter
  
[[Категория:Разработка]]
+
[[Категория:Bugzilla]]

Версия 23:33, 7 октября 2010

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

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

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

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

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

У каждого атрибута есть:

  • Тип
  • Значение по умолчанию
  • Вид показа в интерфейсе
  • Копируется ли значение атрибута при клонировании сущности
  • Показывается ли атрибут в форме создания сущности
  • Ссылка на контролирующий атрибут той же сущности, что и этот, и на его значения
    Если выбрано, означает, что атрибут показывается, только если другой атрибут той же сущности, которой принадлежит этот, имеет одно из заданных значений

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

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

Поля багов перечислены ниже. Жирное «да» в колонке «можно отключить» означает, что отключать можно уже сейчас (скорее всего, через параметры типа 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 нет нет ссылка на пользователя. значение по умолчанию контролируется component
reporter single-select нет нет ссылка на пользователя
qa_contact single-select да нет ссылка на пользователя. значение по умолчанию контролируется component
votes decimal(,0) да нет
cc multi-select да нет ссылка на пользователей. значение по умолчанию контролируется 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 ко многим

Примечания:

  • Все поля-ссылки на пользователей показываются в виде строки либо в виде combo-box’а, и у них есть функция валидации — она угадывает юзеров по некорректным именам.

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

  • 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 строка
filename строка
mimetype строка
ispatch boolean
isobsolete boolean
isprivate boolean
isurl boolean
thedata потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах

Поля компонентов:

поле тип можно отключить? можно менять тип? примечания
name строка нет нет
initialowner single-select да нет ссылка на пользователя
initialqacontact single-select да нет ссылка на пользователя
initialcc multi-select да нет ссылка на пользователей
default_version single-select да нет ссылка на версию
description строка да да
product_id single-select нет нет
wiki_url строка да нет
is_active boolean да нет

Что ушло бы в ORM?

  • Custom Fields, то есть, управление полями багов.
  • Отключение стандартных полей типа OS, Hardware.
  • Изменение типов стандартных полей типа целочисленных приоритетов.
  • Добавление спецполей в продукты, компоненты и т. д. — сейчас это делается в коде.
  • Версионирование всех объектов. История бы хранилась унифицированно. Не было бы отдельно таблиц bugs_activity и longdescs, соответственно не было бы и тормозов при проверке «Only bugs changed between…»
  • Простые интерфейсы типа CRUD (Create/Read/Update/Delete), сейчас созданные непонятно каким копипастом. В основном имеется ввиду админка.
  • Права на редактирование объектов.
  • Валидаторы и подсказки значений.
  • Корректная валидация зависимостей полей друг от друга.
  • Часть SQL-запросов, написанных ручками в коде.
  • Создание новых объектов типа SCRUM карточек.
  • Мохнатая логика автоматической постановки/обновления багов из обработки входящих e-mailов и Excel-импорта
  • Можно было бы прикрутить статистику по любым объектам, причём с Time Machine, то есть просмотром статистики за любой прошедший момент времени. :)

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

  • выбор 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
  • Submit по Ctrl-Enter