Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into tsj_sort
This commit is contained in:
@@ -274,6 +274,9 @@ SELECT t1.`group`, t1.`module`, 'myCollection' FROM `zt_grouppriv` AS t1 WHERE t
|
||||
INSERT IGNORE INTO `zt_grouppriv` (`group`, `module`, `method`)
|
||||
SELECT t1.`group`, t1.`module`, 'myCreation' FROM `zt_grouppriv` AS t1 WHERE t1.`module` = 'doc' AND t1.`method` = 'browse';
|
||||
|
||||
INSERT IGNORE INTO `zt_grouppriv` (`group`, `module`, `method`)
|
||||
SELECT t1.`group`, t1.`module`, 'myEdited' FROM `zt_grouppriv` AS t1 WHERE t1.`module` = 'doc' AND t1.`method` = 'browse';
|
||||
|
||||
INSERT IGNORE INTO `zt_grouppriv` (`group`, `module`, `method`)
|
||||
SELECT t1.`group`, t1.`module`, 'productSpace' FROM `zt_grouppriv` AS t1 WHERE t1.`module` = 'doc' AND t1.`method` = 'tableContents';
|
||||
|
||||
@@ -484,6 +487,10 @@ ALTER TABLE `zt_entry`
|
||||
CHANGE `editedBy` `editedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
CHANGE `editedDate` `editedDate` datetime NULL;
|
||||
|
||||
ALTER TABLE `zt_extension`
|
||||
CHANGE `dirs` `dirs` mediumtext NULL,
|
||||
CHANGE `files` `files` mediumtext NULL;
|
||||
|
||||
ALTER TABLE `zt_feedback`
|
||||
CHANGE `reviewedBy` `reviewedBy` varchar(255) NOT NULL DEFAULT '',
|
||||
CHANGE `reviewedDate` `reviewedDate` datetime NULL,
|
||||
|
||||
+14
-3
@@ -806,8 +806,8 @@ CREATE TABLE IF NOT EXISTS `zt_extension` (
|
||||
`zentaoCompatible` varchar(100) NOT NULL,
|
||||
`installedTime` datetime NOT NULL,
|
||||
`depends` varchar(100) NOT NULL,
|
||||
`dirs` mediumtext NOT NULL,
|
||||
`files` mediumtext NOT NULL,
|
||||
`dirs` mediumtext NULL,
|
||||
`files` mediumtext NULL,
|
||||
`status` varchar(20) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `name` (`name`),
|
||||
@@ -1754,7 +1754,7 @@ CREATE TABLE `zt_taskteam` (
|
||||
`estimate` decimal(12,2) NOT NULL,
|
||||
`consumed` decimal(12,2) NOT NULL,
|
||||
`left` decimal(12,2) NOT NULL,
|
||||
`transfer` char(30) NOT NULL DEFAUT '',
|
||||
`transfer` char(30) NOT NULL DEFAULT '',
|
||||
`status` enum('wait','doing','done') NOT NULL DEFAULT 'wait',
|
||||
`order` tinyint(3) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
@@ -3426,6 +3426,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'doc', 'manageBook'),
|
||||
(1, 'doc', 'myCollection'),
|
||||
(1, 'doc', 'myCreation'),
|
||||
(1, 'doc', 'myEdited'),
|
||||
(1, 'doc', 'mySpace'),
|
||||
(1, 'doc', 'myView'),
|
||||
(1, 'doc', 'productSpace'),
|
||||
@@ -4780,6 +4781,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(2, 'doc', 'index'),
|
||||
(2, 'doc', 'myCollection'),
|
||||
(2, 'doc', 'myCreation'),
|
||||
(2, 'doc', 'myEdited'),
|
||||
(2, 'doc', 'mySpace'),
|
||||
(2, 'doc', 'myView'),
|
||||
(2, 'doc', 'productSpace'),
|
||||
@@ -5508,6 +5510,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(3, 'doc', 'index'),
|
||||
(3, 'doc', 'myCollection'),
|
||||
(3, 'doc', 'myCreation'),
|
||||
(3, 'doc', 'myEdited'),
|
||||
(3, 'doc', 'mySpace'),
|
||||
(3, 'doc', 'myView'),
|
||||
(3, 'doc', 'productSpace'),
|
||||
@@ -6188,6 +6191,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(4, 'doc', 'manageBook'),
|
||||
(4, 'doc', 'myCollection'),
|
||||
(4, 'doc', 'myCreation'),
|
||||
(4, 'doc', 'myEdited'),
|
||||
(4, 'doc', 'mySpace'),
|
||||
(4, 'doc', 'myView'),
|
||||
(4, 'doc', 'productSpace'),
|
||||
@@ -7223,6 +7227,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(5, 'doc', 'index'),
|
||||
(5, 'doc', 'myCollection'),
|
||||
(5, 'doc', 'myCreation'),
|
||||
(5, 'doc', 'myEdited'),
|
||||
(5, 'doc', 'mySpace'),
|
||||
(5, 'doc', 'myView'),
|
||||
(5, 'doc', 'productSpace'),
|
||||
@@ -8142,6 +8147,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(6, 'doc', 'index'),
|
||||
(6, 'doc', 'myCollection'),
|
||||
(6, 'doc', 'myCreation'),
|
||||
(6, 'doc', 'myEdited'),
|
||||
(6, 'doc', 'mySpace'),
|
||||
(6, 'doc', 'myView'),
|
||||
(6, 'doc', 'productSpace'),
|
||||
@@ -8939,6 +8945,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(7, 'doc', 'index'),
|
||||
(7, 'doc', 'myCollection'),
|
||||
(7, 'doc', 'myCreation'),
|
||||
(7, 'doc', 'myEdited'),
|
||||
(7, 'doc', 'mySpace'),
|
||||
(7, 'doc', 'myView'),
|
||||
(7, 'doc', 'productSpace'),
|
||||
@@ -9751,6 +9758,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(8, 'doc', 'index'),
|
||||
(8, 'doc', 'myCollection'),
|
||||
(8, 'doc', 'myCreation'),
|
||||
(8, 'doc', 'myEdited'),
|
||||
(8, 'doc', 'mySpace'),
|
||||
(8, 'doc', 'myView'),
|
||||
(8, 'doc', 'productSpace'),
|
||||
@@ -10592,6 +10600,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(9, 'doc', 'index'),
|
||||
(9, 'doc', 'myCollection'),
|
||||
(9, 'doc', 'myCreation'),
|
||||
(9, 'doc', 'myEdited'),
|
||||
(9, 'doc', 'mySpace'),
|
||||
(9, 'doc', 'myView'),
|
||||
(9, 'doc', 'productSpace'),
|
||||
@@ -11259,6 +11268,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(10, 'doc', 'index'),
|
||||
(10, 'doc', 'myCollection'),
|
||||
(10, 'doc', 'myCreation'),
|
||||
(10, 'doc', 'myEdited'),
|
||||
(10, 'doc', 'mySpace'),
|
||||
(10, 'doc', 'myView'),
|
||||
(10, 'doc', 'productSpace'),
|
||||
@@ -11762,6 +11772,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(11, 'doc', 'index'),
|
||||
(11, 'doc', 'myCollection'),
|
||||
(11, 'doc', 'myCreation'),
|
||||
(11, 'doc', 'myEdited'),
|
||||
(11, 'doc', 'mySpace'),
|
||||
(11, 'doc', 'myView'),
|
||||
(11, 'doc', 'productSpace'),
|
||||
|
||||
@@ -619,7 +619,7 @@ class baseDAO
|
||||
{
|
||||
if(strpos($skipFields, ",$field,") !== false) continue;
|
||||
$fields .= "`{$field}`,";
|
||||
if(is_string($value)) $value = $this->sqlobj->quote($value);
|
||||
if(is_string($value) or $value === null) $value = $this->sqlobj->quote($value);
|
||||
$values .= $value . ',';
|
||||
}
|
||||
$fields = substr($fields, 0, -1);
|
||||
|
||||
@@ -311,7 +311,11 @@ class dm extends dao
|
||||
{
|
||||
$sql = "SELECT * from dba_ind_columns WHERE index_owner = '{$this->config->db->name}' AND index_name IN (SELECT index_name FROM dba_indexes WHERE table_name='{$this->table}' AND INDEX_TYPE = 'NORMAL' AND UNIQUENESS = 'UNIQUE' AND INDEX_NAME NOT IN (SELECT INDEX_NAME FROM DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'P'))";
|
||||
|
||||
return $this->dbh->query($sql)->fetchAll();
|
||||
$columns = $this->dbh->query($sql)->fetchAll();
|
||||
|
||||
$cols = array();
|
||||
foreach($columns as $col) $cols[$col->COLUMN_NAME] = $col;
|
||||
return $cols;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -345,7 +349,7 @@ class dm extends dao
|
||||
foreach($this->sqlobj->data as $field => $value)
|
||||
{
|
||||
$fields .= "`{$field}`,";
|
||||
if(is_string($value)) $value = $this->sqlobj->quote($value);
|
||||
if(is_string($value) or $value === null) $value = $this->sqlobj->quote($value);
|
||||
$values .= $value . ',';
|
||||
}
|
||||
$fields = substr($fields, 0, -1);
|
||||
@@ -361,10 +365,9 @@ class dm extends dao
|
||||
if(empty($cols)) return false;
|
||||
|
||||
$conditions = array();
|
||||
foreach($cols as $col)
|
||||
foreach($cols as $colName => $col)
|
||||
{
|
||||
$pk = $col->COLUMN_NAME;
|
||||
if(isset($this->sqlobj->data->{$pk})) $conditions[] = " \"{$pk}\" = '{$this->sqlobj->data->{$pk}}'";
|
||||
if(isset($this->sqlobj->data->{$colName})) $conditions[] = " \"{$colName}\" = '{$this->sqlobj->data->{$colName}}'";
|
||||
}
|
||||
if(!empty($conditions)) $updateSql .= ' WHERE ' . implode(' AND ', $conditions);
|
||||
|
||||
@@ -374,6 +377,7 @@ class dm extends dao
|
||||
foreach($this->sqlobj->data as $field => $value)
|
||||
{
|
||||
if(isset($ingore[$this->table]) and in_array($field, $ingore[$this->table])) continue;
|
||||
if(!isset($cols[$field])) continue;
|
||||
$deleteSql .= "`{$field}` = ";
|
||||
$deleteSql .= is_string($value) ? "'{$value}'" : $value;
|
||||
$deleteSql .= ' AND ';
|
||||
|
||||
@@ -45,16 +45,16 @@ $lang->admin->menuList->convert['link'] = 'convert|convertjira';
|
||||
$lang->admin->menuList->convert['order'] = 50;
|
||||
|
||||
$lang->admin->menuList->system['subMenu']['mode'] = array('link' => "{$lang->custom->mode}|custom|mode|");
|
||||
$lang->admin->menuList->system['subMenu']['backup'] = array('link' => "{$lang->backup->common}|backup|index|");
|
||||
$lang->admin->menuList->system['subMenu']['trash'] = array('link' => "{$lang->action->trash}|action|trash|");
|
||||
$lang->admin->menuList->system['subMenu']['safe'] = array('link' => "{$lang->security}|admin|safe|", 'alias' => 'checkweak,resetpwdsetting', 'links' => array('admin|resetpwdsetting|', 'admin|checkweak|'));
|
||||
$lang->admin->menuList->system['subMenu']['cron'] = array('link' => "{$lang->admin->cron}|cron|index|", 'subModule' => 'cron');
|
||||
$lang->admin->menuList->system['subMenu']['timezone'] = array('link' => "{$lang->timezone}|custom|timezone|");
|
||||
$lang->admin->menuList->system['subMenu']['buildindex'] = array('link' => "{$lang->admin->buildIndex}|search|buildindex|");
|
||||
$lang->admin->menuList->system['subMenu']['tableengine'] = array('link' => "{$lang->admin->tableEngine}|admin|tableengine|");
|
||||
if($this->config->db->driver == 'mysql') $lang->admin->menuList->system['subMenu']['backup'] = array('link' => "{$lang->backup->common}|backup|index|");
|
||||
|
||||
$lang->admin->menuList->system['menuOrder']['5'] = 'mode';
|
||||
$lang->admin->menuList->system['menuOrder']['10'] = 'backup';
|
||||
if($this->config->db->driver == 'mysql') $lang->admin->menuList->system['menuOrder']['10'] = 'backup';
|
||||
$lang->admin->menuList->system['menuOrder']['15'] = 'trash';
|
||||
$lang->admin->menuList->system['menuOrder']['30'] = 'safe';
|
||||
$lang->admin->menuList->system['menuOrder']['35'] = 'cron';
|
||||
|
||||
@@ -84,3 +84,4 @@ $config->block->modules['common']->moreLinkList->dynamic = 'company|dynamic|';
|
||||
$config->block->modules['doc'] = new stdclass();
|
||||
$config->block->modules['doc']->moreLinkList = new stdclass();
|
||||
$config->block->modules['doc']->moreLinkList->docmycollection = 'doc|myspace|type=collect&libID=0&moduleID=0&browseType=all¶m=0&orderBy=editedDate_desc';
|
||||
$config->block->modules['doc']->moreLinkList->productdoc = 'doc|productspace|';
|
||||
|
||||
@@ -2149,6 +2149,31 @@ class block extends control
|
||||
*/
|
||||
public function printProductDocBlock()
|
||||
{
|
||||
$this->loadModel('doc');
|
||||
|
||||
/* Set project status and count. */
|
||||
$count = isset($this->params->count) ? (int)$this->params->count : 15;
|
||||
$products = $this->loadModel('product')->getList(0, 'all');
|
||||
$involveds = $this->product->getList(0, 'involved');
|
||||
$productIdList = array_merge(array_keys($products), array_keys($involveds));
|
||||
|
||||
$stmt = $this->dao->select('*')->from(TABLE_DOC)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('product')->in($productIdList)
|
||||
->orderBy('product,editedDate_desc')
|
||||
->query();
|
||||
$docGroup = array();
|
||||
while($doc = $stmt->fetch())
|
||||
{
|
||||
if(!isset($docGroup[$doc->product])) $docGroup[$doc->product] = array();
|
||||
if(count($docGroup[$doc->product]) > $count) break;
|
||||
if($this->doc->checkPrivDoc($doc)) $docGroup[$doc->product][$doc->id] = $doc;
|
||||
}
|
||||
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
||||
$this->view->products = $products;
|
||||
$this->view->involveds = $involveds;
|
||||
$this->view->docGroup = $docGroup;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -357,6 +357,7 @@ if($config->vision == 'rnd')
|
||||
{
|
||||
$lang->block->default['doc']['6']['title'] = $lang->productCommon . '文档';
|
||||
$lang->block->default['doc']['6']['block'] = 'productdoc';
|
||||
$lang->block->default['doc']['6']['params']['count'] = '20';
|
||||
$lang->block->default['doc']['6']['grid'] = 8;
|
||||
}
|
||||
|
||||
@@ -366,6 +367,7 @@ $lang->block->default['doc']['7']['grid'] = 4;
|
||||
|
||||
$lang->block->default['doc']['8']['title'] = $lang->projectCommon . '文档';
|
||||
$lang->block->default['doc']['8']['block'] = 'projectdoc';
|
||||
$lang->block->default['doc']['8']['params']['count'] = '20';
|
||||
$lang->block->default['doc']['8']['grid'] = 8;
|
||||
|
||||
$lang->block->count = '数量';
|
||||
|
||||
@@ -1125,7 +1125,8 @@ class blockModel extends model
|
||||
*/
|
||||
public function getProductDocParams()
|
||||
{
|
||||
return false;
|
||||
$params = $this->appendCountParams();
|
||||
return json_encode($params);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,190 @@
|
||||
<style>
|
||||
.block-productdoc .nav-stacked {overflow:auto; height:220px; max-height:220px; }
|
||||
.block-productdoc .panel-heading {border-bottom:1px solid #ddd;}
|
||||
.block-productdoc .panel-body {padding-top: 0; height:240px; padding-right:0px; overflow-x:hidden !important;}
|
||||
.block-productdoc .tab-content {padding-right:0px;}
|
||||
.block-productdoc .tab-pane {max-height:220px; overflow:auto;}
|
||||
.block-productdoc table.tablesorter th{border-bottom:0px !important;}
|
||||
.block-productdoc .tile {margin-bottom: 30px;}
|
||||
.block-productdoc .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-productdoc .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-productdoc .col-nav {border-right: 1px solid #EBF2FB; width: 210px; padding: 0;}
|
||||
.block-productdoc .nav-secondary > li {position: relative;}
|
||||
.block-productdoc .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-productdoc .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child {color: #3C4353; background: transparent; box-shadow: none;}
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child:hover,
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child:focus,
|
||||
.block-productdoc .nav-secondary > li > a:first-child:hover {box-shadow: none; border-radius: 4px 0 0 4px;}
|
||||
.block-productdoc .nav-secondary > li.active > a:first-child:before {content: ' '; display: block; left: -1px; top: 10px; bottom: 10px; width: 4px; background: #006af1; position: absolute;}
|
||||
.block-productdoc .nav-secondary > li > a.btn-view {position: absolute; top: 0; right: 0; bottom: 0; padding: 8px; width: 36px; text-align: center; opacity: 0;}
|
||||
.block-productdoc .nav-secondary > li:hover > a.btn-view {opacity: 1;}
|
||||
.block-productdoc .nav-secondary > li.active > a.btn-view {box-shadow: none;}
|
||||
.block-productdoc .nav-secondary > li.switch-icon {display: none;}
|
||||
.block-productdoc.block-sm .nav-stacked {height:auto;}
|
||||
.block-productdoc.block-sm .panel-body {padding-bottom: 10px; position: relative; padding-top: 45px; border-radius: 3px; height:275px;}
|
||||
.block-productdoc.block-sm .panel-body > .table-row,
|
||||
.block-productdoc.block-sm .panel-body > .table-row > .col {display: block; width: auto;}
|
||||
.block-productdoc.block-sm .panel-body > .table-row > .tab-content {padding: 0; margin: 0 -5px;}
|
||||
.block-productdoc.block-sm .tab-pane > .table-row > .col-5 {width: 125px;}
|
||||
.block-productdoc.block-sm .tab-pane > .table-row > .col-5 > .table-row {padding: 5px 0;}
|
||||
.block-productdoc.block-sm .col-nav {border-left: none; position: absolute; top: 0; left: 15px; right: 15px; background: #f5f5f5;}
|
||||
.block-productdoc.block-sm .nav-secondary {display: table; width: 100%; padding: 0; table-layout: fixed;}
|
||||
.block-productdoc.block-sm .nav-secondary > li {display: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.switch-icon,
|
||||
.block-productdoc.block-sm .nav-secondary > li.active {display: table-cell; width: 100%; text-align: center;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a:hover {cursor: default; background: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.switch-icon > a:hover {background: rgba(0, 0, 0, 0.07);}
|
||||
.block-productdoc.block-sm .nav-secondary > li > a {padding: 5px 10px; border-radius: 4px;}
|
||||
.block-productdoc.block-sm .nav-secondary > li > a:before {display: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.switch-icon {width: 40px;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a:first-child:before {display: none}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a.btn-view {width: auto; left: 0; right: 0;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a.btn-view > i {display: none;}
|
||||
.block-productdoc.block-sm .nav-secondary > li.active > a.btn-view:hover {cursor: pointer; background: rgba(0,0,0,.1);}
|
||||
|
||||
.block-productdoc .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-productdoc .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-productdoc .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
|
||||
.block-productdoc .lastIteration {padding-top: 6px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
|
||||
.block-productdoc #productType {position: absolute;top: 6px;left: 120px;}
|
||||
.block-productdoc #productType .btn {border:0px;}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
$(function()
|
||||
{
|
||||
<?php if(!$longBlock):?>
|
||||
$(document).on('click', '.col-nav .switch-icon', function(e)
|
||||
{
|
||||
var $nav = $(this).closest('.nav');
|
||||
var isPrev = $(this).is('.prev');
|
||||
var $activeItem = $nav.children('.active');
|
||||
var $next = $activeItem[isPrev ? 'prev' : 'next']('li:not(.switch-icon)');
|
||||
if ($next.length) $next.find('a[data-toggle="tab"]').trigger('click');
|
||||
else $nav.children('li:not(.switch-icon)')[isPrev ? 'last' : 'first']().find('a[data-toggle="tab"]').trigger('click');
|
||||
e.preventDefault();
|
||||
});
|
||||
<?php endif;?>
|
||||
|
||||
if($('.block-productdoc #productType').length > 1);
|
||||
{
|
||||
count = $('.block-productdoc #productType').length;
|
||||
$('.block-productdoc #productType').each(function()
|
||||
{
|
||||
if(count == 1) return;
|
||||
$(this).remove();
|
||||
count --;
|
||||
})
|
||||
}
|
||||
|
||||
var $productList = $('#activeProduct');
|
||||
if($productList.length)
|
||||
{
|
||||
var productList = $productList[0];
|
||||
$(".col ul.nav").animate({scrollTop: productList.offsetTop}, "slow");
|
||||
}
|
||||
});
|
||||
|
||||
function changeProductType(type)
|
||||
{
|
||||
$('.nav.products').toggleClass('hidden', type != 'all');
|
||||
$('.nav.involveds').toggleClass('hidden', type != 'involved');
|
||||
$('#productType .btn').html($('#productType [data-type=' + type + ']').html() + " <span class='caret'></span>");
|
||||
var name = type == 'all' ? '.products' : '.involveds';
|
||||
var $obj = $(name + ' li.active').length > 0 ? $(name + ' .active:first').find('a') : $(name + ' li:not(.switch-icon):first').find('a');
|
||||
$(name + ' li').removeClass('active');
|
||||
$obj.closest('li').addClass('active');
|
||||
$('.block-productdoc .tab-pane').removeClass('active').removeClass('in');
|
||||
$('.block-productdoc .tab-pane' + $obj.data('target')).addClass('active').addClass('in');
|
||||
}
|
||||
|
||||
</script>
|
||||
<div class="dropdown" id='productType'>
|
||||
<button class="btn" type="button" data-toggle="dropdown"><?php echo $lang->product->all;?> <span class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="javascript:changeProductType('all')" data-type='all'><?php echo $lang->product->all;?></a></li>
|
||||
<li><a href="javascript:changeProductType('involved')" data-type='involved'><?php echo $lang->product->involved;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-row">
|
||||
<?php if(empty($products) and empty($involveds)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover products">
|
||||
<li class='switch-icon prev'><a><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php $selected = key($products);?>
|
||||
<?php foreach($products as $product):?>
|
||||
<li <?php if($product->id == $selected) echo "class='active' id='activeProduct'";?> productID='<?php echo $product->id;?>'>
|
||||
<a href="###" title="<?php echo $product->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$product->id}";?>' data-toggle="tab"><?php echo $product->name;?></a>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
<ul class="nav nav-stacked nav-secondary scrollbar-hover involveds hidden">
|
||||
<li class='switch-icon prev'><a><i class='icon icon-arrow-left'></i></a></li>
|
||||
<?php foreach($involveds as $product):?>
|
||||
<li productID='<?php echo $product->id;?>'>
|
||||
<a href="###" title="<?php echo $product->name?>" data-target='<?php echo "#tab3{$blockNavId}Content{$product->id}";?>' data-toggle="tab"><?php echo $product->name;?></a>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
<li class='switch-icon next'><a><i class='icon icon-arrow-right'></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col tab-content">
|
||||
<?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])):?>
|
||||
<div class="table-row">
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-name'><?php echo $lang->doc->title?></th>
|
||||
<th class='c-user'><?php echo $lang->doc->addedBy?></th>
|
||||
<th class='c-date'><?php echo $lang->doc->addedDate?></th>
|
||||
<th class='c-date'><?php echo $lang->doc->editedDate?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($docGroup[$product->id] as $doc):?>
|
||||
<tr>
|
||||
<td class='c-name'>
|
||||
<?php
|
||||
$docType = zget($config->doc->iconList, $doc->type);
|
||||
$icon = html::image("static/svg/{$docType}.svg", "class='file-icon'");
|
||||
if(common::hasPriv('doc', 'view'))
|
||||
{
|
||||
echo html::a($this->createLink('doc', 'view', "docID=$doc->id"), $icon . $doc->title, '', "title='{$doc->title}' class='doc-title' data-app='{$this->app->tab}'");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo "<span class='doc-title'>$icon {$doc->title}</span>";
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td class='c-user'><?php echo zget($users, $doc->addedBy);?></td>
|
||||
<td class='c-date'><?php echo substr($doc->addedDate, 0, 10);?></td>
|
||||
<td class='c-date'><?php echo substr($doc->editedDate, 0, 10);?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -87,3 +87,17 @@ function initDatepicker($obj, callback)
|
||||
|
||||
if(typeof callback == 'function') callback($obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attr date check.
|
||||
*
|
||||
* @param object $obj
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function attrDateCheck($obj)
|
||||
{
|
||||
$obj.find('.form-date').attr('onchange', 'checkDate(this, this.value)');
|
||||
$obj.find('.form-datetime').attr('onchange', 'checkDate(this, this.value)');
|
||||
}
|
||||
|
||||
|
||||
+44
-42
@@ -1,10 +1,8 @@
|
||||
$(function()
|
||||
{
|
||||
initCheckBox();
|
||||
initQueryBtn();
|
||||
$('#exportchart').modalTrigger();
|
||||
|
||||
chartMap = new Map();
|
||||
if(charts.length > 0)
|
||||
{
|
||||
var chartPros = charts.map(function(chart)
|
||||
@@ -12,7 +10,6 @@ $(function()
|
||||
var echartDom = $('#chartDraw' + chart.currentGroup + '_' + chart.id).get(0);
|
||||
var echart = echarts.init(echartDom);
|
||||
ajaxGetChart(false, chart, echart);
|
||||
chartMap.set(chart.cudrrentGroup + chart.id, chart);
|
||||
return renderFilters(chart);
|
||||
});
|
||||
|
||||
@@ -21,9 +18,14 @@ $(function()
|
||||
calcPreviewGrowFilter();
|
||||
$('body').resize(() => {calcPreviewGrowFilter(true);});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
chartMap = new Map();
|
||||
charts.forEach(function(chart)
|
||||
{
|
||||
chartMap.set(chart.currentGroup + '_' + chart.id, chart);
|
||||
});
|
||||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
})
|
||||
|
||||
@@ -73,53 +75,53 @@ function initCheckBox()
|
||||
/**
|
||||
* Init query button.
|
||||
*
|
||||
* @param object $obj
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function initQueryBtn()
|
||||
function queryData(obj)
|
||||
{
|
||||
$('.btn-query').click(function()
|
||||
var chartID = $(obj).parents('.filterBox').attr('data-chart');
|
||||
var chartInfo = chartMap.get(chartID);
|
||||
chartInfo.searchFilters = JSON.parse(JSON.stringify(chartInfo.filters));
|
||||
|
||||
// Foreach filters and set current value in searchFilters. */
|
||||
$('#filterItems' + chartID + ' .filter-items').children().each(function(index)
|
||||
{
|
||||
var chartID = $(this).attr('data-chart');
|
||||
var chartInfo = chartMap.get(chartID);
|
||||
chartInfo.searchFilters = JSON.parse(JSON.stringify(chartInfo.filters));
|
||||
var $child = $(this);
|
||||
if(!$child.hasClass('filter-item')) return;
|
||||
|
||||
// Foreach filters and set current value in searchFilters. */
|
||||
$('#filterItems' + chartID + ' .filter-items').children().each(function(index)
|
||||
var filter = chartInfo.searchFilters[index];
|
||||
var type = filter.type;
|
||||
var value = null;
|
||||
|
||||
if(type == 'input' || type == 'select')
|
||||
{
|
||||
var $child = $(this);
|
||||
var filter = chartInfo.searchFilters[index];
|
||||
var type = filter.type;
|
||||
var value = null;
|
||||
var value = $child.find('#default').val();
|
||||
chartInfo.searchFilters[index].default = value;
|
||||
}
|
||||
else if(type == 'date' || type == 'datetime')
|
||||
{
|
||||
var begin = $child.find('input').first().val();
|
||||
var end = $child.find('input').last().val();
|
||||
|
||||
if(type == 'input' || type == 'select')
|
||||
{
|
||||
var value = $child.find('#default').val();
|
||||
chartInfo.searchFilters[index].default = value;
|
||||
}
|
||||
else if(type == 'date' || type == 'datetime')
|
||||
{
|
||||
var begin = $child.find('input').first().val();
|
||||
var end = $child.find('input').last().val();
|
||||
var value = {"begin":begin, "end":end};
|
||||
chartInfo.searchFilters[index].default = value;
|
||||
}
|
||||
else if(type == 'condition')
|
||||
{
|
||||
var operator = $child.find('#operator').data('zui.picker').getValue();
|
||||
var value = $child.find('#value').val();
|
||||
|
||||
var value = {"begin":begin, "end":end};
|
||||
chartInfo.searchFilters[index].default = value;
|
||||
}
|
||||
else if(type == 'condition')
|
||||
{
|
||||
var operator = $child.find('#operator').data('zui.picker').getValue();
|
||||
var value = $child.find('#value').val();
|
||||
|
||||
chartInfo.searchFilters[index].operator = operator;
|
||||
chartInfo.searchFilters[index].value = value;
|
||||
}
|
||||
});
|
||||
|
||||
//* Reload echart. */
|
||||
var echartDom = $('#chartDraw' + chartID).get(0);
|
||||
var echartInfo = echarts.init(echartDom);
|
||||
ajaxGetChart(false, chartInfo, echartInfo);
|
||||
chartInfo.searchFilters[index].operator = operator;
|
||||
chartInfo.searchFilters[index].value = value;
|
||||
}
|
||||
});
|
||||
|
||||
//* Reload echart. */
|
||||
var echartDom = $('#chartDraw' + chartID).get(0);
|
||||
var echartInfo = echarts.init(echartDom);
|
||||
ajaxGetChart(false, chartInfo, echartInfo);
|
||||
}
|
||||
|
||||
function calcPreviewGrowFilter(resize = false)
|
||||
@@ -247,6 +249,6 @@ function renderFilterItem(filter, resp, index, step)
|
||||
};
|
||||
var html = $($.zui.formatString(tpl, data))
|
||||
initPicker(html, 'picker-select', true);
|
||||
initDatepicker(html);
|
||||
initDatepicker(html, attrDateCheck);
|
||||
return html;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<?php js::set('WIDTH_INPUT', $config->chart->widthInput);?>
|
||||
<?php js::set('WIDTH_DATE', $config->chart->widthDate);?>
|
||||
<?php js::set('pickerHeight', $config->bi->pickerHeight);?>
|
||||
<?php $queryDom = "<div class='queryBtn query-inside hidden'> <button type='submit' id='submit' class='btn btn-primary btn-query' data-loading='Loading...'>{$lang->chart->query}</button></div>";?>
|
||||
<?php $queryDom = "<div class='queryBtn query-inside hidden'> <button type='submit' id='submit' onclick='queryData(this)' class='btn btn-primary btn-query' data-loading='Loading...'>{$lang->chart->query}</button></div>";?>
|
||||
<?php js::set('queryDom', $queryDom);?>
|
||||
|
||||
<div id='mainMenu' class='clearfix main-position'>
|
||||
@@ -36,7 +36,7 @@
|
||||
</div>
|
||||
<?php if($this->config->edition == 'biz' or $this->config->edition == 'max'):?>
|
||||
<div class='btn-toolbar pull-right child-position'>
|
||||
<?php common::printLink('chart', 'exportChart', '', "<i class='icon icon-export muted'> </i> " . $lang->export, '', "class='btn btn-link btn-export' id='exportchart'");?>
|
||||
<?php common::printLink('chart', 'export', '', "<i class='icon icon-export muted'> </i> " . $lang->export, '', "class='btn btn-link btn-export' id='exportchart'");?>
|
||||
<?php common::printLink('chart', 'browse', '', $lang->chart->toDesign, '', "class='btn btn-primary '");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -94,10 +94,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<div id="filterItems<?php echo $chart->currentGroup . '_';?><?php echo $chart->id;?>" class='filterBox'>
|
||||
<div id="filterItems<?php echo $chart->currentGroup . '_';?><?php echo $chart->id;?>" data-chart="<?php echo $chart->currentGroup . '_' . $chart->id?>"class='filterBox'>
|
||||
<div class='filter-items'></div>
|
||||
<?php if(!empty($chart->filters)):?>
|
||||
<div class='queryBtn query-outside'><?php echo html::submitButton($lang->chart->query, "data-chart={$chart->currentGroup}{$chart->id}", 'btn btn-primary btn-query');?></div>
|
||||
<div class='queryBtn query-outside'><?php echo html::submitButton($lang->chart->query, "onclick='queryData(this)'", 'btn btn-primary btn-query');?></div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div id="chartDraw<?php echo $chart->currentGroup . '_';?><?php echo $chart->id;?>" data-group="<?php echo $chart->currentGroup;?>" data-id="<?php echo $chart->id;?>" class='echart-content'></div>
|
||||
|
||||
@@ -50,6 +50,7 @@ $config->doc->spaceMethod['mine'] = 'myspace';
|
||||
$config->doc->spaceMethod['view'] = 'myspace';
|
||||
$config->doc->spaceMethod['collect'] = 'myspace';
|
||||
$config->doc->spaceMethod['createdby'] = 'myspace';
|
||||
$config->doc->spaceMethod['editedby'] = 'myspace';
|
||||
$config->doc->spaceMethod['product'] = 'productspace';
|
||||
$config->doc->spaceMethod['project'] = 'projectspace';
|
||||
$config->doc->spaceMethod['execution'] = 'projectspace';
|
||||
|
||||
+13
-10
@@ -411,6 +411,7 @@ class docModel extends model
|
||||
}
|
||||
|
||||
$query = $this->getDocQuery($this->session->contributeDocQuery);
|
||||
$query = preg_replace('/(`\w+`)/', 't1.$1', $query);
|
||||
$docIDList = $this->dao->select('objectID')->from(TABLE_ACTION)
|
||||
->where('objectType')->eq('doc')
|
||||
->andWhere('objectID')->in($hasPrivDocIdList)
|
||||
@@ -737,7 +738,7 @@ class docModel extends model
|
||||
->query();
|
||||
|
||||
$docIdList = array();
|
||||
while ($doc = $stmt->fetch())
|
||||
while($doc = $stmt->fetch())
|
||||
{
|
||||
if($this->checkPrivDoc($doc)) $docIdList[$doc->id] = $doc->id;
|
||||
}
|
||||
@@ -1126,7 +1127,7 @@ class docModel extends model
|
||||
unset($this->config->doc->search['fields']['execution']);
|
||||
}
|
||||
|
||||
if(in_array($type, array('view', 'collect', 'createdby'))) $libPairs = array('' => '') + $this->getLibs('all', 'withObject');
|
||||
if(in_array($type, array('view', 'collect', 'createdby', 'editedby'))) $libPairs = array('' => '') + $this->getLibs('all', 'withObject');
|
||||
|
||||
$this->config->doc->search['module'] = $queryName;
|
||||
$this->config->doc->search['params']['lib']['values'] = $libPairs + array('all' => $this->lang->doclib->all);
|
||||
@@ -3147,21 +3148,23 @@ class docModel extends model
|
||||
$myCreation->hasAction = false;
|
||||
$myCreation->active = $libType == 'createdby' ? 1 : 0;
|
||||
|
||||
$myCreation = new stdclass();
|
||||
$myCreation->id = 0;
|
||||
$myCreation->name = $this->lang->doc->myEdited;
|
||||
$myCreation->type = 'editedBy';
|
||||
$myCreation->objectType = 'doc';
|
||||
$myCreation->objectID = 0;
|
||||
$myCreation->hasAction = false;
|
||||
$myCreation->active = $libType == 'editedby' ? 1 : 0;
|
||||
$myEdited = new stdclass();
|
||||
$myEdited->id = 0;
|
||||
$myEdited->name = $this->lang->doc->myEdited;
|
||||
$myEdited->type = 'editedBy';
|
||||
$myEdited->objectType = 'doc';
|
||||
$myEdited->objectID = 0;
|
||||
$myEdited->hasAction = false;
|
||||
$myEdited->active = $libType == 'editedby' ? 1 : 0;
|
||||
|
||||
$libTree = array();
|
||||
$libTree[] = $myLib;
|
||||
if(common::hasPriv('doc', 'myView')) $libTree[] = $myView;
|
||||
if(common::hasPriv('doc', 'myCollection')) $libTree[] = $myCollection;
|
||||
if(common::hasPriv('doc', 'myCreation')) $libTree[] = $myCreation;
|
||||
if(common::hasPriv('doc', 'myEdited')) $libTree[] = $myEdited;
|
||||
}
|
||||
|
||||
return $libTree;
|
||||
}
|
||||
|
||||
|
||||
@@ -778,9 +778,10 @@ class extensionModel extends model
|
||||
{
|
||||
$code = $extension;
|
||||
$extension = $this->getInfoFromPackage($extension);
|
||||
$extension->status = 'available';
|
||||
$extension->code = $code;
|
||||
$extension->type = empty($type) ? $extension->type : $type;
|
||||
$extension->status = 'available';
|
||||
$extension->code = $code;
|
||||
$extension->type = empty($type) ? $extension->type : $type;
|
||||
$extension->installedTime = helper::now();
|
||||
|
||||
$this->dao->replace(TABLE_EXTENSION)->data($extension)->exec();
|
||||
}
|
||||
|
||||
@@ -1401,6 +1401,7 @@ $lang->resource->doc->mySpace = 'mySpace';
|
||||
$lang->resource->doc->myView = 'myView';
|
||||
$lang->resource->doc->myCollection = 'myCollection';
|
||||
$lang->resource->doc->myCreation = 'myCreation';
|
||||
$lang->resource->doc->myEdited = 'myEdited';
|
||||
$lang->resource->doc->createLib = 'createLib';
|
||||
$lang->resource->doc->editLib = 'editLib';
|
||||
$lang->resource->doc->deleteLib = 'deleteLib';
|
||||
@@ -1425,24 +1426,25 @@ $lang->doc->methodOrder[10] = 'mySpace';
|
||||
$lang->doc->methodOrder[15] = 'myView';
|
||||
$lang->doc->methodOrder[20] = 'myCollection';
|
||||
$lang->doc->methodOrder[25] = 'myCreation';
|
||||
$lang->doc->methodOrder[30] = 'createLib';
|
||||
$lang->doc->methodOrder[35] = 'editLib';
|
||||
$lang->doc->methodOrder[40] = 'deleteLib';
|
||||
$lang->doc->methodOrder[45] = 'create';
|
||||
$lang->doc->methodOrder[50] = 'edit';
|
||||
$lang->doc->methodOrder[55] = 'view';
|
||||
$lang->doc->methodOrder[60] = 'delete';
|
||||
$lang->doc->methodOrder[65] = 'deleteFile';
|
||||
$lang->doc->methodOrder[70] = 'collect';
|
||||
$lang->doc->methodOrder[75] = 'productSpace';
|
||||
$lang->doc->methodOrder[80] = 'projectSpace';
|
||||
$lang->doc->methodOrder[85] = 'teamSpace';
|
||||
$lang->doc->methodOrder[90] = 'showFiles';
|
||||
$lang->doc->methodOrder[95] = 'addCatalog';
|
||||
$lang->doc->methodOrder[100] = 'editCatalog';
|
||||
$lang->doc->methodOrder[105] = 'sortCatalog';
|
||||
$lang->doc->methodOrder[110] = 'deleteCatalog';
|
||||
$lang->doc->methodOrder[115] = 'displaySetting';
|
||||
$lang->doc->methodOrder[30] = 'myEdited';
|
||||
$lang->doc->methodOrder[35] = 'createLib';
|
||||
$lang->doc->methodOrder[40] = 'editLib';
|
||||
$lang->doc->methodOrder[45] = 'deleteLib';
|
||||
$lang->doc->methodOrder[50] = 'create';
|
||||
$lang->doc->methodOrder[55] = 'edit';
|
||||
$lang->doc->methodOrder[60] = 'view';
|
||||
$lang->doc->methodOrder[65] = 'delete';
|
||||
$lang->doc->methodOrder[70] = 'deleteFile';
|
||||
$lang->doc->methodOrder[75] = 'collect';
|
||||
$lang->doc->methodOrder[80] = 'productSpace';
|
||||
$lang->doc->methodOrder[85] = 'projectSpace';
|
||||
$lang->doc->methodOrder[90] = 'teamSpace';
|
||||
$lang->doc->methodOrder[95] = 'showFiles';
|
||||
$lang->doc->methodOrder[100] = 'addCatalog';
|
||||
$lang->doc->methodOrder[105] = 'editCatalog';
|
||||
$lang->doc->methodOrder[110] = 'sortCatalog';
|
||||
$lang->doc->methodOrder[115] = 'deleteCatalog';
|
||||
$lang->doc->methodOrder[120] = 'displaySetting';
|
||||
|
||||
/* Mail. */
|
||||
$lang->resource->mail = new stdclass();
|
||||
|
||||
@@ -90,8 +90,8 @@
|
||||
<td class="c-date"><?php echo formatTime($doc->editedDate, 'Y-m-d');?></td>
|
||||
<td class="c-actions">
|
||||
<?php if(common::canBeChanged('doc', $doc)):?>
|
||||
<?php common::printLink('doc', 'edit', "docID=$doc->id&comment=false&from={$lang->navGroup->doc}", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link' data-app='doc'", true, false)?>
|
||||
<?php common::printLink('doc', 'delete', "docID=$doc->id&confirm=no&from={$lang->navGroup->doc}", "<i class='icon icon-trash'></i>", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?>
|
||||
<?php common::printLink('doc', 'edit', "docID=$doc->id&comment=false&from={$lang->navGroup->doc}", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn' data-app='doc'", true, false)?>
|
||||
<?php common::printLink('doc', 'delete', "docID=$doc->id&confirm=no&from={$lang->navGroup->doc}", "<i class='icon icon-trash'></i>", 'hiddenwin', "title='{$lang->delete}' class='btn'")?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -27,6 +27,7 @@ $lang->product->closed = '已关闭';
|
||||
$lang->product->closedProduct = "已关闭的{$lang->productCommon}";
|
||||
$lang->product->updateOrder = '排序';
|
||||
$lang->product->all = "所有{$lang->productCommon}";
|
||||
$lang->product->involved = "我参与的{$lang->productCommon}";
|
||||
$lang->product->manageLine = "维护产品线";
|
||||
$lang->product->newLine = "新建产品线";
|
||||
$lang->product->export = '导出数据';
|
||||
|
||||
@@ -276,8 +276,10 @@ class productModel extends model
|
||||
*/
|
||||
public function getList($programID = 0, $status = 'all', $limit = 0, $line = 0, $shadow = 0)
|
||||
{
|
||||
$products = $this->dao->select('t1.*')->from(TABLE_PRODUCT)->alias('t1')
|
||||
$products = $this->dao->select('DISTINCT t1.*')->from(TABLE_PRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t3')->on('t3.product = t1.id')
|
||||
->leftJoin(TABLE_TEAM)->alias('t4')->on("t4.root = t3.project && t4.type='project'")
|
||||
->where('t1.deleted')->eq(0)
|
||||
->beginIF($shadow !== 'all')->andWhere('t1.shadow')->eq((int)$shadow)->fi()
|
||||
->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi()
|
||||
@@ -291,6 +293,7 @@ class productModel extends model
|
||||
->orWhere('t1.QD')->eq($this->app->user->account)
|
||||
->orWhere('t1.RD')->eq($this->app->user->account)
|
||||
->orWhere('t1.createdBy')->eq($this->app->user->account)
|
||||
->orWhere('t4.account')->eq($this->app->user->account)
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->beginIF($status == 'review')
|
||||
|
||||
Reference in New Issue
Block a user