【问题标题】:Mantis bug tracker (mantisbt) dynamic enum custom fieldMantis bug tracker (mantisbt) 动态枚举自定义字段
【发布时间】:2012-06-25 12:42:13
【问题描述】:

我正在定制 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) 我可能会尝试解决什么问题?

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

最好, 彼得

【问题讨论】:

    标签: php customization mantis


    【解决方案1】:

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

    201207

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多