diff --git a/db/update10.0.sql b/db/update10.0.sql
index ff6c47d325..4ff46c29e9 100644
--- a/db/update10.0.sql
+++ b/db/update10.0.sql
@@ -2,6 +2,8 @@ ALTER TABLE `zt_storyspec` CHANGE `title` `title` varchar(255) NOT NULL;
update `zt_todo` set assignedTo = 'closed', assignedDate = closedDate where status = 'closed';
DROP TABLE IF EXISTS `zt_webhookdatas`;
+ALTER TABLE `zt_webhook` ADD `domain` varchar(255) NOT NULL AFTER `url`;
+
ALTER TABLE `zt_action` DROP INDEX `action`;
ALTER TABLE `zt_action` ADD INDEX `date` (`date`);
ALTER TABLE `zt_action` ADD INDEX `actor` (`actor`);
diff --git a/db/zentao.sql b/db/zentao.sql
index 9e768e7cd8..8ba89ddff6 100644
--- a/db/zentao.sql
+++ b/db/zentao.sql
@@ -896,6 +896,7 @@ CREATE TABLE IF NOT EXISTS `zt_webhook` (
`type` varchar(10) NOT NULL DEFAULT 'default',
`name` varchar(50) NOT NULL,
`url` varchar(255) NOT NULL,
+ `domain` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL DEFAULT 'application/json',
`sendType` enum('sync','async') NOT NULL DEFAULT 'sync',
`products` text NOT NULL,
diff --git a/module/webhook/lang/en.php b/module/webhook/lang/en.php
index de81884c53..024f07ca56 100644
--- a/module/webhook/lang/en.php
+++ b/module/webhook/lang/en.php
@@ -16,6 +16,7 @@ $lang->webhook->id = 'ID';
$lang->webhook->type = 'Type';
$lang->webhook->name = 'Name';
$lang->webhook->url = 'Webhook Address';
+$lang->webhook->domain = 'Zentao Domain';
$lang->webhook->contentType = 'Content Type';
$lang->webhook->sendType = 'Send Type';
$lang->webhook->product = "{$lang->productCommon}";
diff --git a/module/webhook/lang/zh-cn.php b/module/webhook/lang/zh-cn.php
index 0a18d0c807..490891e904 100644
--- a/module/webhook/lang/zh-cn.php
+++ b/module/webhook/lang/zh-cn.php
@@ -16,6 +16,7 @@ $lang->webhook->id = 'ID';
$lang->webhook->type = '类型';
$lang->webhook->name = '名称';
$lang->webhook->url = 'Hook地址';
+$lang->webhook->domain = '禅道域名';
$lang->webhook->contentType = '内容类型';
$lang->webhook->sendType = '发送方式';
$lang->webhook->product = "关联{$lang->productCommon}";
diff --git a/module/webhook/model.php b/module/webhook/model.php
index cb183a6074..67aebe12ce 100644
--- a/module/webhook/model.php
+++ b/module/webhook/model.php
@@ -220,7 +220,7 @@ class webhookModel extends model
$object = $this->dao->select('*')->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch();
$field = $this->config->action->objectNameFields[$objectType];
- $host = common::getSysURL();
+ $host = empty($webhook->domain) ? common::getSysURL() : $webhook->domain;
$viewLink = $this->getViewLink($objectType, $objectID);
$title = $this->app->user->realname . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType];
$text = $title . ' ' . "[#{$objectID}::{$object->$field}](" . $host . $viewLink . ")";
diff --git a/module/webhook/view/create.html.php b/module/webhook/view/create.html.php
index 2863fb8b33..cf5e319afd 100644
--- a/module/webhook/view/create.html.php
+++ b/module/webhook/view/create.html.php
@@ -35,6 +35,11 @@
|
webhook->note->typeList['default'];?> |
+
+ | webhook->domain;?> |
+ |
+ |
+
| webhook->sendType;?> |
webhook->sendTypeList, '', "class='form-control'");?> |
diff --git a/module/webhook/view/edit.html.php b/module/webhook/view/edit.html.php
index 8c5fdf9314..3e80b11187 100644
--- a/module/webhook/view/edit.html.php
+++ b/module/webhook/view/edit.html.php
@@ -34,6 +34,11 @@
url, "class='form-control'");?> |
webhook->note->typeList, $webhook->type);?> |
+
+ | webhook->domain;?> |
+ domain, "class='form-control'");?> |
+ |
+
type != 'dingding'):?>
| webhook->sendType;?> |
diff --git a/www/js/zui/min.js b/www/js/zui/min.js
index 0572f1ebd9..e437f010c9 100644
--- a/www/js/zui/min.js
+++ b/www/js/zui/min.js
@@ -74,10 +74,5 @@ if(!t.fn.droppable)return void console.error("Sortable requires droppable.js");v
* Original idea by:
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
*/
-<<<<<<< HEAD
function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var s="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],o=String.fromCharCode(e.which).toLowerCase(),a="",r={};e.altKey&&"alt"!==s&&(a+="alt+"),e.ctrlKey&&"ctrl"!==s&&(a+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==s&&(a+="meta+"),e.shiftKey&&"shift"!==s&&(a+="shift+"),s?r[a+s]=!0:(r[a+o]=!0,r[a+t.hotkeys.shiftNums[o]]=!0,"shift+"===a&&(r[t.hotkeys.shiftNums[o]]=!0));for(var l=0,h=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t){"use strict";function e(e,i){if(e===!1)return e;if(!e)return i;e===!0?e={add:!0,"delete":!0,edit:!0,sort:!0}:"string"==typeof e&&(e=e.split(","));var n;return t.isArray(e)&&(n={},t.each(e,function(e,i){t.isPlainObject(i)?n[i.action]=i:n[i]=!0}),e=n),t.isPlainObject(e)&&(n={},t.each(e,function(e,i){i?n[e]=t.extend({type:e},a[e],t.isPlainObject(i)?i:null):n[e]=!1}),e=n),i?t.extend(!0,{},i,e):e}function i(e,i,n){return i=i||e.type,t(n||e.template).addClass("tree-action").attr(t.extend({"data-type":i,title:e.title||""},e.attr)).data("action",e)}var n="zui.tree",s=0,o=function(e,i){this.name=n,this.$=t(e),this.getOptions(i),this._init()},a={sort:{template:''},add:{template:''},edit:{template:''},"delete":{template:''}};o.DEFAULTS={animate:null,initialState:"normal",toggleTemplate:''},o.prototype.add=function(e,i,n,s,o){var a,r=t(e),l=this.options;if(r.is("li")?(a=r.children("ul"),a.length||(a=t(""),r.append(a),this._initList(a,r))):a=r,a){var h=this;t.isArray(i)||(i=[i]),t.each(i,function(e,i){var n=t("").data(i).appendTo(a);void 0!==i.id&&n.attr("data-id",i.id);var s=l.itemWrapper?t(l.itemWrapper===!0?'':l.itemWrapper).appendTo(n):n;if(i.html)s.html(i.html);else if(t.isFunction(h.options.itemCreator)){var o=h.options.itemCreator(n,i);o!==!0&&o!==!1&&s.html(o)}else i.url?s.append(t("",{href:i.url}).text(i.title||i.name)):s.append(t("").text(i.title||i.name));h._initItem(n,i.idx||e,a,i),i.children&&i.children.length&&h.add(n,i.children)}),this._initList(a),n&&!a.hasClass("tree")&&h.expand(a.parent("li"),s,o)}},o.prototype.reload=function(e){var i=this;e&&(i.$.empty(),i.add(i.$,e)),i.isPreserve&&i.store.time&&i.$.find("li:not(.tree-action-item)").each(function(){var e=t(this);i[i.store[e.data("id")]?"expand":"collapse"](e,!0,!0)})},o.prototype._initList=function(n,s,o,a){var r=this;n.hasClass("tree")?(o=0,s=null):(s=(s||n.closest("li")).addClass("has-list"),s.find(".list-toggle").length||s.prepend(this.options.toggleTemplate),o=o||s.data("idx"));var l=n.attr("data-idx",o||0).children("li:not(.tree-action-item)").each(function(e){r._initItem(t(this),e+1,n)});1!==l.length||l.find("ul").length||l.addClass("tree-single-item"),a=a||(s?s.data():null);var h=e(a?a.actions:null,this.actions);if(h){if(h.add&&h.add.templateInList!==!1){var c=n.children("li.tree-action-item");c.length?c.detach().appendTo(n):t('').append(i(h.add,"add",h.add.templateInList)).appendTo(n)}h.sort&&n.sortable(t.extend({dragCssClass:"tree-drag-holder",trigger:".sort-handler",selector:"li:not(.tree-action-item)",finish:function(t){r.callEvent("action",{action:h.sort,$list:n,target:t.target,item:a})}},h.sort.options,t.isPlainObject(this.options.sortable)?this.options.sortable:null))}s&&(s.hasClass("open")||a&&a.open)&&s.addClass("open in")},o.prototype._initItem=function(n,s,o,a){if(void 0===s){var r=n.prev("li");s=r.length?r.data("idx")+1:1}if(o=o||n.closest("ul"),n.attr("data-idx",s).removeClass("tree-single-item"),!n.data("id")){var l=s;o.hasClass("tree")||(l=o.parent("li").data("id")+"-"+l),n.attr("data-id",l)}a=a||n.data();var h=e(a.actions,this.actions);if(h){var c=n.find(".tree-actions");c.length||(c=t('').appendTo(this.options.itemWrapper?n.find(".tree-item-wrapper"):n),t.each(h,function(t,e){e&&c.append(i(e,t))}))}var d=n.children("ul");d.length&&this._initList(d,n,s,a)},o.prototype._init=function(){var i=this.options,o=this;this.actions=e(i.actions),this.$.addClass("tree"),i.animate&&this.$.addClass("tree-animate"),this._initList(this.$);var a=i.initialState,r=t.zui&&t.zui.store&&t.zui.store.enable;r&&(this.selector=n+"::"+(i.name||"")+"#"+(this.$.attr("id")||s++),this.store=t.zui.store[i.name?"get":"pageGet"](this.selector,{})),"preserve"===a&&(r?this.isPreserve=!0:this.options.initialState=a="normal"),this.reload(i.data),r&&(this.isPreserve=!0),"expand"===a?this.expand():"collapse"===a&&this.collapse(),this.$.on("click",'.list-toggle,a[href="#"],.tree-toggle',function(e){var i=t(this),n=i.parent("li");o.callEvent("hit",{target:n,item:n.data()}),o.toggle(n),i.is("a")&&e.preventDefault()}).on("click",".tree-action",function(){var e=t(this),i=e.data();if(i.action&&(i=i.action),"sort"!==i.type){var n=e.closest("li:not(.tree-action-item)");o.callEvent("action",{action:i,target:this,$item:n,item:n.data()})}})},o.prototype.preserve=function(e,i,n){if(this.isPreserve)if(e)i=i||e.data("id"),n=void 0===n&&e.hasClass("open"),n?this.store[i]=n:delete this.store[i],this.store.time=(new Date).getTime(),t.zui.store[this.options.name?"set":"pageSet"](this.selector,this.store);else{var s=this;this.store={},this.$.find("li").each(function(){s.preserve(t(this))})}},o.prototype.expand=function(t,e,i){t?(t.addClass("open"),!e&&this.options.animate?setTimeout(function(){t.addClass("in")},10):t.addClass("in")):t=this.$.find("li.has-list").addClass("open in"),i||this.preserve(t),this.callEvent("expand",t,this)},o.prototype.show=function(e,i,n){var s=this;e.each(function(){var e=t(this);if(s.expand(e,i,n),e)for(var o=e.parent("ul");o&&o.length&&!o.hasClass("tree");){var a=o.parent("li");a.length?(s.expand(a,i,n),o=a.parent("ul")):o=!1}})},o.prototype.collapse=function(t,e,i){t?!e&&this.options.animate?(t.removeClass("in"),setTimeout(function(){t.removeClass("open")},300)):t.removeClass("open in"):t=this.$.find("li.has-list").removeClass("open in"),i||this.preserve(t),this.callEvent("collapse",t,this)},o.prototype.toggle=function(t){var e=t&&t.hasClass("open")||t===!1||void 0===t&&this.$.find("li.has-list.open").length;this[e?"collapse":"expand"](t)},o.prototype.getOptions=function(e){this.options=t.extend({},o.DEFAULTS,this.$.data(),e),null===this.options.animate&&this.$.hasClass("tree-animate")&&(this.options.animate=!0)},o.prototype.toData=function(e,i){t.isFunction(e)&&(i=e,e=null),e=e||this.$;var n=this;return e.children("li:not(.tree-action-item)").map(function(){var e=t(this),s=e.data();delete s["zui.droppable"];var o=e.children("ul");return o.length&&(s.children=n.toData(o)),t.isFunction(i)?i(s,e):s}).get()},o.prototype.callEvent=function(e,i){var n;return t.isFunction(this.options[e])&&(n=this.options[e](i,this)),this.$.trigger(t.Event(e+"."+this.name,i)),n},t.fn.tree=function(e,i){return this.each(function(){var s=t(this),a=s.data(n),r="object"==typeof e&&e;a||s.data(n,a=new o(this,r)),"string"==typeof e&&a[e](i)})},t.fn.tree.Constructor=o,t(function(){t('[data-ride="tree"]').tree()})}(jQuery),function(t){"use strict";var e="zui.colorPicker",i='',n={zh_cn:{errorTip:"不是有效的颜色值"},zh_tw:{errorTip:"不是有效的顏色值"},en:{errorTip:"Not a valid color value"}},s=function(i,n){this.name=e,this.$=t(i),this.getOptions(n),this.init()};s.DEFAULTS={colors:["#00BCD4","#388E3C","#3280fc","#3F51B5","#9C27B0","#795548","#F57C00","#F44336","#E91E63"],pullMenuRight:!0,wrapper:"btn-wrapper",tileSize:30,lineCount:5,optional:!0,tooltip:"top",icon:"caret-down",updateBtn:"auto"},s.prototype.init=function(){var e=this,n=e.options,s=e.$,o=s.parent(),a=!1;o.hasClass("colorpicker")?e.$picker=o:(e.$picker=t(n.template||i),a=!0),e.$picker.addClass(n.wrapper).find(".cp-title").toggle(void 0!==n.title).text(n.title),e.$menu=e.$picker.find(".dropdown-menu").toggleClass("pull-right",n.pullMenuRight),e.$btn=e.$picker.find(".btn.dropdown-toggle"),e.$btn.find(".ic").addClass("icon-"+n.icon),n.btnTip&&e.$picker.attr("data-toggle","tooltip").tooltip({title:n.btnTip,placement:n.tooltip,container:"body"}),s.attr("data-provide",null),a&&s.after(e.$picker),e.colors={},t.each(n.colors,function(i,n){if(t.zui.Color.isColor(n)){var s=new t.zui.Color(n);e.colors[s.toCssStr()]=s}}),e.updateColors(),e.$picker.on("click",".cp-tile",function(){e.setValue(t(this).data("color"))});var r=function(){var i=s.val(),o=t.zui.Color.isColor(i);s.parent().toggleClass("has-error",!(o||n.optional&&""===i)),o?e.setValue(i,!0):n.optional&&""===i?s.tooltip("hide"):s.is(":focus")||s.tooltip("show",n.errorTip)};s.is("input:not([type=hidden])")?(n.tooltip&&s.attr("data-toggle","tooltip").tooltip({trigger:"manual",placement:n.tooltip,tipClass:"tooltip-danger",container:"body"}),s.on("keyup paste input change",r)):s.appendTo(e.$picker),r()},s.prototype.addColor=function(e){e instanceof t.zui.Color||(e=new t.zui.Color(e));var i=e.toCssStr(),n=this.options;this.colors[i]||(this.colors[i]=e);var s=t('',{titile:e}).data("color",e).css({color:e.contrast().toCssStr(),background:i,"border-color":e.luma()>.43?"#ccc":"transparent"}).attr("data-color",i);this.$menu.append(t("").css({width:n.tileSize,height:n.tileSize}).append(s)),n.optional&&this.$menu.find(".cp-tile.empty").parent().detach().appendTo(this.$menu)},s.prototype.updateColors=function(e){var i=(this.$picker,this.$menu.children("li:not(.heading)").remove()),n=this.options,e=e||this.colors,s=this,o=0;if(t.each(e,function(t,e){s.addColor(e),o++}),n.optional){var a=t('').css({width:n.tileSize,height:n.tileSize});this.$menu.append(a),o++}i.css("width",Math.min(o,n.lineCount)*n.tileSize+6)},s.prototype.setValue=function(e,i){var n=this,s=n.options,o=n.$btn;n.$menu.find(".cp-tile.active").removeClass("active");var a="",r=s.updateBtn;if("auto"===r){var l=o.find(".color-bar");r=!l.length||function(t){l.css("background",t||"")}}if(e){var h=new t.zui.Color(e);a=h.toCssStr().toLowerCase(),r&&(t.isFunction(r)?r(a,o,n):o.css({background:a,color:h.contrast().toCssStr(),borderColor:h.luma()>.43?"#ccc":a})),n.colors[a]||n.addColor(h),i||n.$.val().toLowerCase()===a||n.$.val(a).trigger("change"),n.$menu.find('.cp-tile[data-color="'+a+'"]').addClass("active"),n.$.tooltip("hide"),n.$.trigger("colorchange",h)}else r&&(t.isFunction(r)?r(null,o,n):o.attr("style",null)),i||""===n.$.val()||n.$.val(a).trigger("change"),s.optional&&n.$.tooltip("hide"),n.$menu.find(".cp-tile.empty").addClass("active"),n.$.trigger("colorchange",null);s.updateBorder&&t(s.updateBorder).css("border-color",a),s.updateBackground&&t(s.updateBackground).css("background-color",a),s.updateColor&&t(s.updateColor).css("color",a),s.updateText&&t(s.updateText).text(a)},s.prototype.getOptions=function(e){var i=t.extend({},s.DEFAULTS,this.$.data(),e);"string"==typeof i.colors&&(i.colors=i.colors.split(","));var o=(i.lang||t.zui.clientLang()).toLowerCase();i.errorTip||(i.errorTip=n[o].errorTip),t.fn.tooltip||(i.btnTip=!1),this.options=i},t.fn.colorPicker=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},t.fn.colorPicker.Constructor=s,t(function(){t('[data-provide="colorpicker"]').colorPicker()})}(jQuery),function(t,e){function i(t){return t===e&&(t=n+=1),s[t%s.length]}var n=0,s=["#00a9fc","#ff5d5d","#fdc137","#00da88","#7ec5ff","#8666b8","#bd7b46","#ff9100","#ff3d00","#f57f17","#00e5ff","#00b0ff","#2979ff","#3d5afe","#651fff","#d500f9","#f50057","#ff1744"];jQuery.fn.tableChart=function(){t(this).each(function(){var e=t(this),n=e.data(),s=n.chart||"pie",o=t(n.target);if(o.length){var a=null;if("pie"===s){n=t.extend({scaleShowLabels:!0,scaleLabel:"<%=label%>: <%=value%>"},n);var r=[],l=e.find("tbody > tr").each(function(e){var n=t(this),s=i();n.attr("data-id",e).find(".chart-color-dot").css("background",s),r.push({label:n.find(".chart-label").text(),value:parseInt(n.find(".chart-value").text()),color:s,id:e})});r.length>1?n.scaleLabelPlacement="outside":1===r.length&&(n.scaleLabelPlacement="inside",r.push({label:"",value:r[0].value/2e3,color:"#fff",showLabel:!1})),a=o.pieChart(r,n),o.on("mousemove",function(t){var e=a.getSegmentsAtEvent(t);l.removeClass("active"),e.length&&l.filter('[data-id="'+e[0].id+'"]').addClass("active")})}else if("bar"===s){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=o.barChart(r,n)}else if("line"===s){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=o.lineChart(r,n)}null!==a&&e.data("zui.chart",a)}})};var o=function(i,n){var s=t(i);if(!s.data("initProgressPie")){s.data("initProgressPie",1);var o=s.is("canvas")?s:s.find("canvas"),a=t.extend({value:0,color:t.getThemeColor("primary")||"#006af1",backColor:t.getThemeColor("pale")||"#E9F2FB",doughnut:!0,doughnutSize:85,width:20,height:20,showTip:!1,name:"",tipTemplate:"<%=value%>%",animation:"auto",realValue:parseFloat(s.find(".progress-value").text())},n,s.data()),r=o.length;r||(o=t("