1

我正在定制 Mantis bugtracker 1.2.8 版的安装,以在错误报告页面上包含一个动态自定义枚举字段。我能够弄清楚如何设置动态枚举并创建相应的函数来生成它的可能值。这是我到目前为止所拥有的:

管理 -> 管理自定义字段 -> “旧作业编号”

名称:“旧作业编号”
类型:枚举
可能的值:=legacy_job_number
默认值:0
读写访问权限:查看器
最小。长度:
最大1 长度:0
添加到过滤器:选中
创建作业时
显示:选中 更新作业时显示:选中

custom_functions_inc.php

function custom_function_override_enum_legacy_job_number() {
    $t_project_name = project_get_name( helper_get_current_project() );
    $t_job_time_code = htmlentities(trim(substr(date('U'), 6, 9)));
    $t_project_description = project_get_field( helper_get_current_project(), 'description', '' );

    $t_project_description = "$t_project_description";
    $t_job_code = $t_project_description . "2012" . $t_job_time_code; 
    $t_possible_values_array = array("", "$t_job_code");

    $t_possible_values = implode( '|', $t_possible_values_array );

    return $t_possible_values;
}

我遇到的问题是,每次我尝试提交新工作或更新现有工作并按原样附加“旧作业编号”字段时,我都会收到应用程序错误 #1303,“字段值无效”旧作业数字”。'

我已将问题追溯到 $t_job_time_code = htmlentities(trim(substr(date('U'), 6, 9))); 生成的时间戳值。-- 如果我删除它,错误报告会很好地提交。(如您所见,我只是在 $t_job_code 中硬编码日期,这并不理想,但可以。)

我最终想要做的是将一个四位数的数字附加到“遗留作业编号”字符串中,该字符串有 99.99% 的可能性是唯一的,因为它将用于识别特定的错误。我认为使用时间戳会很好地解决这个问题,因为它会不断增加,但显然 Mantis 不喜欢这样。我已经尝试了许多变体,并且真的不想使用由 rand() 或 mt_rand() 生成的随机数,因为这仍然可能导致重复。

任何人都可以帮助解释(1)为什么会发生这种情况,以及(2)我可能会尝试解决什么问题?

非常感谢您的考虑和帮助。

最好的,彼得

4

1 回答 1

0

在完成额外的分析后,我对导致问题的原因有了一个可靠的理论。我发现我能够使用 date("Y") 和 date("m") 来生成表单的字符串

201207

当提交包含此字符串的错误报告时,令我惊讶的是它运行良好。最后一个障碍是“工作代码”末尾的唯一编号。我发现如果我使用 date('U'), 6, 9 生成最后三个数字,每次提交错误报告都失败,可能是因为最后一个数字每秒都在变化。

但是,如果我使用 date('U'), 4, 3 并提交错误报告,它就可以工作。根据我的粗略计算,这个字符串中的最后一个数字——在整个 UNIX 时间戳的上下文中为 0000001000——每 16 分钟变化一次。正如我最初提到的,我需要某种方法来生成唯一编号。我相信我的第一种方法不起作用,因为最初加载错误报告页面时,创建了一个“作业代码”。假设它是“ADM2012447”。但是由于 Unix 时间戳不断增加,提交错误报告会导致与错误报告一起提交的不同的3 位数字,这是 Mantis 不喜欢的。

同样,这只是一个可靠的理论,而不是一个已证实的事实。如果我错了,请纠正我。

作为我解决方案的最后一句话,我意识到如果在任何给定的 16 分钟窗口内提交了两个或更多错误报告,它们很可能具有相同的工作代码编号。如果确实发生这种情况,根据系统使用情况,它可能会非常孤立,即使不是,Mantis 自己独特的错误编号系统也可以轻松区分。

感谢所有阅读并考虑过这个问题的人。

于 2012-07-04T17:03:13.887 回答