Merge branch '18.4' of https://git.zcorp.cc/easycorp/zentaopms into cyy_fixbug
This commit is contained in:
@@ -384,6 +384,12 @@ INNER JOIN zt_project AS t2 ON t1.`project` = t2.`id`
|
||||
SET t1.`addedDate` = t2.`openedDate`, t1.`addedBy` = t2.`openedBy`
|
||||
WHERE t1.`type` = 'project' AND t1.`main` = '1';
|
||||
|
||||
/* Update the execution document. */
|
||||
UPDATE zt_doc AS t1
|
||||
LEFT JOIN zt_project t2 ON t1.`execution` = t2.`id`
|
||||
SET t1.`project` = t2.`project`
|
||||
WHERE t1.`execution` != '0' AND t1.`project` = '0' AND t2.`project` != '0';
|
||||
|
||||
/* Update the execution master library. */
|
||||
UPDATE zt_doclib AS t1
|
||||
INNER JOIN zt_project AS t2 ON t1.`execution` = t2.`id`
|
||||
|
||||
@@ -35,7 +35,7 @@ class control extends baseControl
|
||||
|
||||
$this->app->setOpenApp();
|
||||
|
||||
if(!isset($this->config->bizVersion)) return false;
|
||||
if($this->config->edition == 'open') return false;
|
||||
|
||||
/* Code for task #9224. Set requiredFields for workflow. */
|
||||
if($this->dbh and (defined('IN_USE') or (defined('RUN_MODE') and RUN_MODE == 'api')))
|
||||
@@ -424,7 +424,7 @@ class control extends baseControl
|
||||
*/
|
||||
public function buildOperateMenu($object, $type = 'view')
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return false;
|
||||
if($this->config->edition == 'open') return false;
|
||||
|
||||
$moduleName = $this->moduleName;
|
||||
return $this->$moduleName->buildOperateMenu($object, $type);
|
||||
@@ -439,7 +439,7 @@ class control extends baseControl
|
||||
*/
|
||||
public function executeHooks($objectID)
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return false;
|
||||
if($this->config->edition == 'open') return false;
|
||||
|
||||
$moduleName = $this->moduleName;
|
||||
return $this->$moduleName->executeHooks($objectID);
|
||||
@@ -454,7 +454,7 @@ class control extends baseControl
|
||||
*/
|
||||
public function getFlowExportFields()
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return array();
|
||||
if($this->config->edition == 'open') return array();
|
||||
|
||||
$moduleName = $this->moduleName;
|
||||
return $this->$moduleName->getFlowExportFields();
|
||||
@@ -478,7 +478,7 @@ class control extends baseControl
|
||||
*/
|
||||
public function printExtendFields($object, $type, $extras = '', $print = true, $moduleName = '', $methodName = '')
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return false;
|
||||
if($this->config->edition == 'open') return false;
|
||||
|
||||
$moduleName = $moduleName ? $moduleName : $this->app->getModuleName();
|
||||
$methodName = $methodName ? $methodName : $this->app->getMethodName();
|
||||
|
||||
@@ -99,7 +99,7 @@ class model extends baseModel
|
||||
if(empty($method)) $method = $methodName;
|
||||
|
||||
static $actions = array();
|
||||
if(isset($this->config->bizVersion))
|
||||
if($this->config->edition != 'open')
|
||||
{
|
||||
if(empty($actions[$moduleName]))
|
||||
{
|
||||
@@ -155,7 +155,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function buildFlowMenu($module, $data, $type = 'browse', $show = '')
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return '';
|
||||
if($this->config->edition == 'open') return '';
|
||||
|
||||
$moduleName = $module;
|
||||
if(strpos($module, '.') !== false) list($appName, $moduleName) = explode('.', $module);
|
||||
@@ -233,7 +233,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function processStatus($module, $record)
|
||||
{
|
||||
if(!isset($this->config->bizVersion) or empty($record->subStatus)) return zget($this->lang->$module->statusList, $record->status);
|
||||
if($this->config->edition == 'open' or empty($record->subStatus)) return zget($this->lang->$module->statusList, $record->status);
|
||||
|
||||
return $this->loadModel('workflowfield')->processSubStatus($module, $record);
|
||||
}
|
||||
@@ -247,7 +247,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function processExportData($data)
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return $data;
|
||||
if($this->config->edition == 'open') return $data;
|
||||
|
||||
return $this->loadModel('workflowfield')->processExportData($data);
|
||||
}
|
||||
@@ -261,7 +261,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function processExportOptions($data)
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return $data;
|
||||
if($this->config->edition == 'open') return $data;
|
||||
|
||||
return $this->loadModel('workflowfield')->processExportOptions($data);
|
||||
}
|
||||
@@ -275,7 +275,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function processImportData($data)
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return $data;
|
||||
if($this->config->edition == 'open') return $data;
|
||||
|
||||
return $this->loadModel('workflowfield')->processImportData($data);
|
||||
}
|
||||
@@ -288,7 +288,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function getFlowExtendFields()
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return array();
|
||||
if($this->config->edition == 'open') return array();
|
||||
|
||||
return $this->loadModel('flow')->getExtendFields($this->app->getModuleName(), $this->app->getMethodName());
|
||||
}
|
||||
@@ -301,7 +301,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function getFlowExportFields()
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return array();
|
||||
if($this->config->edition == 'open') return array();
|
||||
|
||||
return $this->loadModel('workflowfield')->getExportFields($this->app->getModuleName());
|
||||
}
|
||||
@@ -315,7 +315,7 @@ class model extends baseModel
|
||||
*/
|
||||
public function executeHooks($objectID)
|
||||
{
|
||||
if(!isset($this->config->bizVersion)) return false;
|
||||
if($this->config->edition == 'open') return false;
|
||||
|
||||
$moduleName = $this->app->getModuleName();
|
||||
$methodName = $this->app->getMethodName();
|
||||
|
||||
@@ -478,7 +478,7 @@ class router extends baseRouter
|
||||
if(empty($this->rawMethod)) $this->rawMethod = $this->methodName;
|
||||
|
||||
/* If is not a biz version or is in install mode or in in upgrade mode, call parent method. */
|
||||
if(!isset($this->config->bizVersion) or defined('IN_INSTALL') or defined('IN_UPGRADE')) return parent::setControlFile($exitIfNone);
|
||||
if($this->config->edition == 'open' or defined('IN_INSTALL') or defined('IN_UPGRADE')) return parent::setControlFile($exitIfNone);
|
||||
|
||||
/* Check if the requested module is defined in workflow. */
|
||||
$flow = $this->dbh->query("SELECT * FROM " . TABLE_WORKFLOW . " WHERE `module` = '$this->moduleName'")->fetch();
|
||||
|
||||
@@ -1136,9 +1136,7 @@ class actionModel extends model
|
||||
->beginIF($account != 'all')->andWhere('actor')->eq($account)->fi()
|
||||
->beginIF($beginDate)->andWhere('date')->ge($beginDate)->fi()
|
||||
->beginIF(is_numeric($productID))->andWhere('product')->like("%,$productID,%")->fi()
|
||||
->andWhere()
|
||||
->markLeft(1)
|
||||
->where('1=1')
|
||||
->andWhere('1=1', true)
|
||||
->beginIF(is_numeric($projectID))->andWhere('project')->eq($projectID)->fi()
|
||||
->beginIF(!empty($executions))->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->beginIF(is_numeric($executionID))->andWhere('execution')->eq($executionID)->fi()
|
||||
|
||||
@@ -478,7 +478,7 @@ class admin extends control
|
||||
$response['thisTable'] = '';
|
||||
$response['nextTable'] = '';
|
||||
|
||||
$tableEngines = $this->loadModel('misc')->getTableEngines();
|
||||
$tableEngines = $this->dao->getTableEngines();
|
||||
|
||||
$thisTable = '';
|
||||
$nextTable = '';
|
||||
|
||||
+12
-3
@@ -52,6 +52,15 @@ class api extends control
|
||||
$objectType = $this->objectType;
|
||||
$objectID = $this->objectID;
|
||||
$isFirstLoad = $libID ? false : true;
|
||||
if($libID)
|
||||
{
|
||||
$lib = $this->doc->getLibById($libID);
|
||||
if($objectType == 'nolink' and !$objectID and ($lib->product or $lib->project))
|
||||
{
|
||||
$objectType = $lib->product ? 'product' : 'project';
|
||||
$objectID = $lib->product ? $lib->product : $lib->project;
|
||||
}
|
||||
}
|
||||
|
||||
if($release)
|
||||
{
|
||||
@@ -158,7 +167,7 @@ class api extends control
|
||||
if(!strpos($this->server->http_referer, 'space') and !strpos($this->server->http_referer, 'api')) setCookie("docSpaceParam", '', $this->config->cookieLife, $this->config->webRoot, '', false, true);
|
||||
|
||||
/* Get all api doc libraries. */
|
||||
$libs = $this->doc->getApiLibs($libID);
|
||||
$libs = $this->doc->getApiLibs($libID, $this->objectType, $this->objectID);
|
||||
$api = $this->api->getLibById($apiID, $version, $release);
|
||||
if($api)
|
||||
{
|
||||
@@ -174,7 +183,7 @@ class api extends control
|
||||
}
|
||||
|
||||
/* Crumbs links array. */
|
||||
$lib = zget($libs, $libID);
|
||||
$lib = zget($libs, $libID);
|
||||
$type = $lib->product ? 'product' : ($lib->project ? 'project' : 'unlink');
|
||||
|
||||
$methodName = $type != 'unlink' ? $type . 'Space' : 'index';
|
||||
@@ -768,7 +777,7 @@ class api extends control
|
||||
|
||||
if(in_array($this->session->spaceType, array('product', 'project')))
|
||||
{
|
||||
$this->lang->doc->menu->api['exclude'] = 'api-' . $this->app->rawMethod;
|
||||
$this->lang->doc->menu->api['exclude'] = 'api-' . $this->app->rawMethod . ',' . $this->app->rawMethod;
|
||||
$this->lang->doc->menu->{$this->session->spaceType}['subModule'] = 'api';
|
||||
}
|
||||
else
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<?php foreach($apiList as $api):?>
|
||||
<li class="list-group-item">
|
||||
<div class="heading <?php echo $api->method;?>">
|
||||
<a href="<?php echo helper::createLink('api', 'index', "libID={$api->lib}&moduleID=0&apiID={$api->id}&version=0&release=$release");?>" data-app="<?php echo $app->tab;?>">
|
||||
<a href="<?php echo helper::createLink('api', 'index', "libID={$api->lib}&moduleID=0&apiID={$api->id}&version=0");?>" data-app="<?php echo $app->tab;?>">
|
||||
<span class="label label-primary"><?php echo $api->method;?></span>
|
||||
<span class="path" title="<?php echo $api->path;?>"><?php echo $api->path;?></span>
|
||||
<span class="desc" title="<?php echo $api->title;?>"><?php echo $api->title;?></span>
|
||||
|
||||
@@ -61,6 +61,8 @@ html[lang="de"] .block-productdoc .c-user{width: 105px;}
|
||||
.block-productdoc .table .c-title > .draft {background-color:rgba(129, 102, 238, 0.12); color:#8166EE;}
|
||||
</style>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
<?php js::set('emptyProducts', empty($products));?>
|
||||
<?php js::set('emptyInvolveds', empty($involveds));?>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
@@ -90,6 +92,18 @@ function switch<?php echo "block{$block->id}";?>Product(obj)
|
||||
|
||||
function change<?php echo "block{$block->id}";?>ProductType(type)
|
||||
{
|
||||
var hiddenData = type == 'all' ? emptyProducts : emptyInvolveds;
|
||||
if(hiddenData)
|
||||
{
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .dataBlock').addClass('hidden');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').removeClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .dataBlock').removeClass('hidden');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').addClass('hidden');
|
||||
}
|
||||
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .nav.products').toggleClass('hidden', type != 'all');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> .nav.involveds').toggleClass('hidden', type != 'involved');
|
||||
$('.block-productdoc<?php echo "#block{$block->id}";?> #productType .btn').html($('.block-productdoc<?php echo "#block{$block->id}";?> #productType [data-type=' + type + ']').html() + " <span class='caret'></span>");
|
||||
@@ -112,14 +126,14 @@ function change<?php echo "block{$block->id}";?>ProductType(type)
|
||||
<li><a href="javascript:change<?php echo "block{$block->id}";?>ProductType('all')" data-type='all'><?php echo $lang->product->all;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php $hiddenBlock = empty($involveds) ? 'hidden' : '';?>
|
||||
<?php $hiddenEmpty = empty($involveds) ? '' : 'hidden';?>
|
||||
<div class="panel-body">
|
||||
<div class="table-row block-statistic">
|
||||
<?php if(empty($products) and empty($involveds)):?>
|
||||
<div class="table-empty-tip">
|
||||
<div class="table-empty-tip <?php echo $hiddenEmpty;?>">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
<div class="col col-nav dataBlock <?php echo $hiddenBlock;?>">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover involveds">
|
||||
<li class='switch-icon prev'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Product(this)'><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($involveds);?>
|
||||
@@ -142,7 +156,7 @@ function change<?php echo "block{$block->id}";?>ProductType(type)
|
||||
<li class='switch-icon next'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Product(this)'><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<div class="col tab-content dataBlock <?php echo $hiddenBlock;?>">
|
||||
<?php foreach($products as $product):?>
|
||||
<div class="tab-pane fade<?php if($product->id == $selected) echo ' active in';?>" id='<?php echo "tab3{$blockNavId}Content{$product->id}";?>'>
|
||||
<?php if(isset($docGroup[$product->id])):?>
|
||||
@@ -190,6 +204,5 @@ function change<?php echo "block{$block->id}";?>ProductType(type)
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -60,8 +60,10 @@ html[lang="de"] .block-projectdoc .c-user{width: 105px;}
|
||||
.block-projectdoc .table .c-title[data-status=draft] > .doc-title {max-width: calc(100% - 35px);}
|
||||
.block-projectdoc .table .c-title > .draft {background-color:rgba(129, 102, 238, 0.12); color:#8166EE;}
|
||||
</style>
|
||||
<?php $blockNavId = 'nav-' . uniqid();?>
|
||||
<?php js::set('emptyProjects', empty($projects));?>
|
||||
<?php js::set('emptyInvolveds', empty($involveds));?>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
$(function()
|
||||
{
|
||||
if($('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType').length > 1);
|
||||
@@ -90,6 +92,18 @@ function switch<?php echo "block{$block->id}";?>Project(obj)
|
||||
|
||||
function change<?php echo "block{$block->id}";?>ProjectType(type)
|
||||
{
|
||||
var hiddenData = type == 'all' ? emptyProjects : emptyInvolveds;
|
||||
if(hiddenData)
|
||||
{
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .dataBlock').addClass('hidden');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').removeClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .dataBlock').removeClass('hidden');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .block-statistic > .table-empty-tip').addClass('hidden');
|
||||
}
|
||||
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .nav.projects').toggleClass('hidden', type != 'all');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> .nav.involveds').toggleClass('hidden', type != 'involved');
|
||||
$('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType .btn').html($('.block-projectdoc<?php echo "#block{$block->id}";?> #projectType [data-type=' + type + ']').html() + " <span class='caret'></span>");
|
||||
@@ -112,14 +126,14 @@ function change<?php echo "block{$block->id}";?>ProjectType(type)
|
||||
<li><a href="javascript:change<?php echo "block{$block->id}";?>ProjectType('all')" data-type='all'><?php echo $lang->project->all;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php $hiddenBlock = empty($involveds) ? 'hidden' : '';?>
|
||||
<?php $hiddenEmpty = empty($involveds) ? '' : 'hidden';?>
|
||||
<div class="panel-body">
|
||||
<div class="table-row block-statistic">
|
||||
<?php if(empty($projects) and empty($involveds)):?>
|
||||
<div class="table-empty-tip">
|
||||
<div class="table-empty-tip <?php echo $hiddenEmpty;?>">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
<div class="col col-nav dataBlock <?php echo $hiddenBlock;?>">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover involveds">
|
||||
<li class='switch-icon prev'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Project(this)'><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($involveds);?>
|
||||
@@ -142,7 +156,7 @@ function change<?php echo "block{$block->id}";?>ProjectType(type)
|
||||
<li class='switch-icon next'><a href='###' onclick='switch<?php echo "block{$block->id}";?>Project(this)'><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<div class="col tab-content dataBlock <?php echo $hiddenBlock;?>">
|
||||
<?php foreach($projects as $project):?>
|
||||
<div class="tab-pane fade<?php if($project->id == $selected) echo ' active in';?>" id='<?php echo "tab3{$blockNavId}Content{$project->id}";?>'>
|
||||
<?php if(isset($docGroup[$project->id])):?>
|
||||
@@ -190,6 +204,5 @@ function change<?php echo "block{$block->id}";?>ProjectType(type)
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -36,7 +36,7 @@ $lang->chart->typeList = array();
|
||||
$lang->chart->typeList['pie'] = 'Pie';
|
||||
$lang->chart->typeList['line'] = 'Line';
|
||||
$lang->chart->typeList['radar'] = 'Radar';
|
||||
$lang->chart->typeList['cluBarY'] = 'clustered Bar Y';
|
||||
$lang->chart->typeList['stackedBarY'] = 'stacked Bar Y';
|
||||
$lang->chart->typeList['cluBarX'] = 'clustered Bar X';
|
||||
$lang->chart->typeList['stackedBar'] = 'stacked Bar';
|
||||
$lang->chart->typeList['cluBarY'] = 'Clustered Bar Y';
|
||||
$lang->chart->typeList['stackedBarY'] = 'Stacked Bar Y';
|
||||
$lang->chart->typeList['cluBarX'] = 'Clustered Bar X';
|
||||
$lang->chart->typeList['stackedBar'] = 'Stacked Bar';
|
||||
|
||||
@@ -36,7 +36,7 @@ $lang->chart->typeList = array();
|
||||
$lang->chart->typeList['pie'] = 'Pie';
|
||||
$lang->chart->typeList['line'] = 'Line';
|
||||
$lang->chart->typeList['radar'] = 'Radar';
|
||||
$lang->chart->typeList['cluBarY'] = 'clustered Bar Y';
|
||||
$lang->chart->typeList['stackedBarY'] = 'stacked Bar Y';
|
||||
$lang->chart->typeList['cluBarX'] = 'clustered Bar X';
|
||||
$lang->chart->typeList['stackedBar'] = 'stacked Bar';
|
||||
$lang->chart->typeList['cluBarY'] = 'Clustered Bar Y';
|
||||
$lang->chart->typeList['stackedBarY'] = 'Stacked Bar Y';
|
||||
$lang->chart->typeList['cluBarX'] = 'Clustered Bar X';
|
||||
$lang->chart->typeList['stackedBar'] = 'Stacked Bar';
|
||||
|
||||
@@ -36,7 +36,7 @@ $lang->chart->typeList = array();
|
||||
$lang->chart->typeList['pie'] = 'Pie';
|
||||
$lang->chart->typeList['line'] = 'Line';
|
||||
$lang->chart->typeList['radar'] = 'Radar';
|
||||
$lang->chart->typeList['cluBarY'] = 'clustered Bar Y';
|
||||
$lang->chart->typeList['stackedBarY'] = 'stacked Bar Y';
|
||||
$lang->chart->typeList['cluBarX'] = 'clustered Bar X';
|
||||
$lang->chart->typeList['stackedBar'] = 'stacked Bar';
|
||||
$lang->chart->typeList['cluBarY'] = 'Clustered Bar Y';
|
||||
$lang->chart->typeList['stackedBarY'] = 'Stacked Bar Y';
|
||||
$lang->chart->typeList['cluBarX'] = 'Clustered Bar X';
|
||||
$lang->chart->typeList['stackedBar'] = 'Stacked Bar';
|
||||
|
||||
+106
-1
@@ -72,7 +72,7 @@ class chartModel extends model
|
||||
if(!empty($chart->sql)) $chart->sql = trim(str_replace(';', '', $chart->sql));
|
||||
if(!empty($chart->settings)) $chart->settings = json_decode($chart->settings, true);
|
||||
|
||||
if(!empty($chart->settings) and is_array($chart->settings))
|
||||
if(empty($chart->type) and !empty($chart->settings) and is_array($chart->settings))
|
||||
{
|
||||
$firstSetting = current($chart->settings);
|
||||
if(isset($firstSetting['type'])) $chart->type = $firstSetting['type'];
|
||||
@@ -696,5 +696,110 @@ class chartModel extends model
|
||||
|
||||
return $filterFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tables.
|
||||
*
|
||||
* @param string $sql
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getTables($sql)
|
||||
{
|
||||
$processedSql = trim($sql, ';');
|
||||
$processedSql = str_replace(array("\r\n", "\n"), ' ', $processedSql);
|
||||
$processedSql = str_replace('`', '', $processedSql);
|
||||
preg_match_all('/^select (.+) from (.+)$/i', $processedSql, $selectAndFrom);
|
||||
if(empty($selectAndFrom[2][0])) return false;
|
||||
|
||||
$selectSql = $selectAndFrom[1][0];
|
||||
$tableSql = $fromSql = $selectAndFrom[2][0];
|
||||
if(stripos($fromSql, 'where') !== false) $tableSql = trim(substr($fromSql, 0, stripos($fromSql, 'where')));
|
||||
if(stripos($fromSql, 'limit') !== false) $tableSql = trim(substr($fromSql, 0, stripos($fromSql, 'limit')));
|
||||
if(stripos($fromSql, 'having') !== false) $tableSql = trim(substr($fromSql, 0, stripos($fromSql, 'having')));
|
||||
if(stripos($fromSql, 'group by') !== false) $tableSql = trim(substr($fromSql, 0, stripos($fromSql, 'group by')));
|
||||
|
||||
/* Remove such as "left join|right join|join", "on (t1.id=t2.id)", result like t1, t2 as t3. */
|
||||
$tableSql .= ' ';
|
||||
if(stripos($tableSql, 'join') !== false) $tableSql = preg_replace(array('/join\s+([A-Z]+_\w+ .*)on/Ui', '/,\s*on\s+[^,]+/i'), array(',$1,on', ''), $tableSql);
|
||||
|
||||
/* Match t2 as t3 */
|
||||
preg_match_all('/(\w+) +as +(\w+)/i', $tableSql, $out);
|
||||
|
||||
$fields = explode(',', $selectSql);
|
||||
foreach($fields as $i => $field)
|
||||
{
|
||||
if($field) $asField = '';
|
||||
if(strrpos($field, ' as ') !== false) list($field, $asField) = explode(' as ', $field);
|
||||
if(strrpos($field, ' AS ') !== false) list($field, $asField) = explode(' AS ', $field);
|
||||
|
||||
$field = trim($field);
|
||||
$asField = trim($asField);
|
||||
$fieldName = $field;
|
||||
if(strrpos($field, '.') !== false)
|
||||
{
|
||||
$table = substr($field, 0, strrpos($field, '.'));
|
||||
$fieldName = substr($field, strrpos($field, '.') + 1);
|
||||
if(!empty($out[0]) and in_array($table, $out[2]))
|
||||
{
|
||||
$realTable = $out[1][array_search($table, $out[2])];
|
||||
$tableFieldName = str_replace($table . '.', $realTable . '.', $field);
|
||||
|
||||
if(isset($fields[$fieldName]) && !$asField)
|
||||
{
|
||||
$fieldName = str_replace('.', '', $field);
|
||||
|
||||
$sql = preg_replace(array("/$field/", "/`$field`/"), array("$field AS $fieldName", "`$field` AS $fieldName"), $sql, 1);
|
||||
|
||||
$field = $tableFieldName;
|
||||
}
|
||||
}
|
||||
|
||||
if($fieldName == '*') $fieldName = $field;
|
||||
}
|
||||
|
||||
$fieldName = $asField ? $asField : $fieldName;
|
||||
|
||||
$fields[$fieldName] = $field;
|
||||
unset($fields[$i]);
|
||||
}
|
||||
|
||||
$tableSql = preg_replace('/as +\w+/i', ' ', $tableSql);
|
||||
$tableSql = trim(str_replace(array('(', ')', ','), ' ', $tableSql));
|
||||
$tableSql = preg_replace('/ +/', ' ', $tableSql);
|
||||
|
||||
$tables = explode(' ', $tableSql);
|
||||
|
||||
return array('sql' => $sql, 'tables' => $tables, 'fields' => $fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse variables to null string in sql.
|
||||
*
|
||||
* @param string $sql
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function parseSqlVars($sql, $filters)
|
||||
{
|
||||
if($filters)
|
||||
{
|
||||
foreach($filters as $filter)
|
||||
{
|
||||
if(!isset($filter['default'])) continue;
|
||||
if(isset($filter['from']) and $filter['from'] == 'query')
|
||||
{
|
||||
$default = "'{$filter['default']}'";
|
||||
$sql = str_replace('$' . $filter['field'], $default, $sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(preg_match_all("/[\$]+[a-zA-Z0-9]+/", $sql, $out))
|
||||
{
|
||||
foreach($out[0] as $match) $sql = str_replace($match, "''", $sql);
|
||||
}
|
||||
|
||||
return $sql;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -256,7 +256,7 @@ $lang->waterfall->menu = new stdclass();
|
||||
$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s");
|
||||
$lang->waterfall->menu->execution = array('link' => "{$lang->stage->common}|project|execution|status=all&projectID=%s", 'subModule' => 'programplan,task');
|
||||
$lang->waterfall->menu->storyGroup = array('link' => "{$lang->common->story}|projectstory|story|projectID=%s",'class' => 'dropdown dropdown-hover', 'exclude' => 'tree-browse,projectstory-track');
|
||||
$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story', 'exclude' => 'projectstory-track');
|
||||
$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story', 'exclude' => 'projectstory-track,tree-browse');
|
||||
$lang->waterfall->menu->design = array('link' => "{$lang->design->common}|design|browse|project=%s");
|
||||
$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport');
|
||||
$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|projectSpace|objectID=%s");
|
||||
@@ -264,9 +264,9 @@ $lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo
|
||||
$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|projectbuild|browse|project=%s", 'subModule' => 'projectbuild');
|
||||
$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease');
|
||||
$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s");
|
||||
$lang->waterfall->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist,team', 'exclude' => 'tree-browsetask');
|
||||
|
||||
$lang->waterfall->dividerMenu = ',programplan,build,dynamic,';
|
||||
$lang->waterfall->menu->settings = $lang->scrum->menu->settings;
|
||||
$lang->waterfall->dividerMenu = ',programplan,build,dynamic,';
|
||||
|
||||
$lang->waterfall->menu->storyGroup['dropMenu'] = $lang->scrum->menu->storyGroup['dropMenu'];
|
||||
|
||||
|
||||
@@ -2078,6 +2078,7 @@ EOF;
|
||||
if(strtolower($key) == 'assigneddate') continue;
|
||||
if(strtolower($key) == 'editedby') continue;
|
||||
if(strtolower($key) == 'editeddate') continue;
|
||||
if(strtolower($key) == 'editingdate') continue;
|
||||
if(strtolower($key) == 'uid') continue;
|
||||
if(strtolower($key) == 'finisheddate' and $value == '') continue;
|
||||
if(strtolower($key) == 'canceleddate' and $value == '') continue;
|
||||
|
||||
@@ -128,7 +128,7 @@ class convertModel extends model
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('t1.`ID`, t1.`lower_user_name` as account, t1.`lower_display_name` as realname, t1.`lower_email_address` as email, t1.created_date as `join`, t2.user_key as userCode')->from(JIRA_USERINFO)->alias('t1')
|
||||
->leftJoin(JIRA_USER)->alias('t2')->on('t1.`lower_user_name` = t2.`lower_user_name`')
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('t1.ID')->gt($lastID)->fi()
|
||||
->orderBy('t1.ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
@@ -136,7 +136,7 @@ class convertModel extends model
|
||||
elseif($module == 'project')
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('*')->from(JIRA_PROJECT)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('ID')->gt($lastID)->fi()
|
||||
->orderBy('ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
@@ -144,7 +144,7 @@ class convertModel extends model
|
||||
elseif($module == 'issue')
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('*')->from(JIRA_ISSUE)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('ID')->gt($lastID)->fi()
|
||||
->orderBy('ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
@@ -152,7 +152,7 @@ class convertModel extends model
|
||||
elseif($module == 'build')
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('*')->from(JIRA_BUILD)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('ID')->gt($lastID)->fi()
|
||||
->orderBy('ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
@@ -160,7 +160,7 @@ class convertModel extends model
|
||||
elseif($module == 'issuelink')
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('*')->from(JIRA_ISSUELINK)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('ID')->gt($lastID)->fi()
|
||||
->orderBy('ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
@@ -168,7 +168,7 @@ class convertModel extends model
|
||||
elseif($module == 'action')
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('*')->from(JIRA_ACTION)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('ID')->gt($lastID)->fi()
|
||||
->orderBy('ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
@@ -176,7 +176,7 @@ class convertModel extends model
|
||||
elseif($module == 'file')
|
||||
{
|
||||
$dataList = $this->dao->dbh($this->sourceDBH)->select('*')->from(JIRA_FILE)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($lastID)->andWhere('ID')->gt($lastID)->fi()
|
||||
->orderBy('ID asc')->limit($limit)
|
||||
->fetchAll('ID');
|
||||
|
||||
@@ -1374,7 +1374,7 @@ class doc extends control
|
||||
*/
|
||||
public function productSpace($objectID = 0, $libID = 0, $moduleID = 0, $browseType = 'all', $orderBy = 'status,id_desc', $param = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
{
|
||||
$products = $this->product->getPairs('nocode', 0, '', 'all');
|
||||
$products = $this->product->getPairs('nocode');
|
||||
$objectID = $this->product->saveState($objectID, $products);
|
||||
|
||||
echo $this->fetch('doc', 'tableContents', "type=product&objectID=$objectID&libID=$libID&moduleID=$moduleID&browseType=$browseType&orderBy=$orderBy¶m=$param&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
|
||||
|
||||
@@ -47,13 +47,13 @@ class docModel extends model
|
||||
$libs = $this->dao->select('*')->from(TABLE_DOCLIB)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->eq('api')
|
||||
->beginIF(!empty($appendLib))->orWhere('id')->eq($appendLib)->fi()
|
||||
->beginIF(!empty($objectType) && $objectID > 0 and $objectType != 'nolink')->andWhere($objectType)->eq($objectID)->fi()
|
||||
->beginIF(!empty($objectType) and $objectID > 0 and $objectType != 'nolink')->andWhere($objectType)->eq($objectID)->fi()
|
||||
->beginIF($objectType == 'nolink')
|
||||
->andWhere('product')->eq(0)
|
||||
->andWhere('project')->eq(0)
|
||||
->andWhere('execution')->eq(0)
|
||||
->fi()
|
||||
->beginIF(!empty($appendLib))->orWhere('id')->eq($appendLib)->fi()
|
||||
->orderBy('order_asc, id_asc')
|
||||
->fetchAll('id');
|
||||
|
||||
@@ -1218,7 +1218,7 @@ class docModel extends model
|
||||
if($libID == 0 and $browseType != 'collectedbyme') return array();
|
||||
|
||||
$modules = $this->dao->select('*')->from(TABLE_MODULE)
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF($browseType != "collectedbyme")->andWhere('root')->eq($libID)->fi()
|
||||
->beginIF($browseType == "collectedbyme")->andWhere('collector')->like("%,{$this->app->user->account},%")->fi()
|
||||
->andWhere('type')->eq('doc')
|
||||
@@ -2830,7 +2830,7 @@ class docModel extends model
|
||||
else
|
||||
{
|
||||
$libs = $this->getLibsByObject($type, 0, '', $appendLib);
|
||||
if($libID == 0 and !empty($libs)) $libID = reset($libs)->id;
|
||||
if(($libID == 0 or !isset($libs[$libID])) and !empty($libs)) $libID = reset($libs)->id;
|
||||
if(isset($libs[$libID]))
|
||||
{
|
||||
$objectTitle = zget($libs[$libID], 'name', '');
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<table class='table table-form'>
|
||||
<?php if(strpos('product|project|execution', $type) !== false):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->doc->project;?></th>
|
||||
<th><?php echo $lang->doc->{$type};?></th>
|
||||
<td class='required'><?php echo html::select($type, $objects, $objectID, "class='form-control chosen' onchange='loadObjectModules(\"{$type}\", this.value)'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -76,6 +76,8 @@ li.drag-shadow ul {display: none !important;}
|
||||
js::set('release', isset($release) ? $release : 0);
|
||||
js::set('versionLang', $lang->build->common);
|
||||
js::set('spaceType', $this->session->spaceType);
|
||||
js::set('rawModule', $this->app->rawModule);
|
||||
js::set('rawMethod', $this->app->rawMethod);
|
||||
|
||||
/* ObjectType and objectID used for other space. */
|
||||
js::set('objectType', isset($type) ? $type : '');
|
||||
@@ -151,7 +153,7 @@ js::set('hasLibPriv', $hasLibPriv);
|
||||
<li data-method="addCataChild" data-type="add" data-id="%moduleID%" data-has-children='%hasChildren%'><a><i class="icon icon-add-directory"></i><?php echo $lang->doc->libDropdown['addSubModule'];?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if($canEditCatalog[$module]):?>
|
||||
<li data-method="editCata" class='edit-module'><a data-href='<?php echo helper::createLink($module, 'editCatalog', "moduleID=%moduleID%&type=$app->rawModule");?>'><i class="icon icon-edit"></i><?php echo $lang->doc->libDropdown['editModule'];?></a></li>
|
||||
<li data-method="editCata" class='edit-module'><a data-href='<?php echo helper::createLink($module, 'editCatalog', "moduleID=%moduleID%&type=" . ($app->rawModule == 'api' ? 'api' : 'doc'));?>'><i class="icon icon-edit"></i><?php echo $lang->doc->libDropdown['editModule'];?></a></li>
|
||||
<?php endif;?>
|
||||
<?php if($canDeleteCatalog[$module]):?>
|
||||
<li data-method="deleteCata"><a href='<?php echo helper::createLink($module, 'deleteCatalog', 'rootID=%libID%&moduleID=%moduleID%');?>' target='hiddenwin'><i class="icon icon-trash"></i><?php echo $lang->doc->libDropdown['delModule'];?></a></li>
|
||||
@@ -473,8 +475,8 @@ $(function()
|
||||
if(!libID) libID = 0;
|
||||
if(!moduleID) moduleID = 0;
|
||||
linkParams = linkParams.replace('%s', 'libID=' + libID + '&moduleID=' + moduleID);
|
||||
if(config.currentModule == 'api' && config.currentMethod == 'view') spaceType = 'api';
|
||||
if(spaceType != 'api' && config.currentModule == 'api') linkParams = 'objectID=' + objectID + '&' + linkParams;
|
||||
if(rawModule == 'api' && rawMethod== 'view') spaceType = 'api';
|
||||
if(spaceType != 'api' && rawModule == 'api') linkParams = 'objectID=' + objectID + '&' + linkParams;
|
||||
var moduleName = spaceType == 'api' ? 'api' : 'doc';
|
||||
var methodName = '';
|
||||
if(spaceType == 'api')
|
||||
@@ -624,7 +626,7 @@ $(function()
|
||||
var libID = $(this).closest('#versionSwitcher').data('lib');
|
||||
var moduleID = $(this).data('id');
|
||||
var params = 'libID=' + libID + '&moduleID=0&apiID=0&version=0&release=' + moduleID;
|
||||
var methodName = config.currentMethod;
|
||||
var methodName = rawMethod;
|
||||
if(config.currentModule == 'doc')
|
||||
{
|
||||
params = linkParams.replace('%s', 'libID=' + libID + '&moduleID=0').replace('browseType=&', 'browseType=byrelease&').replace('param=0', 'param=' + moduleID);
|
||||
|
||||
@@ -5784,11 +5784,6 @@ class executionModel extends model
|
||||
$post = $_POST;
|
||||
|
||||
$_POST = array();
|
||||
$extendFields = $this->getExtendFields();
|
||||
foreach(array_keys($extendFields) as $field)
|
||||
{
|
||||
if(isset($post[$field])) $_POST[$field] = $post[$field];
|
||||
}
|
||||
|
||||
$_POST['project'] = $projectID;
|
||||
$_POST['name'] = $project->name;
|
||||
@@ -5843,11 +5838,6 @@ class executionModel extends model
|
||||
$post = $_POST;
|
||||
|
||||
$_POST = array();
|
||||
$extendFields = $this->getExtendFields();
|
||||
foreach(array_keys($extendFields) as $field)
|
||||
{
|
||||
if(isset($post[$field])) $_POST[$field] = $post[$field];
|
||||
}
|
||||
|
||||
$_POST['project'] = $projectID;
|
||||
$_POST['name'] = $project->name;
|
||||
@@ -6037,23 +6027,4 @@ class executionModel extends model
|
||||
}
|
||||
return $sortedExecutions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Extend Fields in workflow.
|
||||
*
|
||||
* @param string $module
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getExtendFields($module = 'project')
|
||||
{
|
||||
$extendFields = $this->dao->select('field')
|
||||
->from(TABLE_WORKFLOWFIELD)
|
||||
->where('module')->eq('project')
|
||||
->andWhere('buildin')->eq(0)
|
||||
->andWhere('role')->eq('custom')
|
||||
->fetchPairs('field');
|
||||
|
||||
return $extendFields;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,9 +299,9 @@ class install extends control
|
||||
$canDelFile = is_writable($this->app->getAppRoot() . 'www');
|
||||
$installFile = $this->app->getAppRoot() . 'www/install.php';
|
||||
$upgradeFile = $this->app->getAppRoot() . 'www/upgrade.php';
|
||||
$installFileDeleted = $canDelFile && is_writable($installFile) ? unlink($installFile) : false;
|
||||
$installFileDeleted = ($canDelFile and file_exists($installFile)) ? unlink($installFile) : false;
|
||||
|
||||
if($canDelFile and is_writable($upgradeFile)) unlink($upgradeFile);
|
||||
if($canDelFile and file_exists($upgradeFile)) unlink($upgradeFile);
|
||||
unset($_SESSION['installing']);
|
||||
session_destroy();
|
||||
|
||||
|
||||
@@ -3705,7 +3705,7 @@ class kanbanModel extends model
|
||||
public function getColumnsByObject($objectType = '', $objectID = 0, $archived = 0, $deleted = '0')
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_KANBANCOLUMN)
|
||||
->where(true)
|
||||
->where('1=1')
|
||||
->beginIF($objectType)->andWhere($objectType)->eq($objectID)->fi()
|
||||
->beginIF($archived != '')->andWhere('archived')->eq($archived)->fi()
|
||||
->beginIF($deleted != '')->andWhere('deleted')->eq($deleted)->fi()
|
||||
@@ -3817,7 +3817,7 @@ class kanbanModel extends model
|
||||
public function getCardsByObject($objectType = '', $objectID = 0, $archived = '0', $deleted = '0')
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_KANBANCARD)
|
||||
->where(true)
|
||||
->where('1=1')
|
||||
->beginIF($objectType)->andWhere($objectType)->eq($objectID)->fi()
|
||||
->beginIF($archived != '')->andWhere('archived')->eq($archived)->fi()
|
||||
->beginIF($deleted != '')->andWhere('deleted')->eq($deleted)->fi()
|
||||
|
||||
@@ -71,7 +71,7 @@ class pivot extends control
|
||||
|
||||
$pivot->sql = $sql;
|
||||
|
||||
$processSqlData = $this->loadModel('dataview')->getTables($sql);
|
||||
$processSqlData = $this->loadModel('chart')->getTables($sql);
|
||||
$sql = $processSqlData['sql'];
|
||||
|
||||
list($data, $configs) = $this->pivot->genSheet(json_decode(json_encode($pivot->fieldSettings), true), $pivot->settings, $sql, $filterFormat, json_decode($pivot->langs, true));
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div id='datagirdInfo' class='datagrid datagrid-padding'>
|
||||
<?php $sql = $this->loadModel('dataview')->parseSqlVars($pivot->sql, $pivot->filters);?>
|
||||
<?php $sql = $this->loadModel('chart')->parseSqlVars($pivot->sql, $pivot->filters);?>
|
||||
<?php $this->pivot->buildPivotTable($data, $configs, json_decode(json_encode($pivot->fieldSettings), true), $sql);?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -371,7 +371,7 @@ class productModel extends model
|
||||
/* Order by program. */
|
||||
return $this->dao->select("t1.*, IF(INSTR(' closed', t1.status) < 2, 0, 1) AS isClosed")->from(TABLE_PRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
|
||||
->where(1)
|
||||
->where('1=1')
|
||||
->beginIF(strpos($mode, 'all') === false)->andWhere('t1.deleted')->eq(0)->fi()
|
||||
->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi()
|
||||
->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi()
|
||||
|
||||
@@ -904,7 +904,7 @@ class project extends control
|
||||
|
||||
/* Check exist extend fields. */
|
||||
$isExtended = false;
|
||||
if(!empty($this->config->bizVersion))
|
||||
if($this->config->edition != 'open')
|
||||
{
|
||||
$extend = $this->loadModel('workflowaction')->getByModuleAndAction('project', 'view');
|
||||
if(!empty($extend) and $extend->extensionType == 'extend') $isExtended = true;
|
||||
|
||||
@@ -139,6 +139,8 @@ class projectModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
setcookie('lastProject', (int)$this->session->project, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
||||
|
||||
return $this->session->project;
|
||||
}
|
||||
|
||||
|
||||
@@ -463,12 +463,10 @@ class searchModel extends model
|
||||
{
|
||||
$queries = $this->dao->select('id, title')
|
||||
->from(TABLE_USERQUERY)
|
||||
->where()
|
||||
->markLeft(1)
|
||||
->where('account')->eq($this->app->user->account)
|
||||
->where('module')->eq($module)
|
||||
->andWhere('account', true)->eq($this->app->user->account)
|
||||
->orWhere('common')->eq(1)
|
||||
->markRight(1)
|
||||
->andWhere('module')->eq($module)
|
||||
->orderBy('id_desc')
|
||||
->fetchPairs();
|
||||
if(!$queries) return array('' => $this->lang->search->myQuery);
|
||||
@@ -487,12 +485,10 @@ class searchModel extends model
|
||||
{
|
||||
$queries = $this->dao->select('id, account, title')
|
||||
->from(TABLE_USERQUERY)
|
||||
->where()
|
||||
->markLeft(1)
|
||||
->where('account')->eq($this->app->user->account)
|
||||
->where('module')->eq($module)
|
||||
->andWhere('account', true)->eq($this->app->user->account)
|
||||
->orWhere('common')->eq(1)
|
||||
->markRight(1)
|
||||
->andWhere('module')->eq($module)
|
||||
->orderBy('id_desc')
|
||||
->fetchAll();
|
||||
if(!$queries) return array('' => $this->lang->search->myQuery);
|
||||
|
||||
@@ -4516,7 +4516,7 @@ class testcaseModel extends model
|
||||
'removeNamespace' => true, // Remove namespace from resulting keys
|
||||
'namespaceSeparator' => ':', // Change separator to something other than a colon
|
||||
'attributePrefix' => '', // Distinguish between attributes and nodes with the same name
|
||||
'alwaysArray' => [], // Array of XML tag names which should always become arrays
|
||||
'alwaysArray' => array(), // Array of XML tag names which should always become arrays
|
||||
'autoArray' => true, // Create arrays for tags which appear more than once
|
||||
'textContent' => 'text', // Key used for the text content of elements
|
||||
'autoText' => true, // Skip textContent key if node has no attributes or child nodes
|
||||
@@ -4529,7 +4529,7 @@ class testcaseModel extends model
|
||||
$namespaces[''] = null; // Add empty base namespace
|
||||
|
||||
/* Get attributes from all namespaces. */
|
||||
$attributesArray = [];
|
||||
$attributesArray = array();
|
||||
foreach($namespaces as $prefix => $namespace)
|
||||
{
|
||||
if($options['removeNamespace']) $prefix = '';
|
||||
@@ -4545,7 +4545,7 @@ class testcaseModel extends model
|
||||
}
|
||||
|
||||
// Get child nodes from all namespaces
|
||||
$tagsArray = [];
|
||||
$tagsArray = array();
|
||||
foreach($namespaces as $prefix => $namespace)
|
||||
{
|
||||
if($options['removeNamespace']) $prefix = '';
|
||||
|
||||
@@ -387,7 +387,7 @@ $('#module' + moduleID).closest('li').addClass('active');
|
||||
$('#' + caseBrowseType + 'Tab').addClass('btn-active-text').find('.text').after(" <span class='label label-light label-badge'><?php echo $pager->recTotal;?></span>");
|
||||
function runAutocase()
|
||||
{
|
||||
var caseIDList = [];
|
||||
var caseIDList = array();
|
||||
$.each($('input[name^=caseIDList]:checked'),function(){
|
||||
caseIDList.push($(this).val());
|
||||
});
|
||||
@@ -452,8 +452,8 @@ function toOrder(sourceId,targetId)
|
||||
{
|
||||
if(!checkProduct(sourceId, targetId)) return;
|
||||
|
||||
var origOrders = [];
|
||||
var newOrders = [];
|
||||
var origOrders = array();
|
||||
var newOrders = array();
|
||||
var productID = 0;
|
||||
|
||||
$('#caseTableList > tr').each(function(i, elem){
|
||||
|
||||
@@ -27,7 +27,7 @@ $lang->todo->finish = "Abschließen";
|
||||
$lang->todo->batchFinish = "Mehrere abschließen";
|
||||
$lang->todo->export = "Exportieren";
|
||||
$lang->todo->delete = "Löschen";
|
||||
$lang->todo->import2Today = "Importieren für Heute";
|
||||
$lang->todo->import2Today = "Change Date";
|
||||
$lang->todo->import = "Importieren";
|
||||
$lang->todo->legendBasic = "Basis Info";
|
||||
$lang->todo->cycle = "Wiederkehrend";
|
||||
|
||||
@@ -27,7 +27,7 @@ $lang->todo->finish = "Finish Todo";
|
||||
$lang->todo->batchFinish = "Batch Finish";
|
||||
$lang->todo->export = "Export Todo";
|
||||
$lang->todo->delete = "Delete Todo";
|
||||
$lang->todo->import2Today = "Import to Today";
|
||||
$lang->todo->import2Today = "Change Date";
|
||||
$lang->todo->import = "Import";
|
||||
$lang->todo->legendBasic = "Basic Info";
|
||||
$lang->todo->cycle = "Recur";
|
||||
|
||||
@@ -27,7 +27,7 @@ $lang->todo->finish = "Terminer";
|
||||
$lang->todo->batchFinish = "Terminer par lot";
|
||||
$lang->todo->export = "Exporter Agenda";
|
||||
$lang->todo->delete = "Supprimer";
|
||||
$lang->todo->import2Today = "Importer à Aujourd'hui";
|
||||
$lang->todo->import2Today = "Change Date";
|
||||
$lang->todo->import = "Importer";
|
||||
$lang->todo->legendBasic = "Infos de Base";
|
||||
$lang->todo->cycle = "Rendre Récurrent";
|
||||
|
||||
@@ -27,7 +27,7 @@ $lang->todo->finish = "完成待办";
|
||||
$lang->todo->batchFinish = "批量完成";
|
||||
$lang->todo->export = "导出待办";
|
||||
$lang->todo->delete = "删除待办";
|
||||
$lang->todo->import2Today = "导入到今天";
|
||||
$lang->todo->import2Today = "修改日期";
|
||||
$lang->todo->import = "导入";
|
||||
$lang->todo->legendBasic = "基本信息";
|
||||
$lang->todo->cycle = "周期";
|
||||
|
||||
@@ -502,7 +502,6 @@ $config->delete['18_4_alpha1'][] = 'extension/max/report/ext/lang/zh-tw/report.p
|
||||
$config->delete['18_4_alpha1'][] = 'extension/max/report/ext/view/programsummary.html.php';
|
||||
$config->delete['18_4_alpha1'][] = 'extension/max/report/ext/view/programworkload.html.php';
|
||||
$config->delete['18_4_alpha1'][] = 'extension/max/report/ext/view/instancetemplate.html.php';
|
||||
$config->delete['18_4_alpha1'][] = 'extension/max/report/ext/view/blockreportlist.html.php';
|
||||
|
||||
$config->upgrade->openModules = array('action', 'admin', 'api', 'automation', 'backup', 'block', 'branch', 'budget', 'bug', 'build', 'caselib', 'chart', 'ci', 'client', 'common', 'company', 'compile', 'convert', 'cron', 'custom', 'datatable', 'dataview', 'dept', 'design', 'dev', 'dimension', 'doc', 'durationestimation', 'entry', 'execution', 'extension', 'file', 'git', 'gitlab', 'group', 'holiday', 'im', 'index', 'index.html', 'install', 'issue', 'jenkins', 'job', 'kanban', 'license', 'mail', 'message', 'misc', 'mr', 'my', 'personnel', 'pipeline', 'product', 'productplan', 'productset', 'program', 'programplan', 'project', 'projectbuild', 'projectplan', 'projectrelease', 'projectstory', 'pivot', 'qa', 'release', 'repo', 'report', 'risk', 'score', 'screen', 'search', 'setting', 'sonarqube', 'sso', 'stage', 'stakeholder', 'story', 'subject', 'svn', 'task', 'testcase', 'testreport', 'testsuite', 'testtask', 'todo', 'tree', 'tutorial', 'upgrade', 'user', 'webhook', 'weekly', 'workestimation', 'gitea', 'gogs', 'transfer', 'zahost', 'zanode', 'editor');
|
||||
|
||||
|
||||
@@ -9051,7 +9051,7 @@ class upgradeModel extends model
|
||||
|
||||
/* Process settings. */
|
||||
$settings = new stdclass();
|
||||
$settings->columns = array();
|
||||
$columns = array();
|
||||
if($report->params)
|
||||
{
|
||||
$params = json_decode($report->params);
|
||||
@@ -9060,7 +9060,6 @@ class upgradeModel extends model
|
||||
$settings->group2 = $params->group2;
|
||||
$settings->columnTotal = 'sum';
|
||||
|
||||
$columns = array();
|
||||
foreach($params->reportField as $index => $field)
|
||||
{
|
||||
$column = new stdclass();
|
||||
@@ -9081,14 +9080,24 @@ class upgradeModel extends model
|
||||
|
||||
$columns[] = $column;
|
||||
}
|
||||
$settings->columns = $columns;
|
||||
}
|
||||
else
|
||||
{
|
||||
$column = new stdclass();
|
||||
$column->field = '';
|
||||
$column->stat = '';
|
||||
$column->slice = 'noSlice';
|
||||
$column->showMode = 'default';
|
||||
$column->showTotal = 'noShow';
|
||||
|
||||
$columns[] = $column;
|
||||
|
||||
$data->stage = 'draft';
|
||||
$data->step = 1;
|
||||
}
|
||||
|
||||
$settings->columns = $columns;
|
||||
|
||||
/* Process fieldSettings. */
|
||||
$sql = $data->sql;
|
||||
if(!empty($filters))
|
||||
@@ -9118,12 +9127,13 @@ class upgradeModel extends model
|
||||
if(!$sql) return array();
|
||||
|
||||
$this->loadModel('dataview');
|
||||
$this->loadModel('chart');
|
||||
|
||||
$columns = $this->dataview->getColumns($sql);
|
||||
$columnFields = array();
|
||||
foreach($columns as $column => $type) $columnFields[$column] = $column;
|
||||
|
||||
$tableAndFields = $this->dataview->getTables($sql);
|
||||
$tableAndFields = $this->chart->getTables($sql);
|
||||
$tables = $tableAndFields['tables'];
|
||||
$fields = $tableAndFields['fields'];
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ class userModel extends model
|
||||
public function getList($params = 'nodeleted')
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_USER)
|
||||
->where(true)
|
||||
->where('1=1')
|
||||
->beginIF(strpos($params, 'all') === false)->andWhere('type')->eq('inside')->fi()
|
||||
->beginIF(strpos($params, 'nodeleted') !== false)->andWhere('deleted')->eq(0)->fi()
|
||||
->orderBy('account')
|
||||
|
||||
@@ -2979,17 +2979,4 @@ class executionTest
|
||||
}
|
||||
return $executionIDList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user custom workflow field.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getExtendFieldsTest($moduleName = 'project')
|
||||
{
|
||||
$extendFields = $this->executionModel->getExtendFields($moduleName);
|
||||
return $extendFields;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user