Merge branch 'master' of https://git.zcorp.cc/zentaopms
This commit is contained in:
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
<a href='<?php echo $lang->website;?>' target='_blank'><i class='icon-zentao'></i> <?php echo $lang->zentaoPMS . $config->version;?></a>
|
||||
<?php echo $lang->proVersion;?>
|
||||
<?php if(isset($config->xxserver->installed) and $config->xuanxuan->turnon) commonModel::printClientLink();?>
|
||||
|
||||
@@ -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'";?> >
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
<a href='<?php echo $lang->website;?>' target='_blank'><i class='icon-zentao'></i> <?php echo $lang->zentaoPMS . $config->version;?></a>
|
||||
<?php echo $lang->proVersion;?>
|
||||
<?php if(isset($config->xxserver->installed) and $config->xuanxuan->turnon) commonModel::printClientLink();?>
|
||||
|
||||
@@ -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'])
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.';
|
||||
|
||||
@@ -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.';
|
||||
|
||||
@@ -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.';
|
||||
|
||||
@@ -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.';
|
||||
|
||||
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = '白名单列表';
|
||||
$lang->personnel->addWhitelist = '添加白名单';
|
||||
$lang->personnel->unbindWhielist = '删除白名单';
|
||||
$lang->personnel->confirmDelete = '确认将该用户移除白名单?';
|
||||
|
||||
$lang->personnel->openedPGMTip = '该项目集是公开状态,有项目集视图权限的人员即可访问。';
|
||||
|
||||
@@ -21,3 +21,5 @@ $lang->personnel->whitelist = '白名單列表';
|
||||
$lang->personnel->addWhitelist = '添加白名單';
|
||||
$lang->personnel->unbindWhielist = '刪除白名單';
|
||||
$lang->personnel->confirmDelete = '確認將該用戶移除白名單?';
|
||||
|
||||
$lang->personnel->openedPGMTip = '該項目集是公開狀態,有項目集視圖權限的人員即可訪問。';
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;?>
|
||||
|
||||
@@ -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] : '';
|
||||
|
||||
@@ -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=©ProjectID=&planID=' + planID, '', '', PRJID);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 = '从父项目集导入';
|
||||
|
||||
@@ -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 = '從父項目集導入';
|
||||
|
||||
@@ -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;?>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;}
|
||||
|
||||
Reference in New Issue
Block a user