• 禅道开源改造


    1、禅道介绍

    禅道项目管理软件是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理于一体,在数据可视化、度量、DevOps、文档资产管理和自动化测试等模块的加持下,禅道软件形成了项目流程管理、DevOps 一体化、自动化测试等三大解决方案,完整的覆盖了产品研发的全生命周期管理,并且有完善的 API 可以调用,在国内深受大量企业喜爱使用。

    禅道官网目前存在四个版本:开源版、企业版、旗舰版、云禅道,对于这四个版本之间的差异,不是本文介绍的重点,感兴趣的读者可自行查阅官网介绍

    https://www.zentao.net/
    

    很多个人使用者或者中小企业,大多数选用的是开源版,开源版的好处:只有你具备开发能力,可以基于实际不同的项目管理需求,来定制系统功能。当然如果企业不差钱或者没有人手可以定制,可以花点钱购买企业版或旗舰版。

    2、禅道二开定制机制

    今天我们重点来介绍一下,禅道如何进行功能二开定制。

    首先,禅道项目管理软件是使用自主开发的zentaoPHP框架开发的。zentaoPHP框架实现了功能强大的扩展机制、API调用机制和命令行机制。您可以使用不同的机制来实现对禅道功能的修改、扩展。也可以和其他的系统进行集成,也可以部署各种自动化脚本对禅道进行各种操作。

    zentaoPHP框架的二次开发机制文档可参考:

    1. zentaoPHP框架基本使用手册:http://devel.cnezsoft.com/book/zentaophphelp.html
    2. zentaoPHP框架二次开发机制:http://devel.cnezsoft.com/book/extension.html
    

    禅道开源版项目源码:

    https://github.com/easysoft/zentaopms
    

    一、顶级目录结构:

    二、www目录:

    三、module目录:

    module目录下面总共有30多个模块,分别对应了禅道里面的某一个功能模块。整个禅道的功能,就是由这些模块组合而成。大部分定制功能代码都是在这个模块下来完成的。

    3、一键部署禅道及禅道二开定制示例

    接下来,以具体示例演示,如何在禅道里面给BUG自定义字段,其他如产品需求、项目任务定制也是一样的逻辑。

    3.1 本地Docker一键搭建禅道环境

    docker run --name zentao -p 80:80 -p 3306:3306 -v ~/www/zentaopms:/www/zentaopms -v ~/www/mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --restart always -d easysoft/zentao:18.3
    

    禅道服务启动后自带MySQL数据库服务,比如进入MySQL容器内:

    查看zt_bug表结构

    禅道的数据库命名都比较简明扼要,从字面意思应该都可以猜出来表的用途。如果还不是很清楚的话,可以到每个表对应的模块下面的语言文件里面查找。最新版本可以在禅道后台->二次开发->数据库中查看相应的表介绍,或直接查看官网文档

    https://www.zentao.net/book/zentaopmshelp/157/
    

    3.2 对BUG自定义新增字段

    示例: 比如原先提交BUG时,无法记录BUG是在哪个阶段被发现的,那么我们可以通过改造禅道,自定义增加一个【BUG发现阶段】字段

    改造定制过程:

    1、给数据库zt_bug添加新增字段【BUG发现阶段】

    ALTER TABLE zt_bug ADD COLUMN stage VARCHAR(50) AFTER title;
    

    2、修改zentaopms/module/bug/lang/zh-cn.php
    如下图,新增Bug发现阶段字段,即在合适的位置插入以下代码

    接着如下图,在合适的位置插入以下代码

    $lang->bug->stageList['review'] = '评审阶段';
    $lang->bug->stageList['dev'] = '开发自测';
    $lang->bug->stageList['test'] = '测试验证';
    $lang->bug->stageList['acceptance'] = '验收阶段';
    $lang->bug->stageList['production'] = '生产阶段';
    

    说明:这里定义的是用于存放对应字段select下拉选框中的数据,当在创建Bug/编辑Bug并保存后,会自动被存储到数据库中。笔者使用的禅道,语言设置的是中文,所以仅修改zh-cn.php

    3、修改zentaopms/module/bug/view/create.html.php (BUG新建页面)

    class='table-col'> <div class='input-group'> <span class='input-group-addon fix-border'>php echo $lang->bug->stage?>span> php echo html::select('stage', $lang->bug->stageList, $stage, "class='form-control chosen'");?> div> div>

    展示效果:

    4、修改zentaopms/module/bug/view/edit.html.php (BUG编辑页面)
    如下图,在合适的位置插入以下代码:

    js::set('stage'                 , $bug->stage);
    

    如下图,在合适的位置插入以下代码

    
     echo $lang->bug->stage;?>
     echo html::select('stage', $lang->bug->stageList, $bug->stage, "class='form-control'");?>
    
    
    

    效果展示:

    5、修改zentaopms/module/bug/view/view.html.php (BUG查看页面)

    如下图,在合适的位置插入以下代码:

    
     echo $lang->bug->stage;?>
     echo zget($lang->bug->stageList, $bug->stage, $bug->stage);?>
    
    

    效果展示:

    6、bug导出报表中增加新增的自定义字段名称

    如下,找到$config->bug->config->exportFields变量,增加新增的自定义字段名称,解决缺陷导出报表中没有新增字段的问题,如下


    展示效果:

    7、bug搜索过滤条件中增加新增的自定义字段名称

    如下,找到global $lang,在其下方合适的位置新增搜索字段,即我们自定义的字段,并给字段设置可选搜索项,解决缺陷搜索中没有新增字段问题。(需要修改两处地方)

    $config->bug->search['fields']['stage']          = $lang->bug->stage;
    

    $config->bug->search['params']['stage']          = array('operator' => '=',       'control' => 'select', 'values' => $lang->bug->stageList);
    

    效果展示:

    8、bug生成报表时新增自定义字段

    添加完字段后,bug的报表统计中没有该字段的信息,无法按照自定义的字段进行bug分析,如何将自定义的字段添加到BUG的统计报表中去。
    首先在zh-cn.php中添加新字段报表信息,打开zh-cn.php文件,添加报表统计字段

    $lang->bug->report->charts['bugsPerStage']         = '按Bug发现阶段';
    

    紧接着,添加报表以及图表空对象

    $lang->bug->report->bugsPerStage           = new stdclass();
    $lang->bug->report->bugsPerStage->graph          = new stdclass();
    

    添加图表显示字段信息

    $lang->bug->report->bugsPerStage->graph->xAxisName       = '发现阶段';
    

    其次,在module.php中新增字段统计方法, 编辑module.php信息

    /**
    * Get report data of bugs stage
    * 根据BUG发现阶段获取报表
    * @access public
    * @rerturn array
    */
    public function getDataOfBugsPerStage()
      {
        $datas = $this->dao->select('stage AS name, COUNT(*) AS value')->from(TABLE_BUG)->where($this->reportCondition())->groupBy('name')->orderBy('value DESC')->fetchAll('name');
        if(!$datas) return array();
        foreach($datas as $stage => $data) if(isset($this->lang->bug->stageList[$stage])) $data->name = $this->lang->bug->stageList[$stage];
        return $datas;
      }
    


    效果展示:

  • 相关阅读:
    linux之进程管理命令
    云计算和跨境电商:数字化未来的基石
    $refs不是响应式的
    HTML+CSS+JS环境保护网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计
    Centos6 密钥登陆,解决所选的用户密钥未在远程主机上注册
    从图文展示到以云为核,第五代验证码独有的策略情报能力
    客户端负载均衡策略:loadBalancer,ribbon
    SQL Server安装
    视频降噪一些原理
    echarts饼图label自定义样式
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/17711686.html