diff --git a/module/action/lang/en.php b/module/action/lang/en.php
index b3270ff3bf..3752cec2db 100755
--- a/module/action/lang/en.php
+++ b/module/action/lang/en.php
@@ -566,3 +566,99 @@ $lang->action->search->label['paused'] = $lang->action->label->pa
$lang->action->search->label['verified'] = $lang->action->label->verified;
$lang->action->search->label['login'] = $lang->action->label->login;
$lang->action->search->label['logout'] = $lang->action->label->logout;
+
+/* Action language config for API(JIHU) */
+$lang->action->apiTitle = new stdclass();
+$lang->action->apiTitle->opened = 'Opened.';
+$lang->action->apiTitle->created = 'Created.';
+$lang->action->apiTitle->added = 'Added.';
+$lang->action->apiTitle->changed = 'Changed.';
+$lang->action->apiTitle->edited = 'Edited.';
+$lang->action->apiTitle->assigned = 'Assigned to %s.';
+$lang->action->apiTitle->closed = 'Closed.';
+$lang->action->apiTitle->deleted = 'Deleted.';
+$lang->action->apiTitle->deletedfile = 'Deleted: %s.';
+$lang->action->apiTitle->editfile = 'Edited: %s.';
+$lang->action->apiTitle->erased = 'Erased.';
+$lang->action->apiTitle->undeleted = 'Restored.';
+$lang->action->apiTitle->hidden = 'Hidden.';
+$lang->action->apiTitle->commented = 'Commented';
+$lang->action->apiTitle->activated = 'Activated.';
+$lang->action->apiTitle->confirmed = 'Confirmed.';
+$lang->action->apiTitle->caseconfirmed = '$actor confirmed the case change. The latest build is #$extra';
+$lang->action->apiTitle->bugconfirmed = '$actor confirmed Bug.';
+$lang->action->apiTitle->frombug = 'Converted from $actor. Its ID was $extra.';
+$lang->action->apiTitle->started = 'Started by $actor.';
+$lang->action->apiTitle->restarted = 'Continued by $actor.';
+$lang->action->apiTitle->delayed = 'Postponed by $actor.';
+$lang->action->apiTitle->suspended = 'Suspended by $actor.';
+$lang->action->apiTitle->recordestimate = 'Recorded by $actor and it cost $extra hours.';
+$lang->action->apiTitle->editestimate = '$actor edited Hour.';
+$lang->action->apiTitle->deleteestimate = '$actor deleted Hour.';
+$lang->action->apiTitle->canceled = 'Cancelled by $actor.';
+$lang->action->apiTitle->svncommited = '$actor committed and the build is #$extra.';
+$lang->action->apiTitle->gitcommited = '$actor committed and the build is #$extra.';
+$lang->action->apiTitle->finished = 'Finished by $actor.';
+$lang->action->apiTitle->paused = 'Paused by $actor.';
+$lang->action->apiTitle->linked2bug = 'Linked to $extra by $actor';
+$lang->action->apiTitle->linked2testtask = 'Linked to $extra by $actor';
+$lang->action->apiTitle->resolved = 'Resolved by $actor ';
+$lang->action->apiTitle->managed = 'By $actor managed.';
+$lang->action->apiTitle->estimated = 'By $actor estimated.';
+$lang->action->apiTitle->run = 'By $actor executed.';
+$lang->action->apiTitle->tostory = "To story: {$lang->SRCommon}";
+$lang->action->apiTitle->createchildren = 'Create children %s.';
+$lang->action->apiTitle->linkchildtask = 'Link a child task %s.';
+$lang->action->apiTitle->unlinkchildrentask = 'Unlink a child task %s.';
+$lang->action->apiTitle->linkparenttask = 'Link a parent task %s.';
+$lang->action->apiTitle->unlinkparenttask = 'Unlink a parent task %s.';
+$lang->action->apiTitle->deletechildrentask = 'Delete a child task%s.';
+$lang->action->apiTitle->createchildrenstory = 'Create a child story %s.';
+$lang->action->apiTitle->linkchildstory = 'Link a child story %s.';
+$lang->action->apiTitle->unlinkchildrenstory = 'Unlink a child story %s.';
+$lang->action->apiTitle->linkparentstory = 'Link parent story %s.';
+$lang->action->apiTitle->unlinkparentstory = 'Unlink parent story from %s.';
+$lang->action->apiTitle->deletechildrenstory = 'Deleted a child story %s.';
+$lang->action->apiTitle->linkrelatedcase = 'Link related case %s.';
+$lang->action->apiTitle->unlinkrelatedcase = 'Unlink related case %s.';
+$lang->action->apiTitle->openedbysystem = 'Opened by system';
+$lang->action->apiTitle->closedbysystem = 'Closed by system';
+$lang->action->apiTitle->communicated = 'Communicated';
+$lang->action->apiTitle->blocked = 'Blocked';
+$lang->action->apiTitle->reviewed = 'Reviewed';
+$lang->action->apiTitle->recalled = 'Recalled';
+$lang->action->apiTitle->moved = 'Moved';
+$lang->action->apiTitle->fromlib = 'Import from lib';
+$lang->action->apiTitle->totask = 'To task';
+$lang->action->apiTitle->linked2plan = "Link to plan";
+$lang->action->apiTitle->unlinkedfromplan = "Unlinked from plan";
+$lang->action->apiTitle->changestatus = 'Changed status';
+$lang->action->apiTitle->marked = 'Marked';
+$lang->action->apiTitle->linked2execution = "Linked to {$lang->executionCommon}";
+$lang->action->apiTitle->unlinkedfromexecution = "Unlinked from {$lang->executionCommon}";
+$lang->action->apiTitle->linked2project = "Linked to project";
+$lang->action->apiTitle->unlinkedfromproject = "Unlinked from project";
+$lang->action->apiTitle->unlinkedfrombuild = "Unlinked from build";
+$lang->action->apiTitle->linked2release = "Linked to release";
+$lang->action->apiTitle->unlinkedfromrelease = "Unlinked from release";
+$lang->action->apiTitle->linkrelatedbug = "Linked related Bug";
+$lang->action->apiTitle->unlinkrelatedbug = "Unlinked related Bug";
+$lang->action->apiTitle->linkrelatedstory = "Link related story {$lang->SRCommon}";
+$lang->action->apiTitle->unlinkrelatedstory = "Unlink related story {$lang->SRCommon}";
+$lang->action->apiTitle->subdividestory = "Subdivided story: {$lang->SRCommon}";
+$lang->action->apiTitle->unlinkchildstory = "Unlink child story: {$lang->SRCommon}";
+$lang->action->apiTitle->verified = 'Verified';
+$lang->action->apiTitle->login = 'Login';
+$lang->action->apiTitle->logout = "Logout";
+$lang->action->apiTitle->linked2build = "Linked to build";
+$lang->action->apiTitle->unlinkedfromtesttask = "Unlinked from test task";
+$lang->action->apiTitle->batchcreate = "Batch create";
+$lang->action->apiTitle->managedteam = "Managed team";
+$lang->action->apiTitle->managedwhitelist = "Managed white list";
+$lang->action->apiTitle->tracked = 'Tracked';
+$lang->action->apiTitle->hangup = 'Hangup';
+$lang->action->apiTitle->reviewpassed = 'Review passed';
+$lang->action->apiTitle->reviewrejected = 'Review rejected';
+$lang->action->apiTitle->reviewclarified = 'Review clarified';
+$lang->action->apiTitle->commitsummary = 'Commit summary';
+$lang->action->apiTitle->updatetrainee = 'Update trainee';
diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php
index 92d862a010..e08238ef27 100755
--- a/module/action/lang/zh-cn.php
+++ b/module/action/lang/zh-cn.php
@@ -566,3 +566,99 @@ $lang->action->search->label['paused'] = $lang->action->label->pa
$lang->action->search->label['verified'] = $lang->action->label->verified;
$lang->action->search->label['login'] = $lang->action->label->login;
$lang->action->search->label['logout'] = $lang->action->label->logout;
+
+/* Action language config for API(JIHU) */
+$lang->action->apiTitle = new stdclass();
+$lang->action->apiTitle->opened = '首次创建。';
+$lang->action->apiTitle->created = '首次创建。';
+$lang->action->apiTitle->added = '添加成功。';
+$lang->action->apiTitle->changed = '进行了需求变更。';
+$lang->action->apiTitle->edited = '编辑操作。';
+$lang->action->apiTitle->assigned = '指派给 %s。';
+$lang->action->apiTitle->closed = '执行了关闭操作。';
+$lang->action->apiTitle->deleted = '执行删除操作。';
+$lang->action->apiTitle->deletedfile = '删除了附件:%s。';
+$lang->action->apiTitle->editfile = '编辑了附件:%s。';
+$lang->action->apiTitle->erased = '执行了删除操作。';
+$lang->action->apiTitle->undeleted = '执行还原操作。';
+$lang->action->apiTitle->hidden = '进行隐藏操作。';
+$lang->action->apiTitle->commented = '添加了备注';
+$lang->action->apiTitle->activated = '执行激活操作。';
+$lang->action->apiTitle->confirmed = '确认' . $lang->SRCommon . '变动,最新版本为#%s。';
+$lang->action->apiTitle->caseconfirmed = '确认用例变动,最新版本为#%s。';
+$lang->action->apiTitle->bugconfirmed = '确认了Bug。';
+$lang->action->apiTitle->frombug = 'Bug转化而来,Bug编号为 %s。';
+$lang->action->apiTitle->started = '启动。';
+$lang->action->apiTitle->restarted = '继续。';
+$lang->action->apiTitle->delayed = '执行了延期操作。';
+$lang->action->apiTitle->suspended = '挂起。';
+$lang->action->apiTitle->recordestimate = '记录工时,消耗 %s 小时。';
+$lang->action->apiTitle->editestimate = '编辑了工时。';
+$lang->action->apiTitle->deleteestimate = '删除工时。';
+$lang->action->apiTitle->canceled = '执行取消操作。';
+$lang->action->apiTitle->svncommited = '提交代码,版本为#%s。';
+$lang->action->apiTitle->gitcommited = '提交代码,版本为#%s。';
+$lang->action->apiTitle->finished = '完成。';
+$lang->action->apiTitle->paused = '暂停。';
+$lang->action->apiTitle->linked2bug = '关联到版本 %s';
+$lang->action->apiTitle->linked2testtask = '关联到测试单 %s';
+$lang->action->apiTitle->resolved = '解决。';
+$lang->action->apiTitle->managed = '维护。';
+$lang->action->apiTitle->estimated = '估算。';
+$lang->action->apiTitle->run = '执行。';
+$lang->action->apiTitle->tostory = "转{$lang->SRCommon}";
+$lang->action->apiTitle->createchildren = '创建子任务 %s。';
+$lang->action->apiTitle->linkchildtask = '关联子任务 %s。';
+$lang->action->apiTitle->unlinkchildrentask = '移除子任务 %s。';
+$lang->action->apiTitle->linkparenttask = '关联到父任务 %s。';
+$lang->action->apiTitle->unlinkparenttask = '从父任务%s取消关联。';
+$lang->action->apiTitle->deletechildrentask = '删除子任务%s。';
+$lang->action->apiTitle->createchildrenstory = '创建子需求 %s。';
+$lang->action->apiTitle->linkchildstory = '关联子需求 %s。';
+$lang->action->apiTitle->unlinkchildrenstory = '移除子需求 %s。';
+$lang->action->apiTitle->linkparentstory = '关联到父需求 %s。';
+$lang->action->apiTitle->unlinkparentstory = '从父需求%s取消关联。';
+$lang->action->apiTitle->deletechildrenstory = '删除子需求%s。';
+$lang->action->apiTitle->linkrelatedcase = '关联相关用例 %s。';
+$lang->action->apiTitle->unlinkrelatedcase = '移除相关用例 %s。';
+$lang->action->apiTitle->openedbysystem = '系统创建';
+$lang->action->apiTitle->closedbysystem = '系统关闭';
+$lang->action->apiTitle->communicated = '沟通';
+$lang->action->apiTitle->blocked = '阻塞';
+$lang->action->apiTitle->reviewed = '评审';
+$lang->action->apiTitle->recalled = '撤销评审';
+$lang->action->apiTitle->moved = '移动';
+$lang->action->apiTitle->fromlib = '从用例库导入';
+$lang->action->apiTitle->totask = '转任务';
+$lang->action->apiTitle->linked2plan = "关联计划";
+$lang->action->apiTitle->unlinkedfromplan = "移除计划";
+$lang->action->apiTitle->changestatus = '修改状态';
+$lang->action->apiTitle->marked = '编辑';
+$lang->action->apiTitle->linked2execution = "关联{$lang->executionCommon}";
+$lang->action->apiTitle->unlinkedfromexecution = "移除{$lang->executionCommon}";
+$lang->action->apiTitle->linked2project = "关联项目";
+$lang->action->apiTitle->unlinkedfromproject = "移除项目";
+$lang->action->apiTitle->unlinkedfrombuild = "移除版本";
+$lang->action->apiTitle->linked2release = "关联发布";
+$lang->action->apiTitle->unlinkedfromrelease = "移除发布";
+$lang->action->apiTitle->linkrelatedbug = "关联了相关Bug";
+$lang->action->apiTitle->unlinkrelatedbug = "移除了相关Bug";
+$lang->action->apiTitle->linkrelatedstory = "关联了相关{$lang->SRCommon}";
+$lang->action->apiTitle->unlinkrelatedstory = "移除了相关{$lang->SRCommon}";
+$lang->action->apiTitle->subdividestory = "细分了{$lang->SRCommon}";
+$lang->action->apiTitle->unlinkchildstory = "移除了细分{$lang->SRCommon}";
+$lang->action->apiTitle->verified = '验收';
+$lang->action->apiTitle->login = '登录系统';
+$lang->action->apiTitle->logout = "退出登录";
+$lang->action->apiTitle->linked2build = "关联";
+$lang->action->apiTitle->unlinkedfromtesttask = "移除";
+$lang->action->apiTitle->batchcreate = "批量创建任务";
+$lang->action->apiTitle->managedteam = "维护";
+$lang->action->apiTitle->managedwhitelist = "维护";
+$lang->action->apiTitle->tracked = '跟踪';
+$lang->action->apiTitle->hangup = '挂起';
+$lang->action->apiTitle->reviewpassed = '确认通过';
+$lang->action->apiTitle->reviewrejected = '拒绝';
+$lang->action->apiTitle->reviewclarified = '有待明确';
+$lang->action->apiTitle->commitsummary = '提交培训总结';
+$lang->action->apiTitle->updatetrainee = '更新培训人员';
diff --git a/module/action/model.php b/module/action/model.php
index 8b2ebe5258..c55cf1eb02 100755
--- a/module/action/model.php
+++ b/module/action/model.php
@@ -1511,4 +1511,43 @@ class actionModel extends model
$this->search->saveIndex($objectType, $data);
}
+
+ /**
+ * Print actions of an object for API(JIHU).
+ *
+ * @param array $action
+ * @access public
+ * @return void
+ */
+ public function printActionAPI($action)
+ {
+ if(!isset($action->objectType) or !isset($action->action)) return false;
+
+ $objectType = $action->objectType;
+ $actionType = strtolower($action->action);
+
+ if(isset($this->lang->action->apiTitle->$actionType) and isset($action->extra))
+ {
+ /* If extra column is a username, then assemble link to that. */
+ if($action->action == "assigned")
+ {
+ $userDetails = $this->loadModel('user')->getUserDetailsForAPI($action->extra);
+ if(isset($userDetails[$action->extra]))
+ {
+ $userDetail = $userDetails[$action->extra];
+ $action->extra = "{$action->extra}";
+ }
+ }
+
+ echo sprintf($this->lang->action->apiTitle->$actionType, $action->extra);
+ }
+ elseif(isset($this->lang->action->apiTitle->$actionType) and !isset($action->extra))
+ {
+ echo $this->lang->action->apiTitle->$actionType;
+ }
+ else
+ {
+ echo $actionType;
+ }
+ }
}