Добавлен новый статус Mantis, но исчерпаны значения перечисления

Мне интересно, есть ли у вас какие-либо мысли по этому поводу: мы хотим добавить еще один статус в определенное «место» между двумя статусами, но у нас закончилось перечисление для него.

Перечисление выглядит так:

$s_status_enum_string = "10:new,20:feedback,40:confirmed,50:assigned,52:in progress,53:code review pending,54:merge pending, 56:merged, 58:resolved, 60:testing, 70:tested, 90:closed, 91:updating test documentation";

И я хочу добавить новый статус между 52 и 53, чтобы в выпадающем меню для статуса они отображались в нужном порядке.

Я пробовал разные вещи, включая изменение определений файла .php, а затем обновление поля статуса таблицы MySQL в mantis_bug_table, но это испортило все представления и фильтры.

Любые идеи?


person Arkandel    schedule 18.08.2015    source источник


Ответы (2)


Следующие шаги могут помочь вам:

  1. Переопределите строку перечисления в соответствии с вашими требованиями.
  2. Подготовьте трассируемость с вашими текущими значениями перечисления
  3. Обновите поле статуса в таблице ошибок новыми значениями.
  4. Добавьте перечисление в config.php
  5. Возможно, вам придется сбросить ваши предыдущие фильтры. Критерии фильтра хранятся в виде сериализованной строки, и ее очень сложно изменить.
person libregeek    schedule 20.08.2015
comment
Спасибо за это. Вы случайно не знаете, где на самом деле хранится эта сериализованная строка? - person Arkandel; 21.08.2015
comment
Спасибо! Я написал простой PHP-скрипт, который выполняет преобразование. Когда этот проект закончится, я опубликую его здесь, если кому-то понадобится такая вещь. - person Arkandel; 25.08.2015
comment
@Arkandel расскажи пожалуйста подробно как ты увеличил количество статусов?? - person Sharp Edge; 01.10.2015
comment
@libregeek, не могли бы вы объяснить пункты 2, 3 и 4? Я с трудом пытаюсь увеличить количество статусов богомола.. Пока могу изменить только текущие, но не могу увеличить статусы.. - person Sharp Edge; 01.10.2015

Если у кого-то есть проблемы с этим, вам нужно изменить следующее:

В config_inc.php измените $g_status_enum_string, чтобы перечислить новые статусы по своему усмотрению.

В custom_constants_inc.php обязательно сделайте то же самое, что и выше.

В базе данных запустите команды SQL, например:

UPDATE mantisclone.mantis_bug_table SET status=100 WHERE status=10;

изменить фактические записи для существующих идентификаторов состояния на новые.

В custom_strings_inc.php измените $s_status_enum_string и введите новые статусы. Например, один из моих был:

$s_sanity_test_bug_title = "Set Issue Sanity Test";
$s_sanity_test_bug_button = "Issue Sanity Test Pending";
$s_email_notification_title_for_sanity_test = "The following issue is NOW SANITY TEST PENDING";

Наконец, вам понадобится небольшой скрипт для изменения существующих пронумерованных значений в mantis_filters_table. Это было мое, измените его, как считаете нужным:

<?php
$mantisDB="myMantisDatabaseName";
mysql_connect("localhost", "XXXX", "YYYY") or die("Could not connect: " . mysql_error());
mysql_select_db($mantisDB);

$result = mysql_query("SELECT id, filter_string FROM $mantisDB.mantis_filters_table");

function parseRecord($statusArray)
{
    $newStatus = array( "10" => "100",
            "20" => "200",
            "50" => "300",
            "52" => "400",
            "53" => "500",
            "54" => "540",
            "56" => "560",
            "58" => "580",
            "60" => "600",
            "70" => "700",
            "75" => "450",
            "90" => "900",
            "91" => "910"
);

foreach ($statusArray as $key=>$value)
{
    if(array_key_exists($value, $newStatus))
        {
            echo "Found value $value, replacing it with " . $newStatus[$value] . "\n";
            $statusArray[$key] = (int)$newStatus[$value];
        }
    }
}

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$statusID = $row["id"];
$serializedString = $row["filter_string"];
$unserializedArray = unserialize(substr($serializedString,3)); // There's a prepended 'v8#' string in there, don't know why.

parseRecord(&$unserializedArray["hide_status"]);
parseRecord(&$unserializedArray["show_status"]);

$newSerialized = "v8#".serialize($unserializedArray);

// echo $newSerialized;

$changeStatus = mysql_query("UPDATE $mantisDB.mantis_filters_table SET filter_string='$newSerialized' WHERE id=$statusID");
}

mysql_free_result($result);
?>

Я надеюсь, что это сработает, дайте мне знать, если у вас возникнут какие-либо проблемы.

person Arkandel    schedule 27.11.2015