复制一个问题及其子问题是一个本机内置功能,因此工作正常。
但有没有办法多次这样做? 就像重新创造一个问题(包括其子女)二十或五十次一样?
修改2
此新功能应可通过Redmine
界面访问,并与任何浏览器兼容。
无论是全新的插件,内置复制功能的扩展,对PHP-script
的调用还是其他任何内容都无关紧要。
由于兼容性(网络,浏览器等),我想完全服务器端修改是唯一的方法。
默认插件的哪些部分(在投票tutorial中创建)或核心元素必须更改?
在哪里可以找到本机问题复制功能的代码?
或者 - 如果所有这些都太复杂了 - 我如何编写插件以指向直接操作PHP
数据库的SQL
文件?
修改:
澄清:就像正常的复制功能一样(在上下文菜单或右上角的链接中,我不在乎)我想复制一个问题及其子问题n次。 要让用户设置金额n,任何用户编号输入都可以,例如文本框,弹出窗口等。
答案 0 :(得分:1)
我认为最简单的方法是从redmine源代码修改开始。 一旦它工作,您可以继续并尝试将此功能提取到插件中。
请注意,我不是一个红宝石开发者,所以下面的一些事情只是我的猜测。但是之前我做了很少的小红族修改,希望我的想法很有用。
如果您熟悉一些MVC框架(适用于任何语言),也会更容易,因为它们大多数都具有与路由,控制器,视图和模型类似的结构。
复制单个问题的链接如下所示://redmine.myserver.com/projects/myapp/issues/12407/copy
。
我的想法是在此链接中添加num_copies
参数,并在代码中使用它来创建多个副本。
您不需要UI,一旦实现,该功能将如下工作:
copy
操作?num_copies=XX
参数添加到网址(//redmine.myserver.com/projects/myapp/issues/12407/copy?num_copies=50
)中,然后按“Enter”重新加载表单num_copies
参数现在,该怎么做。 我指的是看起来很新鲜的redmine mirror on github。
.../copy
链接的位置当您打开表单以复制问题时,您会看到如下形式:
<form action="/projects/myapp/issues" class="new_issue" id="issue-form" method="post">
<input id="copy_from" name="copy_from" type="hidden" value="12407">
<div class="box tabular">
<div id="all_attributes">
...
</form>
请注意表单操作,它指向/issues
链接,它将提交copy_from
参数(这是我们正在复制的问题的ID)。
我们可以先查看config/routes.rb
,但我们可以猜测我们需要controllers/issues_controller.rb
搜索copy_from
参数为used的地方。
您会看到build_new_issue_from_params
方法。
现在搜索它的用法,你会发现this:
before_filter :build_new_issue_from_params, :only => [:new, :create]
从它的外观来看,我猜它是在new
和create
行动之前调用的。
查看新定义和创建定义时,new
操作会呈现新的问题表单,而create
操作会处理表单帖子。
num_copies
参数添加到表单找到view file使用的new issue action。
这里有一个新问题表单的模板,尝试添加类似于copy_from的num_copies
参数:
<%= title l(:label_issue_new) %>
<%= call_hook(:view_issues_new_top, {:issue => @issue}) %>
...
<%= error_messages_for 'issue' %>
<%= hidden_field_tag 'copy_from', params[:copy_from] if params[:copy_from] %>
如果你为`num_copies添加一个类似的行,我不能100%确定它是否会起作用。您可能还需要修改route。
完成后,你应该有这样的新问题表格:
<form action="/projects/myapp/issues" class="new_issue" id="issue-form" method="post">
<input id="copy_from" name="copy_from" type="hidden" value="12407">
<input id="copy_from" name="num_copies" type="hidden" value="50">
<div class="box tabular">
<div id="all_attributes">
...
</form>
num_copies
参数应该在create action:
中完成def create
...
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
@issue.save_attachments(params[:attachments] || (params[:issue] && params[:issue][:uploads]))
if @issue.save
...
end
在这里,您已经在@issue
方法中创建了build_new_issue_from_params
变量,您需要做的是检查是否设置了num_copies
参数,如果已设置,则复制/保存循环中的@issue
以创建其他副本。
我无法为此提供确切的代码段,但它不应该非常复杂。
检查bulk_update
方法中的this代码,它看起来就像您需要的那样:
issue = orig_issue.copy({},
:attachments => copy_attachments,
:subtasks => copy_subtasks,
:link => link_copy?(params[:link_copy])
)
答案 1 :(得分:0)
我认为这个特定的插件不是Redmine社区的高优先级。 但是,您可以编写非常简单的API调用Java,Python或其他语言来执行您真正想要的操作。
在这里,您可以看到API文档如何列出,创建和更新问题。 Issue API documentation
PS:您可以将您的请求留在redmine社区, 也许你很幸运https://redmine.org/projects/redmine/issues