This commit is contained in:
Catouse
2017-08-22 15:33:51 +08:00
28 changed files with 95 additions and 78 deletions
+6 -5
View File
@@ -19,7 +19,8 @@ if($argc != 2) die('Usage: ' . basename(__FILE__) . " <request>\n");
/* Parse the request into params. */
$request = parse_url(trim($argv[1]));
$_SERVER['HTTP_HOST'] = $request['host'];
$_SERVER['HTTP_HOST'] = $request['host'];
$_SERVER['SCRIPT_NAME'] = $request['path'];
/* Load the framework. */
chdir(dirname(dirname(__FILE__)));
@@ -27,7 +28,10 @@ include './framework/router.class.php';
include './framework/control.class.php';
include './framework/model.class.php';
include './framework/helper.class.php';
include realpath('./config/config.php');
/* Instance the app and run it. */
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
$common = $app->loadCommon();
/* Set the PATH_INFO variable. */
if($config->requestType == 'PATH_INFO')
@@ -62,8 +66,5 @@ else
$_SERVER['REQUEST_URI'] = isset($request['query']) ? $request['query'] : '';
}
/* Instance the app and run it. */
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
$common = $app->loadCommon();
$app->parseRequest();
$app->loadModule();
+2
View File
@@ -1924,6 +1924,8 @@ class baseSQL
$pos = stripos($order, 'limit');
$orders = $pos ? substr($order, 0, $pos) : $order;
$limit = $pos ? substr($order, $pos) : '';
if($limit and !preg_match('/^[0-9]+ *(, *[0-9]+)?$/', $limit)) $limit = '';
$orders = trim($orders);
if(empty($orders)) return $this;
if(!preg_match('/^(\w+\.)?(`\w+`|\w+)( +(desc|asc))?( *(, *(\w+\.)?(`\w+`|\w+)( +(desc|asc))?)?)*$/i', $orders)) die("Order is bad request, The order is $orders");
+2 -2
View File
@@ -605,7 +605,7 @@ class block extends control
public function printProductBlock()
{
$this->app->loadClass('pager', $static = true);
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
if(!empty($this->params->type) and preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
$num = isset($this->params->num) ? (int)$this->params->num : 0;
$type = isset($this->params->type) ? $this->params->type : '';
$pager = pager::init(0, $num , 1);
@@ -621,7 +621,7 @@ class block extends control
public function printProjectBlock()
{
$this->app->loadClass('pager', $static = true);
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
if(!empty($this->params->type) and preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
$num = isset($this->params->num) ? (int)$this->params->num : 0;
$type = isset($this->params->type) ? $this->params->type : 'all';
$pager = pager::init(0, $num, 1);
+3
View File
@@ -39,6 +39,7 @@ class build extends control
$product = $this->loadModel('product')->getByID($projectID);
$products = $this->product->getPairs();
$this->product->setMenu($products, $projectID);
$this->lang->build->menu = $this->lang->product->menu;
$productGroups = array();
$product->branch = 0;
@@ -112,6 +113,7 @@ class build extends control
$product = $this->loadModel('product')->getById($build->product);
$products = $this->product->getPairs();
$this->product->setMenu($products, $build->product);
$this->lang->build->menu = $this->lang->product->menu;
$productGroups = array();
$product->branch = 0;
@@ -193,6 +195,7 @@ class build extends control
{
$products = $this->loadModel('product')->getPairs();
$this->product->setMenu($products, $build->product);
$this->lang->build->menu = $this->lang->product->menu;
$this->view->title = "BUILD #$build->id $build->name - " . $build->productName;
$this->view->position[] = html::a($this->createLink('product', 'build', "productID=$build->product"), $build->productName);
+13 -10
View File
@@ -14,15 +14,18 @@ function showLink(buildID, type, param)
}
$(function()
{
if(link == 'true') showLink(buildID, type, param);
fixedTfootAction($('#' + type + 'List').closest('form'));
$('.nav.nav-tabs a[data-toggle="tab"]').on('shown.zui.tab', function(e)
if(flow != 'onlyTest')
{
var href = $(e.target).attr('href');
var tabPane = $(href + '.tab-pane');
if(tabPane.size() == 0) return;
var formID = tabPane.find('.linkBox').find('form:last');
if(formID.size() == 0) formID = tabPane.find('form:last');
setTimeout(function(){fixedTfootAction(formID)}, 100);
});
if(link == 'true') showLink(buildID, type, param);
fixedTfootAction($('#' + type + 'List').closest('form'));
$('.nav.nav-tabs a[data-toggle="tab"]').on('shown.zui.tab', function(e)
{
var href = $(e.target).attr('href');
var tabPane = $(href + '.tab-pane');
if(tabPane.size() == 0) return;
var formID = tabPane.find('.linkBox').find('form:last');
if(formID.size() == 0) formID = tabPane.find('form:last');
setTimeout(function(){fixedTfootAction(formID)}, 100);
});
}
})
+1
View File
@@ -200,6 +200,7 @@ class buildModel extends model
->stripTags($this->config->build->editor->create['id'], $this->config->allowedTags)
->remove('resolvedBy,allchecker,files,labels,uid')
->get();
if($this->config->global->flow == 'onlyTest') $build->project = 0;
$build = $this->loadModel('file')->processImgURL($build, $this->config->build->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_BUILD)->data($build)
+1
View File
@@ -13,6 +13,7 @@
<?php include '../../common/view/header.html.php';?>
<?php js::set('confirmUnlinkStory', $lang->build->confirmUnlinkStory)?>
<?php js::set('confirmUnlinkBug', $lang->build->confirmUnlinkBug)?>
<?php js::set('flow', $this->config->global->flow)?>
<?php if(isonlybody()):?>
<style>
#stories .action{display:none;}
+10 -10
View File
@@ -449,16 +449,16 @@ $lang->browserNotice = 'Your current browser might not show the best effect
$lang->noticePasteImg = "Paste image to editor.";
/* 时间格式设置。*/
define('DT_DATETIME1', 'Y-m-d H:i:s');
define('DT_DATETIME2', 'y-m-d H:i');
define('DT_MONTHTIME1', 'n/d H:i');
define('DT_MONTHTIME2', 'M d H:i');
define('DT_DATE1', 'Y-m-d');
define('DT_DATE2', 'Ymd');
define('DT_DATE3', 'Y年m月d日');
define('DT_DATE4', 'n月j日');
define('DT_TIME1', 'H:i:s');
define('DT_TIME2', 'H:i');
if(!defined('DT_DATETIME1')) define('DT_DATETIME1', 'Y-m-d H:i:s');
if(!defined('DT_DATETIME2')) define('DT_DATETIME2', 'y-m-d H:i');
if(!defined('DT_MONTHTIME1'))define('DT_MONTHTIME1', 'n/d H:i');
if(!defined('DT_MONTHTIME2'))define('DT_MONTHTIME2', 'n月d日 H:i');
if(!defined('DT_DATE1')) define('DT_DATE1', 'Y-m-d');
if(!defined('DT_DATE2')) define('DT_DATE2', 'Ymd');
if(!defined('DT_DATE3')) define('DT_DATE3', 'Y年m月d日');
if(!defined('DT_DATE4')) define('DT_DATE4', 'n月j日');
if(!defined('DT_TIME1')) define('DT_TIME1', 'H:i:s');
if(!defined('DT_TIME2')) define('DT_TIME2', 'H:i');
/* datepicker 时间*/
$lang->datepicker = new stdclass();
+10 -10
View File
@@ -449,16 +449,16 @@ $lang->browserNotice = '你目前使用的浏览器可能无法得到最佳
$lang->noticePasteImg = "可以在编辑器直接贴图。";
/* 时间格式设置。*/
define('DT_DATETIME1', 'Y-m-d H:i:s');
define('DT_DATETIME2', 'y-m-d H:i');
define('DT_MONTHTIME1', 'n/d H:i');
define('DT_MONTHTIME2', 'n月d日 H:i');
define('DT_DATE1', 'Y-m-d');
define('DT_DATE2', 'Ymd');
define('DT_DATE3', 'Y年m月d日');
define('DT_DATE4', 'n月j日');
define('DT_TIME1', 'H:i:s');
define('DT_TIME2', 'H:i');
if(!defined('DT_DATETIME1')) define('DT_DATETIME1', 'Y-m-d H:i:s');
if(!defined('DT_DATETIME2')) define('DT_DATETIME2', 'y-m-d H:i');
if(!defined('DT_MONTHTIME1'))define('DT_MONTHTIME1', 'n/d H:i');
if(!defined('DT_MONTHTIME2'))define('DT_MONTHTIME2', 'n月d日 H:i');
if(!defined('DT_DATE1')) define('DT_DATE1', 'Y-m-d');
if(!defined('DT_DATE2')) define('DT_DATE2', 'Ymd');
if(!defined('DT_DATE3')) define('DT_DATE3', 'Y年m月d日');
if(!defined('DT_DATE4')) define('DT_DATE4', 'n月j日');
if(!defined('DT_TIME1')) define('DT_TIME1', 'H:i:s');
if(!defined('DT_TIME2')) define('DT_TIME2', 'H:i');
/* datepicker 时间*/
$lang->datepicker = new stdclass();
+1 -1
View File
@@ -1129,7 +1129,7 @@ class commonModel extends model
global $app, $lang;
/* Check is the super admin or not. */
if($app->user->admin) return true;
if(!empty($app->user->admin)) return true;
/* If not super admin, check the rights. */
$rights = $app->user->rights['rights'];
+6 -6
View File
@@ -1,10 +1,10 @@
<?php
/**
* The control file of dev module of ZenTaoPMS.
*
*
* @copyright Copyright 2009-2010 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
* @author chunsheng wang <chunsheng@cnezsoft.com>
* @package
* @package
* @uses control
* @license LGPL
* @version $Id$
@@ -14,7 +14,7 @@ class dev extends control
{
/**
* Get API of system.
*
*
* @access public
* @return void
*/
@@ -31,11 +31,11 @@ class dev extends control
$this->view->modules = $this->dev->getModules();
$this->display();
}
/**
* Get schema of database.
*
* @param string $table
*
* @param string $table
* @access public
* @return void
*/
-1
View File
@@ -95,7 +95,6 @@ $lang->dev->groupList['product'] = $lang->productCommon;
$lang->dev->groupList['project'] = $lang->projectCommon;
$lang->dev->groupList['qa'] = 'Testing';
$lang->dev->groupList['doc'] = 'Document';
$lang->dev->groupList['report'] = 'Report';
$lang->dev->groupList['company'] = 'Company';
$lang->dev->groupList['admin'] = 'Admin';
$lang->dev->groupList['other'] = 'Others';
-1
View File
@@ -95,7 +95,6 @@ $lang->dev->groupList['product'] = $lang->productCommon;
$lang->dev->groupList['project'] = $lang->projectCommon;
$lang->dev->groupList['qa'] = '测试';
$lang->dev->groupList['doc'] = '文档';
$lang->dev->groupList['report'] = '统计';
$lang->dev->groupList['company'] = '组织';
$lang->dev->groupList['admin'] = '后台';
$lang->dev->groupList['other'] = '其他模块';
-1
View File
@@ -95,7 +95,6 @@ $lang->dev->groupList['product'] = $lang->productCommon;
$lang->dev->groupList['project'] = $lang->projectCommon;
$lang->dev->groupList['qa'] = '測試';
$lang->dev->groupList['doc'] = '文檔';
$lang->dev->groupList['report'] = '統計';
$lang->dev->groupList['company'] = '組織';
$lang->dev->groupList['admin'] = '後台';
$lang->dev->groupList['other'] = '其他模組';
+3 -3
View File
@@ -226,18 +226,18 @@ class devModel extends model
/**
* Get all modules.
*
*
* @access public
* @return void
*/
public function getModules()
{
{
$moduleList = glob($this->app->getModuleRoot() . '*');
$modules = array();
foreach($moduleList as $module)
{
$module = basename($module);
if($module == 'editor' or $module == 'help' or $module == 'setting') continue;
if($module == 'editor' or $module == 'help' or $module == 'setting' or $module == 'common') continue;
$group = zget($this->config->dev->group, $module, 'other');
$modules[$group][] = $module;
}
+3 -3
View File
@@ -5,7 +5,7 @@
<?php foreach($lang->dev->groupList as $group => $groupName):?>
<div class='modulegroup'><?php echo $groupName?></div>
<?php foreach($modules[$group] as $module):?>
<?php
<?php
$active = ($module == $selectedModule) ? 'active' : '';
$moduleName = zget($lang->dev->tableList, $module, $module);
?>
@@ -18,7 +18,7 @@
<?php if($selectedModule):?>
<?php foreach($apis as $api):?>
<table class='table table-condensed table-striped table-bordered tablesorter table-fixed active-disabled' id="api">
<?php
<?php
$params = array();
if(isset($api['param']))
{
@@ -28,7 +28,7 @@
?>
<tr>
<th colspan="3">
<?php
<?php
echo $api['post'] ? 'GET/POST' : 'GET';
echo '&nbsp;&nbsp;' . $this->createLink($selectedModule, $api['name'], $params, 'json');
?>
+2
View File
@@ -627,6 +627,8 @@ class fileModel extends model
public function processImgURL($data, $editorList, $uid = '')
{
if(is_string($editorList)) $editorList = explode(',', str_replace(' ', '', $editorList));
if(empty($editorList)) return $data;
$readLinkReg = helper::createLink('file', 'read', 'fileID=(%fileID%)', '(%viewType%)');
$readLinkReg = str_replace(array('%fileID%', '%viewType%', '?', '/'), array('[0-9]+', '\w+', '\?', '\/'), $readLinkReg);
$imageIdList = array();
+11 -10
View File
@@ -99,14 +99,14 @@ class product extends control
/**
* Browse a product.
*
* @param int $productID
* @param string $browseType
* @param int $param
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
*
* @param int $productID
* @param string $browseType
* @param int $param
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
@@ -136,8 +136,9 @@ class product extends control
if($browseType == 'bymodule') setcookie('storyModule', (int)$param, $this->config->cookieLife, $this->config->webRoot);
if($browseType != 'bymodule') $this->session->set('storyBrowseType', $browseType);
$moduleID = ($browseType == 'bymodule') ? (int)$param : ($browseType == 'bysearch' ? 0 : ($this->cookie->storyModule ? $this->cookie->storyModule : 0));
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$moduleID = ($browseType == 'bymodule') ? (int)$param : ($browseType == 'bysearch' ? 0 : ($this->cookie->storyModule ? $this->cookie->storyModule : 0));
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
if($browseType == 'unclosed') $moduleID = 0;
/* Set menu. */
$this->product->setMenu($this->products, $productID, $branch);
+1 -1
View File
@@ -41,7 +41,7 @@
<td><?php echo $users[$build->builder]?></td>
<td class='text-right'>
<?php
common::printIcon('testtask', 'create', "product=0&product=$product->id&build=$build->id", '', 'list', 'check');
common::printIcon('testtask', 'create', "product=$product->id&project=0&build=$build->id", '', 'list', 'check');
common::printIcon('build', 'edit', "buildID=$build->id", '', 'list');
if(common::hasPriv('build', 'delete'))
{
+2 -2
View File
@@ -140,7 +140,7 @@ class productplanModel extends model
public function create()
{
$plan = fixer::input('post')->stripTags($this->config->productplan->editor->create['id'], $this->config->allowedTags)->remove('delta,uid')->get();
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->plan->editor->create['id'], $this->post->uid);
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->productplan->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_PRODUCTPLAN)
->data($plan)
->autoCheck()
@@ -166,7 +166,7 @@ class productplanModel extends model
{
$oldPlan = $this->dao->findByID((int)$planID)->from(TABLE_PRODUCTPLAN)->fetch();
$plan = fixer::input('post')->stripTags($this->config->productplan->editor->edit['id'], $this->config->allowedTags)->remove('delta,uid')->get();
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->plan->editor->edit['id'], $this->post->uid);
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->productplan->editor->edit['id'], $this->post->uid);
$this->dao->update(TABLE_PRODUCTPLAN)
->data($plan)
->autoCheck()
+1 -1
View File
@@ -60,7 +60,7 @@
<td class='text-left' title="<?php echo $task->name?>">
<?php if(isset($branchGroups[$task->product][$task->branch])) echo "<span title='{$lang->product->branchName[$task->productType]}' class='label label-branch label-badge'>" . $branchGroups[$task->product][$task->branch] . '</span>';?>
<?php if($modulePairs and $task->module) echo "<span title='{$lang->task->module}' class='label label-info label-badge'>" . $modulePairs[$task->module] . '</span>';?>
<?php
<?php
if(!common::printLink('task', 'view', "task=$task->id", $task->name, null, "style='color: $task->color'")) echo $task->name;
if($task->fromBug) echo html::a($this->createLink('bug', 'view', "id=$task->fromBug"), "[BUG#$task->fromBug]", '_blank', "class='bug'");
?>
+5
View File
@@ -372,6 +372,11 @@ class storyModel extends model
{
$specChanged = false;
$oldStory = $this->dao->findById((int)$storyID)->from(TABLE_STORY)->fetch();
$oldSpec = $this->dao->select('title,spec,verify')->from(TABLE_STORYSPEC)->where('story')->eq((int)$storyID)->andWhere('version')->eq($oldStory->version)->fetch();
$oldStory->title = isset($oldSpec->title) ? $oldSpec->title : '';
$oldStory->spec = isset($oldSpec->spec) ? $oldSpec->spec : '';
$oldStory->verify = isset($oldSpec->verify) ? $oldSpec->verify : '';
if(!empty($_POST['lastEditedDate']) and $oldStory->lastEditedDate != $this->post->lastEditedDate)
{
dao::$errors[] = $this->lang->error->editedByOther;
+1 -1
View File
@@ -939,7 +939,7 @@ class taskModel extends model
/**
* Get project tasks pairs.
*
*
* @param int $projectID
* @param string $status
* @param string $orderBy
+1
View File
@@ -156,6 +156,7 @@ class testtask extends control
$this->view->projects = $projects;
$this->view->productID = $productID;
$this->view->builds = $builds;
$this->view->build = $build;
$this->view->users = $this->loadModel('user')->getPairs('noclosed|qdfirst');
$this->display();
+1 -1
View File
@@ -19,7 +19,7 @@ function loadProjectRelated(projectID)
*/
function loadProjectBuilds(projectID)
{
selectedBuild = $('#openedBuild').val();
selectedBuild = $('#build').val();
if(!selectedBuild) selectedBuild = 0;
link = createLink('build', 'ajaxGetProjectBuilds', 'projectID=' + projectID + '&productID=' + $('#product').val() + '&varName=testTaskBuild&build=' + selectedBuild);
$('#buildBox').load(link, function(){$('#build').chosen(defaultChosenOptions);});
+1 -1
View File
@@ -42,7 +42,7 @@
<?php endif;?>
<tr>
<th class='w-90px'><?php echo $lang->testtask->build;?></th>
<td class='w-p25-f'><span id='buildBox'><?php echo html::select('build', $builds, '', "class='form-control chosen'");?></span></td>
<td class='w-p25-f'><span id='buildBox'><?php echo html::select('build', $builds, $build, "class='form-control chosen'");?></span></td>
<td></td>
</tr>
<tr>
+6 -6
View File
@@ -1175,11 +1175,11 @@ class treeModel extends model
/**
* Manage childs of a module.
*
* @param int $rootID
* @param string $type
* @param int $parentModuleID
* @param array $childs
*
* @param int $rootID
* @param string $type
* @param int $parentModuleID
* @param array $childs
* @access public
* @return void
*/
@@ -1246,7 +1246,7 @@ class treeModel extends model
/**
* Update a module.
*
*
* @param int $moduleID
* @access public
* @return void
+2 -2
View File
@@ -30,7 +30,7 @@
<form id='childrenForm' class='form-condensed' method='post' target='hiddenwin' action='<?php echo $this->createLink('tree', 'manageChild', "root={$root->id}&viewType=$viewType");?>'>
<div class='panel'>
<div class='panel-heading'>
<i class='icon-sitemap'></i>
<i class='icon-sitemap'></i>
<?php $manageChild = 'manage' . ucfirst($viewType) . 'Child';?>
<?php echo strpos($viewType, 'doc') !== false ? $lang->doc->manageType : $lang->tree->$manageChild;?>
<?php if($viewType == 'story' and $allProduct):?>
@@ -53,7 +53,7 @@
?>
</nobr>
</td>
<td id='moduleBox'>
<td id='moduleBox'>
<?php
if($viewType == 'story' and $allProduct)
{