This commit is contained in:
holan20180123
2020-12-28 16:33:48 +08:00
37 changed files with 139 additions and 121 deletions
+2
View File
@@ -801,6 +801,8 @@ $lang->icons['tasks'] = 'tasks';
$lang->icons['program'] = 'folder-open-o';
$lang->icons['project'] = 'project';
$lang->icons['execution'] = 'stack';
$lang->icons['stage'] = 'stage';
$lang->icons['sprint'] = 'sprint';
$lang->icons['doc'] = 'file-text';
$lang->icons['doclib'] = 'folder-close';
$lang->icons['story'] = 'lightbulb';
+2
View File
@@ -801,6 +801,8 @@ $lang->icons['tasks'] = 'tasks';
$lang->icons['program'] = 'folder-open-o';
$lang->icons['project'] = 'project';
$lang->icons['execution'] = 'stack';
$lang->icons['stage'] = 'stage';
$lang->icons['sprint'] = 'sprint';
$lang->icons['doc'] = 'file-text';
$lang->icons['doclib'] = 'folder-close';
$lang->icons['story'] = 'lightbulb';
+2
View File
@@ -801,6 +801,8 @@ $lang->icons['tasks'] = 'tasks';
$lang->icons['program'] = 'folder-open-o';
$lang->icons['project'] = 'project';
$lang->icons['execution'] = 'stack';
$lang->icons['stage'] = 'stage';
$lang->icons['sprint'] = 'sprint';
$lang->icons['doc'] = 'file-text';
$lang->icons['doclib'] = 'folder-close';
$lang->icons['story'] = 'lightbulb';
+2
View File
@@ -801,6 +801,8 @@ $lang->icons['tasks'] = 'tasks';
$lang->icons['program'] = 'folder-open-o';
$lang->icons['project'] = 'project';
$lang->icons['execution'] = 'stack';
$lang->icons['stage'] = 'stage';
$lang->icons['sprint'] = 'sprint';
$lang->icons['doc'] = 'file-text';
$lang->icons['doclib'] = 'folder-close';
$lang->icons['story'] = 'lightbulb';
+2
View File
@@ -802,6 +802,8 @@ $lang->icons['tasks'] = 'tasks';
$lang->icons['program'] = 'folder-open-o';
$lang->icons['project'] = 'project';
$lang->icons['execution'] = 'stack';
$lang->icons['stage'] = 'stage';
$lang->icons['sprint'] = 'sprint';
$lang->icons['doc'] = 'file-text';
$lang->icons['doclib'] = 'folder-close';
$lang->icons['story'] = 'lightbulb';
+2
View File
@@ -785,6 +785,8 @@ $lang->icons['tasks'] = 'tasks';
$lang->icons['program'] = 'folder-open-o';
$lang->icons['project'] = 'project';
$lang->icons['execution'] = 'stack';
$lang->icons['stage'] = 'stage';
$lang->icons['sprint'] = 'sprint';
$lang->icons['doc'] = 'file-text';
$lang->icons['doclib'] = 'folder-close';
$lang->icons['story'] = 'lightbulb';
+16 -38
View File
@@ -276,8 +276,7 @@ class commonModel extends model
$isGuest = $app->user->account == 'guest';
echo "<a class='dropdown-toggle' data-toggle='dropdown'>";
echo "<span class='user-name'>" . (empty($app->user->realname) ? $app->user->account : $app->user->realname) . '</span>';
echo "<span class='caret'></span>";
echo "<div class='avatar avatar bg-secondary avatar-circle'>" . strtoupper($app->user->account[0]) . "</div>\n";
echo '</a>';
echo "<ul class='dropdown-menu pull-right'>";
if(!$isGuest)
@@ -288,22 +287,22 @@ class commonModel extends model
echo '<div class="user-profile-name">' . (empty($app->user->realname) ? $app->user->account : $app->user->realname) . '</div>';
if(isset($lang->user->roleList[$app->user->role])) echo '<div class="user-profile-role">' . $lang->user->roleList[$app->user->role] . '</div>';
echo '</a></li><li class="divider"></li>';
echo '<li>' . html::a(helper::createLink('my', 'profile', '', '', true), $lang->profile, '', "class='iframe'") . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'changepassword', '', '', true), $lang->changePassword, '', "class='iframe' data-width='500'") . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'profile', '', '', true), "<i class='icon icon-account'></i> " . $lang->profile, '', "class='iframe'") . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'changepassword', '', '', true), "<i class='icon-cog-outline'></i> " . $lang->changePassword, '', "class='iframe' data-width='500'") . '</li>';
echo "<li class='divider'></li>";
}
echo "<li class='dropdown-submenu'>";
echo "<a href='javascript:;'>" . $lang->theme . "</a><ul class='dropdown-menu pull-left'>";
echo "<li class='dropdown-submenu theme'>";
echo "<a href='javascript:;'>" . "<i class='icon icon-theme'></i> " . $lang->theme . "</a><ul class='dropdown-menu pull-left'>";
foreach($app->lang->themes as $key => $value)
{
echo "<li " . ($app->cookie->theme == $key ? "class='selected'" : '') . "><a href='javascript:selectTheme(\"$key\");' data-value='" . $key . "'>" . $value . "</a></li>";
}
echo '</ul></li>';
echo "<li class='dropdown-submenu'>";
echo "<a href='javascript:;'>" . $lang->lang . "</a><ul class='dropdown-menu pull-left'>";
echo "<li class='dropdown-submenu lang'>";
echo "<a href='javascript:;'>" . "<i class='icon icon-lang'></i> " . $lang->lang . "</a><ul class='dropdown-menu pull-left'>";
foreach ($app->config->langs as $key => $value)
{
echo "<li " . ($app->cookie->lang == $key ? "class='selected'" : '') . "><a href='javascript:selectLang(\"$key\");'>" . $value . "</a></li>";
@@ -316,9 +315,9 @@ class commonModel extends model
// echo "<li class='custom-item'><a href='$customLink' data-toggle='modal' data-type='iframe' data-icon='cog' data-width='80%'>$lang->customMenu</a></li>";
//}
//echo '<li class="divider"></li>';
//commonModel::printAboutBar();
//echo '<li class="divider"></li>';
echo '<li class="divider"></li>';
commonModel::printAboutBar();
echo '<li class="divider"></li>';
echo '<li>';
if($isGuest)
{
@@ -326,7 +325,7 @@ class commonModel extends model
}
else
{
echo html::a(helper::createLink('user', 'logout'), $lang->logout);
echo html::a(helper::createLink('user', 'logout'), "<i class='icon icon-exit'></i> " . $lang->logout);
}
echo '</li></ul>';
}
@@ -343,16 +342,16 @@ class commonModel extends model
{
global $app, $config, $lang;
echo "<li class='dropdown-submenu'>";
echo "<a data-toggle='dropdown'>" . $lang->help . "</a>";
echo "<a data-toggle='dropdown'>" . "<i class='icon icon-help'></i> " . $lang->help . "</a>";
echo "<ul class='dropdown-menu pull-left'>";
if($config->global->flow == 'full' && !commonModel::isTutorialMode() and $app->user->account != 'guest') echo '<li>' . html::a(helper::createLink('tutorial', 'start'), $lang->noviceTutorial, '', "class='iframe' data-class-name='modal-inverse' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . "</li>";
//if($config->global->flow == 'full' && !commonModel::isTutorialMode() and $app->user->account != 'guest') echo '<li>' . html::a(helper::createLink('tutorial', 'start'), $lang->noviceTutorial, '', "class='iframe' data-class-name='modal-inverse' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . "</li>";
$manualUrl = (!empty($config->isINT)) ? $config->manualUrl['int'] : $config->manualUrl['home'];
echo '<li>' . html::a($manualUrl, $lang->manual, '_blank', "class='open-help-tab'") . '</li>';
echo '<li>' . html::a(helper::createLink('misc', 'changeLog'), $lang->changeLog, '', "class='iframe' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '</li>';
echo "</ul></li>\n";
echo '<li>' . html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about iframe' data-width='1050' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
echo '<li>' . html::a(helper::createLink('misc', 'about'), "<i class='icon icon-about'></i> " . $lang->aboutZenTao, '', "class='about iframe' data-width='1050' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
}
/**
@@ -599,28 +598,7 @@ class commonModel extends model
{
global $dbh, $lang, $app;
echo "<li class='divider'></li>";
echo '<li><span id="mainRecent"><i class="icon icon-recent"></i> ' . $lang->recent . '</span></li>';
$extraWhere = empty($app->user->admin) ? ' and id in (' . $app->user->view->sprints . ') and project in (' . $app->user->view->projects . ') ' : '';
if(empty($app->user->admin) && (empty($app->user->view->sprints) || empty($app->user->view->projects)))
{
echo "</ul>\n";
return false;
}
$executions = $dbh->query('select id,name,code,project from ' . TABLE_PROJECT . " where type in ('stage','sprint') $extraWhere and status != 'closed' and deleted = '0' order by id desc limit 6")->fetchAll();
if(!empty($executions))
{
foreach($executions as $index => $execution)
{
if($index == 5) break;
$execution->code = empty($execution->code) ? $execution->name : $execution->code;
echo '<li>' . html::a(helper::createLink('project', 'task', 'projectID=' . $execution->id, '', false, $execution->project), $execution->code, '', "style='padding: 2px 8px 2px 8px;' class='main-recent-text' title='$execution->name'") . '</li>';
}
if(count($executions) > 5) echo '<li onclick="getExecutions();" id="loadMore" class="text-center"><span>' . $lang->more . '</span></li>';
}
echo '<li><span id="mainRecent" onclick="getExecutions();"><i class="icon icon-recent"></i> ' . $lang->recent . '</span></li>';
}
/**
@@ -1735,7 +1713,7 @@ EOD;
if(!defined('IN_UPGRADE') and $inProject)
{
/* Check program priv. */
if(strpos(",{$this->app->user->view->projects},", ",{$this->session->PRJ},") === false and !$this->app->user->admin) $this->loadModel('program')->accessDenied();
if($this->session->PRJ and strpos(",{$this->app->user->view->projects},", ",{$this->session->PRJ},") === false and !$this->app->user->admin) $this->loadModel('program')->accessDenied();
$this->resetProgramPriv($module, $method);
if(!commonModel::hasPriv($module, $method)) $this->deny($module, $method, false);
}
-1
View File
@@ -12,7 +12,6 @@ $.initSidebar();
<div class="container">
<?php commonModel::printBreadMenu($this->moduleName, isset($position) ? $position : ''); ?>
<div id='poweredBy'>
<small class='muted'><?php echo $lang->designedByAIUX;?></small> &nbsp;
<a href='<?php echo $lang->website;?>' target='_blank'><i class='icon-zentao'></i> <?php echo $lang->zentaoPMS . $config->version;?></a> &nbsp;
<?php echo $lang->proVersion;?>
<?php if(isset($config->xxserver->installed) and $config->xuanxuan->turnon) commonModel::printClientLink();?>
-35
View File
@@ -22,9 +22,6 @@ include 'chosen.html.php';
<div id='toolbar'>
<div id="userMenu">
<?php common::printSearchBox();?>
<ul id="userNav" class="nav nav-default">
<li><?php common::printUserBar();?></li>
</ul>
</div>
</div>
</div>
@@ -49,38 +46,6 @@ include 'chosen.html.php';
<?php endif;?>
<script>
$("#menuToggle").bind('click', function()
{
$("#moreExecution").hide();
});
$("#executionList").mouseover(function()
{
$("#moreExecution").show();
});
$("#executionList").mouseout(function()
{
$("#moreExecution").hide();
});
function getExecutions()
{
$("#moreExecution").toggle();
if(!$("#moreExecution").is(':hidden'))
{
$.ajax(
{
url: createLink('project', 'ajaxGetRecentExecutions'),
dataType: 'html',
type: 'post',
success: function(data)
{
$("#executionList").html(data);
}
})
}
}
adjustMenuWidth();
</script>
<main id='main' <?php if(!empty($config->sso->redirect)) echo "class='ranzhiFixedTfootAction'";?> >
+37
View File
@@ -315,3 +315,40 @@
else openTab(defaultTabGroup);
});
}());
/* Click to show more. */
$("#menuToggle").bind('click', function()
{
$("#moreExecution").hide();
});
/* Mouse in to show more. */
$("#executionList").mouseover(function()
{
$("#moreExecution").show();
});
/* Mouse out hide more. */
$("#executionList").mouseout(function()
{
$("#moreExecution").hide();
});
/* Get recent executions. */
function getExecutions()
{
$("#moreExecution").toggle();
if(!$("#moreExecution").is(':hidden'))
{
$.ajax(
{
url: createLink('project', 'ajaxGetRecentExecutions'),
dataType: 'html',
type: 'post',
success: function(data)
{
$("#executionList").html(data);
}
})
}
}
+5 -4
View File
@@ -32,19 +32,20 @@ js::set('defaultOpen', $open);
<?php commonModel::getRecentExecutions();?>
</ul>
</nav>
<div id='menuFooter'>
<button type='button' id='menuToggle'><i class='icon icon-sm icon-menu-collapse'></i></button>
</div>
<div class="table-col col-right" id="moreExecution">
<div class="list-group" id="executionList"></div>
</div>
<div id='menuFooter'>
<ul id="userNav" class="nav">
<li class='dropdown dropdown-hover'><?php common::printUserBar();?></li>
</ul>
</div>
</div>
<div id='pages'>
</div>
<div id='pagesBar'>
<ul id='bars' class='nav nav-default'></ul>
<div id='poweredBy'>
<small class='muted'><?php echo $lang->designedByAIUX;?></small> &nbsp;
<a href='<?php echo $lang->website;?>' target='_blank'><i class='icon-zentao'></i> <?php echo $lang->zentaoPMS . $config->version;?></a> &nbsp;
<?php echo $lang->proVersion;?>
<?php if(isset($config->xxserver->installed) and $config->xuanxuan->turnon) commonModel::printClientLink();?>
+1
View File
@@ -334,6 +334,7 @@ class issueModel extends model
$issue['createdBy'] = $this->app->user->account;
$issue['createdDate'] = $now;
$issue['PRJ'] = $this->session->PRJ;
$issue['status'] = 'unconfirmed';
if($issue['assignedTo'])
{
+1 -1
View File
@@ -39,7 +39,7 @@
<th class='c-id w-50px'><?php echo $lang->idAB;?></th>
<th><?php echo $lang->program->PRJName;?></th>
<th class='w-100px'><?php echo $lang->program->PRJCode;?></th>
<th class='w-80px'><?php echo $lang->program->PRJStatus;?></th>
<th class='w-80px'> <?php echo $lang->program->PRJStatus;?></th>
<th class='w-100px'><?php echo $lang->program->begin;?></th>
<th class='w-100px'><?php echo $lang->program->end;?></th>
<th class='w-100px'><?php echo $lang->program->PRJBudget;?></th>
+3
View File
@@ -29,6 +29,8 @@ class personnel extends control
$this->setProgramNavMenu($programID);
$this->app->loadLang('user');
$program = $this->loadModel('program')->getPGMByID($programID);
/* Set the pager. */
$this->app->loadClass('pager', true);
$pager = pager::init($recTotal, $recPerPage, $pageID);
@@ -45,6 +47,7 @@ class personnel extends control
$this->view->deptID = $deptID;
$this->view->programID = $programID;
$this->view->acl = $program->acl;
$this->view->recTotal = $recTotal;
$this->view->recPerPage = $recPerPage;
$this->view->pageID = $pageID;
+2
View File
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = 'Whitelist';
$lang->personnel->addWhitelist = 'Add Whitelist';
$lang->personnel->unbindWhielist = 'Remove Whitelist';
$lang->personnel->confirmDelete = 'Confirm removal of the user from the whitelist?';
$lang->personnel->openedPGMTip = 'The program is public and can be accessed by users with Program privileges.';
+2
View File
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = 'Whitelist';
$lang->personnel->addWhitelist = 'Add Whitelist';
$lang->personnel->unbindWhielist = 'Remove Whitelist';
$lang->personnel->confirmDelete = 'Confirm removal of the user from the whitelist?';
$lang->personnel->openedPGMTip = 'The program is public and can be accessed by users with Program privileges.';
+2
View File
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = 'Whitelist';
$lang->personnel->addWhitelist = 'Add Whitelist';
$lang->personnel->unbindWhielist = 'Remove Whitelist';
$lang->personnel->confirmDelete = 'Confirm removal of the user from the whitelist?';
$lang->personnel->openedPGMTip = 'The program is public and can be accessed by users with Program privileges.';
+2
View File
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = 'Whitelist';
$lang->personnel->addWhitelist = 'Add Whitelist';
$lang->personnel->unbindWhielist = 'Remove Whitelist';
$lang->personnel->confirmDelete = 'Confirm removal of the user from the whitelist?';
$lang->personnel->openedPGMTip = 'The program is public and can be accessed by users with Program privileges.';
+2
View File
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = '白名单列表';
$lang->personnel->addWhitelist = '添加白名单';
$lang->personnel->unbindWhielist = '删除白名单';
$lang->personnel->confirmDelete = '确认将该用户移除白名单?';
$lang->personnel->openedPGMTip = '该项目集是公开状态,有项目集视图权限的人员即可访问。';
+2
View File
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = '白名單列表';
$lang->personnel->addWhitelist = '添加白名單';
$lang->personnel->unbindWhielist = '刪除白名單';
$lang->personnel->confirmDelete = '確認將該用戶移除白名單?';
$lang->personnel->openedPGMTip = '該項目集是公開狀態,有項目集視圖權限的人員即可訪問。';
+3 -16
View File
@@ -40,22 +40,8 @@ class personnelModel extends model
/* Determine who can be accessed based on access control. */
$program = $this->loadModel('program')->getPGMByID($programID);
if($program->acl == 'open')
{
/* The program is public, and users are judged to be accessible by permission groups. */
$accessibleGroupID = $this->loadModel('group')->getAccessProgramGroup();
$personnelList = $this->dao->select('t1.account,t3.role,t3.dept,t3.realname,t3.gender,t3.id')->from(TABLE_USERGROUP)->alias('t1')
->leftJoin(TABLE_GROUPPRIV)->alias('t2')->on('t1.group = t2.group')
->leftJoin(TABLE_USER)->alias('t3')->on('t1.account = t3.account')
->where('t1.group')->in($accessibleGroupID)
->andWhere('t2.module')->eq('program')
->andWhere('t2.method')->eq('PGMBrowse')
->beginIF($deptID > 0)->andWhere('t3.dept')->eq($deptID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi()
->page($pager)
->fetchAll('account');
}
else
$personnelList = array();
if($program->acl != 'open')
{
$personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account')
@@ -264,6 +250,7 @@ class personnelModel extends model
$acl->type = $type;
$acl->source = $source;
$this->dao->insert(TABLE_ACL)->data($acl)->autoCheck()->exec();
if(!dao::isError()) $this->loadModel('user')->updateUserView($acl->objectID, $acl->objectType, $acl->account);
$accounts[$account] = $account;
}
+5 -1
View File
@@ -12,6 +12,7 @@
<?php include '../../common/view/header.html.php';
js::set('deptID', $deptID);
?>
<?php if($acl != 'open'): ?>
<div id="mainMenu" class="clearfix">
<div id="sidebarHeader">
<div class="title">
@@ -23,13 +24,16 @@ js::set('deptID', $deptID);
<a id="bysearchTab" class="btn btn-link querybox-toggle"><i class="icon icon-search muted"></i><?php echo $lang->personnel->search;?></a>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
<?php if($acl != 'open'): ?>
<div id="sidebar" class="side-col">
<div class="sidebar-toggle"><i class="icon icon-angle-left"></i></div>
<div class="cell">
<?php echo $deptTree;?>
</div>
</div>
<?php endif;?>
<div class="main-col">
<?php if(!empty($personnelList)):?>
<div id="queryBox" class="cell" data-module="accessible"></div>
@@ -66,7 +70,7 @@ js::set('deptID', $deptID);
<?php else:?>
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->personnel->emptyTip;?></span>
<span class="text-muted"><?php echo $acl == 'open' ? $lang->personnel->openedPGMTip : $lang->personnel->emptyTip;?></span>
</p>
</div>
<?php endif;?>
+4 -2
View File
@@ -602,7 +602,7 @@ class productModel extends model
* Batch update products.
*
* @access public
* @return void
* @return array
*/
public function batchUpdate()
{
@@ -811,7 +811,7 @@ class productModel extends model
* @param int $productID
* @param int $branch
* @access public
* @return void
* @return array
*/
public function getProjectPairsByProduct($productID, $branch = 0)
{
@@ -1106,6 +1106,7 @@ class productModel extends model
* @param string $status
* @param int $line
* @param string $storyType requirement|story
* @param int $programID
* @access public
* @return array
*/
@@ -1221,6 +1222,7 @@ class productModel extends model
foreach($products as $product) $programKeys[] = $product->program;
$programs = $this->dao->select('id,name')->from(TABLE_PROGRAM)
->where('id')->in(array_unique($programKeys))
->andWhere('deleted')->eq('0')
->fetchPairs();
foreach($products as $product) $product->programName = isset($programs[$product->program]) ? $programs[$product->program] : '';
+2 -2
View File
@@ -22,8 +22,8 @@ $(function()
$('#createExecutionButton').on('click', function()
{
var PRJID = $('#project').val();
var planID = $('#planID').val();
var PRJID = $('#project').val();
var planID = $('#planID').val();
parent.location.href = createLink('project', 'create', 'productID=' + productID + '&projectID=&copyProjectID=&planID=' + planID, '', '', PRJID);
});
});
+1
View File
@@ -195,6 +195,7 @@ $lang->program->PGMExport = 'Export';
$lang->program->PGMStakeholder = 'Stakeholder';
$lang->program->createStakeholder = 'Create Stakeholder';
$lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->unlink = 'Unlink';
$lang->program->stakeholderType = 'Stakeholder type';
$lang->program->isStakeholderKey = 'Key stakeholder';
$lang->program->importStakeholder = 'Import program';
+1
View File
@@ -195,6 +195,7 @@ $lang->program->PGMExport = 'Export';
$lang->program->PGMStakeholder = 'Stakeholder';
$lang->program->createStakeholder = 'Create Stakeholder';
$lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->unlink = 'Unlink';
$lang->program->stakeholderType = 'Stakeholder type';
$lang->program->isStakeholderKey = 'Key stakeholder';
$lang->program->importStakeholder = 'Import program';
+1
View File
@@ -195,6 +195,7 @@ $lang->program->PGMExport = 'Export';
$lang->program->PGMStakeholder = 'Stakeholder';
$lang->program->createStakeholder = 'Create Stakeholder';
$lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->unlink = 'Unlink';
$lang->program->stakeholderType = 'Stakeholder type';
$lang->program->isStakeholderKey = 'Key stakeholder';
$lang->program->importStakeholder = 'Import program';
+1
View File
@@ -195,6 +195,7 @@ $lang->program->PGMExport = 'Export';
$lang->program->PGMStakeholder = 'Stakeholder';
$lang->program->createStakeholder = 'Create Stakeholder';
$lang->program->unlinkStakeholder = 'Unlink Stakeholder';
$lang->program->unlink = 'Unlink';
$lang->program->stakeholderType = 'Stakeholder type';
$lang->program->isStakeholderKey = 'Key stakeholder';
$lang->program->importStakeholder = 'Import program';
+1
View File
@@ -195,6 +195,7 @@ $lang->program->PGMExport = '导出';
$lang->program->PGMStakeholder = '干系人列表';
$lang->program->createStakeholder = '添加干系人';
$lang->program->unlinkStakeholder = '移除干系人';
$lang->program->unlink = '移除';
$lang->program->stakeholderType = '干系人类型';
$lang->program->isStakeholderKey = '关键干系人';
$lang->program->importStakeholder = '从父项目集导入';
+1
View File
@@ -195,6 +195,7 @@ $lang->program->PGMExport = '導出';
$lang->program->PGMStakeholder = '干係人列表';
$lang->program->createStakeholder = '添加干係人';
$lang->program->unlinkStakeholder = '移除干係人';
$lang->program->unlink = '移除';
$lang->program->stakeholderType = '干係人類型';
$lang->program->isStakeholderKey = '關鍵干係人';
$lang->program->importStakeholder = '從父項目集導入';
+2 -2
View File
@@ -71,7 +71,7 @@
</div>
<?php common::printIcon('program', 'PGMEdit', "programID=$program->id", '', 'list', 'edit');?>
<?php common::printIcon('program', 'PGMCreate', "programID=$program->id", '', 'list', 'treemap-alt', '', '', '', '', $this->lang->program->PGMChildren);?>
<?php if(common::hasPriv('program', 'PGMDelete')) echo html::a($this->createLink("program", "pgmdelete", "programID=$program->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn' title='{$this->lang->program->PGMDelete}'");?>
<?php if(common::hasPriv('program', 'PGMDelete')) echo html::a($this->createLink("program", "PGMDelete", "programID=$program->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn' title='{$this->lang->program->PGMDelete}'");?>
<?php else:?>
<?php if($program->status == 'wait' || $program->status == 'suspended') common::printIcon('program', 'PRJStart', "projectID=$program->id", $program, 'list', 'play', '', 'iframe', true);?>
@@ -93,7 +93,7 @@
<ul class='dropdown-menu pull-right text-center' role='menu'>
<?php common::printIcon('program', 'PRJManageProducts', "projectID=$program->id", $program, 'list', 'menu-project');?>
<?php common::printIcon('program', 'PRJWhitelist', "projectID=$program->id", $program, 'list', 'group');?>
<?php if(common::hasPriv('program','PRJDelete')) echo html::a($this->createLink("program", "prjdelete", "projectID=$program->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn' title='{$this->lang->program->PRJDelete}'");?>
<?php if(common::hasPriv('program','PRJDelete')) echo html::a($this->createLink("program", "PRJDelete", "projectID=$program->id"), "<i class='icon-trash'></i>", 'hiddenwin', "class='btn' title='{$this->lang->program->PRJDelete}'");?>
</ul>
</div>
<?php endif;?>
+1 -1
View File
@@ -72,7 +72,7 @@
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<div class="table-actions">
<?php $actionLink = $this->createLink('program', 'batchUnlinkStakeholders', "programID=$programID");?>
<?php echo html::commonButton($lang->delete, "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"");?>
<?php echo html::commonButton($lang->program->unlink, "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"");?>
</div>
<?php $pager->show('right', 'pagerjs');?>
</div>
+2 -1
View File
@@ -1206,7 +1206,8 @@ class project extends control
$this->view->copyProjectID = $copyProjectID;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products));
$this->view->users = $this->loadModel('user')->getPairs('nodeleted|noclosed');
$this->view->isStage = $project->model == 'waterfall' ? true : false;
$this->view->isStage = $project->model == 'waterfall' ? true : false;
$this->view->iconObject = $project->model == 'waterfall' ? 'stage' : 'sprint';
$this->display();
}
+1 -1
View File
@@ -3574,7 +3574,7 @@ class projectModel extends model
->andWhere('status')->ne('closed')
->andWhere('deleted')->eq('0')
->orderBy('id_desc')
->limit('5,' . $this->config->project->recentQuantity)
->limit($this->config->project->recentQuantity)
->fetchAll();
}
}
+1 -1
View File
@@ -209,7 +209,7 @@
<div class='col-md-4 col-sm-6'><a href='javascript:;' data-id='' class='cancel'><?php echo html::icon($lang->icons['cancel']) . ' ' . $lang->project->cancelCopy;?></a></div>
<?php endif;?>
<?php else: ?>
<div class='col-md-4 col-sm-6'><a href='javascript:;' data-id='<?php echo $id;?>' class='nobr <?php echo ($copyProjectID == $id) ? ' active' : '';?>'><?php echo html::icon($lang->icons['execution'], 'text-muted') . ' ' . $name;?></a></div>
<div class='col-md-4 col-sm-6'><a href='javascript:;' data-id='<?php echo $id;?>' class='nobr <?php echo ($copyProjectID == $id) ? ' active' : '';?>'><?php echo html::icon($lang->icons[$iconObject], 'text-muted') . ' ' . $name;?></a></div>
<?php endif; ?>
<?php endforeach;?>
</div>
+16 -14
View File
@@ -57,17 +57,15 @@ class stakeholder extends control
}
$actionID = $this->loadModel('action')->create('stakeholder', $stakeholderID, 'added');
$response['locate'] = $programID == 0 ? $this->createLink('stakeholder', 'browse', '') : $this->createLink('program', 'pgmStakeholder', "programID=$programID");
$this->send($response);
$moduleName = $programID ? 'program' : $this->moduleName;
$methodName = $programID ? 'pgmstakeholder' : 'browse';
$param = $programID ? "programID=$programID" : '';
$locate = $this->createLink($moduleName, $methodName, $param);
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
}
if($programID == 0)
{
$this->view->title = $this->lang->stakeholder->create;
$this->view->position[] = $this->lang->stakeholder->create;
$this->view->members = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ);
}
else
if($programID)
{
$this->loadModel('program');
$this->app->rawModule = 'program';
@@ -76,13 +74,17 @@ class stakeholder extends control
$this->lang->program->switcherMenu = $this->program->getPGMCommonAction() . $this->program->getPGMSwitcher($programID, true);
$this->program->setPGMViewMenu($programID);
$this->view->title = $this->lang->program->createStakeholder;
$this->view->position[] = $this->lang->program->createStakeholder;
$this->view->members = $this->program->getPRJTeamMemberPairs($programID);
$this->view->members = $this->program->getPRJTeamMemberPairs($programID);
}
else
{
$this->view->members = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ);
}
$this->view->companys = $this->loadModel('company')->getOutsideCompanies();
$this->view->programID = $programID;
$this->view->title = $this->lang->stakeholder->create;
$this->view->position[] = $this->lang->stakeholder->create;
$this->view->companys = $this->loadModel('company')->getOutsideCompanies();
$this->view->programID = $programID;
$this->display();
}
+9 -1
View File
@@ -51,7 +51,6 @@ a.showMoreImage:hover {opacity: 1;}
#mainMenu .pull-right > .btn-group > .btn-icon:hover {background: #fff;}
#mainRecent {padding: 8px; line-height: 20px; cursor: pointer; color: #fff; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select:none;}
#loadMore {cursor:pointer;}
#moreExecution {display:none; max-height: 420px; position: fixed; bottom: 0; left: 100px; z-index: 999; background: white; padding: 20px 10px; height: 420px; margin-bottom: 40px; border: 1px solid #efefef}
#moreExecution > .list-group {height: 380px; min-width: 150px; max-width:200px;}
.main-recent-text{overflow: hidden; white-space: nowrap;}
@@ -59,3 +58,12 @@ a.showMoreImage:hover {opacity: 1;}
.table-actions .btn{border: 1px solid #1183fb; color: #1183fb}
.table-actions .btn:hover{background: #b3d4fc}
#userNav{float: none; margin: 0;}
#userNav>li{text-align: center}
#userNav>li>a{padding: 6px 6px;color: #fff; opacity: .9;margin-left: 0px}
#userNav>li>a:hover{background: #0c64eb;}
#userNav>li>.dropdown-menu{left: 100%; top: -300px; width: 140px;text-align: left}
#userNav>li>.dropdown-menu .dropdown-menu{left: 100%; text-align: left}
#userNav>li .lang .dropdown-menu, #userNav>li .theme .dropdown-menu{top: -60px}
#userNav .dropdown-menu>li>a>.icon { position: initial; display: inline;}