禅道博客

分享专业技术知识,文章内容干货满满

Bug强制归因插件学习分享

2023-12-21 15:04:59
庞翠爽
原创 468
摘要:本文是一些关于Bug强制归因插件的学习心得整理。

1.找到bug归因插件,将插件包压缩后,在旗舰版安装插件。

2.安装后会发现在bug详情页会显示归因按钮。


3.插件初步实现逻辑为:

4.接下来我们先进入扩展目录,参考model层原有代码,定位到处理解决按钮显示的位置。

再去数据库查看bug归因表的表结构,从而确定我们的sql查询语句。


其中fetchAll()方法,可以去dao目录下查看该方法的具体定义,我们的运行目录/lib/base/dao/dao.class.php存放的都是数据库的一些封装的方法。

接下来我们在页面调试下,可以发现未归因的bug详情页已经不显示解决按钮了。


但是进入列表页,发现此时解决按钮直接不显示了,而我们要做的是始终显示解决按钮,未归因的bug解决按钮置灰显示。

我们可以在页面调试,发现操作栏按钮的class属性,加上disabled即可实现置灰显示。

我们再进入扩展目录的bug模块的model层下的文件,接着我们要做的是,根据当前页面是否为browse列表页,bug是否归因,确定解决按钮是否置灰显示。

代码修改后,然后来页面调试看看吧,这时候也需要注意测下有没有影响到详情页的解决按钮展示情况。


5.接下来就进入研究列表页的批量解决按钮环节。

我这边的思路是:若选中数据存在未归因的bug,点批量解决时,弹窗提示未归因的bugID,点击确定后,已归因未解决的bug会更新解决方案和状态,未归因的不做操作,已归因已解决的不做修改。

我们先进入module/bug/model.php文件,查看批量解决方法的定义。


我们可以考虑这样做:


array_diff()方法可以参考php手册,最好自己动手调试,印象会更深刻。

如果觉得看手册还不够清晰,可以直接调试一下,在我们的测试环境输入php -a,即可进入php的交互式运行环境。

接下来对弹窗进行处理,可以调用js::confirm()方法实现,弹框内容结合implode()方法实现。


最后来看看实现效果吧。

6.还有地盘--待处理和贡献下的bug列表。

我们再来看看吧,先结合F12找到操作栏对应的class属性值,再去my模块的view目录下bug.html.php文件定位到该属性值的位置。


在实现的过程中经过结合F12才发现,属性传值的地方少了一个空格,导致拼接错误,一直未正确实现,未归因的bug解决按钮置灰显示。


我们可以看看如果‘iframe’开头未加空格,是怎么显示的。


加上空格后,拼接正确,解决按钮就按照想象的逻辑走了,未归因的bug解决按钮都置灰。



7.还有一种情况应该要考虑到,就是通过url直接访问解决页面时需要添加过滤。

比如:直接在url中修改方法名为f=resolve,我们可以考虑通过弹窗提示过滤未归因的bug解决入口。


注意:别忘了在lang中定义弹窗的语言项。

最后,我们来看看实现的效果吧!


暂时没有记录
评论通过审核后显示。