diff --git a/module/action/config.php b/module/action/config.php index de4177f5c6..40c263b121 100644 --- a/module/action/config.php +++ b/module/action/config.php @@ -12,6 +12,7 @@ $config->action->objectTables['testtask'] = TABLE_TESTTASK; $config->action->objectTables['user'] = TABLE_USER; $config->action->objectTables['doc'] = TABLE_DOC; $config->action->objectTables['doclib'] = TABLE_DOCLIB; +$config->action->objectTables['todo'] = TABLE_TODO; $config->action->objectNameFields['product'] = 'name'; $config->action->objectNameFields['story'] = 'title'; @@ -26,3 +27,4 @@ $config->action->objectNameFields['testtask'] = 'name'; $config->action->objectNameFields['user'] = 'account'; $config->action->objectNameFields['doc'] = 'title'; $config->action->objectNameFields['doclib'] = 'name'; +$config->action->objectNameFields['todo'] = 'name'; diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 73a3157e1b..214b217fb3 100644 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -21,6 +21,15 @@ $lang->action->date = 'Date'; $lang->action->trashTips = "Tips:The deleting actions in zentao are all logic, the real data don't be erased from the database. So if you want to erase a record, can use phpmyadmin and such tools to remove it from database."; +$lang->action->dynamic->today = 'Today'; +$lang->action->dynamic->yesterday = 'Yesterday'; +$lang->action->dynamic->twoDaysAgo= 'The day Before Yesterday'; +$lang->action->dynamic->thisWeek = 'This Week'; +$lang->action->dynamic->lastWeek = 'Last Week'; +$lang->action->dynamic->thisMonth = 'This Month'; +$lang->action->dynamic->lastMonth = 'Last Month'; +$lang->action->dynamic->all = 'All'; + $lang->action->objectTypes['product'] = 'PRODUCT'; $lang->action->objectTypes['story'] = 'STORY'; $lang->action->objectTypes['productplan'] = 'PLAN'; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 706dbe488f..17f1e29fe7 100644 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -17,10 +17,20 @@ $lang->action->objectType = '对象类型'; $lang->action->objectID = '对象ID'; $lang->action->objectName = '对象名称'; $lang->action->actor = '操作者'; +$lang->action->action = '动作'; $lang->action->date = '日期'; $lang->action->trashTips = '提示:禅道系统的删除都是标记删除,并没有真正从数据库里面删除数据。这样做是为了系统数据的完整和安全。 因此如果你确定要删除某一条数据,可以使用phpmyadmin等管理工具,进数据库删除。'; +$lang->action->dynamic->today = '今天'; +$lang->action->dynamic->yesterday = '昨天'; +$lang->action->dynamic->twoDaysAgo= '前天'; +$lang->action->dynamic->thisWeek = '本周'; +$lang->action->dynamic->lastWeek = '上周'; +$lang->action->dynamic->thisMonth = '本月'; +$lang->action->dynamic->lastMonth = '上月'; +$lang->action->dynamic->all = '所有'; + $lang->action->objectTypes['product'] = '产品'; $lang->action->objectTypes['story'] = '需求'; $lang->action->objectTypes['productplan'] = '产品计划'; @@ -34,6 +44,7 @@ $lang->action->objectTypes['testtask'] = '测试任务'; $lang->action->objectTypes['user'] = '用户'; $lang->action->objectTypes['doc'] = '文档'; $lang->action->objectTypes['doclib'] = '文档库'; +$lang->action->objectTypes['todo'] = 'TODO'; /* 用来描述操作历史记录。*/ $lang->action->desc->common = '$date, $action by $actor' . "\n"; diff --git a/module/action/model.php b/module/action/model.php index 16d6cf1d21..6df3fd44cd 100644 --- a/module/action/model.php +++ b/module/action/model.php @@ -211,14 +211,34 @@ class actionModel extends model * @access public * @return void */ - public function getDynamic($objectType = 'all', $count = 30) + public function getDynamic($account = 'all', $period = 'all', $orderBy = 'id_desc', $pager = null) { + $period = $this->computeBeginAndEnd($period); + extract($period); + $actions = $this->dao->select('*')->from(TABLE_ACTION) - ->beginIF($objectType != 'all')->where('objectType')->eq($objectType)->fi() - ->orderBy('id desc')->limit($count)->fetchAll(); + ->where('date')->gt($begin) + ->andWhere('date')->lt($end) + ->beginIF($account != 'all')->andWhere('actor')->eq($account)->fi() + ->orderBy($orderBy)->page($pager)->fetchAll(); + if(!$actions) return array(); + + /* Group trashes by objectType, and get there name field. */ + foreach($actions as $object) $objectTypes[$object->objectType][] = $object->objectID; + foreach($objectTypes as $objectType => $objectIds) + { + $objectIds = array_unique($objectIds); + $table = $this->config->action->objectTables[$objectType]; + $field = $this->config->action->objectNameFields[$objectType]; + $objectNames[$objectType] = $this->dao->select("id, $field AS name")->from($table)->where('id')->in($objectIds)->fetchPairs(); + } + foreach($actions as $action) { + /* Add name field to the trashes. */ + $action->objectName = $objectNames[$action->objectType][$action->objectID]; + $actionType = strtolower($action->action); $objectType = strtolower($action->objectType); $action->date = date(DT_MONTHTIME2, strtotime($action->date)); @@ -248,6 +268,39 @@ class actionModel extends model return $actions; } + /** + * Compute the begin date and end date of a period. + * + * @param string $period + * @access private + * @return array + */ + private function computeBeginAndEnd($period) + { + $this->loadModel('todo'); + + $today = $this->todo->today(); + $tomorrow = $this->todo->tomorrow(); + $yesterday = $this->todo->yesterday(); + $twoDaysAgo = $this->todo->twoDaysAgo(); + + if($period == 'all') return array('begin' => '1970-1-1', 'end' => '2109-1-1'); + if($period == 'today') return array('begin' => $today, 'end' => $tomorrow); + if($period == 'yesterday') return array('begin' => $yesterday, 'end' => $today); + if($period == 'twodaysago') return array('begin' => $twoDaysAgo, 'end' => $yesterday); + + /* If the period is by week, add the end time to the end date. */ + if($period == 'thisweek' or $period == 'lastweek') + { + $func = "get$period"; + extract($this->todo->$func()); + return array('begin' => $begin, 'end' => $end . ' 23:59:59'); + } + + if($period == 'thismonth') return $this->todo->getThisMonth(); + if($period == 'lastmonth') return $this->todo->getLastMonth(); + } + /** * Print changes of every action. * diff --git a/module/action/view/trash.html.php b/module/action/view/trash.html.php index 4059e0a63e..99512038c6 100644 --- a/module/action/view/trash.html.php +++ b/module/action/view/trash.html.php @@ -17,10 +17,10 @@ action->objectType);?> - idAB);?> + idAB);?> action->objectName;?> - action->actor);?> - action->date);?> + action->actor);?> + action->date);?> actions;?> diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index c4c6644d4f..254b5c1b04 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -116,6 +116,7 @@ $lang->my->menu->bug = '我的Bug|my|bug|'; $lang->my->menu->testask = '我的测试|my|testtask|'; $lang->my->menu->story = '我的需求|my|story|'; $lang->my->menu->project = '我的项目|my|project|'; +$lang->my->menu->dynamic = '我的动态|my|dynamic|'; $lang->my->menu->profile = array('link' => '我的档案|my|profile|', 'alias' => 'editprofile'); $lang->todo->menu = $lang->my->menu; diff --git a/module/index/control.php b/module/index/control.php index 2f441cfb6a..c378e91baa 100644 --- a/module/index/control.php +++ b/module/index/control.php @@ -73,12 +73,16 @@ class index extends control $my['bugs'] = $this->dao->select('id, title')->from(TABLE_BUG)->where('assignedTo')->eq($this->session->user->account)->andWhere('deleted')->eq(0)->orderBy('id desc')->limit(10)->fetchPairs(); $my['todos'] = $this->loadModel('todo')->getList('all', $this->session->user->account, 'wait, doing'); + /* Set the dynamic pager. */ + $this->app->loadClass('pager', true); + $pager = new pager(0, $this->config->index->dynamicCounts); + $this->view->projects = $projects; $this->view->projectsCount = $projectCount; $this->view->burns = $burns; $this->view->stats = $stats; $this->view->my = $my; - $this->view->actions = $this->loadModel('action')->getDynamic('all', 23); + $this->view->actions = $this->loadModel('action')->getDynamic('all', 'all', 'id_desc', $pager); $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->users['guest']= 'guest'; // append the guest account. $this->display(); diff --git a/module/my/control.php b/module/my/control.php index b1e4118167..df1a1c27f6 100644 --- a/module/my/control.php +++ b/module/my/control.php @@ -313,4 +313,47 @@ class my extends control $this->view->user = $this->user->getById($this->app->user->id); $this->display(); } + + /** + * My dynamic. + * + * @param string $type + * @param string $orderBy + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID + * @access public + * @return void + */ + public function dynamic($type = 'today', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + { + /* Save session. */ + $uri = $this->app->getURI(true); + $this->session->set('productList', $uri); + $this->session->set('productPlanList', $uri); + $this->session->set('releaseList', $uri); + $this->session->set('storyList', $uri); + $this->session->set('projectList', $uri); + $this->session->set('taskList', $uri); + $this->session->set('buildList', $uri); + $this->session->set('bugList', $uri); + $this->session->set('caseList', $uri); + $this->session->set('testtaskList', $uri); + + /* Set the pager. */ + $this->app->loadClass('pager', $static = true); + $pager = pager::init($recTotal, $recPerPage, $pageID); + $this->view->orderBy = $orderBy; + $this->view->pager = $pager; + + /* The header and position. */ + $this->view->header->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->dynamic; + $this->view->position[] = $this->lang->my->dynamic; + + /* Assign. */ + $this->view->type = $type; + $this->view->actions = $this->loadModel('action')->getDynamic($this->app->user->account, $type, $orderBy, $pager); + $this->display(); + } + } diff --git a/module/my/lang/zh-cn.php b/module/my/lang/zh-cn.php index b64f6f61bc..b8856aca2f 100644 --- a/module/my/lang/zh-cn.php +++ b/module/my/lang/zh-cn.php @@ -12,6 +12,7 @@ $lang->my->story = '我的需求'; $lang->my->project = '我的项目'; $lang->my->team = '我的团队'; $lang->my->profile = '我的档案'; +$lang->my->dynamic = '我的动态'; $lang->my->editProfile = '更新信息'; $lang->my->taskMenu->assignedToMe = '指派给我'; diff --git a/module/todo/model.php b/module/todo/model.php index 2e0c542205..528344d785 100644 --- a/module/todo/model.php +++ b/module/todo/model.php @@ -256,6 +256,28 @@ class todoModel extends model return date(DT_DATE1, strtotime('yesterday')); } + /** + * Get tomorrow. + * + * @access public + * @return date + */ + public function tomorrow() + { + return date(DT_DATE1, strtotime('tomorrow')); + } + + /** + * Get the day before yesterday. + * + * @access public + * @return date + */ + public function twoDaysAgo() + { + return date(DT_DATE1, strtotime('-2 days')); + } + /** * Get now time period. * @@ -362,4 +384,18 @@ class todoModel extends model if($weekDay == 7) $baseTime = time() - 86400 * 10; // Make sure is last thursday. return $baseTime; } + + public function getThisMonth() + { + $begin = date('Y-m'); + $end = date('Y-m', strtotime('next month')); + return array('begin' => $begin, 'end' => $end); + } + + public function getLastMonth() + { + $begin = date('Y-m', strtotime('last month')); + $end = date('Y-m', strtotime('this month')); + return array('begin' => $begin, 'end' => $end); + } }