diff --git a/module/bug/model.php b/module/bug/model.php
index f4b87e71f1..151c28f977 100644
--- a/module/bug/model.php
+++ b/module/bug/model.php
@@ -393,6 +393,13 @@ class bugModel extends model
public function update($bugID)
{
$oldBug = $this->getById($bugID);
+ if($oldBug->lastEditedDate != $this->post->lastEditedDate)
+ {
+ dao::$errors[] = $this->lang->error->hasEdited;
+ return false;
+ }
+ unset($_POST['lastEditedDate']);
+
$now = helper::now();
$bug = fixer::input('post')
->cleanInt('product,module,severity,project,story,task')
diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php
index f0c097b004..35c314d4cf 100644
--- a/module/bug/view/edit.html.php
+++ b/module/bug/view/edit.html.php
@@ -56,6 +56,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
lastEditedDate);
echo html::submitButton();
$browseLink = $app->session->bugList != false ? $app->session->bugList : inlink('browse', "productID=$bug->product");
echo html::linkButton($lang->goback, $browseLink);
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index 133677764f..c69fdf3020 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -364,6 +364,7 @@ $lang->error->passwordrule = "Password should more than six letters.";
$lang->error->accessDenied = 'No purview';
$lang->error->pasteImg = 'Your browser does not support the paste image!';
$lang->error->noData = 'No data';
+$lang->error->hasEdited = 'The record may have been changed. Please refresh and re edit!';
/* Pager. */
$lang->pager = new stdclass();
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 05259a7caa..4149dab04c 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -364,6 +364,7 @@ $lang->error->passwordrule = "密码应该符合规则,长度至少为六
$lang->error->accessDenied = '您没有访问权限';
$lang->error->pasteImg = '您的浏览器不支持粘贴图片!';
$lang->error->noData = '没有数据';
+$lang->error->hasEdited = '该记录可能已经被改动。请刷新页面重新编辑!';
/* 分页信息。*/
$lang->pager = new stdclass();
diff --git a/module/project/control.php b/module/project/control.php
index 594fb69e12..69c35e5fc5 100644
--- a/module/project/control.php
+++ b/module/project/control.php
@@ -222,10 +222,7 @@ class project extends control
/* team member pairs. */
$memberPairs = array();
- foreach($this->view->teamMembers as $key => $member)
- {
- $memberPairs[$key] = $member->realname;
- }
+ foreach($this->view->teamMembers as $key => $member) $memberPairs[$key] = $member->realname;
/* Assign. */
$this->view->tasks = $tasks;
diff --git a/module/story/model.php b/module/story/model.php
index e7bdefd390..18759f4f13 100644
--- a/module/story/model.php
+++ b/module/story/model.php
@@ -342,7 +342,14 @@ class storyModel extends model
{
$specChanged = false;
$oldStory = $this->getById($storyID);
- $story = fixer::input('post')->stripTags($this->config->story->editor->change['id'], $this->config->allowedTags)->get();
+ if($oldStory->lastEditedDate != $this->post->lastEditedDate)
+ {
+ dao::$errors[] = $this->lang->error->hasEdited;
+ return false;
+ }
+ unset($_POST['lastEditedDate']);
+
+ $story = fixer::input('post')->stripTags($this->config->story->editor->change['id'], $this->config->allowedTags)->get();
if($story->spec != $oldStory->spec or $story->verify != $oldStory->verify or $story->title != $oldStory->title or $this->loadModel('file')->getCount()) $specChanged = true;
$now = helper::now();
@@ -399,6 +406,12 @@ class storyModel extends model
{
$now = helper::now();
$oldStory = $this->getById($storyID);
+ if($oldStory->lastEditedDate != $this->post->lastEditedDate)
+ {
+ dao::$errors[] = $this->lang->error->hasEdited;
+ return false;
+ }
+ unset($_POST['lastEditedDate']);
$story = fixer::input('post')
->cleanInt('product,module,pri')
@@ -1192,14 +1205,13 @@ class storyModel extends model
{
$stories = $this->dao->select('*')->from(TABLE_STORY)
->where('product')->in($productID)
+ ->beginIF($branch)->andWhere("branch")->eq($branch)->fi()
->andWhere('deleted')->eq(0)
->andWhere('stage')->in('developed,released')
->andWhere('status')->ne('closed')
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
- $stages = $this->dao->select('*')->from(TABLE_STORYSTAGE)->where('story')->in(array_keys($stories))->andWhere('stage')->notIN('released')->fetchPairs('story', 'story');
- foreach($stages as $storyID) unset($stories[$storyID]);
return $this->mergePlanTitle($productID, $stories, $branch);
}
diff --git a/module/story/view/change.html.php b/module/story/view/change.html.php
index c7d6858675..5bf8293c5f 100644
--- a/module/story/view/change.html.php
+++ b/module/story/view/change.html.php
@@ -59,6 +59,7 @@
|
lastEditedDate);
echo html::submitButton('', '', 'btn-primary');
echo html::linkButton($lang->goback, $app->session->storyList ? $app->session->storyList : inlink('view', "storyID=$story->id"));
?>
diff --git a/module/story/view/edit.html.php b/module/story/view/edit.html.php
index 28309dc82e..01b7a2734c 100644
--- a/module/story/view/edit.html.php
+++ b/module/story/view/edit.html.php
@@ -41,6 +41,7 @@
|