Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -44,6 +44,7 @@ $filter->mail = new stdclass();
|
||||
$filter->user = new stdclass();
|
||||
$filter->block = new stdclass();
|
||||
$filter->file = new stdclass();
|
||||
$filter->my = new stdclass();
|
||||
|
||||
$filter->block->default = new stdclass();
|
||||
$filter->block->main = new stdclass();
|
||||
@@ -85,6 +86,7 @@ $filter->testtask->default = new stdclass();
|
||||
$filter->todo->export = new stdclass();
|
||||
$filter->upgrade->license = new stdclass();
|
||||
$filter->user->login = new stdclass();
|
||||
$filter->my->index = new stdclass();
|
||||
|
||||
$filter->bug->batchcreate->cookie['preBranch'] = 'int';
|
||||
$filter->bug->browse->cookie['bugModule'] = 'int';
|
||||
@@ -160,6 +162,8 @@ $filter->todo->export->cookie['checkedItem'] = 'reg::checked';
|
||||
|
||||
$filter->user->login->cookie['keepLogin'] = 'equal::on';
|
||||
|
||||
$filter->my->index->cookie['showNotice'] = 'int';
|
||||
|
||||
$filter->block->default->get['hash'] = 'reg::md5';
|
||||
$filter->block->main->get['blockid'] = 'code';
|
||||
$filter->block->main->get['blockTitle'] = 'reg::any';
|
||||
|
||||
+8
-7
@@ -77,22 +77,23 @@ ALTER TABLE `zt_team` CHANGE `days` `days` SMALLINT(5) UNSIGNED NOT NULL DEFA
|
||||
ALTER TABLE `zt_team` DROP PRIMARY KEY;
|
||||
ALTER TABLE `zt_team` ADD PRIMARY KEY (`project`, `task`, `account`);
|
||||
|
||||
ALTER TABLE `zt_user` ADD `score` DECIMAL(12,1) NOT NULL DEFAULT '0' AFTER `deleted`;
|
||||
ALTER TABLE `zt_user` ADD `score_level` DECIMAL(12,1) NOT NULL DEFAULT '0' AFTER `score`;
|
||||
ALTER TABLE `zt_user` ADD `score` INT(12) NOT NULL DEFAULT '0' AFTER `deleted`;
|
||||
ALTER TABLE `zt_user` ADD `scoreLevel` INT(11) NOT NULL DEFAULT '0' AFTER `score`;
|
||||
|
||||
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 DEFAULT '',
|
||||
`method` varchar(30) NOT NULL,
|
||||
`desc` varchar(250) NOT NULL DEFAULT '',
|
||||
`before` decimal(12,1) NOT NULL DEFAULT '0.0',
|
||||
`score` decimal(12,1) NOT NULL DEFAULT '0.0',
|
||||
`after` decimal(12,1) NOT NULL DEFAULT '0.0',
|
||||
`before` int(11) NOT NULL DEFAULT '0',
|
||||
`score` int(11) NOT NULL DEFAULT '0',
|
||||
`after` int(11) NOT NULL DEFAULT '0',
|
||||
`time` datetime NOT NULL,
|
||||
`objectID` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `account` (`account`),
|
||||
KEY `model` (`model`),
|
||||
KEY `model` (`module`),
|
||||
KEY `method` (`method`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ $lang->my->menu->dynamic = 'Dynamic|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => 'Profile|my|profile', 'alias' => 'editprofile');
|
||||
$lang->my->menu->changePassword = 'Password|my|changepassword';
|
||||
$lang->my->menu->manageContacts = 'Contact|my|managecontacts';
|
||||
$lang->my->menu->score = array('link' => 'Score|score|browse', 'subModule' => 'score');
|
||||
$lang->my->menu->score = 'Score|score|browse';
|
||||
|
||||
$lang->todo = new stdclass();
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
@@ -175,7 +175,7 @@ $lang->my->menu->dynamic = '动态|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => '档案|my|profile', 'alias' => 'editprofile');
|
||||
$lang->my->menu->changePassword = '密码|my|changepassword';
|
||||
$lang->my->menu->manageContacts = '联系人|my|managecontacts';
|
||||
$lang->my->menu->score = array('link' => '积分|score|browse', 'subModule' => 'score');
|
||||
$lang->my->menu->score = '积分|my|score';
|
||||
|
||||
$lang->todo = new stdclass();
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
@@ -175,7 +175,7 @@ $lang->my->menu->dynamic = '動態|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => '檔案|my|profile', 'alias' => 'editprofile');
|
||||
$lang->my->menu->changePassword = '密碼|my|changepassword';
|
||||
$lang->my->menu->manageContacts = '聯繫人|my|managecontacts';
|
||||
$lang->my->menu->score = array('link' => '積分|score|browse', 'subModule' => 'score');
|
||||
$lang->my->menu->score = '積分|my|score';
|
||||
|
||||
$lang->todo = new stdclass();
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
@@ -1162,8 +1162,8 @@ class commonModel extends model
|
||||
global $app;
|
||||
|
||||
if(!empty($app->user->admin)) return true;
|
||||
if($module = 'todo' and ($method == 'create' or $method == 'batchcreate')) return true;
|
||||
if($module = 'effort' and ($method == 'createforobject' or $method == 'batchcreate')) return true;
|
||||
if($module == 'todo' and ($method == 'create' or $method == 'batchcreate')) return true;
|
||||
if($module == 'effort' and ($method == 'createforobject' or $method == 'batchcreate')) return true;
|
||||
|
||||
// limited project
|
||||
$limitedProject = false;
|
||||
|
||||
@@ -17,6 +17,7 @@ $lang->custom->setPublic = '设为公共';
|
||||
$lang->custom->required = '必填项';
|
||||
$lang->custom->score = '积分';
|
||||
$lang->custom->scoreReset = '重置积分';
|
||||
$lang->custom->scoreInit = '初始化积分';
|
||||
|
||||
$lang->custom->object['story'] = '需求';
|
||||
$lang->custom->object['task'] = '任务';
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,25 +10,25 @@
|
||||
*/
|
||||
?>
|
||||
<?php include 'header.html.php'; ?>
|
||||
<div class='main'>
|
||||
<form method='post' class='form-condensed' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-100px text-top'><?php echo $lang->custom->score; ?></th>
|
||||
<td><?php echo html::radio('score', $lang->custom->scoreList, isset($config->global->score) ? $config->global->score : 0, '', 'block'); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><?php echo html::submitButton() ?> <?php echo html::a(inLink('resetScore'), "<i class='icon-refresh'></i> " . $lang->custom->scoreReset, '', "class='btn'");?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#featurebar #scoreTab').addClass('active');
|
||||
$('.side #<?php echo $moduleName?>Tab').addClass('active');
|
||||
})
|
||||
</script>
|
||||
<div class='main'>
|
||||
<form method='post' class='form-condensed' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='w-100px text-top'><?php echo $lang->custom->score; ?></th>
|
||||
<td><?php echo html::radio('score', $lang->custom->scoreList, isset($config->global->score) ? $config->global->score : 0, '', 'block'); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td><?php echo html::submitButton() ?><?php common::printLink('score', 'init', '', "<i class='icon-refresh'></i> " . isset($config->global->scoreInit) ? $lang->custom->scoreReset : $lang->custom->scoreInit, '', ' id="scoreRefresh" class="btn iframe" data-width="480"', true, true); ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#featurebar #scoreTab').addClass('active');
|
||||
$('.side #<?php echo $moduleName?>Tab').addClass('active');
|
||||
})
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php'; ?>
|
||||
@@ -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;
|
||||
|
||||
@@ -85,6 +85,7 @@ $lang->resource->my->unbind = 'unbind';
|
||||
$lang->resource->my->manageContacts = 'manageContacts';
|
||||
$lang->resource->my->deleteContacts = 'deleteContacts';
|
||||
$lang->resource->my->limited = 'limited';
|
||||
$lang->resource->my->score = 'score';
|
||||
|
||||
$lang->my->methodOrder[0] = 'index';
|
||||
$lang->my->methodOrder[5] = 'todo';
|
||||
@@ -101,7 +102,8 @@ $lang->my->methodOrder[55] = 'changePassword';
|
||||
$lang->my->methodOrder[60] = 'unbind';
|
||||
$lang->my->methodOrder[65] = 'manageContacts';
|
||||
$lang->my->methodOrder[75] = 'deleteContacts';
|
||||
$lang->my->methodOrder[80] = 'limited';
|
||||
$lang->my->methodOrder[80] = 'score';
|
||||
$lang->my->methodOrder[85] = 'limited';
|
||||
|
||||
/* Todo. */
|
||||
$lang->resource->todo = new stdclass();
|
||||
|
||||
+26
-1
@@ -33,7 +33,32 @@ class my extends control
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$this->view->title = $this->lang->my->common;
|
||||
$this->view->title = $this->lang->my->common;
|
||||
$this->view->notice = $this->loadModel('score')->getNotice();
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get score list
|
||||
*
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
*
|
||||
* @access public
|
||||
* @return mixed
|
||||
*/
|
||||
public function score($recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
{
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager($recTotal, $recPerPage, $pageID);
|
||||
$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();
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ $lang->my->unbind = 'Unbind Ranger';
|
||||
$lang->my->manageContacts = 'Maintain Contact';
|
||||
$lang->my->deleteContacts = 'Delete Contact';
|
||||
$lang->my->limited = 'Restricted operation (editing only content related to itself)';
|
||||
$lang->my->score = 'Score';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = 'Assigned to Me';
|
||||
|
||||
@@ -18,6 +18,7 @@ $lang->my->unbind = '解除然之绑定';
|
||||
$lang->my->manageContacts = '维护联系人';
|
||||
$lang->my->deleteContacts = '删除联系人';
|
||||
$lang->my->limited = '受限操作(只能编辑与自己相关的内容)';
|
||||
$lang->my->score = '积分';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = '指派给我';
|
||||
|
||||
@@ -18,6 +18,7 @@ $lang->my->unbind = '解除然之綁定';
|
||||
$lang->my->manageContacts = '維護聯繫人';
|
||||
$lang->my->deleteContacts = '刪除聯繫人';
|
||||
$lang->my->limited = '受限操作(只能編輯與自己相關的內容)';
|
||||
$lang->my->score = '積分';
|
||||
|
||||
$lang->my->taskMenu = new stdclass();
|
||||
$lang->my->taskMenu->assignedToMe = '指派給我';
|
||||
|
||||
@@ -12,4 +12,5 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php css::import($defaultTheme . 'index.css', $config->version);?>
|
||||
<?php echo $this->fetch('block', 'dashboard', 'module=my');?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
<div id="noticeBox"><?php echo $notice; ?></div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -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
|
||||
*/
|
||||
@@ -14,14 +14,14 @@
|
||||
<div class='heading'><?php echo html::icon($lang->icons['score']); ?><?php echo $lang->score->record; ?></div>
|
||||
<div class='actions'>
|
||||
<span class='btn disabled'><label><?php echo $lang->score->current; ?>:</label><?php echo $user->score; ?></span>
|
||||
<span class='btn disabled hidden'><label><?php echo $lang->score->level; ?>:</label><?php echo $user->score_level; ?></span>
|
||||
<span class='btn disabled hidden'><label><?php echo $lang->score->level; ?>:</label><?php echo $user->scoreLevel; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table tablesorter'>
|
||||
<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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+70
-37
@@ -1,55 +1,88 @@
|
||||
<?php
|
||||
$config->score = new stdClass();
|
||||
|
||||
$config->score->model['user']['login'] = array('num' => 3, 'time' => 24, 'score' => 1, 'other' => '');
|
||||
$config->score->model['user']['changePassword'] = array('num' => 1, 'time' => 0, 'score' => 10, 'other' => array(1 => 2, 2 => 5));
|
||||
$config->score->model['user']['editProfile'] = array('num' => 1, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
$config->score->user = new stdClass();
|
||||
$config->score->tutorial = new stdClass();
|
||||
$config->score->ajax = new stdClass();
|
||||
$config->score->doc = new stdClass();
|
||||
$config->score->todo = new stdClass();
|
||||
$config->score->story = new stdClass();
|
||||
$config->score->task = new stdClass();
|
||||
$config->score->bug = new stdClass();
|
||||
$config->score->testcase = new stdClass();
|
||||
$config->score->testtask = new stdClass();
|
||||
$config->score->build = new stdClass();
|
||||
$config->score->project = new stdClass();
|
||||
$config->score->productplan = new stdClass();
|
||||
$config->score->release = new stdClass();
|
||||
$config->score->block = new stdClass();
|
||||
$config->score->search = new stdClass();
|
||||
|
||||
$config->score->model['tutorial']['keepAll'] = array('num' => 1, 'time' => 0, 'score' => 100, 'other' => '');
|
||||
//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' => '');
|
||||
|
||||
$config->score->model['ajax']['selectTheme'] = array('num' => 1, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
$config->score->model['ajax']['selectLang'] = array('num' => 1, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
$config->score->model['ajax']['showSearchMenu'] = array('num' => 1, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
$config->score->model['ajax']['dragSelected'] = array('num' => 1, 'time' => 0, 'score' => 20, 'other' => '');
|
||||
$config->score->model['ajax']['lastNext'] = array('num' => 1, 'time' => 0, 'score' => 20, 'other' => '');
|
||||
$config->score->model['ajax']['switchToDataTable'] = array('num' => 1, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['ajax']['submitPage'] = array('num' => 1, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['ajax']['customMenu'] = array('num' => 1, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['ajax']['quickDump'] = array('num' => 1, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
$config->score->model['ajax']['batchCreate'] = array('num' => 1, 'time' => 0, 'score' => 20, 'other' => '');
|
||||
$config->score->model['ajax']['batchEdit'] = array('num' => 1, 'time' => 0, 'score' => 20, 'other' => '');
|
||||
//tutorial rule
|
||||
$config->score->tutorial->keepAll = array('num' => 1, 'time' => 0, 'score' => 100, 'ext' => '');
|
||||
|
||||
$config->score->model['doc']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
//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->quickJump = 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' => '');
|
||||
|
||||
$config->score->model['todo']['create'] = array('num' => 5, 'time' => 24, 'score' => 1, 'other' => '');
|
||||
//doc rule
|
||||
$config->score->doc->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
|
||||
|
||||
$config->score->model['story']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['story']['close'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => array('createID' => 2));//每个需求被完成关闭,需求的创建者额外增加2分,关闭者增加1分
|
||||
//todo rule
|
||||
$config->score->todo->create = array('num' => 5, 'time' => 24, 'score' => 1, 'ext' => '');
|
||||
|
||||
$config->score->model['task']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['task']['close'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['task']['finish'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => array(1 => 2, 2 => 1, 3 => 0));
|
||||
//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));
|
||||
|
||||
$config->score->model['bug']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['bug']['confirmBug'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => array(1 => 3, 2 => 2, 3 => 1));
|
||||
$config->score->model['bug']['createFormCase'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['bug']['resolve'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => array(1 => 3, 2 => 2, 3 => 1));
|
||||
$config->score->model['bug']['saveTplModal'] = array('num' => 0, 'time' => 0, 'score' => 20, 'other' => '');
|
||||
//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));
|
||||
|
||||
$config->score->model['testTask']['runCase'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
//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' => '');
|
||||
|
||||
$config->score->model['testcase']['create'] = array('num' => 0, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
//testcase rule
|
||||
$config->score->testcase->create = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
|
||||
|
||||
$config->score->model['build']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
//testtask rule
|
||||
$config->score->testtask->runCase = array('num' => 0, 'time' => 0, 'score' => 1, 'ext' => '');
|
||||
|
||||
$config->score->model['project']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
$config->score->model['project']['close'] = array('num' => 0, 'time' => 0, 'score' => 0, 'other' => array('manager' => array(20, 10), 'member' => array(5, 5)));
|
||||
//bulid rule
|
||||
$config->score->build->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
|
||||
|
||||
$config->score->model['productplan']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
//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)));
|
||||
|
||||
$config->score->model['release']['create'] = array('num' => 0, 'time' => 0, 'score' => 10, 'other' => '');
|
||||
//productplan rule
|
||||
$config->score->productplan->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
|
||||
|
||||
$config->score->model['block']['set'] = array('num' => 1, 'time' => 0, 'score' => 20, 'other' => '');
|
||||
//release rule
|
||||
$config->score->release->create = array('num' => 0, 'time' => 0, 'score' => 10, 'ext' => '');
|
||||
|
||||
$config->score->model['search']['saveQuery'] = array('num' => 1, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
$config->score->model['search']['saveQueryAdvanced'] = array('num' => 1, 'time' => 0, 'score' => 1, 'other' => '');
|
||||
//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' => '');
|
||||
|
||||
+29
-40
@@ -9,54 +9,43 @@
|
||||
*/
|
||||
class score extends control
|
||||
{
|
||||
/**
|
||||
* score constructor.
|
||||
*
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
*
|
||||
* @access public
|
||||
* @return mixed
|
||||
*/
|
||||
public function __construct($module = '', $method = '')
|
||||
{
|
||||
parent::__construct($module, $method);
|
||||
$this->loadModel('my')->setMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get score list
|
||||
*
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
*
|
||||
* @access public
|
||||
* @return mixed
|
||||
*/
|
||||
public function browse($recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
{
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager($recTotal, $recPerPage, $pageID);
|
||||
$scores = $this->score->getScores($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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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())
|
||||
{
|
||||
$result = $this->score->init($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->initFinish));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->send(array('result' => 'unfinished', 'message' => $this->lang->score->processed, 'lastID' => $result['lastID']));
|
||||
}
|
||||
}
|
||||
$this->display();
|
||||
}
|
||||
}
|
||||
@@ -1 +1,79 @@
|
||||
<?php
|
||||
$lang->score->common = 'Score';
|
||||
$lang->score->record = 'Score record';
|
||||
$lang->score->current = 'Current score';
|
||||
$lang->score->level = 'Level score';
|
||||
$lang->score->init = 'Initialize';
|
||||
$lang->score->tips = 'Yesterday added score:<strong>%d</strong><br/>Today total score:<strong>%d</strong><br/>Come on! ^_^';
|
||||
$lang->score->initTips = 'Initialization will be based on historical records, the execution time may be longer. <strong>Do not close the window before the completion</strong>';
|
||||
$lang->score->initStart = 'Start initialize';
|
||||
$lang->score->initLoading = 'Initializing...';
|
||||
$lang->score->initFinish = 'initialized';
|
||||
$lang->score->processed = 'Processed ...';
|
||||
|
||||
$lang->score->id = 'ID';
|
||||
$lang->score->userID = 'UserID';
|
||||
$lang->score->account = 'User';
|
||||
$lang->score->module = 'Module';
|
||||
$lang->score->method = 'Method';
|
||||
$lang->score->before = 'Before';
|
||||
$lang->score->score = 'Score';
|
||||
$lang->score->after = 'After';
|
||||
$lang->score->time = 'Time';
|
||||
$lang->score->desc = 'Description';
|
||||
|
||||
|
||||
$lang->score->models['task'] = 'Task';
|
||||
$lang->score->models['tutorial'] = 'Tutorial';
|
||||
$lang->score->models['user'] = 'User';
|
||||
$lang->score->models['ajax'] = 'Other';
|
||||
$lang->score->models['doc'] = 'Doc';
|
||||
$lang->score->models['todo'] = 'Todo';
|
||||
$lang->score->models['story'] = 'Story';
|
||||
$lang->score->models['bug'] = 'Bug';
|
||||
$lang->score->models['testcase'] = 'TestCase';
|
||||
$lang->score->models['testtask'] = 'TestTask';
|
||||
$lang->score->models['build'] = 'Build';
|
||||
$lang->score->models['project'] = 'Project';
|
||||
$lang->score->models['productplan'] = 'Plan';
|
||||
$lang->score->models['release'] = 'Release';
|
||||
$lang->score->models['block'] = 'Block';
|
||||
$lang->score->models['search'] = 'Search';
|
||||
|
||||
$lang->score->methods['task']['create'] = 'Create task';
|
||||
$lang->score->methods['task']['close'] = 'Close task';
|
||||
$lang->score->methods['task']['finish'] = 'Finish task';
|
||||
$lang->score->methods['tutorial']['keepAll'] = 'Finish tutorial';
|
||||
$lang->score->methods['user']['login'] = 'Login';
|
||||
$lang->score->methods['user']['changePassword'] = 'Change password';
|
||||
$lang->score->methods['user']['editProfile'] = 'Edit profile';
|
||||
$lang->score->methods['ajax']['selectTheme'] = 'Change theme';
|
||||
$lang->score->methods['ajax']['selectLang'] = 'Change Lang';
|
||||
$lang->score->methods['ajax']['showSearchMenu'] = 'Advanced search';
|
||||
$lang->score->methods['ajax']['customMenu'] = 'Custom menu';
|
||||
$lang->score->methods['ajax']['dragSelected'] = 'Drag selected';
|
||||
$lang->score->methods['ajax']['lastNext'] = 'Page turned';
|
||||
$lang->score->methods['ajax']['switchToDataTable'] = 'Switch dataTable';
|
||||
$lang->score->methods['ajax']['submitPage'] = 'Change page number';
|
||||
$lang->score->methods['ajax']['quickJump'] = 'Quick jump';
|
||||
$lang->score->methods['ajax']['batchCreate'] = 'Batch create';
|
||||
$lang->score->methods['ajax']['batchEdit'] = 'Batch update';
|
||||
$lang->score->methods['doc']['create'] = 'Create doc';
|
||||
$lang->score->methods['todo']['create'] = 'Create todo';
|
||||
$lang->score->methods['story']['create'] = 'Create story';
|
||||
$lang->score->methods['story']['close'] = 'Close story';
|
||||
$lang->score->methods['bug']['create'] = 'Create bug';
|
||||
$lang->score->methods['bug']['confirmBug'] = 'Confirm bug';
|
||||
$lang->score->methods['bug']['createFormCase'] = 'Create bug form case';
|
||||
$lang->score->methods['bug']['resolve'] = 'Resolve bug';
|
||||
$lang->score->methods['bug']['saveTplModal'] = 'Bug save template';
|
||||
$lang->score->methods['testtask']['runCase'] = 'Run test case';
|
||||
$lang->score->methods['testcase']['create'] = 'Create test case';
|
||||
$lang->score->methods['build']['create'] = 'Create build';
|
||||
$lang->score->methods['project']['create'] = 'Create project';
|
||||
$lang->score->methods['project']['close'] = 'Project finish';
|
||||
$lang->score->methods['productplan']['create'] = 'Create plan';
|
||||
$lang->score->methods['release']['create'] = 'Create release';
|
||||
$lang->score->methods['block']['set'] = 'Custom block';
|
||||
$lang->score->methods['search']['saveQuery'] = 'Save search query';
|
||||
$lang->score->methods['search']['saveQueryAdvanced'] = 'Advanced search';
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
<?php
|
||||
$lang->score->common = '积分';
|
||||
$lang->score->record = '积分记录';
|
||||
$lang->score->current = '当前积分';
|
||||
$lang->score->level = '等级积分';
|
||||
$lang->score->common = '积分';
|
||||
$lang->score->record = '积分记录';
|
||||
$lang->score->current = '当前积分';
|
||||
$lang->score->level = '等级积分';
|
||||
$lang->score->init = '初始化';
|
||||
$lang->score->tips = '昨天增加了积分:<strong>%d</strong><br/>现共有积分:<strong>%d</strong><br/>今天再接再厉哟! ^_^';
|
||||
$lang->score->initTips = '初始化将根据历史记录计算,执行时间可能会比较长.<br/><strong>请勿在未完成前关闭窗口</strong>';
|
||||
$lang->score->initStart = '开始初始化';
|
||||
$lang->score->initLoading = '正在初始化...';
|
||||
$lang->score->initFinish = '初始化完成';
|
||||
$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 = '分值';
|
||||
@@ -19,12 +26,13 @@ $lang->score->desc = '描述';
|
||||
$lang->score->models['task'] = '任务';
|
||||
$lang->score->models['tutorial'] = '新手教程';
|
||||
$lang->score->models['user'] = '用户';
|
||||
$lang->score->models['ajax'] = '';
|
||||
$lang->score->models['ajax'] = '其它';
|
||||
$lang->score->models['doc'] = '文档';
|
||||
$lang->score->models['todo'] = '待办';
|
||||
$lang->score->models['story'] = '需求';
|
||||
$lang->score->models['bug'] = 'Bug';
|
||||
$lang->score->models['testTask'] = '用例';
|
||||
$lang->score->models['testcase'] = '用例';
|
||||
$lang->score->models['testtask'] = '测试';
|
||||
$lang->score->models['build'] = 'Build';
|
||||
$lang->score->models['project'] = '项目';
|
||||
$lang->score->models['productplan'] = '计划';
|
||||
@@ -47,7 +55,7 @@ $lang->score->methods['ajax']['dragSelected'] = '列表页面拖动选中
|
||||
$lang->score->methods['ajax']['lastNext'] = '快捷键翻页';
|
||||
$lang->score->methods['ajax']['switchToDataTable'] = '使用高级表格';
|
||||
$lang->score->methods['ajax']['submitPage'] = '修改分页数量';
|
||||
$lang->score->methods['ajax']['quickDump'] = '使用快速跳转';
|
||||
$lang->score->methods['ajax']['quickJump'] = '使用快速跳转';
|
||||
$lang->score->methods['ajax']['batchCreate'] = '首次使用批量添加';
|
||||
$lang->score->methods['ajax']['batchEdit'] = '首次使用批量编辑';
|
||||
$lang->score->methods['doc']['create'] = '创建文档';
|
||||
@@ -59,7 +67,8 @@ $lang->score->methods['bug']['confirmBug'] = '确认Bug';
|
||||
$lang->score->methods['bug']['createFormCase'] = '从用例创建';
|
||||
$lang->score->methods['bug']['resolve'] = '解决Bug';
|
||||
$lang->score->methods['bug']['saveTplModal'] = '保存模板';
|
||||
$lang->score->methods['testTask']['runCase'] = '执行用例';
|
||||
$lang->score->methods['testtask']['runCase'] = '执行用例';
|
||||
$lang->score->methods['testcase']['create'] = '创建用例';
|
||||
$lang->score->methods['build']['create'] = '创建版本';
|
||||
$lang->score->methods['project']['create'] = '创建项目';
|
||||
$lang->score->methods['project']['close'] = '项目完成';
|
||||
|
||||
@@ -1 +1,79 @@
|
||||
<?php
|
||||
$lang->score->common = '積分';
|
||||
$lang->score->record = '積分記錄';
|
||||
$lang->score->current = '當前積分';
|
||||
$lang->score->level = '等級積分';
|
||||
$lang->score->init = '初始化';
|
||||
$lang->score->tips = '昨天增加了積分:<strong>%d</strong><br/>現共有積分:<strong>%d</strong><br/>今天再接再厲喲! ^_^';
|
||||
$lang->score->initTips = '初始化將根據歷史記錄計算,執行時間可能會比較長.<br/><strong>請勿在未完成前關閉窗口</strong>';
|
||||
$lang->score->initStart = '開始初始化';
|
||||
$lang->score->initLoading = '正在初始化...';
|
||||
$lang->score->initFinish = '初始化完成';
|
||||
$lang->score->processed = '正在處理中...';
|
||||
|
||||
$lang->score->id = '編號';
|
||||
$lang->score->userID = '用戶ID';
|
||||
$lang->score->account = '用戶';
|
||||
$lang->score->module = '模塊';
|
||||
$lang->score->method = '動作';
|
||||
$lang->score->before = '之前';
|
||||
$lang->score->score = '分值';
|
||||
$lang->score->after = '之後';
|
||||
$lang->score->time = '時間';
|
||||
$lang->score->desc = '描述';
|
||||
|
||||
|
||||
$lang->score->models['task'] = '任務';
|
||||
$lang->score->models['tutorial'] = '新手教程';
|
||||
$lang->score->models['user'] = '用戶';
|
||||
$lang->score->models['ajax'] = '其它';
|
||||
$lang->score->models['doc'] = '文檔';
|
||||
$lang->score->models['todo'] = '待辦';
|
||||
$lang->score->models['story'] = '需求';
|
||||
$lang->score->models['bug'] = 'Bug';
|
||||
$lang->score->models['testcase'] = '用例';
|
||||
$lang->score->models['testtask'] = '測試';
|
||||
$lang->score->models['build'] = 'Build';
|
||||
$lang->score->models['project'] = '項目';
|
||||
$lang->score->models['productplan'] = '計劃';
|
||||
$lang->score->models['release'] = '發布';
|
||||
$lang->score->models['block'] = '區塊';
|
||||
$lang->score->models['search'] = '搜索';
|
||||
|
||||
$lang->score->methods['task']['create'] = '創建任務';
|
||||
$lang->score->methods['task']['close'] = '關閉任務';
|
||||
$lang->score->methods['task']['finish'] = '完成任務';
|
||||
$lang->score->methods['tutorial']['keepAll'] = '學習完成';
|
||||
$lang->score->methods['user']['login'] = '登錄';
|
||||
$lang->score->methods['user']['changePassword'] = '修改密碼';
|
||||
$lang->score->methods['user']['editProfile'] = '修改個人資料';
|
||||
$lang->score->methods['ajax']['selectTheme'] = '切換主題';
|
||||
$lang->score->methods['ajax']['selectLang'] = '切換語言';
|
||||
$lang->score->methods['ajax']['showSearchMenu'] = '搜索高級用法';
|
||||
$lang->score->methods['ajax']['customMenu'] = '自定義菜單';
|
||||
$lang->score->methods['ajax']['dragSelected'] = '列表頁面拖動選中';
|
||||
$lang->score->methods['ajax']['lastNext'] = '快捷鍵翻頁';
|
||||
$lang->score->methods['ajax']['switchToDataTable'] = '使用高級表格';
|
||||
$lang->score->methods['ajax']['submitPage'] = '修改分頁數量';
|
||||
$lang->score->methods['ajax']['quickJump'] = '使用快速跳轉';
|
||||
$lang->score->methods['ajax']['batchCreate'] = '首次使用批量添加';
|
||||
$lang->score->methods['ajax']['batchEdit'] = '首次使用批量編輯';
|
||||
$lang->score->methods['doc']['create'] = '創建文檔';
|
||||
$lang->score->methods['todo']['create'] = '創建待辦';
|
||||
$lang->score->methods['story']['create'] = '創建需求';
|
||||
$lang->score->methods['story']['close'] = '需求關閉';
|
||||
$lang->score->methods['bug']['create'] = '創建Bug';
|
||||
$lang->score->methods['bug']['confirmBug'] = '確認Bug';
|
||||
$lang->score->methods['bug']['createFormCase'] = '從用例創建';
|
||||
$lang->score->methods['bug']['resolve'] = '解決Bug';
|
||||
$lang->score->methods['bug']['saveTplModal'] = '保存模板';
|
||||
$lang->score->methods['testtask']['runCase'] = '執行用例';
|
||||
$lang->score->methods['testcase']['create'] = '創建用例';
|
||||
$lang->score->methods['build']['create'] = '創建版本';
|
||||
$lang->score->methods['project']['create'] = '創建項目';
|
||||
$lang->score->methods['project']['close'] = '項目完成';
|
||||
$lang->score->methods['productplan']['create'] = '創建計劃';
|
||||
$lang->score->methods['release']['create'] = '創建發布';
|
||||
$lang->score->methods['block']['set'] = '區塊自定義設置';
|
||||
$lang->score->methods['search']['saveQuery'] = '保存搜索條件';
|
||||
$lang->score->methods['search']['saveQueryAdvanced'] = '使用高級搜索';
|
||||
+156
-51
@@ -10,43 +10,50 @@
|
||||
class scoreModel extends model
|
||||
{
|
||||
/**
|
||||
* 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')->page($pager)->fetchAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* add score logs
|
||||
*
|
||||
* @param string $model
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @param string $param
|
||||
* @param string $account
|
||||
* @param string $time
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function score($model = '', $method = '', $param = '')
|
||||
public function create($module = '', $method = '', $param = '', $account = '', $time = '')
|
||||
{
|
||||
if(empty($this->config->score->model[$model][$method])) return true;
|
||||
$rule = $this->config->score->model[$model][$method];
|
||||
$desc = $this->lang->score->models[$model];
|
||||
$user = $this->app->user->account;
|
||||
switch($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($module)
|
||||
{
|
||||
case 'user':
|
||||
if($method == 'login') $desc = $this->lang->score->methods[$model][$method] . 'IP:' . helper::getRemoteIp();
|
||||
if($method == 'login') $desc = $this->lang->score->methods[$module][$method];
|
||||
|
||||
if($method == 'changePassword')
|
||||
{
|
||||
if(!empty($rule['other'][$param])) $rule['score'] = $rule['score'] + $rule['other'][$param];
|
||||
$desc = $this->lang->score->methods[$model][$method];
|
||||
if(!empty($rule['ext'][$param])) $rule['score'] = $rule['score'] + $rule['ext'][$param];
|
||||
$desc = $this->lang->score->methods[$module][$method];
|
||||
}
|
||||
break;
|
||||
case 'doc':
|
||||
@@ -57,31 +64,34 @@ class scoreModel extends model
|
||||
break;
|
||||
case 'story':
|
||||
$desc .= 'ID:' . $param;
|
||||
|
||||
if($method == 'close')
|
||||
{
|
||||
$createUser = $this->dao->findById($param)->from(TABLE_STORY)->fetch();
|
||||
if(!empty($createUser))
|
||||
{
|
||||
$newRule = $rule;
|
||||
$newRule['score'] = $rule['other']['createID'];
|
||||
$this->saveScore($createUser->openedBy, $newRule, $model, $method, $desc);
|
||||
$newRule['score'] = $rule['ext']['createID'];
|
||||
$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['other'][$task->pri])) $rule['score'] = $rule['score'] + $rule['other'][$task->pri];
|
||||
|
||||
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);
|
||||
}
|
||||
break;
|
||||
case 'bug':
|
||||
$desc .= 'ID:' . $param;
|
||||
if(is_numeric($param)) $desc .= 'ID:' . $param;
|
||||
|
||||
if($method == 'createFormCase')
|
||||
{
|
||||
$desc = $this->lang->score->models['testcase'] . 'ID:' . $param;
|
||||
@@ -91,16 +101,25 @@ 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')
|
||||
{
|
||||
$user = $param->openedBy;
|
||||
if(!empty($rule['other'][$param->severity])) $rule['score'] = $rule['score'] + $rule['other'][$param->severity];
|
||||
$objectID = $param->id;
|
||||
$user = $param->openedBy;
|
||||
$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;
|
||||
$rule['score'] = $rule['score'] + $rule['ext'][$param->severity];
|
||||
}
|
||||
if($method == 'resolve' && !empty($rule['other'][$param->severity])) $rule['score'] = $rule['score'] + $rule['other'][$param->severity];
|
||||
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;
|
||||
@@ -109,20 +128,26 @@ 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;
|
||||
$timestamp = empty($time) ? time() : strtotime($time);
|
||||
|
||||
//project PM
|
||||
if(!empty($param->PM))
|
||||
{
|
||||
$rule['score'] = $param->end > date('Y-m-d') ? $rule['other']['manager'][0] + $rule['other']['manager'][1] : $rule['other']['manager'][0];
|
||||
$this->saveScore($param->PM, $rule, $model, $method, $desc);
|
||||
$rule['score'] = $param->end > date('Y-m-d', $timestamp) ? $rule['ext']['manager'][0] + $rule['ext']['manager'][1] : $rule['ext']['manager'][0];
|
||||
$this->saveScore($param->PM, $rule, $module, $method, $desc, $objectID, $time);
|
||||
}
|
||||
|
||||
//project team user
|
||||
$teams = $this->dao->select('account')->from(TABLE_TEAM)->where('project')->eq($param->id)->fetchGroup('account');
|
||||
if(!empty($teams))
|
||||
{
|
||||
$users = array_keys($teams);
|
||||
$rule['score'] = $param->end > date('Y-m-d') ? $rule['other']['member'][0] + $rule['other']['member'][1] : $rule['other']['member'][0];
|
||||
$rule['score'] = $param->end > date('Y-m-d', $timestamp) ? $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);
|
||||
if($user != $param->PM) $this->saveScore($user, $rule, $module, $method, $desc, $objectID, $time);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -139,13 +164,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);
|
||||
$this->saveScore($user, $rule, $module, $method, $desc, $objectID, $time);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,25 +178,28 @@ 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
|
||||
* @param string $time
|
||||
*
|
||||
* @access private
|
||||
* @return bool
|
||||
*/
|
||||
private function saveScore($account = '', $rule = array(), $model = '', $method = '', $desc = '')
|
||||
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('module')->eq($module)->andWhere('method')->eq($method)->count();
|
||||
if($count >= $rule['num']) return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$count = $this->dao->select('id')->from(TABLE_SCORE)->where('account')->eq($account)->andWhere('time')->between(date('Y-m-d 0:0:0'), date('Y-m-d 23:59:59'))->andWhere('model')->eq($model)->andWhere('method')->eq($method)->count();
|
||||
$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('module')->eq($module)->andWhere('method')->eq($method)->count();
|
||||
if($count >= $rule['num']) return true;
|
||||
}
|
||||
}
|
||||
@@ -181,17 +209,20 @@ class scoreModel extends model
|
||||
{
|
||||
$user = $this->loadModel('user')->getById($account);
|
||||
|
||||
$data = new stdClass();
|
||||
$data->account = $account;
|
||||
$data->model = $model;
|
||||
$data->method = $method;
|
||||
$data->desc = $desc;
|
||||
$data->before = $user->score;
|
||||
$data->score = $rule['score'];
|
||||
$data->after = $user->score + $rule['score'];
|
||||
$data->time = helper::now();
|
||||
$data = new stdClass();
|
||||
$data->account = $account;
|
||||
$data->module = $module;
|
||||
$data->method = $method;
|
||||
$data->desc = $desc;
|
||||
$data->objectID = $objectID;
|
||||
$data->before = $user->score;
|
||||
$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'] . ",`score_level`=`score_level` + " . $rule['score'] . " WHERE `account`='" . $account . "'");
|
||||
|
||||
$this->dao->query("UPDATE " . TABLE_USER . " SET `score`=`score` + " . $rule['score'] . ",`scoreLevel`=`scoreLevel` + " . $rule['score'] . " WHERE `account`='" . $account . "'");
|
||||
|
||||
$this->dao->commit();
|
||||
}
|
||||
catch(ErrorException $e)
|
||||
@@ -201,12 +232,86 @@ class scoreModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* reset all user score and level score
|
||||
* Score init from action
|
||||
*
|
||||
* @param int $lastID
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function resetScore()
|
||||
public function init($lastID = 0)
|
||||
{
|
||||
if($lastID == 0)
|
||||
{
|
||||
$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')
|
||||
{
|
||||
$bug = $this->dao->findById($action->objectID)->from(TABLE_BUG)->fetch();
|
||||
if(!empty($bug->case)) $action->action = 'createFormCase';
|
||||
if($action->action == 'bugconfirmed' || $action->action == 'resolved') $param = $bug;
|
||||
}
|
||||
if($action->objectType == 'case') $action->objectType = 'testcase';
|
||||
$this->create($action->objectType, $this->fixKey($action->action), $param, $action->actor, $action->date);
|
||||
}
|
||||
|
||||
return array('status' => 'more', 'lastID' => max(array_keys($actions)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fix action type for score
|
||||
*
|
||||
* @param $string
|
||||
*
|
||||
* @access private
|
||||
* @return mixed
|
||||
*/
|
||||
private function fixKey($string)
|
||||
{
|
||||
$strings = array('created' => 'create', 'opened' => 'create', 'closed' => 'close', 'finished' => 'finish', 'bugconfirmed' => 'confirmBug', 'resolved' => 'resolve');
|
||||
return isset($strings[$string]) ? $strings[$string] : $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* get yesterday's score for user
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getNotice()
|
||||
{
|
||||
if(!isset($this->config->global->score) || empty($this->config->global->score)) return '';
|
||||
if($this->cookie->showNotice == strtotime(date('Y-m-d'))) return '';
|
||||
|
||||
setcookie('showNotice', strtotime(date('Y-m-d')), $this->config->cookieLife, $this->config->webRoot);
|
||||
|
||||
$yesterday = $this->dao->select("sum(score) as score")->from(TABLE_SCORE)->where('time')->between(date('Y-m-d 00:00:00', strtotime('-1 day')), date('Y-m-d 23:59:59', strtotime('-1 day')))->andWhere('account')->eq($this->app->user->account)->fetch();
|
||||
|
||||
$notice = empty($yesterday->score) ? '' : sprintf($this->lang->score->tips, $yesterday->score, $this->app->user->score);
|
||||
|
||||
$notice .= $this->cookie->showNotice;
|
||||
|
||||
$fullNotice = <<<EOT
|
||||
<div id='noticeAttend' class='alert alert-success with-icon alert-dismissable' style='width:280px; position:fixed; bottom:25px; right:15px; z-index: 9999;' id='planInfo'>
|
||||
<i class='icon icon-diamond'> </i>
|
||||
<div class='content'>{$notice}</div>
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
</div>
|
||||
EOT;
|
||||
return empty($notice) ? '' : $fullNotice;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
/**
|
||||
* The init view file of score 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
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php'; ?>
|
||||
<div class="alert with-icon" id="score_start">
|
||||
<i class="icon-inbox"></i>
|
||||
<div class="content">
|
||||
<h4><?php echo $lang->score->init; ?></h4>
|
||||
<hr>
|
||||
<p><?php echo $lang->score->initTips; ?></p>
|
||||
<p>
|
||||
<button class="btn btn-primary" id="score_init"><?php echo $lang->score->initStart; ?></button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert alert-info with-icon hidden" id="score_loading">
|
||||
<i class="icon-info-sign"></i>
|
||||
<h4><?php echo $lang->score->initLoading; ?></h4>
|
||||
<hr/>
|
||||
<p><?php echo $lang->score->initTips; ?></p>
|
||||
<p id="loading_content"></p>
|
||||
</div>
|
||||
<div class="alert alert-success with-icon hidden" id="score_finish">
|
||||
<i class="icon-ok-sign"></i>
|
||||
<div class="content">
|
||||
<strong><?php echo $lang->score->initFinish; ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$("#score_init").on('click', function()
|
||||
{
|
||||
$("#score_start").addClass('hidden');
|
||||
$("#score_loading").removeClass('hidden');
|
||||
score_init(0);
|
||||
});
|
||||
|
||||
function score_init(lastID)
|
||||
{
|
||||
$.getJSON(createLink('score', 'init', 'lastID=' + lastID), function(response)
|
||||
{
|
||||
if(response.result == 'finished')
|
||||
{
|
||||
$("#score_loading").addClass('hidden');
|
||||
$("#score_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(){score_init(response.lastID);}, 500);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php'; ?>
|
||||
@@ -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;
|
||||
|
||||
@@ -230,7 +230,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;
|
||||
@@ -345,7 +345,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;
|
||||
@@ -361,7 +361,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;
|
||||
}
|
||||
|
||||
@@ -611,7 +611,7 @@ class storyModel extends model
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->loadModel('score')->score('ajax', 'batchEdit');
|
||||
$this->loadModel('score')->create('ajax', 'batchEdit');
|
||||
return $allChanges;
|
||||
}
|
||||
|
||||
@@ -787,7 +787,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);
|
||||
}
|
||||
|
||||
@@ -851,7 +851,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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -832,8 +832,8 @@ class testtask extends control
|
||||
}
|
||||
}
|
||||
|
||||
$preCase = '';
|
||||
$nextCase = '';
|
||||
$preCase = array();
|
||||
$nextCase = array();
|
||||
if($preAndNext->pre)
|
||||
{
|
||||
$preCase['runID'] = $runID ? $preAndNext->pre->id : 0;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+8
-4
@@ -193,10 +193,10 @@ function showSearchMenu(objectType, objectID, module, method, extra)
|
||||
{
|
||||
$menu.find('#search').focus();
|
||||
}
|
||||
if(!$.cookie('ajax_quickDump'))
|
||||
if(!$.cookie('ajax_quickJump'))
|
||||
{
|
||||
$.cookie('ajax_quickDump', 'on', {expires: config.cookieLife, path: config.webRoot});
|
||||
$.get(createLink('score', 'ajax', "method=quickDump"));
|
||||
$.cookie('ajax_quickJump', 'on', {expires: config.cookieLife, path: config.webRoot});
|
||||
$.get(createLink('score', 'ajax', "method=quickJump"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -705,6 +705,11 @@ function checkTable($table)
|
||||
var isChecked = $checkbox.prop('checked');
|
||||
if(!$this.is(':checkbox'))
|
||||
{
|
||||
if(!$.cookie('ajax_dragSelected') && $checkbox.size() > 2)
|
||||
{
|
||||
$.cookie('ajax_dragSelected', 'on', {expires: config.cookieLife, path: config.webRoot});
|
||||
$.get(createLink('score', 'ajax', "method=dragSelected"));
|
||||
}
|
||||
isChecked = checked === true || checked === false ? checked : !isChecked;
|
||||
$checkbox.prop('checked', isChecked);
|
||||
}
|
||||
@@ -714,7 +719,6 @@ function checkTable($table)
|
||||
$tr.closest('.table').find('.rows-selector').prop('checked', false);
|
||||
}
|
||||
};
|
||||
|
||||
var isSelectableTable = $table.hasClass('table-selectable');
|
||||
|
||||
$table.selectable(
|
||||
|
||||
Reference in New Issue
Block a user