Система Orphus
[]

понедельник, 27 апреля 2009 г.

GLPI: Добавляем свои статусы для заявок.

В предыдущем посте (GLPI. Шаг за шагом.) я уже рассказывал как установить GLPI на Ubuntu Server и о "сложностях", с которыми пришлось столкуниться...
На днях пришлось сделать хак/твик, т.к. главного программиста не устроило, что в статусе заявок нет таких пунктов как "Доработка" и "Закрыто и проверено". О чем и хочу рассказать в этом посте. Хотя я все же сделал немного по своему и создал новые статусы "В процессе (доработка)" и "Закрыто (решено и проверено)", такие лучше в общий контент вписываются, имхо.

Говорю один раз, повторять не буду :)
1) все файлы, которые я изменял, были предварительно скопированы в качестве резервной копии, чего и тебе советую
2) все эти твики/хаки проводились с версией 0.71.5, хотя думаю, что для других версий это будет тоже актуально, за исключением не больших отличий, таких как номера строк, хотя точно не знаю
3) непосредственно та строка/подстрока, которая была добавлена/изменена, будет выделяться жирным шрифтом
4) все изменения будут делаться снизу-вверх по файлу, чтобы номера строк не отличались от оригинального файла
5) все пути будут указнанны относительно корневого каталога веб-сервера


Приступим =)

Для начала добавим сам текст, который будет отображаться в выпадающем списке при выборе статуса заявки. Открываем файл ./locales/ru_RU.php и находим 669 строку, а после нее добавляем две строки:
 $LANG["joblist"][28]="В процессе (доработка)";
$LANG["joblist"][29]="Закрыто (решено и проверено)";
С этим готово. Теперь сделаем так, чтобы при создании/именении заявки у нас была возможность указать новые статусы. Для этого открываем файл ./inc/dropdown.function.php и сразу после 1095 строкой пишем:
case "finalize" :
return $LANG["joblist"][28];
break;
case "verified_and_closed" :
return $LANG["joblist"][29];
break;
Тут "finalize" и "verified_and_closed" внутренние имена наших новых статусов, чтобы можно было к ним обращаться в коде GLPI. Программисты поймут, а тем кто не знает программирование поясню подробнее... Когда ты выбираешь из списка статус то видишь что-то типа "В процессе (доработка)", это не имя, как могут подумать некоторые, а значение статуса. Имя мы вибираем сами, в моем случае это "finalize". Такое имя должно быть уникально во всем коде программы. Поэтому важно выбрать внутреннее имя статуса так, чтобы оно было уникальным в программе. Надеюсь ты меня понял :)

Теперь поднимаемся еще выше до строки 1866, в которой объявлена функция dropdownStatus(). Теперь внимание: в данном месте важен порядок (!), именно в том порядке, в котором ты сюда добавишь новые строки кода, будут отображаться статусы в своем выпадающем списке при создании/именении заявок. Я решил поставить "Закрыто (решено и проверено)" сразу после "Закрыто (решено)" поэтому добавил следующий код под строкой 1874:
echo "<option value='verified_and_closed' ".($value=="verified_and_closed"?" selected ":"").">".$LANG["joblist"][29]."</option>";
А "В процессе (доработка)" - "В процессе (назначено)" и код добавлял под строкой 1871:
echo "<option value='finalize' ".($value=="finalize"?" selected ":"").">".$LANG["joblist"][28]."</option>";
Теперь уже новые статусы для запросов работают, можешь войти в GLPI и убедиться. Но пока еще не работает с новыми статусами поиск запросов, тот самый который в меню "Поддержка > Отслеживание", т.к. он про них ничего еще не знает. Значит нам надо рассказать нашему другу "Поиску", что есть новые статусы. Для этого открываем файл ./inc/tracking.function.php и... набираемся терпения, т.к. тут поработать ручками придется больше, чем в предыдущих двух файлах вместе взятых :)) Не пугайся, ничего сложного тут нет, лучше двигайся к строке 1638 и под ней пиши вот этот код:
case "verified_and_closed": $title.=$LANG["joblist"][29];break;
а теперь поднимись чуточку выше, к строке 1635 и набери под ней вот этот код:
case "finalize": $title.=$LANG["joblist"][28];break;
Тут опять же важен порядок, как я уже писал выше, но этот порядок для заголовка PDF-экспорта. Хотя может тут порядок и не важен, но я не стал заморачивать проверками и сделал именно так.
Едим дальше вверх :) до строки 1386 и вставляем под ней вот этот код:
case "finalize": $where.=" ( glpi_tracking.status = 'finalize' )"; break;
case "verified_and_closed": $where.=" ( glpi_tracking.status = 'verified_and_closed' )"; break;
Теперь идем на три шага выше, т.е. к строке 1383 и приводим ее вот к такому виду (ориентируйся по жирному шрифту):
case "old_done": $where.=" ( glpi_tracking.status = 'old_done' OR glpi_tracking.status = 'verified_and_closed' )"; break;
теперь еще выше и правим 3 строки с 1379 по 1381 (опять по жирному):
case "notold": $where.=" (glpi_tracking.status = 'new' OR glpi_tracking.status = 'plan' OR glpi_tracking.status = 'assign' OR glpi_tracking.status = 'waiting' OR glpi_tracking.status = 'finalize')"; break;
case "old": $where.=" ( glpi_tracking.status = 'old_done' OR glpi_tracking.status = 'old_notdone' OR glpi_tracking.status = 'verified_and_closed')"; break;
case "process": $where.=" ( glpi_tracking.status = 'plan' OR glpi_tracking.status = 'assign' OR glpi_tracking.status = 'finalize' )"; break;
Тремя правками выше мы рассказали нашему другу "Поиску" какие статусы к каким категориям относить. Если ты не понял о чем я, зайди в GLPI в поиск и посмотри, что есть в выпадающем списке "Статус"... Вот-вот, Эти самые все "Не закрыто" и т.п. это и есть группы, т.е. сюда попадают заявки с разными статусами, которые можно объеденить в одну логическую группу. Что-что??? Там еще нет новых статусов? Не пугайся, еще надо 4 строчки добавить в этот файлик и 1 изменить и будут видны новые статусы. Надеюсь ты еще не устал :)

Пришло время научить расширенную форму поиска видеть новые статусы. Для этого поднимаемся до строки 1103 и под ней набираем такой код:
echo "<option value='verified_and_closed' ".($status=="verified_and_closed"?"selected":"").">".$LANG["joblist"][29]."</option>";
а чуть выше, в под строкой 1100 вот такой:
echo "<option value='finalize' ".($status=="finalize"?"selected":"").">".$LANG["joblist"][28]."</option>";


Отлично. Осталось 2 строки добавить, чтобы научить простой поиск видеть новые статусы. Лезь еще выше, остановка на строке 968, под которой пиши вот этот воть код:
echo "<option value='verified_and_closed' ".($status=="verified_and_closed"?"selected":"").">".$LANG["joblist"][28]."</option>";
а под строкой 965, вот такой:
echo "<option value='finalize' ".($status=="finalize"?"selected":"").">".$LANG["joblist"][28]."</option>";
И последняя строка, в которой надо сделать правку, ее номер 317 (правь в ней код, ориентируйся по жирному):
$where = "(status = 'old_done' OR status = 'old_notdone' OR status = 'verified_and_closed')";
Этой правкой мы рассказали GLPI какие запросы считать закрытыми.

Уф... В принципе это все... Но только в принципе :) Почему? Иди GLPI и сделай новую заявку, присвой ей один из новых статусов. А теперь иди в Поддержка > Отслеживание. Что видишь? Да-да, для новых статусов нет значков :( Не хорошо получается, да? Давай это исправим :)
Иди в папку ./pics и скопируй куда-нибудь файлы new.png, assign.png, plan.png, waiting.png, old_done.png, old_notdone.png, они тебе послужат образцом. Как же надо обозвать новые файлы? Да очень просто: именно такими именами, которые мы присвоили нашим новым статусам (имеются ввиду внутренние имена), т.е. finalize.png и verified_and_closed.png соответственно для "В процессе (доработка)" и "Проверено и закрыто".

Вот теперь полностью все =)


ЗЫЖ На всякий резервный: архив, в котором оригинальные файлы, измененные, diff-патчи и иконки, которые я сделал для этих статусов =)

Похожие статьи

2 коммент.:

Анонимный комментирует... четверг, 17 декабря 2009 г. в 18:04:00 GMT+2

Большое спасибо за статью ! Правда в последней версии (0.72.3) номера строк не совпадают, но это не страшно, по смыслу можно догадаться даже не будучи программистом :)

Unknown комментирует... четверг, 17 декабря 2009 г. в 18:06:00 GMT+2

Всегда пожалуйста :)

Конечно не совпадают :) Для чего я и указал версию в посте. Фишка же в том, что код то правят разарбочики, а значит кол-во строк меняется и нужная нам строка смещается :)

Отправить комментарий