Merge branch 'master' of github.com:easysoft/zentaopms

This commit is contained in:
iamazhi
2013-08-14 08:53:37 +08:00
33 changed files with 211 additions and 88 deletions
+1 -1
View File
@@ -1 +1 @@
4.3.beta
5.0.beta1
+3 -3
View File
@@ -17,7 +17,7 @@ if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* Basic settings. */
$config = new config();
$config->version = '4.2'; // The version of zentaopms. Don't change it.
$config->version = '5.0.beta1'; // The version of zentaopms. Don't change it.
$config->charset = 'UTF-8'; // The charset of zentaopms.
$config->cookieLife = time() + 2592000; // The cookie life time.
$config->timezone = 'Asia/Shanghai'; // The time zone setting, for more see http://www.php.net/manual/en/timezones.php
@@ -134,7 +134,7 @@ define('TABLE_FILE', '`' . $config->db->prefix . 'file`');
define('TABLE_HISTORY', '`' . $config->db->prefix . 'history`');
define('TABLE_EXTENSION', '`' . $config->db->prefix . 'extension`');
define('TABLE_WEBAPP', '`' . $config->db->prefix . 'webapp`');
define('TABLE_CUSTOM', '`' . $config->db->prefix . 'custom`');
define('TABLE_LANG', '`' . $config->db->prefix . 'lang`');
$config->objectTables['product'] = TABLE_PRODUCT;
$config->objectTables['story'] = TABLE_STORY;
@@ -151,7 +151,7 @@ $config->objectTables['user'] = TABLE_USER;
$config->objectTables['doc'] = TABLE_DOC;
$config->objectTables['doclib'] = TABLE_DOCLIB;
$config->objectTables['todo'] = TABLE_TODO;
$config->objectTables['custom'] = TABLE_CUSTOM;
$config->objectTables['custom'] = TABLE_LANG;
/* Include extension config files. */
$extConfigFiles = glob($configRoot . 'ext/*.php');
+1 -2
View File
@@ -1,4 +1,4 @@
CREATE TABLE IF NOT EXISTS `zt_custom` (
CREATE TABLE IF NOT EXISTS `zt_lang` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
@@ -9,4 +9,3 @@ CREATE TABLE IF NOT EXISTS `zt_custom` (
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+15 -4
View File
@@ -139,12 +139,10 @@ CREATE TABLE IF NOT EXISTS `zt_company` (
`zipcode` char(10) default NULL,
`website` char(120) default NULL,
`backyard` char(120) default NULL,
`pms` char(120) default NULL,
`guest` enum('1','0') NOT NULL default '0',
`admins` char(255) default NULL,
`deleted` enum('0','1') NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `pms` (`pms`)
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_config`;
CREATE TABLE IF NOT EXISTS `zt_config` (
@@ -157,6 +155,18 @@ CREATE TABLE IF NOT EXISTS `zt_config` (
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_lang`;
CREATE TABLE IF NOT EXISTS `zt_lang` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`section` varchar(30) NOT NULL,
`key` varchar(60) NOT NULL,
`value` text NOT NULL,
`system` enum('0','1') NOT NULL default '1',
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_dept`;
CREATE TABLE IF NOT EXISTS `zt_dept` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -225,8 +235,9 @@ CREATE TABLE IF NOT EXISTS `zt_extension` (
`license` text NOT NULL,
`type` varchar(20) NOT NULL default 'extension',
`site` varchar(150) NOT NULL,
`zentaoVersion` varchar(100) NOT NULL,
`zentaoCompatible` varchar(100) NOT NULL,
`installedTime` datetime NOT NULL,
`depends` varchar(100) NOT NULL,
`dirs` text NOT NULL,
`files` text NOT NULL,
`status` varchar(20) NOT NULL,
+3 -3
View File
@@ -1369,7 +1369,7 @@ class router
/* Set the files to include. */
if(!is_file($mainConfigFile))
{
if($exitIfNone) self::error("config file $mainConfigFile not found", __FILE__, __LINE__, true);
if($exitIfNone) self::triggerError("config file $mainConfigFile not found", __FILE__, __LINE__, true);
if(empty($extConfigFiles) and !isset($config->system->$moduleName)) return false; // and no extension file or extension in db, exit.
$configFiles = $extConfigFiles;
}
@@ -1505,7 +1505,7 @@ class router
*/
private function connectByPDO($params)
{
if(!isset($params->driver)) self::error('no pdo driver defined, it should be mysql or sqlite', __FILE__, __LINE__, $exit = true);
if(!isset($params->driver)) self::triggerError('no pdo driver defined, it should be mysql or sqlite', __FILE__, __LINE__, $exit = true);
if(!isset($params->user)) return false;
if($params->driver == 'mysql')
{
@@ -1530,7 +1530,7 @@ class router
}
catch (PDOException $exception)
{
self::error($exception->getMessage(), __FILE__, __LINE__, $exit = true);
self::triggerError($exception->getMessage(), __FILE__, __LINE__, $exit = true);
}
}
+6 -2
View File
@@ -221,6 +221,7 @@ class bug extends control
{
$this->view->users = $this->user->getPairs('nodeleted,devfirst');
if(empty($this->products)) $this->locate($this->createLink('product', 'create'));
$this->app->loadLang('release');
if(!empty($_POST))
{
@@ -237,7 +238,9 @@ class bug extends control
$actionID = $this->action->create('bug', $bugID, 'Opened');
$this->sendmail($bugID, $actionID);
$response['locate'] = $this->createLink('bug', 'browse', "productID={$this->post->product}&type=byModule&param={$this->post->module}");
$location = $this->createLink('bug', 'browse', "productID={$this->post->product}&type=byModule&param={$this->post->module}");
$response['locate'] = isset($_SESSION['bugList']) ? $this->session->bugList : $location;
$this->send($response);
}
@@ -305,9 +308,10 @@ class bug extends control
}
else
{
$builds = $this->loadModel('build')->getProductBuildPairs($productID, 'noempty');
$builds = $this->loadModel('build')->getProductBuildPairs($productID, 'noempty,release');
$stories = $this->story->getProductStoryPairs($productID);
}
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->create;
$this->view->position[] = html::a($this->createLink('bug', 'browse', "productID=$productID"), $this->products[$productID]);
$this->view->position[] = $this->lang->bug->create;
+28 -18
View File
@@ -5,12 +5,14 @@ $(function()
if(typeof page == 'undefined') page = '';
if(page == 'create')
{
productID = $('#product').val();
changeProductConfirmed = true;
oldStoryID = 0;
oldProjectID = 0;
oldOpenedBuild = '';
oldTaskID = 0;
setAssignedTo();
setAssignedTo(0,productID);
notice();
}
if(page == 'create' || page == 'edit' || page == 'assignedto' || page == 'confirmbug')
@@ -42,10 +44,9 @@ function loadAll(productID)
$('#taskIdBox').innerHTML = '<select id="task"></select>'; // Reset the task.
$('#task').chosen({no_results_text: noResultsMatch});
loadProductModules(productID);
loadProductStories(productID);
loadProductProjects(productID);
loadProductBuilds(productID);
loadProductPlans(productID);
loadProductStories(productID);
}
}
@@ -101,7 +102,7 @@ function loadProductBuilds(productID)
if(page == 'create')
{
$('#buildBox').load(link);
$('#buildBox').load(link, function(){ notice(); });
}
else
{
@@ -161,20 +162,6 @@ function loadProjectStories(projectID)
$('#storyIdBox').load(link, function(){$('#story').chosen({no_results_text:noResultsMatch});});
}
/**
* Load product plans.
*
* @param int $productID
* @access public
* @return void
*/
function loadProductPlans(productID)
{
if(typeof(planID) == 'undefined') planID = 0;
link = createLink('product', 'ajaxGetPlans', 'productID=' + $('#product').val() + '&planID=' + planID);
$('#planIdBox').load(link, function(){$('#story').chosen({no_results_text:noResultsMatch});});
}
/**
* Load builds of a project.
*
@@ -221,3 +208,26 @@ function setStories(moduleID, productID)
$("#story").chosen({no_results_text: ''});
});
}
/**
* notice for create build.
*
* @access public
* @return void
*/
function notice()
{
if($('#openedBuild').find('option').length <= 1)
{
if($('#project').val() == '')
{
$('#buildBox').append('<a href="' + createLink('release', 'create','productID=' + $('#product').val()) + '" target="_blank">' + createRelease + '</a>');
$('#buildBox').append('<a href="javascript:loadProductBuilds(' + $('#product').val() + ')">' + refresh + '</a>');
}
else
{
$('#buildBox').append('<a href="' + createLink('build', 'create','projectID=' + $('#project').val()) + '" target="_blank">' + createBuild + '</a>');
$('#buildBox').append('<a href="javascript:loadProjectBuilds(' + $('project').val() + ')">' + refresh + '</a>');
}
}
}
+1 -1
View File
@@ -80,7 +80,7 @@ $lang->bug->assignTo = 'Assign';
$lang->bug->browse = 'Browse Bug';
$lang->bug->view = 'Bug Info';
$lang->bug->resolve = 'Resolve';
$lang->bug->barchResolve = 'batchResolve';
$lang->bug->batchResolve = 'Batch resolve';
$lang->bug->close = 'Close';
$lang->bug->activate = 'Activate';
$lang->bug->reportChart = 'Report';
+4 -2
View File
@@ -73,16 +73,18 @@ $lang->bug->index = '首頁';
$lang->bug->create = '提Bug';
$lang->bug->batchCreate = '批量添加';
$lang->bug->confirmBug = '確認';
$lang->bug->batchConfirm = '批量確認';
$lang->bug->edit = '編輯';
$lang->bug->batchEdit = '批量編輯';
$lang->bug->batchEdit = '批量編輯';
$lang->bug->assignTo = '指派';
$lang->bug->browse = 'Bug列表';
$lang->bug->view = 'Bug詳情';
$lang->bug->resolve = '解決';
$lang->bug->batchResolve = '批量解決';
$lang->bug->close = '關閉';
$lang->bug->activate = '激活';
$lang->bug->reportChart = '報表統計';
$lang->bug->export = '導出';
$lang->bug->export = '導出數據';
$lang->bug->delete = '刪除';
$lang->bug->saveTemplate = '保存模板';
$lang->bug->deleteTemplate = '刪除模板';
+6 -10
View File
@@ -18,6 +18,9 @@ include '../../common/view/alert.html.php';
include '../../common/view/kindeditor.html.php';
js::set('holders', $lang->bug->placeholder);
js::set('page', 'create');
js::set('createRelease', $lang->release->create);
js::set('createBuild', $lang->build->create);
js::set('refresh', $lang->refresh);
?>
<form method='post' enctype='multipart/form-data' id='dataform' class='ajaxForm'>
@@ -26,7 +29,7 @@ js::set('page', 'create');
<tr>
<th class='rowhead'><?php echo $lang->bug->lblProductAndModule;?></th>
<td>
<?php echo html::select('product', $products, $productID, "onchange=loadAll(this.value) class='select-3'");?>
<?php echo html::select('product', $products, $productID, "onchange=loadAll(this.value) class='select-3' autocomplete='off'");?>
<span id='moduleIdBox'>
<?php
echo html::select('module', $moduleOptionMenu, $moduleID, "onchange='loadModuleRelated()'");
@@ -41,20 +44,13 @@ js::set('page', 'create');
</tr>
<tr>
<th class='rowhead'><?php echo $lang->bug->project;?></th>
<td><span id='projectIdBox'><?php echo html::select('project', $projects, $projectID, 'class=select-3 onchange=loadProjectRelated(this.value)');?></span></td>
<td><span id='projectIdBox'><?php echo html::select('project', $projects, $projectID, 'class=select-3 onchange=loadProjectRelated(this.value) autocomplete="off"');?></span></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->bug->openedBuild;?></th>
<td>
<span id='buildBox'>
<?php
echo html::select('openedBuild[]', $builds, $buildID, 'size=3 multiple=multiple class=select-3');
if(count($builds) == 1 and $projectID)
{
echo html::a($this->createLink('build', 'create', "projectID=$projectID"), $lang->build->create, '_blank');
echo html::a("javascript:loadProjectsBuilds($projectID)", $lang->refresh);
}
?>
<?php echo html::select('openedBuild[]', $builds, $buildID, 'size=4 multiple=multiple class=select-3');?>
</span>
</td>
</tr>
+19 -9
View File
@@ -39,13 +39,23 @@ class build extends control
$this->project->setMenu($this->project->getPairs(), $projectID);
/* Get stories and bugs. */
$orderBy = 'status_asc, stage_asc, id_desc';
$stories = $this->story->getProjectStories($projectID, $orderBy);
$bugs = $this->bug->getProjectBugs($projectID);
foreach($bugs as $key => $bug)
$orderBy = 'status_asc, stage_asc, id_desc';
$stories = $this->story->getProjectStories($projectID, $orderBy);
$projectBugs = $this->bug->getProjectBugs($projectID);
$bugs = array();
foreach($projectBugs as $key => $bug)
{
if($bug->status == 'closed') unset($bugs[$key]);
if($bug->status == 'resolved')
{
$bugs[$key] = $bug;
unset($projectBugs[$key]);
}
else if($bug->status == 'closed')
{
unset($projectBugs[$key]);
}
}
$bugs += $projectBugs;
/* Assign. */
$project = $this->loadModel('project')->getById($projectID);
@@ -197,9 +207,9 @@ class build extends control
*/
public function ajaxGetProductBuilds($productID, $varName, $build = '', $index = 0)
{
if($varName == 'openedBuild' ) die(html::select($varName . '[]', $this->build->getProductBuildPairs($productID, 'noempty'), $build, 'size=4 class=select-3 multiple'));
if($varName == 'openedBuilds' ) die(html::select($varName . "[$index][]", $this->build->getProductBuildPairs($productID, 'noempty'), $build, 'size=4 class=select-3 multiple'));
if($varName == 'resolvedBuild') die(html::select($varName, $this->build->getProductBuildPairs($productID, 'noempty'), $build, 'class=select-3'));
if($varName == 'openedBuild' ) die(html::select($varName . '[]', $this->build->getProductBuildPairs($productID, 'noempty,release'), $build, 'size=4 class=select-3 multiple'));
if($varName == 'openedBuilds' ) die(html::select($varName . "[$index][]", $this->build->getProductBuildPairs($productID, 'noempty,release'), $build, 'size=4 class=select-3 multiple'));
if($varName == 'resolvedBuild') die(html::select($varName, $this->build->getProductBuildPairs($productID, 'noempty,release'), $build, 'class=select-3'));
}
/**
@@ -217,7 +227,7 @@ class build extends control
{
if($varName == 'openedBuild')
{
$builds = $this->build->getProjectBuildPairs($projectID, $productID, 'noempty');
$builds = $this->build->getProjectBuildPairs($projectID, $productID, 'noempty,release');
$output = html::select($varName . '[]', $builds , $build, 'size=4 class=select-3 multiple');
if(count($builds) == 1 and $needCreate)
{
+19 -2
View File
@@ -96,10 +96,27 @@ class buildModel extends model
if(strpos($params, 'noempty') === false) $sysBuilds = array('' => '');
if(strpos($params, 'notrunk') === false) $sysBuilds = $sysBuilds + array('trunk' => 'Trunk');
$builds = $this->dao->select('id,name')->from(TABLE_BUILD)
$productBuilds = $this->dao->select('id,name,project')->from(TABLE_BUILD)
->where('product')->in($products)
->andWhere('deleted')->eq(0)
->orderBy('date desc, id desc')->fetchPairs();
->orderBy('date desc, id desc')->fetchAll('id');
$releases = $this->dao->select('build,name,deleted')->from(TABLE_RELEASE)
->where('product')->in($products)
->fetchAll('build');
$builds = array();
foreach($productBuilds as $key => $build)
{
if($build->project)
{
$builds[$key] = isset($releases[$key]) ? $releases[$key]->name : $build->name;
}
else if(isset($releases[$key]) and !$releases[$key]->deleted)
{
$builds[$key] = $releases[$key]->name;
}
}
if(!$builds) return $sysBuilds;
return $sysBuilds + $builds;
}
+1
View File
@@ -316,6 +316,7 @@ $lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
$lang->menugroup->action = 'admin';
$lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->sso = 'admin';
+11 -7
View File
@@ -272,24 +272,27 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => '首頁|admin|index');
$lang->admin->menu->extension = array('link' => '擴展|extension|browse', 'subModule' => 'extension,editor');
$lang->admin->menu->custom = array('link' => '自定義|custom|index', 'subModule' => 'custom');
$lang->admin->menu->mail = array('link' => '發信|mail|index', 'subModule' => 'mail');
$lang->admin->menu->clearData = array('link' => '清除數據|admin|cleardata');
$lang->admin->menu->convert = array('link' => '導入|convert|index', 'subModule' => 'convert');
$lang->admin->menu->trashes = array('link' => '資源回收筒|action|trash', 'subModule' => 'action');
$lang->admin->menu->sso = array('link' => '單點登錄|sso|browse', 'subModule' => 'sso');
$lang->convert = new stdclass();
$lang->upgrade = new stdclass();
$lang->action = new stdclass();
$lang->extension = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->sso = new stdclass();
$lang->convert = new stdclass();
$lang->upgrade = new stdclass();
$lang->action = new stdclass();
$lang->extension = new stdclass();
$lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->sso = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
$lang->action->menu = $lang->admin->menu;
$lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->sso->menu = $lang->admin->menu;
@@ -313,6 +316,7 @@ $lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
$lang->menugroup->action = 'admin';
$lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->sso = 'admin';
+5 -3
View File
@@ -126,6 +126,7 @@ class commonModel extends model
*/
public function loadCustomFromDB()
{
if(defined('IN_UPGRADE')) return;
if(!$this->config->db->name) return;
$records = $this->loadModel('custom')->getAll();
if(!$records) return;
@@ -153,7 +154,7 @@ class commonModel extends model
if(stripos($method, 'downnotify') !== false) return true;
}
if(stripos($method, 'ajaxgetdropmenu') !== false) return true;
if(stripos($method, 'ajaxgetdropmenu') !== false and $this->app->user->account == 'guest') return true;
if($module == 'misc' and $method == 'qrcode') return true;
if($module == 'misc' and $method == 'about') return true;
if($module == 'misc' and $method == 'checkupdate') return true;
@@ -611,13 +612,14 @@ class commonModel extends model
if(empty($queryCondition) or $this->session->$typeOnlyCondition)
{
$objects = $this->dao->select('*')->from($table)
->beginIF($queryCondition != false)->where($queryCondition)->fi()
->where('id')->eq($objectID)
->beginIF($queryCondition != false)->orWhere($queryCondition)->fi()
->beginIF($orderBy != false)->orderBy($orderBy)->fi()
->fetchAll();
}
else
{
$objects = $this->dbh->query($queryCondition . " ORDER BY $orderBy")->fetchAll();
$objects = $this->dbh->query($queryCondition . "OR id=$objectID ORDER BY $orderBy")->fetchAll();
}
$tmpObjectIDs = array();
+20
View File
@@ -0,0 +1,20 @@
<?php
$lang->custom->common = '自定義';
$lang->custom->index = '首頁';
$lang->custom->set = '自定義配置';
$lang->custom->restore = '恢復預設';
$lang->custom->key = '鍵';
$lang->custom->value = '值';
$lang->custom->story = '需求';
$lang->custom->task = '任務';
$lang->custom->bug = 'Bug';
$lang->custom->testcase = '測試用例';
$lang->custom->testtask = '測試任務';
$lang->custom->todo = '待辦';
$lang->custom->user = '用戶';
$lang->custom->currentLang = '適用當前語言';
$lang->custom->allLang = '適用所有語言';
$lang->custom->confirmRestore = '是否要恢復預設語言配置?';
+3 -3
View File
@@ -19,7 +19,7 @@ class customModel extends model
*/
public function getAll()
{
$allCustomLang = $this->dao->select('*')->from(TABLE_CUSTOM)->orderBy('lang,id')->fetchAll('id');
$allCustomLang = $this->dao->select('*')->from(TABLE_LANG)->orderBy('lang,id')->fetchAll('id');
$currentLang = $this->app->getClientLang();
$processedLang = array();
@@ -59,7 +59,7 @@ class customModel extends model
$item->value = $value;
$item->system = $system;
$this->dao->replace(TABLE_CUSTOM)->data($item)->exec();
$this->dao->replace(TABLE_LANG)->data($item)->exec();
}
/**
@@ -116,7 +116,7 @@ class customModel extends model
*/
public function createDAO($params, $method = 'select')
{
return $this->dao->$method('*')->from(TABLE_CUSTOM)->where('1 = 1')
return $this->dao->$method('*')->from(TABLE_LANG)->where('1 = 1')
->beginIF($params['lang'])->andWhere('lang')->in($params['lang'])->fi()
->beginIF($params['module'])->andWhere('module')->in($params['module'])->fi()
->beginIF($params['section'])->andWhere('section')->in($params['section'])->fi()
+36
View File
@@ -903,3 +903,39 @@ $lang->changelog['4.0'][] = 'action-hideOne';
$lang->changelog['4.0'][] = 'action-hideAll';
$lang->changelog['4.0'][] = 'task-editEstimate';
$lang->changelog['4.0'][] = 'task-deleteEstimate';
$lang->changelog['4.1'][] = 'todo-batchFinish';
$lang->changelog['4.1'][] = 'productplan-batchUnlinkStory';
$lang->changelog['4.1'][] = 'company-view';
$lang->changelog['4.1'][] = 'user-story';
$lang->changelog['4.1'][] = 'user-testTask';
$lang->changelog['4.1'][] = 'user-testCase';
$lang->changelog['4.2.beta'][] = 'tree-browseTask';
$lang->changelog['4.3.beta'][] = 'product-batchEdit';
$lang->changelog['4.3.beta'][] = 'project-batchEdit';
$lang->changelog['4.3.beta'][] = 'story-batchReview';
$lang->changelog['4.3.beta'][] = 'story-batchChangePlan';
$lang->changelog['4.3.beta'][] = 'story-batchChangeStage';
$lang->changelog['4.3.beta'][] = 'productplan-linkBug';
$lang->changelog['4.3.beta'][] = 'productplan-unlinkBug';
$lang->changelog['4.3.beta'][] = 'productplan-batchUnlinkBug';
$lang->changelog['4.3.beta'][] = 'bug-batchCreate';
$lang->changelog['4.3.beta'][] = 'testcase-exportTemplet';
$lang->changelog['4.3.beta'][] = 'testcase-import';
$lang->changelog['4.3.beta'][] = 'testcase-showImport';
$lang->changelog['4.3.beta'][] = 'testcase-confirmChange';
$lang->changelog['4.3.beta'][] = 'mail-reset';
$lang->changelog['4.3.beta'][] = 'sso-browse';
$lang->changelog['4.3.beta'][] = 'sso-create';
$lang->changelog['4.3.beta'][] = 'sso-edit';
$lang->changelog['4.3.beta'][] = 'sso-delete';
$lang->changelog['4.3.beta'][] = 'api-debug';
$lang->changelog['4.3.beta'][] = 'action-editComment';
$lang->changelog['5.0.beta1'][] = 'bug-batchConfirm';
$lang->changelog['5.0.beta1'][] = 'bug-batchResolve';
$lang->changelog['5.0.beta1'][] = 'custom-index';
$lang->changelog['5.0.beta1'][] = 'custom-set';
$lang->changelog['5.0.beta1'][] = 'custom-restore';
+3 -3
View File
@@ -487,9 +487,9 @@ class product extends control
* Drop menu page.
*
* @param int $productID
* @param int $module
* @param int $method
* @param int $extra
* @param string $module
* @param string $method
* @param string $extra
* @access public
* @return void
*/
+2 -3
View File
@@ -140,11 +140,10 @@ var browseType = '<?php echo $browseType;?>';
<td colspan='<?php echo $columns;?>'>
<div class='f-left'>
<?php
$canBatchEdit = common::hasPriv('task', 'batchEdit');
$canBatchClose = common::hasPriv('task', 'batchClose') and strtolower($browseType) != 'closedBy';
if(count($tasks))
{
$canBatchEdit = common::hasPriv('task', 'batchEdit');
$canBatchClose = common::hasPriv('task', 'batchClose') and strtolower($browseType) != 'closedBy';
echo "<div class='groupButton'>";
echo html::selectAll() . html::selectReverse();
echo "</div>";
+1
View File
@@ -1,4 +1,5 @@
<?php
$config->sso = new stdclass();
$config->sso->create = new stdclass();
$config->sso->create->requiredFields = 'title,code,key,ip';
$config->sso->edit = new stdclass();
+1 -1
View File
@@ -28,7 +28,7 @@ $lang->story->tasks = "相關任務";
$lang->story->taskCount = '任務數';
$lang->story->bugs = "Bug";
$lang->story->linkStory = '關聯需求';
$lang->story->export = "導出";
$lang->story->export = "導出數據";
$lang->story->reportChart = "統計報表";
$lang->story->batchChangePlan = "批量修改計劃";
$lang->story->batchChangeStage = "批量修改階段";
+1 -1
View File
@@ -194,7 +194,7 @@
<table class='table-1 fixed'>
<tr>
<td>
<?php
<?php
foreach($story->tasks as $projectTasks)
{
foreach($projectTasks as $task)
+1 -1
View File
@@ -25,7 +25,7 @@ $lang->task->close = "關閉";
$lang->task->batchClose = "批量關閉";
$lang->task->cancel = "取消";
$lang->task->activate = "激活";
$lang->task->export = "導出";
$lang->task->export = "導出數據";
$lang->task->reportChart = "報表統計";
$lang->task->fromBug = '來源Bug';
$lang->task->confirmStoryChange = "確認需求變動";
+1
View File
@@ -1,4 +1,5 @@
<?php
$config->testcase = new stdclass();
$config->testcase->defaultSteps = 3;
$config->testcase->batchCreate = 10;
+1 -8
View File
@@ -65,7 +65,7 @@ $lang->testcase->import = "導入";
$lang->testcase->importID = "行號";
$lang->testcase->showImport = "顯示導入內容";
$lang->testcase->exportTemplet = "導出模板";
$lang->testcase->export = "導出";
$lang->testcase->export = "導出數據";
$lang->testcase->confirmChange = '確認用例變動';
$lang->testcase->confirmStoryChange = '確認需求變動';
@@ -135,13 +135,6 @@ $lang->testcase->stageList['system'] = '系統測試階段';
$lang->testcase->stageList['smoke'] = '冒煙測試階段';
$lang->testcase->stageList['bvt'] = '版本驗證階段';
$lang->testcase->stageListAB['unittest'] = '單元';
$lang->testcase->stageListAB['feature'] = '功能';
$lang->testcase->stageListAB['intergrate'] = '整合';
$lang->testcase->stageListAB['system'] = '系統';
$lang->testcase->stageListAB['smoke'] = '冒煙';
$lang->testcase->stageListAB['bvt'] = '版本';
$lang->testcase->statusList[''] = '';
$lang->testcase->statusList['normal'] = '正常';
$lang->testcase->statusList['blocked'] = '被阻塞';
+8 -1
View File
@@ -303,7 +303,14 @@ class tree extends control
*/
public function ajaxGetOptionMenu($rootID, $viewType = 'story', $rootModuleID = 0, $returnType = 'html', $needManage = false)
{
$optionMenu = $this->tree->getOptionMenu($rootID, $viewType, $rootModuleID);
if($viewType = 'task')
{
$optionMenu = $this->tree->getTaskOptionMenu($rootID);
}
else
{
$optionMenu = $this->tree->getOptionMenu($rootID, $viewType, $rootModuleID);
}
if($returnType == 'html')
{
$output = html::select("module", $optionMenu, '', "onchange=loadModuleRelated()");
+1
View File
@@ -72,3 +72,4 @@ $lang->upgrade->fromVersions['4_0'] = '4.0';
$lang->upgrade->fromVersions['4_0_1'] = '4.0.1';
$lang->upgrade->fromVersions['4_1'] = '4.1';
$lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta';
$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta';
+1
View File
@@ -72,3 +72,4 @@ $lang->upgrade->fromVersions['4_0'] = '4.0';
$lang->upgrade->fromVersions['4_0_1'] = '4.0.1';
$lang->upgrade->fromVersions['4_1'] = '4.1';
$lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta';
$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta';
+1
View File
@@ -72,3 +72,4 @@ $lang->upgrade->fromVersions['4_0'] = '4.0';
$lang->upgrade->fromVersions['4_0_1'] = '4.0.1';
$lang->upgrade->fromVersions['4_1'] = '4.1';
$lang->upgrade->fromVersions['4_2_beta'] = '4.2.beta';
$lang->upgrade->fromVersions['4_3_beta'] = '4.3.beta';
+3
View File
@@ -92,6 +92,8 @@ class upgradeModel extends model
$this->deleteCompany();
case '4_2_beta':
$this->execSQL($this->getUpgradeFile('4.2'));
case '4_3_beta':
$this->execSQL($this->getUpgradeFile('4.3'));
default: if(!$this->isError()) $this->setting->updateVersion($this->config->version);
}
@@ -143,6 +145,7 @@ class upgradeModel extends model
case '4_0_1': $confirmContent .= file_get_contents($this->getUpgradeFile('4.0.1'));
case '4_1': $confirmContent .= file_get_contents($this->getUpgradeFile('4.1'));
case '4_2_beta': $confirmContent .= file_get_contents($this->getUpgradeFile('4.2'));
case '4_3_beta': $confirmContent .= file_get_contents($this->getUpgradeFile('4.3'));
}
return str_replace('zt_', $this->config->db->prefix, $confirmContent);
}
+3
View File
@@ -53,6 +53,9 @@ $whiteList[] = 'story-commonaction';
$whiteList[] = 'story-sendmail';
$whiteList[] = 'webapp-ajaxaddview';
$whiteList[] = 'report-remind';
$whiteList[] = 'sso-auth';
$whiteList[] = 'sso-depts';
$whiteList[] = 'sso-users';
/* checking actions of every module. */
echo '-------------action checking-----------------' . "\n";
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
/* Judge my.php exists or not. */
define('IN_UPGRADE', true);
$myConfig = dirname(dirname(__FILE__)) . '/config/my.php';
if(!file_exists($myConfig))
{