Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3

This commit is contained in:
tianshujie98
2021-03-23 11:18:09 +08:00
48 changed files with 210 additions and 396 deletions
+1 -2
View File
@@ -27,8 +27,7 @@ class build extends control
if(!empty($_POST))
{
$executionID = $this->post->execution;
$buildID = $this->build->create($executionID);
$buildID = $this->build->create($executionID);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('action')->create('build', $buildID, 'opened');
+5 -2
View File
@@ -23,10 +23,13 @@ class caselibModel extends model
*/
public function setLibMenu($libraries, $libID, $moduleID = 0)
{
/* Set case lib menu. */
$this->loadModel('qa')->setMenu($this->loadModel('product')->getPairs(), $this->session->product);
$currentLibName = zget($libraries, $libID, '');
$isMobile = $this->app->viewType == 'mhtml';
$selectHtml = '';
$isMobile = $this->app->viewType == 'mhtml';
$selectHtml = '';
if(!empty($libraries))
{
if($isMobile)
-1
View File
@@ -64,7 +64,6 @@ $lang->required = 'Pflicht';
$lang->noData = 'Kein Datensatz';
$lang->fullscreen = 'Fullscreen';
$lang->retrack = 'Retrack';
$lang->recent = 'Kürzlich';
$lang->whitelist = 'Weiße Liste';
$lang->actions = 'Aktionen';
+1 -1
View File
@@ -69,7 +69,6 @@ $lang->required = 'Required';
$lang->noData = 'No data.';
$lang->fullscreen = 'Fullscreen';
$lang->retrack = 'Retrack';
$lang->recent = 'Recent';
$lang->whitelist = 'Access whitelist';
$lang->actions = 'Action';
@@ -152,6 +151,7 @@ $lang->custom->common = 'Custom';
$lang->extension->common = 'Extension';
$lang->company->common = 'Company';
$lang->dept->common = 'Dept';
$lang->program->list = 'Program List';
$lang->personnel->common = 'Member';
$lang->personnel->invest = 'Investment';
-1
View File
@@ -64,7 +64,6 @@ $lang->required = 'Obligatoire';
$lang->noData = 'No data.';
$lang->fullscreen = 'Plein Ecran';
$lang->retrack = 'Réduire';
$lang->recent = 'Récent';
$lang->whitelist = 'Liste blanche';
$lang->actions = 'Action';
+6 -6
View File
@@ -20,7 +20,7 @@ $lang->mainNav->report = "<i class='icon icon-statistic'></i> {$lang->report-
$lang->mainNav->system = "<i class='icon icon-group'></i> {$lang->system->common}|my|team|";
$lang->mainNav->admin = "<i class='icon icon-cog-outline'></i> {$lang->admin->common}|admin|index|";
$lang->dividerMenu = ',devops,report,';
$lang->dividerMenu = ',devops,system,';
$lang->mainNav->menuOrder[5] = 'my';
if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program';
$lang->mainNav->menuOrder[15] = 'product';
@@ -28,9 +28,9 @@ $lang->mainNav->menuOrder[20] = 'project';
$lang->mainNav->menuOrder[21] = 'execution';
$lang->mainNav->menuOrder[23] = 'qa';
$lang->mainNav->menuOrder[25] = 'devops';
$lang->mainNav->menuOrder[30] = 'system';
$lang->mainNav->menuOrder[35] = 'doc';
$lang->mainNav->menuOrder[40] = 'report';
$lang->mainNav->menuOrder[30] = 'doc';
$lang->mainNav->menuOrder[35] = 'report';
$lang->mainNav->menuOrder[40] = 'system';
$lang->mainNav->menuOrder[45] = 'admin';
/* My menu. */
@@ -85,7 +85,7 @@ $lang->my->dividerMenu = ',work,dynamic,';
/* Program menu. */
$lang->program->homeMenu = new stdclass();
$lang->program->homeMenu->browse = array('link' => "{$lang->program->common}|program|browse|");
$lang->program->homeMenu->browse = array('link' => "{$lang->program->list}|program|browse|");
$lang->program->menu = new stdclass();
$lang->program->menu->product = array('link' => "{$lang->product->common}|program|product|programID=%s", 'alias' => 'view');
@@ -404,7 +404,7 @@ $lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|
$lang->admin->menu->extension = array('link' => "{$lang->extension->common}|extension|browse", 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => "$lang->redev|dev|api", 'alias' => 'db', 'subModule' => 'dev,editor,entry');
$lang->admin->menu->message = array('link' => "{$lang->message->common}|message|index", 'subModule' => 'message,mail,webhook');
$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,search,admin', 'exclude' => 'admin-index');
$lang->admin->menu->system = array('link' => "{$lang->admin->system}|backup|index", 'subModule' => 'cron,backup,action,admin', 'exclude' => 'admin-index');
/* Admin menu order. */
$lang->admin->menuOrder[5] = 'index';
-1
View File
@@ -64,7 +64,6 @@ $lang->required = 'Bắt buộc';
$lang->noData = 'Không có dữ liệu.';
$lang->fullscreen = 'Fullscreen';
$lang->retrack = 'Retrack';
$lang->recent = 'Recente';
$lang->whitelist = 'Lista bianca';
$lang->actions = 'Hành động';
+1 -1
View File
@@ -69,7 +69,6 @@ $lang->required = '必填';
$lang->noData = '暂无';
$lang->fullscreen = '全屏';
$lang->retrack = '收起';
$lang->recent = '近期';
$lang->whitelist = '访问白名单';
$lang->actions = '操作';
@@ -152,6 +151,7 @@ $lang->custom->common = '自定义';
$lang->extension->common = '插件';
$lang->company->common = '公司';
$lang->dept->common = '部门';
$lang->program->list = '项目集列表';
$lang->personnel->common = '人员';
$lang->personnel->invest = '投入人员';
-1
View File
@@ -64,7 +64,6 @@ $lang->required = '必填';
$lang->noData = '暫無';
$lang->fullscreen = '全屏';
$lang->retrack = '收起';
$lang->recent = '近期';
$lang->whitelist = '訪問白名單';
$lang->actions = '操作';
-12
View File
@@ -615,18 +615,6 @@ class commonModel extends model
return $items;
}
/**
* Print recent menu.
*
* @access public
* @return void
*/
public static function printRecentMenu()
{
global $lang;
echo '<li><a id="recentMenu"><i class="icon icon-recent"></i><span class="text">' . $lang->recent . '</span></a></li>';
}
/**
* Print the main menu.
*
+7 -7
View File
@@ -122,7 +122,7 @@ class doc extends control
else
{
$menuType = (!$type && (in_array($browseType, array_keys($this->lang->doc->fastMenuList)) || $browseType == 'bysearch')) ? $browseType : $type;
$this->doc->setMenu($menuType, $libID, $moduleID, $productID, $executionID);
$this->doc->setMenu();
}
$this->session->set('docList', $this->app->getURI(true));
@@ -348,7 +348,7 @@ class doc extends control
}
else
{
$this->doc->setMenu($type, $libID, $moduleID, $lib->product, $lib->execution);
$this->doc->setMenu();
}
$this->view->title = $lib->name . $this->lang->colon . $this->lang->doc->create;
@@ -420,7 +420,7 @@ class doc extends control
}
else
{
$this->doc->setMenu($type, $libID, $doc->module, $lib->product, $lib->execution);
$this->doc->setMenu();
}
/* Set my menu. */
@@ -483,7 +483,7 @@ class doc extends control
else
{
/* Set menu. */
$this->doc->setMenu($type, $doc->lib, $doc->module, $lib->product, $lib->execution);
$this->doc->setMenu();
}
$this->view->title = "DOC #$doc->id $doc->title - " . $lib->name;
@@ -736,7 +736,7 @@ class doc extends control
$this->view->title = $libName;
$this->view->position[] = $libName;
$this->doc->setMenu($type, $libID = 0, $moduleID = 0, $productID = 0, $executionID = 0, $crumb);
$this->doc->setMenu();
/* Load pager. */
$this->app->loadClass('pager', $static = true);
@@ -820,7 +820,7 @@ class doc extends control
if(!$this->executionID->checkPriv($objectID)) $this->accessDenied();
}
$this->doc->setMenu($type, $libID = 0, $moduleID = 0, $productID, $executionID, $crumb);
$this->doc->setMenu();
}
/* Load pager. */
@@ -887,7 +887,7 @@ class doc extends control
$crumb .= html::a(inlink('objectLibs', "type=$type&objectID=$objectID"), $object->name);
$productID = $type == 'product' ? $objectID : 0;
$executionID = $type == 'execution' ? $objectID : 0;
$this->doc->setMenu($type, 0, 0, $productID, $executionID, $crumb);
$this->doc->setMenu();
}
elseif($from == 'execution')
+3 -109
View File
@@ -14,119 +14,14 @@
class docModel extends model
{
/**
* Set menus
* Set menu.
*
* @param array $libs
* @param int $libID
* @param string $moduleID
* @param int $productID
* @param int $executionID
* @param string $crumb
* @access public
* @return void
*/
public function setMenu($type = '', $libID = 0, $moduleID = 0, $productID = 0, $executionID = 0, $crumb = '')
public function setMenu()
{
$btnStyle = $this->lang->navGroup->doc == 'doc' ? 'header-btn' : 'angle-btn';
$isLimitWidth = $this->lang->navGroup->doc == 'doc' ? '' : 'btn-limit';
$selectHtml = "<div class='btn-group $btnStyle'>";
$selectHtml .= html::a(helper::createLink('doc', 'index'), $this->lang->doc->index, '', "class='btn'");
$selectHtml .= '</div>';
if($type)
{
$fastLib = in_array($type, array_keys($this->lang->doc->fastMenuList)) ? $this->lang->doc->fastMenuList[$type] : $this->lang->doc->fast;
if($libID)
{
$lib = $this->getLibById($libID);
if(!$this->checkPrivLib($lib))
{
echo(js::alert($this->lang->doc->accessDenied));
$loginLink = $this->config->requestType == 'GET' ? "?{$this->config->moduleVar}=user&{$this->config->methodVar}=login" : "user{$this->config->requestFix}login";
if(strpos($this->server->http_referer, $loginLink) !== false) die(js::locate(inlink('index')));
die(js::locate('back'));
}
$type = $lib->type;
}
if(isset($this->lang->doc->libTypeList[$type]))
{
$mainLib = $this->lang->doc->libTypeList[$type];
$selectHtml .= "<div class='btn-group $btnStyle'>";
$selectHtml .= "<div class='btn-group'>";
$selectHtml .= "<a data-toggle='dropdown' class='btn $isLimitWidth' title=$mainLib>" . $mainLib . " <span class='caret'></span></a>";
$selectHtml .= "<ul class='dropdown-menu'>";
foreach($this->lang->doc->libTypeList as $libType => $libName)
{
$selectHtml .= '<li>' . html::a(helper::createLink('doc', 'allLibs', "type=$libType"), "<i class='icon {$this->lang->doc->libIconList[$libType]}'></i> {$this->lang->doc->libTypeList[$libType]}") . '</li>';
}
$selectHtml .='</ul></div></div>';
}
$currentLib = 0;
if(in_array($type, array_keys($this->lang->doc->libTypeList)))
{
if($type == 'product') $currentLib = $productID;
if($type == 'execution') $currentLib = $executionID;
if($type != 'product' and $type != 'execution') $currentLib = $libID;
if($currentLib)
{
$allLibGroups = $this->getAllLibGroups($libID);
$currentGroups = $allLibGroups[$type];
/* Append closed execution. */
if(!isset($currentGroups[$currentLib]) and $type == 'execution')
{
$execution = $this->dao->select('id,name,status')->from(TABLE_EXECUTION)->where('id')->eq($currentLib)->fetch();
$currentGroups[$currentLib] = (array)$execution;
}
$currentLibName = is_array($currentGroups[$currentLib]) ? $currentGroups[$currentLib]['name'] : $currentGroups[$currentLib];
$selectHtml .= "<div class='btn-group $btnStyle'>";
$selectHtml .= "<div class='btn-group'>";
$selectHtml .= "<a data-toggle='dropdown' class='btn $isLimitWidth' title=$currentLibName>" . $currentLibName . ' <span class="caret"></span></a>';
$selectHtml .='<ul class="dropdown-menu">';
if($type == 'product' or $type == 'execution')
{
foreach($currentGroups as $groupID => $libGroups)
{
$link = helper::createLink('doc', 'objectLibs', "type=$type&objectID=$groupID");
$icon = $this->lang->doc->libIconList[$type];
$active = $currentLib == $groupID ? "class='active'" : '';
$selectHtml .= "<li $active>" . html::a($link, "<i class='icon {$icon}'></i> {$libGroups['name']}") . '</li>';
}
}
else
{
foreach($currentGroups as $groupID => $groupName)
{
$active = $currentLib == $groupID ? "class='active'" : '';
$selectHtml .= "<li $active>" . html::a(helper::createLink('doc', 'browse', "libID=$groupID"), "<i class='icon {$this->lang->doc->libIconList[$type]}'></i> {$groupName}") . '</li>';
}
}
$selectHtml .= '</ul></div></div>';
}
}
/* Determines whether the doc lib is editable. */
$docLib = new stdClass();
$docLib->product = $productID;
$docLib->execution = $executionID;
$canBeChanged = common::canBeChanged('doc', $docLib);
$lib = isset($lib) ? $lib : new stdClass();
$actions = $this->setFastMenu($fastLib);
$actions .= ($canBeChanged and common::hasPriv('doc', 'createLib', $lib)) ? html::a(helper::createLink('doc', 'createLib', "type={$type}&objectID={$currentLib}"), "<i class='icon icon-plus'></i> " . $this->lang->doc->createlib, '', "class='btn btn-secondary iframe'") : '';
$this->lang->TRActions = $actions;
}
//$selectHtml .= $crumb ? $crumb : $this->getCrumbs($libID, $moduleID);
$this->lang->modulePageNav = $selectHtml;
$this->lang->switcherMenu = "<div class='btn-group header-btn'>" . html::a(helper::createLink('doc', 'index'), "<i class='icon icon-doc'></i> {$this->lang->doc->common}", '', "class='btn'") . '</div>';
}
/**
@@ -1878,7 +1773,6 @@ class docModel extends model
$navCSS .= <<<EOF
#subHeader {margin-top: -50px; background: rgba(0,0,0,0);}
#pageActions .btn-link {color: #fff; font-size: 14px; line-height: 18px; border: #84a2e2 1px solid;}
.header-btn {padding: 0;}
EOF;
if($this->app->rawMethod != 'index') $navCSS .= '.header-btn+.header-btn::after, .header-btn+.header-btn::before {top: -50px;}';
}
+1 -36
View File
@@ -2566,41 +2566,6 @@ class execution extends control
$this->display();
}
/**
* Get recent executions.
*
* @access public
* @return void
*/
public function ajaxGetRecentExecutions()
{
$allExecutions = $this->execution->getRecentExecutions();
if(!empty($allExecutions))
{
foreach($allExecutions as $type => $executionList)
{
echo '<div class="heading">'. $this->lang->execution->$type . '</div>';
$color = $type == 'recent' ? 'text-brown' : '';
$executions = $allExecutions[$type];
$executionsName = array();
foreach($executions as $execution) $executionsName[] = $execution->name;
$executionsPinYin = common::convert2Pinyin($executionsName);
foreach($executions as $execution)
{
$link = helper::createLink('execution', 'task', 'executionID=' . $execution->id, '', false, $execution->project);
$execution->code = empty($execution->code) ? $execution->name : $execution->code;
$dataKey = 'date-key="' . zget($executionsPinYin, $execution->name, $execution->name) . '"';
$class = "class='search-list-item $color' title='$execution->name' $dataKey";
echo html::a($link, '<i class="icon icon-' . $this->lang->icons[$execution->type] . '"></i> ' . $execution->name, '', $class);
}
}
}
else
{
echo '<div class="table-empty-tip">' . $this->lang->noData . '</div>';
}
}
/**
* Update order.
*
@@ -2799,7 +2764,7 @@ class execution extends control
$this->fetch('file', 'export2' . $this->post->fileType, $_POST);
}
$this->view->fileName = (in_array($status, array('all', 'undone')) ? $this->lang->execution->$status : $this->lang->execution->statusList[$status]) . $this->lang->execution->common;
$this->view->fileName = (in_array($status, array('all', 'undone')) ? $this->lang->execution->$status : $this->lang->execution->statusList[$status]) . $this->lang->executionCommon;
$this->display();
}
+14 -10
View File
@@ -13,6 +13,7 @@
$lang->executionCommon = $lang->executionCommon;
$lang->execution->common = $lang->executionCommon;
$lang->execution->allExecutions = 'Alle';
$lang->execution->allExecutionAB = 'All Executions';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = 'Typ';
$lang->execution->name = 'Name';
@@ -176,27 +177,30 @@ $lang->execution->unlinkStoryTasks = 'Verknüpfung aufheben';
$lang->execution->linkedProducts = 'Verküpfte Produkte';
$lang->execution->unlinkedProducts = 'Produkt verknüpfung aufheben';
$lang->execution->view = "Übersicht";
$lang->execution->startAction = "Start {$lang->executionCommon}";
$lang->execution->activateAction = "Activate {$lang->executionCommon}";
$lang->execution->delayAction = "Delay {$lang->executionCommon}";
$lang->execution->suspendAction = "Suspend {$lang->executionCommon}";
$lang->execution->closeAction = "Close {$lang->executionCommon}";
$lang->execution->testtaskAction = "{$lang->executionCommon} Request";
$lang->execution->teamAction = "{$lang->executionCommon} Members";
$lang->execution->kanbanAction = "{$lang->executionCommon} Kanban";
$lang->execution->startAction = "Start Execution";
$lang->execution->activateAction = "Activate Execution";
$lang->execution->delayAction = "Delay Execution";
$lang->execution->suspendAction = "Suspend Execution";
$lang->execution->closeAction = "Close Execution";
$lang->execution->testtaskAction = "Execution Request";
$lang->execution->teamAction = "Execution Members";
$lang->execution->kanbanAction = "Execution Kanban";
$lang->execution->printKanbanAction = "Print Kanban";
$lang->execution->treeAction = "{$lang->executionCommon} Tree View";
$lang->execution->exportAction = "Export {$lang->executionCommon}";
$lang->execution->treeAction = "Execution Tree View";
$lang->execution->exportAction = "Export Execution";
$lang->execution->computeBurnAction = "Compute Burn";
$lang->execution->create = "Erstelle Projekt";
$lang->execution->createExec = "Create Execution";
$lang->execution->copyExec = "Copy Execution";
$lang->execution->copy = "Kopiere {$lang->executionCommon}";
$lang->execution->delete = "Lösche";
$lang->execution->deleteAB = "Lösche Execution";
$lang->execution->browse = "Durchsuchen";
$lang->execution->list = "{$lang->executionCommon} List";
$lang->execution->edit = "Bearbeiten";
$lang->execution->editAB = "Bearbeiten";
$lang->execution->batchEdit = "Mehere bearbeiten";
$lang->execution->batchEditAB = "Mehere bearbeiten";
$lang->execution->manageMembers = 'Teams verwalten';
$lang->execution->unlinkMember = 'Mitgliefer entfernen';
$lang->execution->unlinkStory = 'Story entfernen';
+20 -16
View File
@@ -13,10 +13,11 @@
$lang->executionCommon = $lang->executionCommon;
$lang->execution->common = 'Execution';
$lang->execution->allExecutions = 'All ' . $lang->executionCommon . 's';
$lang->execution->allExecutionAB = 'All Executions';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = 'Type';
$lang->execution->name = "{$lang->executionCommon} Name";
$lang->execution->code = 'Code';
$lang->execution->type = $lang->executionCommon . 'Type';
$lang->execution->name = $lang->executionCommon . 'Name';
$lang->execution->code = $lang->executionCommon . 'Code';
$lang->execution->project = 'Project';
$lang->execution->execName = 'Execution Name';
$lang->execution->execCode = 'Execution Code';
@@ -39,10 +40,10 @@ $lang->execution->workHour = ' Hours';
$lang->execution->workHourUnit = 'H';
$lang->execution->totalHours = 'Available Hours';
$lang->execution->totalDays = 'Available Days';
$lang->execution->status = 'Status';
$lang->execution->status = $lang->executionCommon . 'Status';
$lang->execution->execStatus = 'Status';
$lang->execution->subStatus = 'Sub Status';
$lang->execution->desc = 'Description';
$lang->execution->desc = $lang->executionCommon . 'Description';
$lang->execution->execDesc = 'Description';
$lang->execution->owner = 'Owner';
$lang->execution->PO = "{$lang->executionCommon} Owner";
@@ -175,28 +176,31 @@ $lang->execution->linkPlan = 'Linked Plan';
$lang->execution->unlinkStoryTasks = 'Unlink';
$lang->execution->linkedProducts = "Linked {$lang->productCommon}s";
$lang->execution->unlinkedProducts = "Unlinked {$lang->productCommon}s";
$lang->execution->view = "{$lang->executionCommon} Detail";
$lang->execution->startAction = "Start {$lang->executionCommon}";
$lang->execution->activateAction = "Activate {$lang->executionCommon}";
$lang->execution->delayAction = "Delay {$lang->executionCommon}";
$lang->execution->suspendAction = "Suspend {$lang->executionCommon}";
$lang->execution->closeAction = "Close {$lang->executionCommon}";
$lang->execution->testtaskAction = "{$lang->executionCommon} Request";
$lang->execution->teamAction = "{$lang->executionCommon} Members";
$lang->execution->kanbanAction = "{$lang->executionCommon} Kanban";
$lang->execution->view = "Execution Detail";
$lang->execution->startAction = "Start Execution";
$lang->execution->activateAction = "Activate Execution";
$lang->execution->delayAction = "Delay Execution";
$lang->execution->suspendAction = "Suspend Execution";
$lang->execution->closeAction = "Close Execution";
$lang->execution->testtaskAction = "Execution Request";
$lang->execution->teamAction = "Execution Members"
$lang->execution->kanbanAction = "Execution Kanban";
$lang->execution->printKanbanAction = "Print Kanban";
$lang->execution->treeAction = "{$lang->executionCommon} Tree View";
$lang->execution->exportAction = "Export {$lang->executionCommon}";
$lang->execution->treeAction = "Execution Tree View";
$lang->execution->exportAction = "Export Execution";
$lang->execution->computeBurnAction = "Update Burndown";
$lang->execution->create = "Create {$lang->executionCommon}";
$lang->execution->createExec = "Create Execution";
$lang->execution->copyExec = "Copy Execution";
$lang->execution->copy = "Copy {$lang->executionCommon}";
$lang->execution->delete = "Delete {$lang->executionCommon}";
$lang->execution->deleteAB = "Delete Execution";
$lang->execution->browse = "{$lang->executionCommon} List";
$lang->execution->list = "{$lang->executionCommon} List";
$lang->execution->edit = "Edit {$lang->executionCommon}";
$lang->execution->editAB = "Edit Execution";
$lang->execution->batchEdit = "Edit";
$lang->execution->batchEditAB = "Batch Edit";
$lang->execution->manageMembers = 'Manage Team';
$lang->execution->unlinkMember = 'Remove Member';
$lang->execution->unlinkStory = 'Unlink Story';
+20 -16
View File
@@ -13,10 +13,11 @@
$lang->executionCommon = $lang->executionCommon;
$lang->execution->common = $lang->executionCommon;
$lang->execution->allExecutions = 'Tous les ' . $lang->executionCommon . 's';
$lang->execution->allExecutionAB = 'All Executions';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = 'Type';
$lang->execution->name = "Nom du {$lang->executionCommon}";
$lang->execution->code = 'Code';
$lang->execution->type = $lang->executionCommon . 'Type';
$lang->execution->name = $lang->executionCommon . 'Name';
$lang->execution->code = $lang->executionCommon . 'Code';
$lang->execution->project = 'Project';
$lang->execution->execName = 'Execution Name';
$lang->execution->execCode = 'Execution Code';
@@ -39,10 +40,10 @@ $lang->execution->workHour = ' Heures';
$lang->execution->workHourUnit = 'H';
$lang->execution->totalHours = 'Budget (Heure)';
$lang->execution->totalDays = 'Budget (Jour)';
$lang->execution->status = 'Statut';
$lang->execution->status = $lang->executionCommon . 'Status';
$lang->execution->execStatus = 'Status';
$lang->execution->subStatus = 'Sub Status';
$lang->execution->desc = 'Description';
$lang->execution->desc = $lang->executionCommon . 'Description';
$lang->execution->execDesc = 'Description';
$lang->execution->owner = 'Propriétaire';
$lang->execution->PO = "Propriétaire {$lang->executionCommon}";
@@ -175,28 +176,31 @@ $lang->execution->linkPlan = 'Plans liés';
$lang->execution->unlinkStoryTasks = 'Dissocier';
$lang->execution->linkedProducts = "{$lang->productCommon}s liés à ce {$lang->executionCommon}";
$lang->execution->unlinkedProducts = "{$lang->productCommon}s dissociés de ce {$lang->executionCommon}";
$lang->execution->view = "Détail du {$lang->executionCommon}";
$lang->execution->startAction = "Commencer le {$lang->executionCommon}";
$lang->execution->activateAction = "Activer le {$lang->executionCommon}";
$lang->execution->delayAction = "Ajourner le {$lang->executionCommon}";
$lang->execution->suspendAction = "Suspendre le {$lang->executionCommon}";
$lang->execution->closeAction = "Fermer le {$lang->executionCommon}";
$lang->execution->testtaskAction = "Recettes du {$lang->executionCommon}";
$lang->execution->teamAction = "Membres du {$lang->executionCommon}";
$lang->execution->kanbanAction = "Kaban {$lang->executionCommon}";
$lang->execution->view = "Détail du Execution";
$lang->execution->startAction = "Commencer le "
$lang->execution->activateAction = "Activer le Execution";
$lang->execution->delayAction = "Ajourner le Execution";
$lang->execution->suspendAction = "Suspendre le Execution";
$lang->execution->closeAction = "Fermer le Execution";
$lang->execution->testtaskAction = "Recettes du Execution";
$lang->execution->teamAction = "Membres du Execution";
$lang->execution->kanbanAction = "Kaban Execution";
$lang->execution->printKanbanAction = "Imprimer le Kanban";
$lang->execution->treeAction = "Arborescence {$lang->executionCommon}";
$lang->execution->exportAction = "Exporter {$lang->executionCommon}";
$lang->execution->treeAction = "Arborescence Execution";
$lang->execution->exportAction = "Exporter Execution";
$lang->execution->computeBurnAction = "Calculer Atterrissage";
$lang->execution->create = "Créer {$lang->executionCommon}";
$lang->execution->createExec = "Create Execution";
$lang->execution->copyExec = "Copy Execution";
$lang->execution->copy = "Copier {$lang->executionCommon}";
$lang->execution->delete = "Supprimer {$lang->executionCommon}";
$lang->execution->deleteAB = "Delete Execution";
$lang->execution->browse = "Liste du {$lang->executionCommon}";
$lang->execution->list = "{$lang->executionCommon} List";
$lang->execution->edit = "Editer {$lang->executionCommon}";
$lang->execution->editAB = "Edit Execution";
$lang->execution->batchEdit = "Edition par lot";
$lang->execution->batchEditAB = "Batch Edit";
$lang->execution->manageMembers = 'Organiser Equipe';
$lang->execution->unlinkMember = 'Retirer le membre';
$lang->execution->unlinkStory = 'Dissocier Story';
+20 -16
View File
@@ -13,6 +13,7 @@
$lang->executionCommon = $lang->executionCommon;
$lang->execution->common = $lang->executionCommon;
$lang->execution->allExecutions = 'Tất cả ' . $lang->executionCommon;
$lang->execution->allExecutionAB = 'All Executions';
$lang->execution->id = 'ID '.$lang->executionCommon;
$lang->execution->type = 'Loại';
$lang->execution->name = "Tên {$lang->executionCommon}";
@@ -39,10 +40,10 @@ $lang->execution->workHour = 'giờ';
$lang->execution->workHourUnit = 'H';
$lang->execution->totalHours = 'Giờ khả dụng';
$lang->execution->totalDays = 'Ngày khả dụng';
$lang->execution->status = 'Tình trạng';
$lang->execution->status = $lang->executionCommon . 'Status';
$lang->execution->execStatus = 'Status';
$lang->execution->subStatus = 'Tình trạng con';
$lang->execution->desc = 'Mô tả';
$lang->execution->desc = $lang->executionCommon . 'Description';
$lang->execution->execDesc = 'Description';
$lang->execution->owner = 'Sở hữu';
$lang->execution->PO = "Sở hữu {$lang->executionCommon}";
@@ -156,10 +157,10 @@ $lang->execution->groupTask = 'Xem kiểu nhóm';
$lang->execution->story = 'Danh sách câu chuyện';
$lang->execution->qa = 'QA';
$lang->execution->bug = 'Danh sách Bug';
$lang->execution->testcase = 'Testcase List';
$lang->execution->dynamic = 'Lịch sử';
$lang->execution->latestDynamic = 'Lịch sử';
$lang->execution->build = 'Danh sách bản dựng';
$lang->execution->testtask = 'Kiểm thử';
$lang->execution->testtask = 'Request';
$lang->execution->burn = 'Burndown';
$lang->execution->computeBurn = 'Cập nhật';
@@ -175,28 +176,31 @@ $lang->execution->linkPlan = 'Kế hoạch liên kết';
$lang->execution->unlinkStoryTasks = 'Hủy liên kết';
$lang->execution->linkedProducts = "{$lang->productCommon} liên kết";
$lang->execution->unlinkedProducts = "{$lang->productCommon} đã hủy liên kết";
$lang->execution->view = "Chi tiết {$lang->executionCommon}";
$lang->execution->startAction = "Bắt đầu {$lang->executionCommon}";
$lang->execution->activateAction = "Kích hoạt {$lang->executionCommon}";
$lang->execution->delayAction = "Tạm ngưng {$lang->executionCommon}";
$lang->execution->suspendAction = "Đình chỉ {$lang->executionCommon}";
$lang->execution->closeAction = "Đóng {$lang->executionCommon}";
$lang->execution->testtaskAction = "Yêu cầu {$lang->executionCommon}";
$lang->execution->teamAction = "Thành viên {$lang->executionCommon}";
$lang->execution->kanbanAction = "Kanban {$lang->executionCommon}";
$lang->execution->view = "Chi tiết Execution";
$lang->execution->startAction = "Bắt đầu Execution";
$lang->execution->activateAction = "Kích hoạt Execution";
$lang->execution->delayAction = "Tạm ngưng Execution";
$lang->execution->suspendAction = "Đình chỉ Execution";
$lang->execution->closeAction = "Đóng Execution";
$lang->execution->testtaskAction = "Yêu cầu Execution";
$lang->execution->teamAction = "Thành viên Execution";
$lang->execution->kanbanAction = "Kanban Execution";
$lang->execution->printKanbanAction = "In Kanban";
$lang->execution->treeAction = "Xem cây {$lang->executionCommon}";
$lang->execution->exportAction = "Xuất {$lang->executionCommon}";
$lang->execution->treeAction = "Xem cây Execution";
$lang->execution->exportAction = "Xuất Execution";
$lang->execution->computeBurnAction = "Tính Burndown";
$lang->execution->create = "Tạo {$lang->executionCommon}";
$lang->execution->copy = "Sao chép {$lang->executionCommon}";
$lang->execution->delete = "Xóa {$lang->executionCommon}";
$lang->execution->copy = "Sao chép Execution";
$lang->execution->delete = "Xóa Execution";
$lang->execution->copy = "Copy {$lang->executionCommon}";
$lang->execution->delete = "Delete {$lang->executionCommon}";
$lang->execution->deleteAB = "Delete Execution";
$lang->execution->browse = "{$lang->executionCommon} List";
$lang->execution->list = "{$lang->executionCommon} List";
$lang->execution->edit = "Sửa {$lang->executionCommon}";
$lang->execution->editAB = "Edit Execution";
$lang->execution->batchEdit = "Sửa hàng loạt";
$lang->execution->batchEditAB = "Batch Edit";
$lang->execution->manageMembers = 'Quản lý đội nhóm';
$lang->execution->unlinkMember = 'Gỡ bỏ thành viên';
$lang->execution->unlinkStory = 'Hủy liên kết câu chuyện';
+17 -13
View File
@@ -13,6 +13,7 @@
$lang->executionCommon = $lang->executionCommon;
$lang->execution->common = '执行';
$lang->execution->allExecutions = '所有' . $lang->executionCommon;
$lang->execution->allExecutionAB = '所有执行';
$lang->execution->id = $lang->executionCommon . '编号';
$lang->execution->type = $lang->executionCommon . '类型';
$lang->execution->name = $lang->executionCommon . '名称';
@@ -150,7 +151,7 @@ $lang->execution->burnByList['estimate'] = "按计划工时查看";
$lang->execution->burnByList['storyPoint'] = '按故事点查看';
/* 方法列表。*/
$lang->execution->index = "{$lang->executionCommon}主页";
$lang->execution->index = "执行主页";
$lang->execution->task = '任务列表';
$lang->execution->groupTask = '分组浏览任务';
$lang->execution->story = "{$lang->SRCommon}列表";
@@ -175,28 +176,31 @@ $lang->execution->linkPlan = "关联计划";
$lang->execution->unlinkStoryTasks = "未关联{$lang->SRCommon}任务";
$lang->execution->linkedProducts = '已关联';
$lang->execution->unlinkedProducts = '未关联';
$lang->execution->view = "{$lang->executionCommon}概况";
$lang->execution->startAction = "开始{$lang->executionCommon}";
$lang->execution->activateAction = "激活{$lang->executionCommon}";
$lang->execution->delayAction = "延期{$lang->executionCommon}";
$lang->execution->suspendAction = "挂起{$lang->executionCommon}";
$lang->execution->closeAction = "关闭{$lang->executionCommon}";
$lang->execution->testtaskAction = "{$lang->executionCommon}测试单";
$lang->execution->teamAction = "{$lang->executionCommon}团队";
$lang->execution->kanbanAction = "{$lang->executionCommon}看板";
$lang->execution->view = "执行概况";
$lang->execution->startAction = "开始执行";
$lang->execution->activateAction = "激活执行";
$lang->execution->delayAction = "延期执行";
$lang->execution->suspendAction = "挂起执行";
$lang->execution->closeAction = "关闭执行";
$lang->execution->testtaskAction = "执行测试单";
$lang->execution->teamAction = "执行团队";
$lang->execution->kanbanAction = "执行看板";
$lang->execution->printKanbanAction = "打印看板";
$lang->execution->treeAction = "{$lang->executionCommon}树状图";
$lang->execution->exportAction = "导出{$lang->executionCommon}";
$lang->execution->treeAction = "执行树状图";
$lang->execution->exportAction = "导出执行";
$lang->execution->computeBurnAction = "计算燃尽图";
$lang->execution->create = "添加{$lang->executionCommon}";
$lang->execution->createExec = "添加执行";
$lang->execution->copyExec = "复制执行";
$lang->execution->copy = "复制{$lang->executionCommon}";
$lang->execution->delete = "删除{$lang->executionCommon}";
$lang->execution->browse = "浏览{$lang->executionCommon}";
$lang->execution->deleteAB = "删除执行";
$lang->execution->browse = "浏览执行";
$lang->execution->list = "{$lang->executionCommon}列表";
$lang->execution->edit = "编辑{$lang->executionCommon}";
$lang->execution->editAB = "编辑执行";
$lang->execution->batchEdit = "编辑";
$lang->execution->batchEditAB = "批量编辑";
$lang->execution->manageMembers = '团队管理';
$lang->execution->unlinkMember = '移除成员';
$lang->execution->unlinkStory = "移除{$lang->SRCommon}";
-52
View File
@@ -3483,58 +3483,6 @@ class executionModel extends model
if(!empty($products)) $this->user->updateUserView(array_keys($products), 'product', $users);
}
/**
* Get recent executions.
*
* @access public
* @return object
*/
public function getRecentExecutions()
{
$isView = (empty($this->app->user->view->sprints) || empty($this->app->user->view->projects)) ? false : true;
if(!$this->app->user->admin && $isView === false) return array();
$executions = $this->dao->select('t1.id,t1.project,t1.code,t1.name,t1.type')->from(TABLE_EXECUTION)->alias('t1')
->leftJoin(TABLE_TEAM)->alias('t2')->on('t1.id=t2.root')
->where('t1.type')->in('stage,sprint')
->andWhere('t2.account')->eq($this->app->user->account)
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi()
->beginIF(!$this->app->user->admin)->andWhere('t1.project')->in($this->app->user->view->projects)->fi()
->andWhere('t1.status')->ne('closed')
->andWhere('t1.deleted')->eq('0')
->orderBy('project_desc, id_desc')
->fetchAll();
/* Get the project or product to which the execution belongs. */
$projectIdList = array();
$stageIdList = array();
foreach($executions as $execution)
{
if($execution->type == 'stage') $stageIdList[$execution->id] = $execution->id;
$projectIdList[$execution->project] = $execution->project;
}
$projectPairs = $this->loadModel('project')->getPairsByIdList($projectIdList);
$productPairs = $this->getStageLinkProductPairs($stageIdList);
$recentExecutions = isset($this->config->execution->recentExecutions) ? explode(',', $this->config->execution->recentExecutions) : array();
$allExecution = array('recent' => array(), 'involved' => array());
foreach($executions as $execution)
{
if($execution->type == 'stage') $execution->name = zget($projectPairs, $execution->project) . '/' . zget($productPairs, $execution->id) . '/' . $execution->name;
if($execution->type == 'sprint') $execution->name = zget($projectPairs, $execution->project) . '/' . $execution->name;
if(in_array($execution->id, $recentExecutions))
{
$index = array_search($execution->id, $recentExecutions);
$allExecution['recent'][$index] = $execution;
continue;
}
$allExecution['involved'][] = $execution;
}
ksort($allExecution['recent']);
return $allExecution;
}
/**
* Get the products associated with the stage.
*
+19 -11
View File
@@ -209,6 +209,10 @@ if($config->systemMode == 'new')
$lang->resource->project->view = 'view';
$lang->resource->project->dynamic = 'dynamic';
$lang->resource->project->build = 'build';
$lang->resource->project->qa = 'qa';
$lang->resource->project->bug = 'bug';
$lang->resource->project->testcase = 'testcase';
$lang->resource->project->testtask = 'testtask';
$lang->project->methodOrder[0] = 'index';
$lang->project->methodOrder[5] = 'browse';
@@ -238,6 +242,10 @@ if($config->systemMode == 'new')
$lang->project->methodOrder[125] = 'view';
$lang->project->methodOrder[130] = 'dynamic';
$lang->project->methodOrder[135] = 'build';
$lang->project->methodOrder[140] = 'qa';
$lang->project->methodOrder[145] = 'bug';
$lang->project->methodOrder[150] = 'testcase';
$lang->project->methodOrder[155] = 'testtask';
/* Personnel . */
$lang->resource->personnel = new stdclass();
@@ -509,18 +517,18 @@ $lang->release->methodOrder[70] = 'changeStatus';
/* Execution. */
$lang->resource->execution = new stdclass();
$lang->resource->execution->index = 'index';
//$lang->resource->execution->index = 'index';
$lang->resource->execution->view = 'view';
$lang->resource->execution->browse = 'browse';
$lang->resource->execution->create = 'create';
$lang->resource->execution->edit = 'edit';
$lang->resource->execution->batchedit = 'batchEdit';
$lang->resource->execution->edit = 'editAB';
$lang->resource->execution->batchedit = 'batchEditAB';
$lang->resource->execution->start = 'startAction';
$lang->resource->execution->activate = 'activateAction';
$lang->resource->execution->putoff = 'delayAction';
$lang->resource->execution->suspend = 'suspendAction';
$lang->resource->execution->close = 'closeAction';
$lang->resource->execution->delete = 'delete';
$lang->resource->execution->delete = 'deleteAB';
$lang->resource->execution->task = 'task';
$lang->resource->execution->grouptask = 'groupTask';
$lang->resource->execution->importtask = 'importTask';
@@ -553,10 +561,10 @@ $lang->resource->execution->printKanban = 'printKanbanAction';
$lang->resource->execution->tree = 'treeAction';
$lang->resource->execution->treeTask = 'treeOnlyTask';
$lang->resource->execution->treeStory = 'treeOnlyStory';
$lang->resource->execution->all = 'allExecutions';
//$lang->resource->execution->all = 'allExecutionAB';
$lang->resource->execution->kanbanHideCols = 'kanbanHideCols';
$lang->resource->execution->kanbanColsColor = 'kanbanColsColor';
$lang->resource->execution->export = 'exportAction';
//$lang->resource->execution->export = 'exportAction';
$lang->resource->execution->storyKanban = 'storyKanban';
$lang->resource->execution->storySort = 'storySort';
$lang->resource->execution->whitelist = 'whitelist';
@@ -564,7 +572,7 @@ $lang->resource->execution->addWhitelist = 'addWhitelist';
$lang->resource->execution->unbindWhitelist = 'unbindWhitelist';
//if($config->systemMode == 'classic') $lang->resource->project->list = 'list';
$lang->execution->methodOrder[0] = 'index';
//$lang->execution->methodOrder[0] = 'index';
//if($config->systemMode == 'classic') $lang->project->methodOrder[1] = 'list';
$lang->execution->methodOrder[5] = 'view';
$lang->execution->methodOrder[10] = 'browse';
@@ -610,8 +618,8 @@ $lang->execution->methodOrder[205] = 'kanbanColsColor';
$lang->execution->methodOrder[210] = 'tree';
$lang->execution->methodOrder[215] = 'treeTask';
$lang->execution->methodOrder[220] = 'treeStory';
$lang->execution->methodOrder[225] = 'all';
$lang->execution->methodOrder[230] = 'export';
//$lang->execution->methodOrder[225] = 'all';
//$lang->execution->methodOrder[230] = 'export';
$lang->execution->methodOrder[235] = 'storyKanban';
$lang->execution->methodOrder[240] = 'storySort';
$lang->execution->methodOrder[245] = 'whitelist';
@@ -1213,14 +1221,14 @@ $lang->tree->methodOrder[30] = 'delete';
/* Report. */
$lang->resource->report = new stdclass();
$lang->resource->report->index = 'index';
$lang->resource->report->executionDeviation = 'executionDeviation';
$lang->resource->report->projectDeviation = 'projectDeviation';
$lang->resource->report->productSummary = 'productSummary';
$lang->resource->report->bugCreate = 'bugCreate';
$lang->resource->report->bugAssign = 'bugAssign';
$lang->resource->report->workload = 'workload';
$lang->report->methodOrder[0] = 'index';
$lang->report->methodOrder[5] = 'executionDeviation';
$lang->report->methodOrder[5] = 'projectDeviation';
$lang->report->methodOrder[10] = 'productSummary';
$lang->report->methodOrder[15] = 'bugCreate';
$lang->report->methodOrder[20] = 'workload';
+13 -20
View File
@@ -43,11 +43,12 @@ body.menu-hide {padding-left: 0;}
#appsBar {position: fixed; left: 96px; bottom: 0; right: 0; height: 40px; z-index: 1012; background: #fff; border-top: 1px solid #eff1f7;}
.menu-hide #appsBar {left: 40px;}
#bars {position: absolute; left: 0; top: 0; bottom: 0; padding: 0 5px;}
#bars > li {padding: 8px 5px;}
#bars > li > a {height: 24px; color: #fff; background: #3c4353; padding: 2px 8px; line-height: 20px; border-radius: 2px;}
#bars > li > a:hover, #bars > li > a:active, #bars > li > a:focus {background: #3c495c;}
#bars > li.active > a, #bars > li.active > a:active, #bars > li.active > a:focus {background: #0c64eb;}
#bars > li.active:after {content: ' '; display: block; position: absolute; background: #a0cafa; height: 3px; left: 5px; right: 5px; bottom: 0; border-radius: 2px;}
#bars > li {padding: 8px 2px;}
#bars > li > a {height: 24px; color: #000; padding: 2px 8px; line-height: 20px; border-radius: 2px;}
#bars > li > a:hover, #bars > li > a:active, #bars > li > a:focus {background: #16a8f8;}
#bars > li.active > a, #bars > li.active > a:active, #bars > li.active > a:focus {font-weight: 600; border-bottom: 2px solid #16a8f8;}
#bars > li.active:after {content: ' '; display: block; position: absolute; height: 3px; left: 5px; right: 5px; bottom: 0; border-radius: 2px;}
#bars > li.divider{margin-right: 5px; margin-top: 10px; height: 20px; border-right: 1px solid #d9d9d9;}
#userNav {float: none; margin: 0;}
#userNav>li {text-align: center;}
@@ -62,16 +63,12 @@ body.menu-hide {padding-left: 0;}
#poweredBy {width: 40%; position: absolute; top: 4px; right: 0; padding: 0;}
#globalSearchDiv {width: 52%; float: right; margin-right: 4px;}
@media screen and (max-height: 768px)
{
#globalSearchDiv {width: 62%;}
}
#globalSearchDiv .input-group {width: 82%; float: right; margin-top: 2px;}
@media screen and (max-height: 768px)
{
#globalSearchDiv .input-group {width: 100%;}
}
#globalSearchInput {height: 28px; padding-left: 10px;}
#globalSearchDiv .input-group {width: 194px; float: right; margin-top: 2px;}
#searchbox .dropdown-menu.show-quick-go.with-active {min-width: 270px;}
#searchbox .dropdown-menu.show-quick-go > li {padding: 0 5px;}
#searchbox .dropdown-menu {min-width: 150px;}
#globalSearchInput {width: 150px; height: 28px; padding-left: 10px; border-right: 0px;}
#globalSearchButton {height: 28px;}
#globalBarLogo {width: 100%; float: right;}
@@ -83,7 +80,7 @@ body.menu-hide {padding-left: 0;}
#searchbox a:hover {color: white;}
#searchbox {width: 100%;}
#searchbox .dropdown-menu {margin-top: 0px; left: 1px; position: absolute; top: -50px;}
#searchbox .dropdown-menu > li > a {padding: 5px 8px;}
#searchbox .dropdown-menu > li > a {padding: 5px 0px 5px 2px;}
#searchbox .dropdown-menu > li {display: none;}
#searchbox .dropdown-menu > li.search-type-all {width: 100%; display: block;}
#searchbox .dropdown-menu > li:hover {position: relative;}
@@ -106,8 +103,4 @@ body.menu-hide {padding-left: 0;}
@media screen and (max-height: 768px)
{
#upgradeContent{width: 85%;}
.version-name {width: 25%; text-overflow: ellipsis; white-space: nowrap;}
.version-date {width: 20%; color: #8a8a8a;}
.version-explain {width: 25%; color: #8a8a8a; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.version-actions {width: 30%;}
}
+5 -2
View File
@@ -114,11 +114,11 @@
{
if(methodLowerCase === 'create' && (link.params.programID || link.params.$1)) return 'program';
}
if(moduleName === 'user')
if(moduleName === 'user')
{
if(['todo', 'task', 'story', 'bug', 'testtask', 'testcase', 'execution', 'dynamic', 'profile', 'view'].includes(methodLowerCase)) return 'system';
}
if(moduleName === 'my')
if(moduleName === 'my')
{
if(['team'].includes(methodLowerCase)) return 'system';
}
@@ -219,6 +219,9 @@
.attr('data-app', appCode)
.attr('class', 'show-in-app')
.html(app.text);
var barCount = $('#bars li').length;
if(barCount) $bar = $('<li class="divider"></li>').appendTo($bars);
$bar = $('<li></li>').attr('data-app', appCode)
.attr('id', 'appBar-' + appCode)
.append($link)
-3
View File
@@ -36,9 +36,6 @@ js::set('defaultOpen', $open);
<nav id='menuNav'>
<ul class='nav nav-default' id='menuMainNav'>
</ul>
<ul class='nav nav-default'>
<?php commonModel::printRecentMenu();?>
</ul>
</nav>
<div class="table-col col-right">
<div id="moreExecution" class="more-execution-show" data-ride="searchList">
+2 -2
View File
@@ -30,8 +30,8 @@ $lang->project->moduleSetting = 'List Settings';
$lang->project->moduleOpen = 'Program Name';
$lang->project->dynamic = 'Dynamic';
$lang->project->qa = 'QA';
$lang->project->bug = 'Bug';
$lang->project->testcase = 'Case';
$lang->project->bug = 'Bug List';
$lang->project->testcase = 'Case List';
$lang->project->testtask = 'Test Task';
$lang->project->build = 'Build';
$lang->project->updateOrder = 'Order';
+2 -2
View File
@@ -30,8 +30,8 @@ $lang->project->moduleSetting = 'List Settings';
$lang->project->moduleOpen = 'Program Name';
$lang->project->dynamic = 'Dynamic';
$lang->project->qa = 'QA';
$lang->project->bug = 'Bug';
$lang->project->testcase = 'Case';
$lang->project->bug = 'Bug List';
$lang->project->testcase = 'Case List';
$lang->project->testtask = 'Test Task';
$lang->project->build = 'Build';
$lang->project->updateOrder = 'Order';
+2 -2
View File
@@ -30,8 +30,8 @@ $lang->project->moduleSetting = 'List Settings';
$lang->project->moduleOpen = 'Program Name';
$lang->project->dynamic = 'Dynamic';
$lang->project->qa = 'QA';
$lang->project->bug = 'Bug';
$lang->project->testcase = 'Case';
$lang->project->bug = 'Bug List';
$lang->project->testcase = 'Case List';
$lang->project->testtask = 'Test Task';
$lang->project->build = 'Build';
$lang->project->updateOrder = 'Order';
+2 -2
View File
@@ -30,8 +30,8 @@ $lang->project->moduleSetting = 'List Settings';
$lang->project->moduleOpen = 'Program Name';
$lang->project->dynamic = 'Dynamic';
$lang->project->qa = 'QA';
$lang->project->bug = 'Bug';
$lang->project->testcase = 'Case';
$lang->project->bug = 'Bug List';
$lang->project->testcase = 'Case List';
$lang->project->testtask = 'Test Task';
$lang->project->build = 'Build';
$lang->project->updateOrder = 'Order';
+2 -2
View File
@@ -30,8 +30,8 @@ $lang->project->moduleSetting = '列表设置';
$lang->project->moduleOpen = '显示项目集名';
$lang->project->dynamic = '动态';
$lang->project->qa = '测试仪表盘';
$lang->project->bug = 'Bug';
$lang->project->testcase = '用例';
$lang->project->bug = 'Bug列表';
$lang->project->testcase = '用例列表';
$lang->project->testtask = '测试单';
$lang->project->build = '版本';
$lang->project->updateOrder = '排序';
+2 -1
View File
@@ -1,2 +1,3 @@
<?php
$config->qa->menuList = array('caselib', 'testreport', 'testsuite', 'testtask', 'testcase', 'bug', 'qa', 'automation');
$config->qa->menuList = array('caselib', 'testreport', 'testsuite', 'testtask', 'testcase', 'bug', 'qa', 'automation');
$config->qa->noDropMenuModule = array('qa', 'caselib', 'automation');
-1
View File
@@ -9,5 +9,4 @@
* @version $Id: en.php 4129 2013-01-18 01:58:14Z wwccss $
* @link http://www.zentao.net
*/
$lang->qa->common = 'QS';
$lang->qa->index = 'QS Home';
-1
View File
@@ -9,5 +9,4 @@
* @version $Id: en.php 4129 2013-01-18 01:58:14Z wwccss $
* @link http://www.zentao.net
*/
$lang->qa->common = 'QA';
$lang->qa->index = 'QA Home';
-1
View File
@@ -9,5 +9,4 @@
* @version $Id: en.php 4129 2013-01-18 01:58:14Z wwccss $
* @link https://www.zentao.pm
*/
$lang->qa->common = 'QA';
$lang->qa->index = 'Accueil Qualité';
-1
View File
@@ -9,5 +9,4 @@
* @version $Id: vi.php 4129 2013-01-18 01:58:14Z wwccss $
* @link http://www.zentao.net
*/
$lang->qa->common = 'QA';
$lang->qa->index = 'Trang QA';
-1
View File
@@ -9,5 +9,4 @@
* @version $Id: zh-cn.php 4129 2013-01-18 01:58:14Z wwccss $
* @link http://www.zentao.net
*/
$lang->qa->common = '测试视图';
$lang->qa->index = '测试主页';
+2 -1
View File
@@ -38,7 +38,8 @@ class qaModel extends model
$productIndex .= $selectHtml;
}
if($this->app->rawModule != 'qa') $this->lang->switcherMenu = $this->product->getSwitcher($productID, $extra, $branch);
$this->lang->switcherMenu = "<div class='btn-group header-btn'>" . html::a(helper::createLink('qa', 'index'), "<i class='icon icon-test'></i> {$this->lang->qa->common}", '', "class='btn'") . '</div>';
if(!in_array($this->app->rawModule, $this->config->qa->noDropMenuModule)) $this->lang->switcherMenu .= $this->product->getSwitcher($productID, $extra, $branch);
common::setMenuVars('qa', $productID);
}
+3
View File
@@ -29,6 +29,9 @@ class report extends control
{
parent::__construct();
/* Set report menu. */
$this->report->setMenu();
/* Set report menu group. */
$this->projectID = isset($_GET['project']) ? $_GET['project'] : 0;
if(!$this->projectID) $this->lang->navGroup->report = 'report';
+9 -10
View File
@@ -9,16 +9,15 @@
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
* @link http://www.zentao.net
*/
$lang->report->common = 'Berichte';
$lang->report->index = 'Home';
$lang->report->list = 'Liste';
$lang->report->item = 'Eintrag';
$lang->report->value = 'Wert';
$lang->report->percent = '%';
$lang->report->undefined = 'Undefiniert';
$lang->report->query = 'Abfrage';
$lang->report->annual = 'Annual Summary';
$lang->report->project = 'Project';
$lang->report->index = 'Home';
$lang->report->list = 'Liste';
$lang->report->item = 'Eintrag';
$lang->report->value = 'Wert';
$lang->report->percent = '%';
$lang->report->undefined = 'Undefiniert';
$lang->report->query = 'Abfrage';
$lang->report->annual = 'Annual Summary';
$lang->report->project = 'Project';
$lang->report->colors[] = 'AFD8F8';
$lang->report->colors[] = 'F6BD0F';
+9 -10
View File
@@ -9,16 +9,15 @@
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
* @link http://www.zentao.net
*/
$lang->report->common = 'Report';
$lang->report->index = 'Report Home';
$lang->report->list = 'Report';
$lang->report->item = 'Item';
$lang->report->value = 'Value';
$lang->report->percent = '%';
$lang->report->undefined = 'Undefined';
$lang->report->query = 'Query';
$lang->report->annual = 'Annual Summary';
$lang->report->project = 'Project';
$lang->report->index = 'Report Home';
$lang->report->list = 'Report';
$lang->report->item = 'Item';
$lang->report->value = 'Value';
$lang->report->percent = '%';
$lang->report->undefined = 'Undefined';
$lang->report->query = 'Query';
$lang->report->annual = 'Annual Summary';
$lang->report->project = 'Project';
$lang->report->colors[] = 'AFD8F8';
$lang->report->colors[] = 'F6BD0F';
+9 -10
View File
@@ -9,16 +9,15 @@
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
* @link https://www.zentao.pm
*/
$lang->report->common = 'Rapports';
$lang->report->index = 'Accueil Rapports';
$lang->report->list = 'Rapports';
$lang->report->item = 'Item';
$lang->report->value = 'Valeur';
$lang->report->percent = '%';
$lang->report->undefined = 'N/D';
$lang->report->query = 'Requête';
$lang->report->annual = 'Résumé Annuel';
$lang->report->project = 'Project';
$lang->report->index = 'Accueil Rapports';
$lang->report->list = 'Rapports';
$lang->report->item = 'Item';
$lang->report->value = 'Valeur';
$lang->report->percent = '%';
$lang->report->undefined = 'N/D';
$lang->report->query = 'Requête';
$lang->report->annual = 'Résumé Annuel';
$lang->report->project = 'Project';
$lang->report->colors[] = 'AFD8F8';
$lang->report->colors[] = 'F6BD0F';
-1
View File
@@ -9,7 +9,6 @@
* @version $Id: vi.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
* @link http://www.zentao.net
*/
$lang->report->common = 'Báo cáo';
$lang->report->index = 'Trang báo cáo';
$lang->report->list = 'Báo cáo';
$lang->report->item = 'Hạng mục';
-1
View File
@@ -9,7 +9,6 @@
* @version $Id: zh-cn.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
* @link http://www.zentao.net
*/
$lang->report->common = '统计视图';
$lang->report->index = '统计首页';
$lang->report->list = '统计报表';
$lang->report->item = '条目';
+4
View File
@@ -13,6 +13,10 @@
<?php
class reportModel extends model
{
public function setMenu()
{
$this->lang->switcherMenu = "<div class='btn-group header-btn'>" . html::a(helper::createLink('report', 'productsummary'), "<i class='icon icon-statistic'></i> {$this->lang->report->common}", '', "class='btn'") . '</div>';
}
/**
* Compute percent of every item.
*
+5 -4
View File
@@ -93,10 +93,10 @@ li.tree-item-story > .tree-actions .tree-action[data-type=delete] {display: none
<?php if($viewType != 'line' && $viewType != 'trainskill' && $viewType != 'trainpost'):?>
<td class="text-middle text-right with-padding">
<?php
echo "<span>" . html::a($this->createLink('tree', 'browse', "root=$rootID&viewType=$viewType&currentModuleID=0&branch=0&from=$from"), empty($root->name) ? '' : $root->name) . "<i class='icon icon-angle-right muted'></i></span>";
echo "<span>" . html::a($this->createLink('tree', 'browse', "root=$rootID&viewType=$viewType&currentModuleID=0&branch=0&from=$from", '', ''), empty($root->name) ? '' : $root->name, '', "data-app='{$this->app->openApp}'") . "<i class='icon icon-angle-right muted'></i></span>";
foreach($parentModules as $module)
{
echo "<span>" . html::a($this->createLink('tree', 'browse', "root=$rootID&viewType=$viewType&currentModuleID=$module->id&branch=0&from=$from"), $module->name) . " <i class='icon icon-angle-right muted'></i></span>";
echo "<span>" . html::a($this->createLink('tree', 'browse', "root=$rootID&viewType=$viewType&currentModuleID=$module->id&branch=0&from=$from"), $module->name, '', "data-app='{$this->app->openApp}'") . " <i class='icon icon-angle-right muted'></i></span>";
}
?>
</td>
@@ -174,7 +174,7 @@ li.tree-item-story > .tree-actions .tree-action[data-type=delete] {display: none
</div>
</div>
</div>
<?php js::set('openApp', $this->app->openApp);?>
<script>
$(function()
{
@@ -194,7 +194,7 @@ $(function()
},
itemCreator: function($li, item)
{
var link = (item.id !== undefined && item.type != 'line') ? ('<a href="' + createLink('tree', 'browse', 'rootID=<?php echo $rootID ?>&viewType=<?php echo $viewType ?>&moduleID={0}&branch={1}&from=<?php echo $from;?>'.format(item.id, item.branch)) + '">' + item.name + '</a>') : ('<span class="tree-toggle">' + item.name + '</span>');
var link = (item.id !== undefined && item.type != 'line') ? ('<a href="' + createLink('tree', 'browse', 'rootID=<?php echo $rootID ?>&viewType=<?php echo $viewType ?>&moduleID={0}&branch={1}&from=<?php echo $from;?>'.format(item.id, item.branch)) + '" data-app="' + openApp + '">' + item.name + '</a>') : ('<span class="tree-toggle">' + item.name + '</span>');
var $toggle = $('<span class="module-name" data-id="' + item.id + '">' + link + '</span>');
if(item.type === 'bug') $toggle.append('&nbsp; <span class="text-muted">[B]</span>');
if(item.type === 'case') $toggle.append('&nbsp; <span class="text-muted">[C]</span>');
@@ -290,6 +290,7 @@ $(function()
$('#subNavbar > ul > li > a[href*=tree][href*=browse]').not('[href*=<?php echo $viewType;?>]').parent().removeClass('active');
if(window.config.viewType == 'line') $('#modulemenu > .nav > li > a[href*=product][href*=all]').parent('li[data-id=all]').addClass('active');
if(viewType == 'case' || viewType == 'caselib') $('#subNavbar li[data-id="' + viewType +'"]').addClass('active');
});
</script>
<?php
File diff suppressed because one or more lines are too long
Binary file not shown.
+2 -2
View File
@@ -16,8 +16,8 @@
<glyph unicode="&#xe5d4;" glyph-name="ellipsis-v" d="M603.025 648.532c0-51.576-39.443-91.024-91.025-91.024-51.576 0-91.024 39.448-91.024 91.024s39.448 91.024 91.024 91.024c51.576 0.003 91.025-39.443 91.025-91.024zM603.025 284.444c0-51.576-39.443-91.024-91.024-91.024s-91.020 39.448-91.020 91.024c0 51.576 39.448 91.024 91.020 91.024s91.024-39.448 91.024-91.024zM603.025-79.644c0-51.576-39.443-91.024-91.024-91.024s-91.024 39.448-91.024 91.024 39.448 91.024 91.024 91.024c51.576 0 91.024-39.443 91.024-91.024z" />
<glyph unicode="&#xe5dc;" glyph-name="first-page" d="M235.552 551.503h89.714v-534.113h-89.714v534.113zM788.448 79.98l-62.59-62.59-267.059 267.059 267.059 267.059 62.59-62.59-204.464-204.464z" />
<glyph unicode="&#xe5dd;" glyph-name="last-page" d="M698.73 551.503h89.715v-534.115h-89.715v534.115zM235.552 488.909l62.591 62.591 267.059-267.059-267.059-267.059-62.591 62.591 204.465 204.465z" />
<glyph unicode="&#xe6f1;" glyph-name="expand-alt" d="M729.208 299.956v-31.026c0-8.73-6.786-15.514-15.514-15.514h-170.668v-170.668c0-8.73-6.786-15.514-15.514-15.514h-31.026c-8.73 0-15.514 6.786-15.514 15.514v170.668h-170.668c-8.73 0-15.514 6.786-15.514 15.514v31.026c0 8.73 6.786 15.514 15.514 15.514h170.668v170.668c0 8.73 6.786 15.514 15.514 15.514h31.026c8.73 0 15.514-6.786 15.514-15.514v-170.668h170.668c8.73 0 15.514-6.786 15.514-15.514zM791.271 82.748v403.391c0 42.666-34.911 77.574-77.574 77.574h-403.391c-42.666 0-77.574-34.911-77.574-77.574v-403.391c0-42.666 34.911-77.574 77.574-77.574h403.391c42.666 0 77.574 34.911 77.574 77.574zM853.335 486.139v-403.391c0-77.094-62.545-139.638-139.638-139.638h-403.391c-77.094 0-139.638 62.545-139.638 139.638v403.391c0 77.094 62.545 139.638 139.638 139.638h403.391c77.094 0 139.638-62.545 139.638-139.638z" />
<glyph unicode="&#xe6f2;" glyph-name="collapse-alt" d="M729.201 299.963v-31.024c0-8.729-6.788-15.519-15.519-15.519h-403.385c-8.729 0-15.519 6.788-15.519 15.519v31.024c0 8.729 6.788 15.519 15.519 15.519h403.385c8.729 0 15.519-6.788 15.519-15.519zM791.265 82.748v403.385c0 42.664-34.912 77.574-77.574 77.574h-403.385c-42.664 0-77.574-34.912-77.574-77.574v-403.385c0-42.664 34.912-77.574 77.574-77.574h403.385c42.664 0 77.574 34.912 77.574 77.574zM853.329 486.14v-403.385c0-77.089-62.55-139.637-139.637-139.637h-403.385c-77.089 0-139.637 62.55-139.637 139.637v403.385c0 77.089 62.55 139.637 139.637 139.637h403.385c77.089 0 139.637-62.55 139.637-139.637z" />
<glyph unicode="&#xe6f1;" glyph-name="expand-alt" d="M850.488 682.666v0c32.991 0 59.732-26.744 59.732-59.732v-676.977c0-32.991-26.744-59.732-59.732-59.732h-676.977c-32.991 0-59.732 26.744-59.732 59.732 0 0 0 0 0 0v676.977c0 32.991 26.744 59.732 59.732 59.732h676.977zM850.488 622.932h-676.977v-676.977h676.977v676.977zM512 513.42v0c15.383 0 28.25-11.686 29.729-26.999l0.139-2.866v-169.244h169.244c15.383-0.001 28.25-11.686 29.729-26.999l0.139-2.866v0.002c0-15.383-11.684-28.25-26.999-29.729l-2.868-0.139h-169.244v-169.244c-0.007-16.496-13.387-29.86-29.883-29.854-15.374 0.007-28.23 11.683-29.714 26.985l-0.139 2.866v169.244h-169.244c-15.383 0.001-28.25 11.686-29.729 26.999l-0.139 2.866v-0.002c0 15.383 11.684 28.25 26.999 29.729l2.868 0.139h169.244v169.244c0 16.496 13.372 29.868 29.868 29.868v0z" />
<glyph unicode="&#xe6f2;" glyph-name="collapse-alt" d="M850.488 682.666v0c32.991 0 59.732-26.744 59.732-59.732v-676.977c0-32.991-26.744-59.732-59.732-59.732h-676.977c-32.991 0-59.732 26.744-59.732 59.732 0 0 0 0 0 0v676.977c0 32.991 26.744 59.732 59.732 59.732h676.977zM850.488 622.932h-676.977v-676.977h676.977v676.977zM541.867 314.312h169.244c15.383-0.001 28.25-11.686 29.729-26.999l0.139-2.866c0-15.381-11.684-28.248-26.999-29.729l-2.868-0.139h-398.222c-15.383 0.001-28.25 11.686-29.729 26.999l-0.139 2.866c0 15.381 11.684 28.248 26.999 29.729l2.868 0.139h228.976z" />
<glyph unicode="&#xe744;" glyph-name="more" horiz-adv-x="2269" d="M584.076 11.354h-73.155v423.937l-173.013-419.364h-91.81l-172.976 419.364v-423.937h-73.155v549.070h100.662l191.375-463.88 191.375 463.88h100.698zM1880.394 337.848h352.244v-73.155h-352.244v73.155zM934.053 486.829c110.94 0 201.179-90.238 201.179-201.179s-90.238-201.179-201.179-201.179-201.179 90.238-201.179 201.179 90.238 201.179 201.179 201.179zM934.053 559.985c-151.505 0-274.334-122.828-274.334-274.334s122.828-274.334 274.334-274.334 274.334 122.828 274.334 274.334c0 151.505-122.828 274.334-274.334 274.334v0zM1281.066 557.132h73.155v-548.667h-73.155v548.667zM1317.644 557.132h262.335v-73.155h-262.335v73.155zM1317.644 301.088h262.335v-73.155h-262.335v73.155zM1577.31 557.132v-73.155c50.404 0 91.445-41.040 91.445-91.445s-41.040-91.445-91.445-91.445v-73.155c90.896 0 164.6 73.704 164.6 164.6s-73.704 164.6-164.6 164.6zM1765.102 11.318l-239.036 272.321-54.977-48.282 196.679-224.039zM2269.033 11.318h-441.055v545.814h441.055v-73.155h-367.9v-399.502h367.9z" />
<glyph unicode="&#xe7f5;" glyph-name="bell" d="M697.982 61.265v280.069c0 115.965-70.017 210.052-185.982 210.052s-185.982-94.087-185.982-210.052v-280.069h371.965zM792.069 109.401l94.087-94.087v-45.947h-748.306v45.947l94.087 94.087v231.929c0 144.411 76.581 262.563 210.052 295.384v32.822c0 39.385 30.632 70.017 70.017 70.017s70.017-30.632 70.017-70.017v-32.822c133.472-32.822 210.052-153.162 210.052-295.384v-231.929zM512-170.668c-50.325 0-94.087 41.572-94.087 91.896h188.17c0-50.325-43.762-91.896-94.087-91.896z" />
<glyph unicode="&#xe836;" glyph-name="circle" d="M512-80.926c200.847 0 365.37 164.523 365.37 365.37s-164.523 365.37-365.37 365.37-365.37-164.523-365.37-365.37 164.523-365.37 365.37-365.37zM512 739.556c252.127 0 455.112-202.984 455.112-455.112s-202.984-455.112-455.112-455.112-455.112 202.984-455.112 455.112 202.984 455.112 455.112 455.112z" />

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.
Binary file not shown.