* change score module

This commit is contained in:
滔哥
2017-10-31 11:13:09 +08:00
parent 09395f45e8
commit e3ea70b43a
26 changed files with 200 additions and 163 deletions
+1 -1
View File
@@ -83,7 +83,7 @@ ALTER TABLE `zt_user` ADD `scoreLevel` DECIMAL(12,1) NOT NULL DEFAULT '0' AFT
CREATE TABLE `zt_score` (
`id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
`account` varchar(30) NOT NULL,
`model` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`method` varchar(30) NOT NULL,
`desc` varchar(250) NOT NULL DEFAULT '',
`before` decimal(12,1) NOT NULL DEFAULT '0.0',
+2 -2
View File
@@ -131,7 +131,7 @@ class block extends control
$this->dao->delete()->from(TABLE_BLOCK)->where('`id`')->eq($id)->andWhere('account')->eq($this->app->user->account)->andWhere('module')->eq($module)->exec();
}
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('score')->score('block', 'set');
$this->loadModel('score')->create('block', 'set');
$this->send(array('result' => 'success'));
}
@@ -158,7 +158,7 @@ class block extends control
}
if(dao::isError()) $this->send(array('result' => 'fail'));
$this->loadModel('score')->score('block', 'set');
$this->loadModel('score')->create('block', 'set');
$this->send(array('result' => 'success'));
}
+1 -1
View File
@@ -50,7 +50,7 @@ class blockModel extends model
$data->params = helper::jsonEncode($data->params);
$this->dao->replace(TABLE_BLOCK)->data($data)->exec();
$this->loadModel('score')->score('block', 'set');
$this->loadModel('score')->create('block', 'set');
}
/**
+7 -7
View File
@@ -85,7 +85,7 @@ class bugModel extends model
$bugID = $this->dao->lastInsertID();
$this->file->updateObjectID($this->post->uid, $bugID, 'bug');
$this->file->saveUpload('bug', $bugID);
empty($bug->case) ? $this->loadModel('score')->score('bug', 'create', $bugID) : $this->loadModel('score')->score('bug', 'createFormCase', $bug->case);
empty($bug->case) ? $this->loadModel('score')->create('bug', 'create', $bugID) : $this->loadModel('score')->create('bug', 'createFormCase', $bug->case);
return array('status' => 'created', 'id' => $bugID);
}
return false;
@@ -200,7 +200,7 @@ class bugModel extends model
$this->dao->insert(TABLE_BUG)->data($bug)->autoCheck()->batchCheck($this->config->bug->create->requiredFields, 'notempty')->exec();
$bugID = $this->dao->lastInsertID();
$this->loadModel('score')->score('bug', 'create', $bugID);
$this->loadModel('score')->create('bug', 'create', $bugID);
if(!empty($data->uploadImage[$i]) and !empty($file))
{
$file['objectType'] = 'bug';
@@ -224,7 +224,7 @@ class bugModel extends model
if(is_dir($realPath)) $classFile->removeDir($realPath);
unset($_SESSION['bugImagesFile']);
}
$this->loadModel('score')->score('ajax', 'batchCreate');
$this->loadModel('score')->create('ajax', 'batchCreate');
return $actions;
}
@@ -655,7 +655,7 @@ class bugModel extends model
}
}
}
$this->loadModel('score')->score('ajax', 'batchEdit');
$this->loadModel('score')->create('ajax', 'batchEdit');
return $allChanges;
}
@@ -759,7 +759,7 @@ class bugModel extends model
->get();
$this->dao->update(TABLE_BUG)->data($bug)->where('id')->eq($bugID)->exec();
$this->loadModel('score')->score('bug', 'confirmBug', $oldBug);
$this->loadModel('score')->create('bug', 'confirmBug', $oldBug);
if(!dao::isError()) return common::createChanges($oldBug, $bug);
}
@@ -848,7 +848,7 @@ class bugModel extends model
->checkIF($bug->resolution == 'fixed', 'resolvedBuild','notempty')
->where('id')->eq((int)$bugID)
->exec();
$this->loadModel('score')->score('bug', 'resolve', $oldBug);
$this->loadModel('score')->create('bug', 'resolve', $oldBug);
/* Link bug to build and release. */
$this->linkBugToBuild($bugID, $bug->resolvedBuild);
}
@@ -1855,7 +1855,7 @@ class bugModel extends model
$condition = "`type`='bug' and account='{$this->app->user->account}'";
$this->dao->insert(TABLE_USERTPL)->data($template)->batchCheck('title, content', 'notempty')->check('title', 'unique', $condition)->exec();
$this->loadModel('score')->score('bug', 'saveTplModal', $this->dao->lastInsertID());
$this->loadModel('score')->create('bug', 'saveTplModal', $this->dao->lastInsertID());
}
/**
+1 -1
View File
@@ -213,7 +213,7 @@ class buildModel extends model
$buildID = $this->dao->lastInsertID();
$this->file->updateObjectID($this->post->uid, $buildID, 'build');
$this->file->saveUpload('build', $buildID);
$this->loadModel('score')->score('build', 'create', $buildID);
$this->loadModel('score')->create('build', 'create', $buildID);
return $buildID;
}
}
+1 -1
View File
@@ -372,7 +372,7 @@ class customModel extends model
}
$this->loadModel('setting')->setItem($settingKey, $menu);
$this->loadModel('score')->score('ajax', 'customMenu');
$this->loadModel('score')->create('ajax', 'customMenu');
}
/**
+1 -1
View File
@@ -431,7 +431,7 @@ class docModel extends model
$docContent->doc = $docID;
$docContent->files = join(',', array_keys($files));
$this->dao->insert(TABLE_DOCCONTENT)->data($docContent)->exec();
$this->loadModel('score')->score('doc', 'create', $docID);
$this->loadModel('score')->create('doc', 'create', $docID);
return array('status' => 'new', 'id' => $docID);
}
return false;
+2 -2
View File
@@ -51,16 +51,16 @@ class my extends control
{
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
$scores = $this->loadModel('score')->getScores($pager);
$scores = $this->loadModel('score')->getListByAccount($this->app->user->account, $pager);
$this->view->title = $this->lang->score->common;
$this->view->user = $this->loadModel('user')->getById($this->app->user->account);
$this->view->pager = $pager;
$this->view->scores = $scores;
$this->display();
}
/**
* My todos.
*
+5 -5
View File
@@ -1,10 +1,10 @@
<?php
/**
* The browse view file of score module of ZenTaoPMS.
* The score view file of my module of ZenTaoPMS.
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Memory <lvtao@cnezsoft.com>
* @package score
* @package my
* @version $Id$
* @link http://www.zentao.net
*/
@@ -21,7 +21,7 @@
<thead>
<tr class='colhead'>
<th class="w-200px"><?php echo $lang->score->time; ?></th>
<th class="w-150px"><?php echo $lang->score->model; ?></th>
<th class="w-150px"><?php echo $lang->score->module; ?></th>
<th class="w-150px"><?php echo $lang->score->method; ?></th>
<th class="w-100px"><?php echo $lang->score->before; ?></th>
<th class="w-100px"><?php echo $lang->score->score; ?></th>
@@ -33,8 +33,8 @@
<?php if(!empty($scores)) foreach($scores as $score): ?>
<tr class='text-center'>
<td><?php echo $score->time; ?></td>
<td><?php echo $lang->score->models[$score->model]; ?></td>
<td><?php echo $lang->score->methods[$score->model][$score->method]; ?></td>
<td><?php echo $lang->score->models[$score->module]; ?></td>
<td><?php echo $lang->score->methods[$score->module][$score->method]; ?></td>
<td><?php echo $score->before; ?></td>
<td><?php echo $score->score; ?></td>
<td><?php echo $score->after; ?></td>
+1 -1
View File
@@ -151,7 +151,7 @@ class productplanModel extends model
{
$planID = $this->dao->lastInsertID();
$this->file->updateObjectID($this->post->uid, $planID, 'plan');
$this->loadModel('score')->score('productplan', 'create', $planID);
$this->loadModel('score')->create('productplan', 'create', $planID);
return $planID;
}
}
+2 -2
View File
@@ -291,7 +291,7 @@ class projectModel extends model
$lib->main = '1';
$lib->acl = $project->acl == 'open' ? 'open' : 'private';
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
$this->loadModel('score')->score('project', 'create', $projectID);
$this->loadModel('score')->create('project', 'create', $projectID);
return $projectID;
}
}
@@ -537,7 +537,7 @@ class projectModel extends model
->autoCheck()
->where('id')->eq((int)$projectID)
->exec();
$this->loadModel('score')->score('project', 'close', $oldProject);
$this->loadModel('score')->create('project', 'close', $oldProject);
if(!dao::isError()) return common::createChanges($oldProject, $project);
}
+1 -1
View File
@@ -145,7 +145,7 @@ class releaseModel extends model
$releaseID = $this->dao->lastInsertID();
$this->file->updateObjectID($this->post->uid, $releaseID, 'release');
$this->file->saveUpload('release', $releaseID);
$this->loadModel('score')->score('release', 'create', $releaseID);
$this->loadModel('score')->create('release', 'create', $releaseID);
if(!dao::isError()) return $releaseID;
}
+53 -53
View File
@@ -1,55 +1,55 @@
<?php
$config->score = new stdClass();
$config->score->model['user']['login'] = array('num' => 3, 'time' => 24, 'score' => 1, 'ext' => '');
$config->score->model['user']['changePassword'] = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => array(1 => 2, 2 => 5));
$config->score->model['user']['editProfile'] = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['tutorial']['keepAll'] = array('num' => 1, 'time' => 0, 'score' => 100, 'ext' => '');
$config->score->model['ajax']['selectTheme'] = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['ajax']['selectLang'] = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['ajax']['showSearchMenu'] = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['ajax']['dragSelected'] = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->model['ajax']['lastNext'] = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->model['ajax']['switchToDataTable'] = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['ajax']['submitPage'] = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['ajax']['customMenu'] = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['ajax']['quickDump'] = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['ajax']['batchCreate'] = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->model['ajax']['batchEdit'] = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->model['doc']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['todo']['create'] = array('num' => 5, 'time' => 24, 'score' => 1, 'ext' => '');
$config->score->model['story']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['story']['close'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array('createID' => 2));//每个需求被完成关闭,需求的创建者额外增加2分,关闭者增加1分
$config->score->model['task']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['task']['close'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['task']['finish'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array(1 => 2, 2 => 1, 3 => 0));
$config->score->model['bug']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['bug']['confirmBug'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array(1 => 3, 2 => 2, 3 => 1));
$config->score->model['bug']['createFormCase'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['bug']['resolve'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array(1 => 3, 2 => 2, 3 => 1));
$config->score->model['bug']['saveTplModal'] = array('num' => 0, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->model['testTask']['runCase'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['testcase']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['build']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['project']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['project']['close'] = array('num' => 0, 'time' => 0, 'score' => 0, 'ext' => array('manager' => array(20, 10), 'member' => array(5, 5)));
$config->score->model['productplan']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['release']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->model['block']['set'] = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->model['search']['saveQuery'] = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->model['search']['saveQueryAdvanced'] = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
//user rule
$config->score->user->login = array('num' => 3, 'time' => 24, 'score' => 1, 'ext' => '');
$config->score->user->changePassword = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => array(1 => 2, 2 => 5));
$config->score->user->editProfile = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
//tutorial rule
$config->score->tutorial->keepAll = array('num' => 1, 'time' => 0, 'score' => 100, 'ext' => '');
//javascript ajax rule
$config->score->ajax->selectTheme = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->ajax->selectLang = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->ajax->showSearchMenu = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->ajax->dragSelected = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->ajax->lastNext = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->ajax->switchToDataTable = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->ajax->submitPage = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->ajax->customMenu = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->ajax->quickDump = array('num' => 1, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->ajax->batchCreate = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
$config->score->ajax->batchEdit = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
//doc rule
$config->score->doc->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
//todo rule
$config->score->todo->create = array('num' => 5, 'time' => 24, 'score' => 1, 'ext' => '');
//story rule
$config->score->story->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->story->close = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array('createID' => 2));
//task rule
$config->score->task->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->task->close = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->task->finish = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array(1 => 2, 2 => 1, 3 => 0));
//bug rule
$config->score->bug->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->bug->confirmBug = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array(1 => 3, 2 => 2, 3 => 1));
$config->score->bug->createFormCase = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->bug->resolve = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => array(1 => 3, 2 => 2, 3 => 1));
$config->score->bug->saveTplModal = array('num' => 0, 'time' => 0, 'score' => 20, 'ext' => '');
//testTask rule
$config->score->testTask->runCase = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
//testcase rule
$config->score->testcase->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
//bulid rule
$config->score->build->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
//project rule
$config->score->project->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
$config->score->project->close = array('num' => 0, 'time' => 0, 'score' => 0, 'ext' => array('manager' => array(20, 10), 'member' => array(5, 5)));
//productplan rule
$config->score->productplan->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
//release rule
$config->score->release->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
//block rule
$config->score->block->set = array('num' => 1, 'time' => 0, 'score' => 20, 'ext' => '');
//search rule
$config->score->search->saveQuery = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
$config->score->search->saveQueryAdvanced = array('num' => 1, 'time' => 0, 'score' => 1, 'ext' => '');
+23 -6
View File
@@ -11,17 +11,26 @@ class score extends control
{
/**
* Ajax action score
* javascript use : $.get(createLink('score', 'ajax', "method=method"));
*
* @param string $method $.get(createLink('score', 'ajax', "method=selectLang"));
* @param string $method
*
* @access public
* @return void
*/
public function ajax($method = '')
{
$this->loadModel('score')->score('ajax', $method);
$this->loadModel('score')->create('ajax', $method);
}
/**
* initialization score
*
* @param int $lastID
*
* @access public
* @return void
*/
public function init($lastID = 0)
{
if(helper::isAjaxRequest())
@@ -40,19 +49,27 @@ class score extends control
$this->display();
}
public function refresh($lastID = 0)
/**
* reset all score
*
* @param int $lastID
*
* @access public
* @return void
*/
public function reset($lastID = 0)
{
if(helper::isAjaxRequest())
{
$result = $this->score->refresh($lastID);
$result = $this->score->reset($lastID);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($result['status'] == 'finish')
{
$this->send(array('result' => 'finished', 'message' => $this->lang->score->refreshFinish));
$this->send(array('result' => 'finished', 'message' => $this->lang->score->resetFinish));
}
else
{
$this->send(array('result' => 'unfinished', 'message' => $this->lang->score->refreshLoading, 'lastID' => $result['lastID']));
$this->send(array('result' => 'unfinished', 'message' => $this->lang->score->resetLoading, 'lastID' => $result['lastID']));
}
}
$this->display();
+6 -6
View File
@@ -8,17 +8,17 @@ $lang->score->initTips = '初始化将根据历史记录计算,执行时
$lang->score->initStart = '开始初始化';
$lang->score->initLoading = '正在初始化...';
$lang->score->initFinish = '初始化完成';
$lang->score->refresh = '重置积分';
$lang->score->refreshTips = '重置积分将对所有用户积分清零,执行时间可能会比较长.<br/><strong>请勿在未完成前关闭窗口</strong>';
$lang->score->refreshStart = '开始重置所有积分';
$lang->score->refreshLoading = '积分重置中...';
$lang->score->refreshFinish = '重置完成';
$lang->score->reset = '重置积分';
$lang->score->resetTips = '重置积分将对所有用户积分清零,执行时间可能会比较长.<br/><strong>请勿在未完成前关闭窗口</strong>';
$lang->score->resetStart = '开始重置所有积分';
$lang->score->resetLoading = '积分重置中...';
$lang->score->resetFinish = '重置完成';
$lang->score->processed = '正在处理中...';
$lang->score->id = '编号';
$lang->score->userID = '用户ID';
$lang->score->account = '用户';
$lang->score->model = '模块';
$lang->score->module = '模块';
$lang->score->method = '动作';
$lang->score->before = '之前';
$lang->score->score = '分值';
+52 -32
View File
@@ -12,23 +12,23 @@ class scoreModel extends model
public static $num = 0;
/**
* get user score logs
* get user score list
*
* @param $account
* @param $pager
*
* @access public
* @return array|bool
*/
public function getScores($pager)
public function getListByAccount($account, $pager)
{
$scores = $this->dao->select('*')->from(TABLE_SCORE)->where('account')->eq($this->app->user->account)->orderBy('time_desc,id_desc')->page($pager)->fetchAll();
return empty($scores) ? array() : $scores;
return $this->dao->select('*')->from(TABLE_SCORE)->where('account')->eq($account)->orderBy('time_desc,id_desc')->page($pager)->fetchAll();
}
/**
* add score logs
*
* @param string $model
* @param string $module
* @param string $method
* @param string $param
* @param string $account
@@ -37,22 +37,25 @@ class scoreModel extends model
* @access public
* @return bool
*/
public function score($model = '', $method = '', $param = '', $account = '', $time = '')
public function create($module = '', $method = '', $param = '', $account = '', $time = '')
{
if(!isset($this->config->score->model[$model][$method]) || empty($this->config->score->model[$model][$method])) return true;
$rule = $this->config->score->model[$model][$method];
$desc = $this->lang->score->models[$model];
if(!isset($this->config->score->$module->$method) || empty($this->config->score->$module->$method)) return true;
$rule = $this->config->score->$module->$method;
$desc = $this->lang->score->models[$module];
$user = empty($account) ? $this->app->user->account : $account;
$time = empty($time) ? helper::now() : $time;
$objectID = is_numeric($param) ? $param : 0;
switch($model)
switch($module)
{
case 'user':
if($method == 'login') $desc = $this->lang->score->methods[$model][$method];
if($method == 'login') $desc = $this->lang->score->methods[$module][$method];
if($method == 'changePassword')
{
if(!empty($rule['ext'][$param])) $rule['score'] = $rule['score'] + $rule['ext'][$param];
$desc = $this->lang->score->methods[$model][$method];
$desc = $this->lang->score->methods[$module][$method];
}
break;
case 'doc':
@@ -63,6 +66,7 @@ class scoreModel extends model
break;
case 'story':
$desc .= 'ID:' . $param;
if($method == 'close')
{
$createUser = $this->dao->findById($param)->from(TABLE_STORY)->fetch();
@@ -70,17 +74,17 @@ class scoreModel extends model
{
$newRule = $rule;
$newRule['score'] = $rule['ext']['createID'];
$this->saveScore($createUser->openedBy, $newRule, $model, $method, $desc, $objectID, $time);
$this->saveScore($createUser->openedBy, $newRule, $module, $method, $desc, $objectID, $time);
unset($newRule);
}
}
break;
case 'task':
$desc .= 'ID:' . $param;
if($method == 'finish')
{
$desc = $this->lang->score->methods[$model][$method] . 'ID:' . $param;
//每完成一个任务,增加初始积分1 + 工时积分round(工时 /10 * 预计 / 消耗) + 优先级积分(p1 2, p2, 1) 如果任务取消了,没有积分。
$desc = $this->lang->score->methods[$module][$method] . 'ID:' . $param;
$task = $this->loadModel('task')->getById($param);
if(!empty($rule['ext'][$task->pri])) $rule['score'] = $rule['score'] + $rule['ext'][$task->pri];
if(!empty($task->estimate)) $rule['score'] = $rule['score'] + round(($task->consumed / 10 * $task->estimate / $task->consumed), 1);
@@ -88,6 +92,7 @@ class scoreModel extends model
break;
case 'bug':
if(is_numeric($param)) $desc .= 'ID:' . $param;
if($method == 'createFormCase')
{
$desc = $this->lang->score->models['testcase'] . 'ID:' . $param;
@@ -97,7 +102,9 @@ class scoreModel extends model
$user = $caseUser->openedBy;
}
}
if($method == 'saveTplModal') $desc = $this->lang->score->methods[$model][$method] . 'ID:' . $param;
if($method == 'saveTplModal') $desc = $this->lang->score->methods[$module][$method] . 'ID:' . $param;
if($method == 'confirmBug')
{
$objectID = $param->id;
@@ -105,6 +112,7 @@ class scoreModel extends model
$desc .= 'ID:' . $param->id;
if(!empty($rule['ext'][$param->severity])) $rule['score'] = $rule['score'] + $rule['ext'][$param->severity];
}
if($method == 'resolve' && !empty($rule['ext'][$param->severity]))
{
$objectID = $param->id;
@@ -112,7 +120,7 @@ class scoreModel extends model
}
break;
case 'testTask':
if($method == 'runCase') $desc = $this->lang->score->methods[$model][$method] . 'ID:' . $param;
if($method == 'runCase') $desc = $this->lang->score->methods[$module][$method] . 'ID:' . $param;
break;
case 'build':
if($method == 'create') $desc .= 'ID:' . $param;
@@ -121,13 +129,15 @@ class scoreModel extends model
if($method == 'create') $desc .= 'ID:' . $param;
if($method == 'close')
{
$desc = $this->lang->score->methods[$model][$method] . ',' . $desc . 'ID:' . $param->id;
$desc = $this->lang->score->methods[$module][$method] . ',' . $desc . 'ID:' . $param->id;
$objectID = $param->id;
if(!empty($param->PM))
{
$rule['score'] = $param->end > date('Y-m-d', $time) ? $rule['ext']['manager'][0] + $rule['ext']['manager'][1] : $rule['ext']['manager'][0];
$this->saveScore($param->PM, $rule, $model, $method, $desc, $objectID, $time);
$this->saveScore($param->PM, $rule, $module, $method, $desc, $objectID, $time);
}
$teams = $this->dao->select('account')->from(TABLE_TEAM)->where('project')->eq($param->id)->fetchGroup('account');
if(!empty($teams))
{
@@ -135,7 +145,7 @@ class scoreModel extends model
$rule['score'] = $param->end > date('Y-m-d', $time) ? $rule['ext']['member'][0] + $rule['ext']['member'][1] : $rule['ext']['member'][0];
foreach($users as $user)
{
if($user != $param->PM) $this->saveScore($user, $rule, $model, $method, $desc, $objectID, $time);
if($user != $param->PM) $this->saveScore($user, $rule, $module, $method, $desc, $objectID, $time);
}
}
}
@@ -152,13 +162,13 @@ class scoreModel extends model
break;
case 'search':
if($method == 'saveQuery') $desc .= 'ID:' . $param;
if($method == 'saveQueryAdvanced') $desc = $this->lang->score->methods[$model][$method];
if($method == 'saveQueryAdvanced') $desc = $this->lang->score->methods[$module][$method];
break;
case 'ajax':
$desc = $this->lang->score->methods[$model][$method];
$desc = $this->lang->score->methods[$module][$method];
break;
}
$this->saveScore($user, $rule, $model, $method, $desc, $objectID, $time);
$this->saveScore($user, $rule, $module, $method, $desc, $objectID, $time);
}
/**
@@ -166,7 +176,7 @@ class scoreModel extends model
*
* @param string $account
* @param array $rule
* @param string $model
* @param string $module
* @param string $method
* @param string $desc
* @param int $objectID
@@ -175,19 +185,19 @@ class scoreModel extends model
* @access private
* @return bool
*/
private function saveScore($account = '', $rule = array(), $model = '', $method = '', $desc = '', $objectID = 0, $time = '')
private function saveScore($account = '', $rule = array(), $module = '', $method = '', $desc = '', $objectID = 0, $time = '')
{
if(!empty($rule['num']) || !empty($rule['time']))
{
if(empty($rule['time']))
{
$count = $this->dao->select('id')->from(TABLE_SCORE)->where('account')->eq($account)->andWhere('model')->eq($model)->andWhere('method')->eq($method)->count();
$count = $this->dao->select('id')->from(TABLE_SCORE)->where('account')->eq($account)->andWhere('model')->eq($module)->andWhere('method')->eq($method)->count();
if($count >= $rule['num']) return true;
}
else
{
$timestamp = empty($time) ? time() : strtotime($time);
$count = $this->dao->select('id')->from(TABLE_SCORE)->where('account')->eq($account)->andWhere('time')->between(date('Y-m-d 0:0:0', $timestamp), date('Y-m-d 23:59:59', $timestamp))->andWhere('model')->eq($model)->andWhere('method')->eq($method)->count();
$count = $this->dao->select('id')->from(TABLE_SCORE)->where('account')->eq($account)->andWhere('time')->between(date('Y-m-d 0:0:0', $timestamp), date('Y-m-d 23:59:59', $timestamp))->andWhere('model')->eq($module)->andWhere('method')->eq($method)->count();
if($count >= $rule['num']) return true;
}
}
@@ -199,7 +209,7 @@ class scoreModel extends model
$data = new stdClass();
$data->account = $account;
$data->model = $model;
$data->module = $module;
$data->method = $method;
$data->desc = $desc;
$data->objectID = $objectID;
@@ -207,8 +217,10 @@ class scoreModel extends model
$data->score = $rule['score'];
$data->after = $user->score + $rule['score'];
$data->time = empty($time) ? helper::now() : $time;
$this->dao->insert(TABLE_SCORE)->data($data)->exec();
$this->dao->query("UPDATE " . TABLE_USER . " SET `score`=`score` + " . $rule['score'] . ",`scoreLevel`=`scoreLevel` + " . $rule['score'] . " WHERE `account`='" . $account . "'");
$this->dao->commit();
}
catch(ErrorException $e)
@@ -218,14 +230,14 @@ class scoreModel extends model
}
/**
* refresh all user score and level score
* reset all user score and scoreLevel
*
* @param int $lastID
*
* @access public
* @return void
*/
public function refresh($lastID = 0)
public function reset($lastID = 0)
{
if($lastID == 0)
{
@@ -234,8 +246,11 @@ class scoreModel extends model
$this->dao->query("CREATE TABLE " . TABLE_SCORE . ' LIKE score_bak');
$this->dao->query("UPDATE " . TABLE_USER . " SET `score`=0,`scoreLevel`=0");
}
$actions = $this->dao->select('*')->from('score_bak')->where('id')->gt($lastID)->orderBy('id_asc')->limit(100)->fetchAll('id');
if(empty($actions)) return array('num' => 0, 'status' => 'finish');
foreach($actions as $action)
{
$param = $action->objectID;
@@ -243,6 +258,7 @@ class scoreModel extends model
if($action->model == 'bug' && ($action->method == 'confirmBug' || $action->method == 'resolve')) $param = $this->dao->findById($action->objectID)->from(TABLE_BUG)->fetch();
$this->score($action->model, $action->method, $param, $action->account, $action->time);
}
return array('status' => 'more', 'lastID' => max(array_keys($actions)));
}
@@ -261,19 +277,23 @@ class scoreModel extends model
$this->dao->query("UPDATE " . TABLE_USER . " SET `score`=0,`scoreLevel`=0");
$this->dao->query("TRUNCATE TABLE " . TABLE_SCORE);
}
$actions = $this->dao->select('*')->from(TABLE_ACTION)->where('id')->gt($lastID)->orderBy('id_asc')->limit(100)->fetchAll('id');
if(empty($actions))
{
$this->loadModel('setting')->setItem('system.common.global.scoreInit', 1);
return array('num' => 0, 'status' => 'finish');
}
foreach($actions as $action)
{
$param = $action->objectID;
if($action->objectType == 'project' && $action->action == 'closed') $param = $this->dao->findById($action->objectID)->from(TABLE_PROJECT)->fetch();
if($action->objectType == 'bug' && ($action->action == 'bugconfirmed' || $action->action == 'resolved')) $param = $this->dao->findById($action->objectID)->from(TABLE_BUG)->fetch();
$this->score($action->objectType, $this->fix_key($action->action), $param, $action->actor, $action->date);
$this->score($action->objectType, $this->fixKey($action->action), $param, $action->actor, $action->date);
}
return array('status' => 'more', 'lastID' => max(array_keys($actions)));
}
@@ -285,7 +305,7 @@ class scoreModel extends model
* @access private
* @return mixed
*/
private function fix_key($string)
private function fixKey($string)
{
$strings = array('created' => 'create', 'closed' => 'close', 'finished' => 'finish', 'bugconfirmed' => 'confirmBug', 'resolved' => 'resolve');
return isset($strings[$string]) ? $strings[$string] : $string;
+18 -18
View File
@@ -10,53 +10,53 @@
*/
?>
<?php include '../../common/view/header.html.php'; ?>
<div class="alert with-icon" id="refresh_start">
<div class="alert with-icon" id="reset_start">
<i class="icon-inbox"></i>
<div class="content">
<h4><?php echo $lang->score->refresh; ?></h4>
<h4><?php echo $lang->score->reset; ?></h4>
<hr>
<p><?php echo $lang->score->refreshTips; ?></p>
<p><?php echo $lang->score->resetTips; ?></p>
<p>
<button class="btn btn-primary" id="refresh_init"><?php echo $lang->score->refreshStart; ?></button>
<button class="btn btn-primary" id="reset_init"><?php echo $lang->score->resetStart; ?></button>
</p>
</div>
</div>
<div class="alert alert-info with-icon hidden" id="refresh_loading">
<div class="alert alert-info with-icon hidden" id="reset_loading">
<i class="icon-info-sign"></i>
<h4><?php echo $lang->score->refreshLoading; ?></h4>
<h4><?php echo $lang->score->resetLoading; ?></h4>
<hr/>
<p><?php echo $lang->score->refreshTips; ?></p>
<p><?php echo $lang->score->resetTips; ?></p>
<p id="loading_content"></p>
</div>
<div class="alert alert-success with-icon hidden" id="refresh_finish">
<div class="alert alert-success with-icon hidden" id="reset_finish">
<i class="icon-ok-sign"></i>
<div class="content">
<strong><?php echo $lang->score->refreshFinish; ?></strong>
<strong><?php echo $lang->score->resetFinish; ?></strong>
</div>
</div>
<script>
$("#refresh_init").on('click', function()
$("#reset_init").on('click', function()
{
$("#refresh_start").addClass('hidden');
$("#refresh_loading").removeClass('hidden');
refresh_init(0);
$("#reset_start").addClass('hidden');
$("#reset_loading").removeClass('hidden');
reset_init(0);
});
function refresh_init(lastID)
function reset_init(lastID)
{
$.getJSON(createLink('score', 'refresh', 'lastID=' + lastID), function(response)
$.getJSON(createLink('score', 'reset', 'lastID=' + lastID), function(response)
{
if(response.result == 'finished')
{
$("#refresh_loading").addClass('hidden');
$("#refresh_finish").removeClass('hidden');
$("#reset_loading").addClass('hidden');
$("#reset_finish").removeClass('hidden');
setTimeout(function(){parent.location.reload();}, 2000);
return false;
}
else
{
$('#loading_content').html("<li class='text-success' style='color:#" + (Math.random() * 0xffffff << 0).toString(16) + "'>" + response.message + "</li>");
setTimeout(function(){refresh_init(response.lastID);}, 2000);
setTimeout(function(){reset_init(response.lastID);}, 2000);
}
});
}
+2 -2
View File
@@ -129,7 +129,7 @@ class searchModel extends model
$formSessionName = $this->post->module . 'Form';
$this->session->set($querySessionName, $where);
$this->session->set($formSessionName, $_POST);
if($scoreNum > 2) $this->loadModel('score')->score('search', 'saveQueryAdvanced');
if($scoreNum > 2) $this->loadModel('score')->create('search', 'saveQueryAdvanced');
}
/**
@@ -306,7 +306,7 @@ class searchModel extends model
$featureBarConfig->value = json_encode($newConfig);
$this->dao->replace(TABLE_CONFIG)->data($featureBarConfig)->exec();
}
$this->loadModel('score')->score('search', 'saveQuery', $queryID);
$this->loadModel('score')->create('search', 'saveQuery', $queryID);
return $queryID;
}
return false;
+6 -6
View File
@@ -228,7 +228,7 @@ class storyModel extends model
}
}
$this->setStage($storyID);
$this->loadModel('score')->score('story', 'create',$storyID);
$this->loadModel('score')->create('story', 'create',$storyID);
return array('status' => 'created', 'id' => $storyID);
}
return false;
@@ -343,7 +343,7 @@ class storyModel extends model
$this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec();
$actionID = $this->action->create('story', $storyID, 'Opened', '');
$this->loadModel('score')->score('story', 'create',$storyID);
$this->loadModel('score')->create('story', 'create',$storyID);
$mails[$i] = new stdclass();
$mails[$i]->storyID = $storyID;
$mails[$i]->actionID = $actionID;
@@ -359,7 +359,7 @@ class storyModel extends model
if(is_dir($realPath)) $classFile->removeDir($realPath);
unset($_SESSION['storyImagesFile']);
}
$this->loadModel('score')->score('ajax', 'batchCreate');
$this->loadModel('score')->create('ajax', 'batchCreate');
return $mails;
}
@@ -609,7 +609,7 @@ class storyModel extends model
}
}
}
$this->loadModel('score')->score('ajax', 'batchEdit');
$this->loadModel('score')->create('ajax', 'batchEdit');
return $allChanges;
}
@@ -785,7 +785,7 @@ class storyModel extends model
->batchCheck($this->config->story->close->requiredFields, 'notempty')
->checkIF($story->closedReason == 'duplicate', 'duplicateStory', 'notempty')
->where('id')->eq($storyID)->exec();
if($this->post->closedReason == 'done') $this->loadModel('score')->score('story', 'close', $storyID);
if($this->post->closedReason == 'done') $this->loadModel('score')->create('story', 'close', $storyID);
return common::createChanges($oldStory, $story);
}
@@ -849,7 +849,7 @@ class storyModel extends model
{
die(js::error('story#' . $storyID . dao::getError(true)));
}
if($story->stage == 'released') $this->loadModel('score')->score('story', 'close', $storyID);
if($story->stage == 'released') $this->loadModel('score')->create('story', 'close', $storyID);
}
return $allChanges;
+6 -6
View File
@@ -124,7 +124,7 @@ class taskModel extends model
$team->task = $taskID;
$this->dao->insert(TABLE_TEAM)->data($team)->autoCheck()->exec();
}
$this->loadModel('score')->score('task', 'create', $taskID);
$this->loadModel('score')->create('task', 'create', $taskID);
$tasksID[$assignedTo] = array('status' => 'created', 'id' => $taskID);
}
return $tasksID;
@@ -224,14 +224,14 @@ class taskModel extends model
$taskID = $this->dao->lastInsertID();
if($story) $this->story->setStage($tasks->story[$i]);
$actionID = $this->action->create('task', $taskID, 'Opened', '');
$this->loadModel('score')->score('task', 'create', $taskID);
$this->loadModel('score')->create('task', 'create', $taskID);
$mails[$i] = new stdclass();
$mails[$i]->taskID = $taskID;
$mails[$i]->actionID = $actionID;
}
$this->countTime($tasks->parent[0]);
$this->loadModel('score')->score('ajax', 'batchCreate');
$this->loadModel('score')->create('ajax', 'batchCreate');
return $mails;
}
@@ -600,7 +600,7 @@ class taskModel extends model
die(js::error('task#' . $taskID . dao::getError(true)));
}
}
$this->loadModel('score')->score('ajax', 'batchEdit');
$this->loadModel('score')->create('ajax', 'batchEdit');
return $allChanges;
}
@@ -885,7 +885,7 @@ class taskModel extends model
$this->countTime($oldTask->parent);
if($oldTask->story) $this->loadModel('story')->setStage($oldTask->story);
$this->loadModel('score')->score('task', 'finish', $taskID);
$this->loadModel('score')->create('task', 'finish', $taskID);
if(!dao::isError()) return common::createChanges($oldTask, $task);
}
@@ -940,7 +940,7 @@ class taskModel extends model
$data = new stdClass();
$data->status = 'closed';
$this->dao->update(TABLE_TASK)->data($data)->autoCheck()->where('parent')->eq($taskID)->exec();
$this->loadModel('score')->score('task', 'close', $taskID);
$this->loadModel('score')->create('task', 'close', $taskID);
if($oldTask->story) $this->loadModel('story')->setStage($oldTask->story);
if(!dao::isError()) return common::createChanges($oldTask, $task);
}
+2 -2
View File
@@ -107,7 +107,7 @@ class testcaseModel extends model
$caseID = $this->dao->lastInsertID();
$this->loadModel('file')->saveUpload('testcase', $caseID);
$parentStepID = 0;
$this->loadModel('score')->score('testcase', 'create', $caseID);
$this->loadModel('score')->create('testcase', 'create', $caseID);
foreach($this->post->steps as $stepID => $stepDesc)
{
if(empty($stepDesc)) continue;
@@ -224,7 +224,7 @@ class testcaseModel extends model
unset($cases->keywords[$i]);
}
}
$this->loadModel('score')->score('ajax', 'batchCreate');
$this->loadModel('score')->create('ajax', 'batchCreate');
}
/**
+1 -1
View File
@@ -911,7 +911,7 @@ class testtaskModel extends model
}
}
$this->loadModel('score')->score('testTask', 'runCase', $postData->case);
$this->loadModel('score')->create('testTask', 'runCase', $postData->case);
return $caseResult;
}
+2 -2
View File
@@ -46,7 +46,7 @@ class todoModel extends model
{
$todoID = $this->dao->lastInsertID();
$this->file->updateObjectID($this->post->uid, $todoID, 'todo');
$this->loadModel('score')->score('todo','create',$todoID);
$this->loadModel('score')->create('todo','create',$todoID);
return $todoID;
}
}
@@ -94,7 +94,7 @@ class todoModel extends model
}
$todoID = $this->dao->lastInsertID();
$this->loadModel('action')->create('todo', $todoID, 'opened');
$this->loadModel('score')->score('todo', 'create', $todoID);
$this->loadModel('score')->create('todo', 'create', $todoID);
}
else
{
+1 -1
View File
@@ -54,7 +54,7 @@ class tutorial extends control
if($finish == 'keepAll')
{
$this->loadModel('score')->score('tutorial','keepAll');
$this->loadModel('score')->create('tutorial','keepAll');
$this->send(array('result' => 'fail', 'message' => $this->lang->tutorial->ajaxSetError));
}
+1 -1
View File
@@ -691,7 +691,7 @@ class user extends control
$this->session->set('user', $user);
$this->app->user = $this->session->user;
$this->loadModel('action')->create('user', $user->id, 'login');
$this->loadModel('score')->score('user','login');
$this->loadModel('score')->create('user','login');
/* Keep login. */
if($this->post->keepLogin) $this->user->keepLogin($user);
+2 -2
View File
@@ -408,7 +408,7 @@ class userModel extends model
}
}
if(!empty($user->password) and $user->account == $this->app->user->account) $this->app->user->password = $user->password;
$this->loadModel('score')->score('user','editProfile');
$this->loadModel('score')->create('user','editProfile');
if(!dao::isError())
{
$this->loadModel('mail');
@@ -538,7 +538,7 @@ class userModel extends model
$this->dao->update(TABLE_USER)->data($user)->autoCheck()->where('id')->eq((int)$userID)->exec();
$this->app->user->password = $user->password;
$this->app->user->modifyPassword = false;
$this->loadModel('score')->score('user','changePassword',$this->computePasswordStrength($this->post->password1));
$this->loadModel('score')->create('user','changePassword',$this->computePasswordStrength($this->post->password1));
}
/**