我正在定制Mantis bugtracker 1.2.8版的安装,以在错误报告页面上包含动态自定义枚举字段。我能够弄清楚如何设置动态枚举并创建相应的函数来生成其可能的值。以下是我到目前为止的情况:
姓名:“遗产工作号”
类型:枚举
可能的值:= legacy_job_number
默认值:0
读写访问权限:查看器
闵。长度:1
最大。长度:0
添加到过滤条件:已检查
创建作业时显示:已检查
更新作业时显示:已检查
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)我可能会尝试解决这个问题吗?
非常感谢您的考虑和帮助。
最佳, 彼得
答案 0 :(得分:0)
完成额外的分析后,我对导致问题的原因有了坚实的理论。我发现我能够使用日期(“Y”)和日期(“m”)来生成表格的字符串
201207
当提交包含此字符串的错误报告时,令我惊讶的是它工作正常。最后一个障碍是“工作代码”末尾的唯一编号。我发现如果我使用日期('U'),6,9来生成最后三个数字,每次提交错误报告失败,可能是因为最后一个数字每秒都在变化。
但是,如果我使用日期('U'),4,3并提交错误报告,则可行。通过我的粗略计算,该字符串中的最后一位数字 - 在整个UNIX时间戳的上下文中为0000001000--每16分钟略有变化。正如我最初提到的,我需要一些方法来生成一个唯一的数字。我相信我的第一种方法不起作用,因为最初加载错误报告页面时,创建了一个“作业代码”。我们说这是“ADM2012447”。但由于Unix时间戳不断增加,提交错误报告会导致与错误报告一起提交不同的 3位数字,这是Mantis不喜欢的。
同样,这只是一个坚实的理论,而不是一个确定的事实。如果我弄错了,请纠正我。
作为我的解决方案的最后一句话,我意识到如果在任何给定的16分钟窗口中提交两个或更多错误报告,它们可能具有相同的工作代码编号。如果发生这种情况,它可能会基于系统使用而相当孤立,即使不是这样,Mantis自己独特的错误编号系统也可以轻松区分。
感谢所有阅读并考虑过这个问题的人。