Merge branch 'master' into 'sprint/206_liumengyi_58288'
# Conflicts: # db/update17.1.sql
This commit is contained in:
@@ -186,7 +186,9 @@ $config->openMethods[] = 'user.login';
|
||||
$config->openMethods[] = 'user.logout';
|
||||
$config->openMethods[] = 'user.deny';
|
||||
$config->openMethods[] = 'user.reset';
|
||||
$config->openMethods[] = 'user.forgetpassword';
|
||||
$config->openMethods[] = 'user.refreshrandom';
|
||||
$config->openMethods[] = 'user.resetpassword';
|
||||
$config->openMethods[] = 'api.getsessionid';
|
||||
$config->openMethods[] = 'misc.checktable';
|
||||
$config->openMethods[] = 'misc.qrcode';
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
ALTER TABLE `zt_user` ADD `resetToken` varchar(50) NOT NULL AFTER `scoreLevel`;
|
||||
CREATE TABLE `zt_riskissue` (
|
||||
`risk` mediumint(8) unsigned NOT NULL,
|
||||
`issue` mediumint(8) unsigned NOT NULL,
|
||||
UNIQUE KEY `risk_issue` (`risk`,`issue`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_kanban` ADD `alignment` varchar(10) NOT NULL DEFAULT 'center' AFTER `object`;
|
||||
|
||||
ALTER TABLE `zt_kanban` ADD `alignment` varchar(10) NOT NULL DEFAULT 'center' AFTER `object`;
|
||||
@@ -1718,6 +1718,7 @@ CREATE TABLE IF NOT EXISTS `zt_user` (
|
||||
`ranzhi` char(30) NOT NULL default '',
|
||||
`score` INT(11) NOT NULL DEFAULT '0',
|
||||
`scoreLevel` INT(11) NOT NULL DEFAULT '0',
|
||||
`resetToken` varchar(50) NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL default '0',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `account` (`account`),
|
||||
|
||||
@@ -13,6 +13,9 @@
|
||||
<?php include $app->getModuleRoot() . 'common/view/header.html.php';?>
|
||||
<?php include $app->getModuleRoot() . 'common/view/datepicker.html.php';?>
|
||||
<?php include $app->getExtensionRoot() . 'biz/common/ext/view/calendar.html.php';?>
|
||||
<style>
|
||||
#date {float: left; margin-right: 10px; margin-left: 0px;}
|
||||
</style>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php if(common::hasPriv('my', 'todo')) echo html::a(helper::createLink('my', 'todo', "type=all"), $lang->todo->all . " <span class='label label-light label-badge'>{$todoCount}</span>", '', "class='btn btn-link'");?>
|
||||
@@ -34,10 +37,10 @@
|
||||
<div id="effortCalendar" class="calendar">
|
||||
<header class="calender-header table-row">
|
||||
<div class="btn-toolbar col-4 table-col text-middle">
|
||||
<button type="button" class="btn btn-info btn-icon btn-mini btn-prev"><i class="icon-chevron-left"></i></button>
|
||||
<button type="button" class="btn btn-info btn-mini btn-today"><?php echo $lang->today;?></button>
|
||||
<button type="button" class="btn btn-info btn-icon btn-mini btn-prev"><i class="icon-chevron-left"></i></button>
|
||||
<span id="date" class="calendar-caption"></span>
|
||||
<button type="button" class="btn btn-info btn-icon btn-mini btn-next"><i class="icon-chevron-right"></i></button>
|
||||
<span class="calendar-caption"></span>
|
||||
</div>
|
||||
<div class="col-4 text-center table-col">
|
||||
<ul class="nav nav-primary">
|
||||
|
||||
@@ -551,6 +551,8 @@ $lang->resource->task->recordEstimate = 'recordEstimateAction';
|
||||
$lang->resource->task->editEstimate = 'editEstimate';
|
||||
$lang->resource->task->deleteEstimate = 'deleteEstimate';
|
||||
$lang->resource->task->report = 'reportChart';
|
||||
$lang->resource->task->exportTemplet = 'exportTemplet';
|
||||
$lang->resource->task->import = 'import';
|
||||
|
||||
$lang->task->methodOrder[5] = 'create';
|
||||
$lang->task->methodOrder[10] = 'batchCreate';
|
||||
@@ -575,6 +577,8 @@ $lang->task->methodOrder[100] = 'editEstimate';
|
||||
$lang->task->methodOrder[105] = 'deleteEstimate';
|
||||
$lang->task->methodOrder[110] = 'report';
|
||||
$lang->task->methodOrder[115] = 'batchChangeModule';
|
||||
$lang->task->methodOrder[120] = 'exportTemplet';
|
||||
$lang->task->methodOrder[125] = 'import';
|
||||
|
||||
/* Doc. */
|
||||
$lang->resource->doc = new stdclass();
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("story[$i]", $stories, $currentStory, "class='form-control chosen' onchange='setStoryRelated($i)'");?>
|
||||
<span class='input-group-btn'>
|
||||
<a id='preview<?php echo $i;?>' href='#' class='btn iframe btn-link btn-icon btn-copy' disabled='disabled' title='<?php echo $lang->preview; ?>'><i class='icon-search'></i></a>
|
||||
<a id='preview<?php echo $i;?>' href='#' class='btn iframe btn-link btn-icon btn-copy' disabled='disabled' title='<?php echo $lang->preview; ?>'><i class='icon-eye'></i></a>
|
||||
<a href='javascript:copyStoryTitle(<?php echo $i;?>)' class='btn btn-link btn-icon btn-copy' title='<?php echo $lang->task->copyStoryTitle; ?>'><i class='icon-arrow-right'></i></a>
|
||||
<?php echo html::hidden("storyEstimate$i") . html::hidden("storyDesc$i") . html::hidden("storyPri$i");?>
|
||||
</span>
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#sidebar > .sidebar-toggle {left: 3px; right: auto;}
|
||||
.hide-sidebar #sidebar > .cell {display: none;}
|
||||
.hide-sidebar #sidebar > .sidebar-toggle > .icon:before {content: "\e314";}
|
||||
#date {float: left; margin-right: 10px; margin-left: 0px;}
|
||||
</style>
|
||||
<?php js::set('moreLang', $this->lang->side->more);?>
|
||||
<?php js::set('moduleList', $config->todo->moduleList);?>
|
||||
@@ -31,8 +32,18 @@
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if(common::hasPriv('todo', 'export')) echo html::a('javascript:exportCalendar("' . helper::createLink('todo', 'export', "userID={$this->app->user->id}&orderBy=id_desc&date=_date_") . '")', "<i class='icon-export muted'> </i> " . $lang->todo->export, '', "class='btn btn-link'");?>
|
||||
<?php common::printLink('todo', 'batchCreate', '', "<i class='icon icon-plus'></i> " . $lang->todo->batchCreate, '', "class='btn btn-secondary' id='batchCreate'", '', true);?>
|
||||
<?php common::printLink('todo', 'create', '', "<i class='icon icon-plus'></i> " . $lang->todo->create, '', "id='create' class='btn btn-primary iframe' data-width='80%'", '', 'true');?>
|
||||
<?php if(common::hasPriv('todo', 'create') or common::hasPriv('todo', 'batchCreate')):?>
|
||||
<div class='btn-group dropdown'>
|
||||
<?php common::printLink('todo', common::hasPriv('todo', 'create') ? 'create' : 'batchCreate', '', "<i class='icon icon-plus'></i> " . (common::hasPriv('todo', 'create') ? $lang->todo->create : $lang->todo->batchCreate), '', "id='create' class='btn btn-primary iframe' data-width='80%' data-app='my'", '', 'true');?>
|
||||
<?php if(common::hasPriv('todo', 'create') and common::hasPriv('todo', 'batchCreate')):?>
|
||||
<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
|
||||
<ul class='dropdown-menu pull-right'>
|
||||
<li><?php echo html::a($this->createLink('todo', 'create', '', '', true), $lang->todo->create, '', "class='iframe' data-width='80%'");?></li>
|
||||
<li><?php echo html::a($this->createLink('todo', 'batchCreate', '', '', true), $lang->todo->batchCreate, '', "class='iframe' data-width='80%'");?></li>
|
||||
</ul>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-row">
|
||||
@@ -41,10 +52,10 @@
|
||||
<div id="todoCalendar" class="calendar">
|
||||
<header class="calender-header table-row">
|
||||
<div class="btn-toolbar col-4 table-col text-middle">
|
||||
<button type="button" class="btn btn-info btn-icon btn-mini btn-prev"><i class="icon-chevron-left"></i></button>
|
||||
<button type="button" class="btn btn-info btn-mini btn-today"><?php echo $lang->today;?></button>
|
||||
<button type="button" class="btn btn-info btn-icon btn-mini btn-prev"><i class="icon-chevron-left"></i></button>
|
||||
<span id="date" class="calendar-caption"></span>
|
||||
<button type="button" class="btn btn-info btn-icon btn-mini btn-next"><i class="icon-chevron-right"></i></button>
|
||||
<span class="calendar-caption"></span>
|
||||
</div>
|
||||
<div class="col-4 text-center table-col">
|
||||
<ul class="nav nav-primary">
|
||||
|
||||
@@ -150,30 +150,24 @@ class feishuapi
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDeptTree()
|
||||
public function getChildDeptTree($departmentID)
|
||||
{
|
||||
$depts = array('result' => 'success', 'data' => array());
|
||||
|
||||
/* Gets the enterprise name. */
|
||||
$response = $this->queryAPI($this->apiUrl . "tenant/v2/tenant/query", '', array(CURLOPT_CUSTOMREQUEST => "GET"));
|
||||
$company = array('id' => '1', 'pId' => '0', 'name' => $response->data->tenant->name, 'open' => 1);
|
||||
$data = array($company);
|
||||
|
||||
/* Get depts by parent dept. */
|
||||
$depts = array();
|
||||
$pageToken = '';
|
||||
$index = 0;
|
||||
while(true)
|
||||
{
|
||||
$response = $this->queryAPI($this->apiUrl . "contact/v3/departments?parent_department_id=0" . ($pageToken ? "&page_token={$pageToken}" : '') . "&fetch_child=true&page_size=50", '', array(CURLOPT_CUSTOMREQUEST => "GET"));
|
||||
$response = $this->queryAPI($this->apiUrl . "contact/v3/departments?parent_department_id={$departmentID}" . ($pageToken ? "&page_token={$pageToken}" : '') . "&fetch_child=true&page_size=50", '', array(CURLOPT_CUSTOMREQUEST => "GET"));
|
||||
if(isset($response->data->items))
|
||||
{
|
||||
foreach($response->data->items as $key => $dept)
|
||||
{
|
||||
$depts[$index]['id'] = $dept->open_department_id;
|
||||
$depts[$index]['pId'] = empty($dept->parent_department_id) ? 1 : $dept->parent_department_id;
|
||||
$depts[$index]['name'] = $dept->name;
|
||||
$depts[$index]['open'] = 1;
|
||||
$index++;
|
||||
$data[$index]['id'] = $dept->open_department_id;
|
||||
$data[$index]['pId'] = empty($dept->parent_department_id) ? 1 : $dept->parent_department_id;
|
||||
$data[$index]['name'] = $dept->name;
|
||||
$data[$index]['open'] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,10 +175,129 @@ class feishuapi
|
||||
$pageToken = $response->data->page_token;
|
||||
}
|
||||
|
||||
$depts['data'] = $data;
|
||||
return $depts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first tier department.
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDeptTree()
|
||||
{
|
||||
$depts = array('data' => array());
|
||||
|
||||
/* Gets the enterprise name. */
|
||||
$response = $this->queryAPI($this->apiUrl . "tenant/v2/tenant/query", '', array(CURLOPT_CUSTOMREQUEST => "GET"));
|
||||
$company = array('id' => '1', 'pId' => '0', 'name' => $response->data->tenant->name, 'open' => 1);
|
||||
$depts = array($company);
|
||||
|
||||
$departmentIdList = $this->getScopes();
|
||||
|
||||
$urls = array();
|
||||
foreach($departmentIdList as $departmentID) $urls[] = $this->apiUrl . "contact/v3/departments/{$departmentID}";
|
||||
$datas = $this->multiRequest($urls);
|
||||
|
||||
foreach($datas as $index => $dept)
|
||||
{
|
||||
$index += 1;
|
||||
$dept = json_decode($dept);
|
||||
|
||||
$memberCount = $dept->data->department->member_count;
|
||||
$status = $dept->data->department->status->is_deleted;
|
||||
|
||||
$depts[$index]['id'] = $dept->data->department->open_department_id;
|
||||
$depts[$index]['pId'] = empty($dept->data->department->parent_department_id) ? 1 : $dept->data->department->parent_department_id;
|
||||
$depts[$index]['name'] = $dept->data->department->name;
|
||||
$depts[$index]['open'] = 1;
|
||||
}
|
||||
|
||||
return $depts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the visible range of the application.
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getScopes()
|
||||
{
|
||||
$pageToken = '';
|
||||
$departmentIdList = array();
|
||||
|
||||
while(true)
|
||||
{
|
||||
$response = $this->queryAPI($this->apiUrl . "contact/v3/scopes" . "?user_id_type=open_id&department_id_type=open_department_id&page_token={$pageToken}&page_size=100", '', array(CURLOPT_CUSTOMREQUEST => "GET"));
|
||||
$departmentIds = isset($response->data->department_ids) ? $response->data->department_ids : array();
|
||||
foreach($departmentIds as $id) $departmentIdList[] = $id;
|
||||
|
||||
if(!isset($response->data->page_token)) break;
|
||||
$pageToken = $response->data->page_token;
|
||||
}
|
||||
|
||||
return $departmentIdList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the concurrency of requests.
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function multiRequest($urls)
|
||||
{
|
||||
$curl = curl_multi_init();
|
||||
$urlHandlers = array();
|
||||
$urlData = array();
|
||||
|
||||
/* Set request header information. */
|
||||
$headers = array();
|
||||
$headers[] = "Content-Type: application/json";
|
||||
if($this->token) $headers[] = "Authorization:Bearer {$this->token}";
|
||||
|
||||
/* Initialize multiple request handles to one. */
|
||||
foreach($urls as $url)
|
||||
{
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
|
||||
$urlHandlers[] = $ch;
|
||||
curl_multi_add_handle($curl, $ch);
|
||||
}
|
||||
|
||||
$active = null;
|
||||
do
|
||||
{
|
||||
$mrc = curl_multi_exec($curl, $active);
|
||||
}
|
||||
while($mrc == CURLM_CALL_MULTI_PERFORM);
|
||||
|
||||
while($active && $mrc == CURLM_OK)
|
||||
{
|
||||
usleep(50000);
|
||||
if(curl_multi_select($curl) != -1)
|
||||
{
|
||||
do
|
||||
{
|
||||
$mrc = curl_multi_exec($curl, $active);
|
||||
}
|
||||
while($mrc == CURLM_CALL_MULTI_PERFORM);
|
||||
}
|
||||
}
|
||||
|
||||
foreach($urlHandlers as $index => $ch)
|
||||
{
|
||||
$urlData[$index] = curl_multi_getcontent($ch);
|
||||
curl_multi_remove_handle($curl, $ch);
|
||||
}
|
||||
curl_multi_close($curl);
|
||||
return $urlData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send message
|
||||
*
|
||||
|
||||
@@ -167,6 +167,7 @@ class gitlab
|
||||
$params['per_page'] = '100';
|
||||
|
||||
$branches = array();
|
||||
$default = array();
|
||||
for($page = 1; true; $page ++)
|
||||
{
|
||||
$params['page'] = $page;
|
||||
@@ -176,15 +177,24 @@ class gitlab
|
||||
foreach($branchList as $branch)
|
||||
{
|
||||
if(!isset($branch->name)) continue;
|
||||
$branches[$branch->name] = $branch->name;
|
||||
if($branch->default)
|
||||
{
|
||||
$default[$branch->name] = $branch->name;
|
||||
}
|
||||
else
|
||||
{
|
||||
$branches[$branch->name] = $branch->name;
|
||||
}
|
||||
}
|
||||
|
||||
/* Last page. */
|
||||
if(count($branchList) < $params['per_page']) break;
|
||||
}
|
||||
|
||||
if(empty($branches)) $branches['master'] = 'master';
|
||||
if(empty($branches) and empty($default)) $branches['master'] = 'master';
|
||||
asort($branches);
|
||||
|
||||
$branches = $default + $branches;
|
||||
return $branches;
|
||||
}
|
||||
|
||||
|
||||
@@ -125,6 +125,9 @@ class GitRepo
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
|
||||
/* Get default branch. */
|
||||
$defaultBranch = execCmd("$this->client symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'");
|
||||
|
||||
$branches = array();
|
||||
foreach($list as $localBranch)
|
||||
{
|
||||
@@ -132,9 +135,12 @@ class GitRepo
|
||||
|
||||
$localBranch = trim($localBranch);
|
||||
if(empty($localBranch))continue;
|
||||
$branches[$localBranch] = $localBranch;
|
||||
if($localBranch != $defaultBranch) $branches[$localBranch] = $localBranch;
|
||||
}
|
||||
|
||||
asort($branches);
|
||||
$branches = array($defaultBranch => $defaultBranch) + $branches;
|
||||
|
||||
return $branches;
|
||||
}
|
||||
|
||||
@@ -552,8 +558,10 @@ class GitRepo
|
||||
else
|
||||
{
|
||||
$file = explode(' ', $commit);
|
||||
$file = end($file);
|
||||
list($action, $path) = explode("\t", $file);
|
||||
$file = explode("\t", end($file));
|
||||
if(!isset($file[1])) $file[1] = '';
|
||||
list($action, $path) = $file;
|
||||
|
||||
$parsedFile = new stdclass();
|
||||
$parsedFile->revision = $hash;
|
||||
$parsedFile->path = '/' . trim($path);
|
||||
|
||||
@@ -355,4 +355,22 @@ class admin extends control
|
||||
$this->dao->delete()->from(TABLE_LOG)->where('date')->lt($date)->exec();
|
||||
return !dao::isError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset password setting.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function resetPWDSetting()
|
||||
{
|
||||
if($_POST)
|
||||
{
|
||||
$this->loadModel('setting')->setItem('system.common.resetPWDByMail', $this->post->resetPWDByMail);
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload'));
|
||||
}
|
||||
|
||||
$this->view->title = $this->lang->admin->resetPWDSetting;
|
||||
$this->display();
|
||||
}
|
||||
}
|
||||
|
||||
+29
-24
@@ -9,23 +9,25 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Datenbank prüfen';
|
||||
$lang->admin->sso = 'SSO';
|
||||
$lang->admin->ssoAction = 'Link Zdoo';
|
||||
$lang->admin->safeIndex = 'Sicherheit';
|
||||
$lang->admin->checkWeak = 'Schwache Passwörter prüfen';
|
||||
$lang->admin->certifyMobile = 'Prüfen Sie die Mobilnummer';
|
||||
$lang->admin->certifyEmail = 'Prüfen Sie die Emailadresse';
|
||||
$lang->admin->ztCompany = 'Prüfen Sie das Unternehmen';
|
||||
$lang->admin->captcha = 'Bestätigungscode';
|
||||
$lang->admin->getCaptcha = 'Bestätigungscode anfordern';
|
||||
$lang->admin->register = 'Register';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Datenbank prüfen';
|
||||
$lang->admin->sso = 'SSO';
|
||||
$lang->admin->ssoAction = 'Link Zdoo';
|
||||
$lang->admin->safeIndex = 'Sicherheit';
|
||||
$lang->admin->checkWeak = 'Schwache Passwörter prüfen';
|
||||
$lang->admin->certifyMobile = 'Prüfen Sie die Mobilnummer';
|
||||
$lang->admin->certifyEmail = 'Prüfen Sie die Emailadresse';
|
||||
$lang->admin->ztCompany = 'Prüfen Sie das Unternehmen';
|
||||
$lang->admin->captcha = 'Bestätigungscode';
|
||||
$lang->admin->getCaptcha = 'Bestätigungscode anfordern';
|
||||
$lang->admin->register = 'Register';
|
||||
$lang->admin->resetPWDSetting = 'Reset password Setting';
|
||||
|
||||
$lang->admin->api = 'API';
|
||||
$lang->admin->log = 'Log';
|
||||
$lang->admin->setting = 'Einstellungen';
|
||||
$lang->admin->days = 'Gültige Tage';
|
||||
$lang->admin->api = 'API';
|
||||
$lang->admin->log = 'Log';
|
||||
$lang->admin->setting = 'Einstellungen';
|
||||
$lang->admin->days = 'Gültige Tage';
|
||||
$lang->admin->resetPWDByMail = 'Reset the password via the email';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = 'Aktuelle Version ist %s. ';
|
||||
@@ -53,14 +55,14 @@ $lang->admin->bind->caption = 'Konto verknüpfen';
|
||||
$lang->admin->bind->success = "Konto wurde verknüpft!";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = 'Sicherheits-Regeln';
|
||||
$lang->admin->safe->set = 'PasswortStärke';
|
||||
$lang->admin->safe->password = 'Passwort Stärke';
|
||||
$lang->admin->safe->weak = 'Schwache Passwörter';
|
||||
$lang->admin->safe->reason = 'Typ';
|
||||
$lang->admin->safe->checkWeak = 'Schwache Passwörter prüfen';
|
||||
$lang->admin->safe->changeWeak = 'Ihr Passwort ist schwach. Bitte ändern.';
|
||||
$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA';
|
||||
$lang->admin->safe->common = 'Sicherheits-Regeln';
|
||||
$lang->admin->safe->set = 'PasswortStärke';
|
||||
$lang->admin->safe->password = 'Passwort Stärke';
|
||||
$lang->admin->safe->weak = 'Schwache Passwörter';
|
||||
$lang->admin->safe->reason = 'Typ';
|
||||
$lang->admin->safe->checkWeak = 'Schwache Passwörter prüfen';
|
||||
$lang->admin->safe->changeWeak = 'Ihr Passwort ist schwach. Bitte ändern.';
|
||||
$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Passwort nach der ersten Anmeldung ändern';
|
||||
|
||||
$lang->admin->safe->modeList[0] = 'N/A';
|
||||
@@ -82,5 +84,8 @@ $lang->admin->safe->modifyPasswordList[0] = 'Nein';
|
||||
$lang->admin->safe->loginCaptchaList[1] = 'Ja';
|
||||
$lang->admin->safe->loginCaptchaList[0] = 'Nein';
|
||||
|
||||
$lang->admin->safe->resetPWDList[1] = 'ON';
|
||||
$lang->admin->safe->resetPWDList[0] = 'Off';
|
||||
|
||||
$lang->admin->safe->noticeMode = 'Password will be checked when a user logs in, or a user is added or edited.';
|
||||
$lang->admin->safe->noticeStrong = '';
|
||||
|
||||
+29
-24
@@ -9,23 +9,25 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
$lang->admin->ssoAction = 'Link Zdoo';
|
||||
$lang->admin->safeIndex = 'Security';
|
||||
$lang->admin->checkWeak = 'Check Weak Password';
|
||||
$lang->admin->certifyMobile = 'Verify your cellphone';
|
||||
$lang->admin->certifyEmail = 'Verify your Email';
|
||||
$lang->admin->ztCompany = 'Verify your company';
|
||||
$lang->admin->captcha = 'Verification Code';
|
||||
$lang->admin->getCaptcha = 'Send Verification Code';
|
||||
$lang->admin->register = 'Register';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
$lang->admin->ssoAction = 'Link Zdoo';
|
||||
$lang->admin->safeIndex = 'Security';
|
||||
$lang->admin->checkWeak = 'Check Weak Password';
|
||||
$lang->admin->certifyMobile = 'Verify your cellphone';
|
||||
$lang->admin->certifyEmail = 'Verify your Email';
|
||||
$lang->admin->ztCompany = 'Verify your company';
|
||||
$lang->admin->captcha = 'Verification Code';
|
||||
$lang->admin->getCaptcha = 'Send Verification Code';
|
||||
$lang->admin->register = 'Register';
|
||||
$lang->admin->resetPWDSetting = 'Reset password Setting';
|
||||
|
||||
$lang->admin->api = 'API';
|
||||
$lang->admin->log = 'Log';
|
||||
$lang->admin->setting = 'Setting';
|
||||
$lang->admin->days = 'Valid Day';
|
||||
$lang->admin->api = 'API';
|
||||
$lang->admin->log = 'Log';
|
||||
$lang->admin->setting = 'Setting';
|
||||
$lang->admin->days = 'Valid Day';
|
||||
$lang->admin->resetPWDByMail = 'Reset the password via the email';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = 'Current Version is %s. ';
|
||||
@@ -53,14 +55,14 @@ $lang->admin->bind->caption = 'Link Account';
|
||||
$lang->admin->bind->success = "Account is linked!";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = 'Security Policy';
|
||||
$lang->admin->safe->set = 'Password Settings';
|
||||
$lang->admin->safe->password = 'Password Strength';
|
||||
$lang->admin->safe->weak = 'Common Weak Passwords';
|
||||
$lang->admin->safe->reason = 'Type';
|
||||
$lang->admin->safe->checkWeak = 'Weak Password Scan';
|
||||
$lang->admin->safe->changeWeak = 'Force to change weak password';
|
||||
$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA';
|
||||
$lang->admin->safe->common = 'Security Policy';
|
||||
$lang->admin->safe->set = 'Password Settings';
|
||||
$lang->admin->safe->password = 'Password Strength';
|
||||
$lang->admin->safe->weak = 'Common Weak Passwords';
|
||||
$lang->admin->safe->reason = 'Type';
|
||||
$lang->admin->safe->checkWeak = 'Weak Password Scan';
|
||||
$lang->admin->safe->changeWeak = 'Force to change weak password';
|
||||
$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Force to change password after first login';
|
||||
|
||||
$lang->admin->safe->modeList[0] = 'I don\'t care.';
|
||||
@@ -82,5 +84,8 @@ $lang->admin->safe->modifyPasswordList[0] = 'No';
|
||||
$lang->admin->safe->loginCaptchaList[1] = 'Yes';
|
||||
$lang->admin->safe->loginCaptchaList[0] = 'No';
|
||||
|
||||
$lang->admin->safe->resetPWDList[1] = 'ON';
|
||||
$lang->admin->safe->resetPWDList[0] = 'Off';
|
||||
|
||||
$lang->admin->safe->noticeMode = 'Password will be checked when a user logs in, or a user is added or edited.';
|
||||
$lang->admin->safe->noticeStrong = '';
|
||||
|
||||
+29
-24
@@ -9,23 +9,25 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
$lang->admin->ssoAction = 'Link Zdoo';
|
||||
$lang->admin->safeIndex = 'Sécurité';
|
||||
$lang->admin->checkWeak = 'Contrôle niveau de sécurité des mots de passe';
|
||||
$lang->admin->certifyMobile = 'Vérifier votre smartphone';
|
||||
$lang->admin->certifyEmail = 'Vérifier votre Email';
|
||||
$lang->admin->ztCompany = 'Vérifier votre entreprise';
|
||||
$lang->admin->captcha = 'Code de vérification';
|
||||
$lang->admin->getCaptcha = 'Obtenir le Code de vérification';
|
||||
$lang->admin->register = 'Register';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
$lang->admin->ssoAction = 'Link Zdoo';
|
||||
$lang->admin->safeIndex = 'Sécurité';
|
||||
$lang->admin->checkWeak = 'Contrôle niveau de sécurité des mots de passe';
|
||||
$lang->admin->certifyMobile = 'Vérifier votre smartphone';
|
||||
$lang->admin->certifyEmail = 'Vérifier votre Email';
|
||||
$lang->admin->ztCompany = 'Vérifier votre entreprise';
|
||||
$lang->admin->captcha = 'Code de vérification';
|
||||
$lang->admin->getCaptcha = 'Obtenir le Code de vérification';
|
||||
$lang->admin->register = 'Register';
|
||||
$lang->admin->resetPWDSetting = 'Reset password Setting';
|
||||
|
||||
$lang->admin->api = 'API';
|
||||
$lang->admin->log = 'Log';
|
||||
$lang->admin->setting = 'Paramétrage';
|
||||
$lang->admin->days = 'Durée de conservation';
|
||||
$lang->admin->api = 'API';
|
||||
$lang->admin->log = 'Log';
|
||||
$lang->admin->setting = 'Paramétrage';
|
||||
$lang->admin->days = 'Durée de conservation';
|
||||
$lang->admin->resetPWDByMail = 'Reset the password via the email';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = 'La version actuelle est %s customisée. ';
|
||||
@@ -53,14 +55,14 @@ $lang->admin->bind->caption = 'Lier au compte';
|
||||
$lang->admin->bind->success = "Le compte est associé !";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = 'Politique de sécurité';
|
||||
$lang->admin->safe->set = 'Paramétrages du Mot de passe';
|
||||
$lang->admin->safe->password = 'Force du Mot de passe';
|
||||
$lang->admin->safe->weak = 'Mots de passes non sécurisés courrants';
|
||||
$lang->admin->safe->reason = 'Type';
|
||||
$lang->admin->safe->checkWeak = 'Balayage des mots de passe faibles';
|
||||
$lang->admin->safe->changeWeak = 'Forcer le changement des mots de passe faibles';
|
||||
$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA';
|
||||
$lang->admin->safe->common = 'Politique de sécurité';
|
||||
$lang->admin->safe->set = 'Paramétrages du Mot de passe';
|
||||
$lang->admin->safe->password = 'Force du Mot de passe';
|
||||
$lang->admin->safe->weak = 'Mots de passes non sécurisés courrants';
|
||||
$lang->admin->safe->reason = 'Type';
|
||||
$lang->admin->safe->checkWeak = 'Balayage des mots de passe faibles';
|
||||
$lang->admin->safe->changeWeak = 'Forcer le changement des mots de passe faibles';
|
||||
$lang->admin->safe->loginCaptcha = 'Login using CAPTCHA';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = 'Forcer le changement du mot de passe après la première connexion';
|
||||
|
||||
$lang->admin->safe->modeList[0] = "Contrôle Modéré";
|
||||
@@ -82,5 +84,8 @@ $lang->admin->safe->modifyPasswordList[0] = 'Non';
|
||||
$lang->admin->safe->loginCaptchaList[1] = 'Yes';
|
||||
$lang->admin->safe->loginCaptchaList[0] = 'Non';
|
||||
|
||||
$lang->admin->safe->resetPWDList[1] = 'ON';
|
||||
$lang->admin->safe->resetPWDList[0] = 'Off';
|
||||
|
||||
$lang->admin->safe->noticeMode = "Le mot de passe sera vérifié quand un utilisateur se connectera ou qu'un utilisateur sera créé ou modifier.";
|
||||
$lang->admin->safe->noticeStrong = '';
|
||||
|
||||
+29
-24
@@ -9,23 +9,25 @@
|
||||
* @version $Id: zh-cn.php 4767 2013-05-05 06:10:13Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->index = '后台管理首页';
|
||||
$lang->admin->checkDB = '检查数据库';
|
||||
$lang->admin->sso = 'ZDOO集成';
|
||||
$lang->admin->ssoAction = 'ZDOO集成';
|
||||
$lang->admin->safeIndex = '安全';
|
||||
$lang->admin->checkWeak = '弱口令检查';
|
||||
$lang->admin->certifyMobile = '认证手机';
|
||||
$lang->admin->certifyEmail = '认证邮箱';
|
||||
$lang->admin->ztCompany = '认证公司';
|
||||
$lang->admin->captcha = '验证码';
|
||||
$lang->admin->getCaptcha = '获取验证码';
|
||||
$lang->admin->register = '登记';
|
||||
$lang->admin->index = '后台管理首页';
|
||||
$lang->admin->checkDB = '检查数据库';
|
||||
$lang->admin->sso = 'ZDOO集成';
|
||||
$lang->admin->ssoAction = 'ZDOO集成';
|
||||
$lang->admin->safeIndex = '安全';
|
||||
$lang->admin->checkWeak = '弱口令检查';
|
||||
$lang->admin->certifyMobile = '认证手机';
|
||||
$lang->admin->certifyEmail = '认证邮箱';
|
||||
$lang->admin->ztCompany = '认证公司';
|
||||
$lang->admin->captcha = '验证码';
|
||||
$lang->admin->getCaptcha = '获取验证码';
|
||||
$lang->admin->register = '登记';
|
||||
$lang->admin->resetPWDSetting = '重置密码设置';
|
||||
|
||||
$lang->admin->api = '接口';
|
||||
$lang->admin->log = '日志';
|
||||
$lang->admin->setting = '设置';
|
||||
$lang->admin->days = '日志保存天数';
|
||||
$lang->admin->api = '接口';
|
||||
$lang->admin->log = '日志';
|
||||
$lang->admin->setting = '设置';
|
||||
$lang->admin->days = '日志保存天数';
|
||||
$lang->admin->resetPWDByMail = '通过邮箱重置密码';
|
||||
|
||||
$lang->admin->info = new stdclass();
|
||||
$lang->admin->info->version = '当前系统的版本是%s,';
|
||||
@@ -53,14 +55,14 @@ $lang->admin->bind->caption = '关联社区帐号';
|
||||
$lang->admin->bind->success = "关联账户成功";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = '安全策略';
|
||||
$lang->admin->safe->set = '密码安全设置';
|
||||
$lang->admin->safe->password = '密码安全';
|
||||
$lang->admin->safe->weak = '常用弱口令';
|
||||
$lang->admin->safe->reason = '类型';
|
||||
$lang->admin->safe->checkWeak = '弱口令扫描';
|
||||
$lang->admin->safe->changeWeak = '修改弱口令密码';
|
||||
$lang->admin->safe->loginCaptcha = '登录使用验证码';
|
||||
$lang->admin->safe->common = '安全策略';
|
||||
$lang->admin->safe->set = '密码安全设置';
|
||||
$lang->admin->safe->password = '密码安全';
|
||||
$lang->admin->safe->weak = '常用弱口令';
|
||||
$lang->admin->safe->reason = '类型';
|
||||
$lang->admin->safe->checkWeak = '弱口令扫描';
|
||||
$lang->admin->safe->changeWeak = '修改弱口令密码';
|
||||
$lang->admin->safe->loginCaptcha = '登录使用验证码';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = '首次登录修改密码';
|
||||
|
||||
$lang->admin->safe->modeList[0] = '不检查';
|
||||
@@ -82,5 +84,8 @@ $lang->admin->safe->modifyPasswordList[0] = '不强制';
|
||||
$lang->admin->safe->loginCaptchaList[1] = '是';
|
||||
$lang->admin->safe->loginCaptchaList[0] = '否';
|
||||
|
||||
$lang->admin->safe->resetPWDList[1] = '开启';
|
||||
$lang->admin->safe->resetPWDList[0] = '关闭';
|
||||
|
||||
$lang->admin->safe->noticeMode = '系统会在登录、创建和修改用户、修改密码的时候检查用户口令。';
|
||||
$lang->admin->safe->noticeStrong = '密码长度越长,含有大写字母或数字或特殊符号越多,密码字母越不重复,安全度越强!';
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<?php
|
||||
echo html::a($this->createLink('admin', 'safe'), $lang->admin->safe->set);
|
||||
echo html::a($this->createLink('admin', 'checkWeak'), $lang->admin->safe->checkWeak, '', "class='active'");
|
||||
echo html::a($this->createLink('admin', 'resetPWDSetting'), $lang->admin->resetPWDSetting);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
/**
|
||||
* The resetpwdsetting view file of admin module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Shujie Tian <tianshujie@easycorp.ltd>
|
||||
* @package admin
|
||||
* @version $Id$
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<style>
|
||||
<?php if(!common::checkNotCN()):?>
|
||||
.mailBox {width: 45px !important;}
|
||||
<?php else:?>
|
||||
.mailBox {width: 109px !important;}
|
||||
<?php endif;?>
|
||||
.heading {padding-left: 15px;}
|
||||
</style>
|
||||
<div class="main-row">
|
||||
<div class='side-col' id='sidebar'>
|
||||
<div class='cell'>
|
||||
<div class='list-group'>
|
||||
<?php
|
||||
echo html::a($this->createLink('admin', 'safe'), $lang->admin->safe->set);
|
||||
echo html::a($this->createLink('admin', 'checkWeak'), $lang->admin->safe->checkWeak);
|
||||
echo html::a($this->createLink('admin', 'resetPWDSetting'), $lang->admin->resetPWDSetting, '', "class='active'");
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='mainContent' class='main-col main-content'>
|
||||
<div class='center-block'>
|
||||
<form class="load-indicator main-form form-ajax" method='post'>
|
||||
<div class='main-header'>
|
||||
<div class='heading'>
|
||||
<strong><?php echo $lang->admin->resetPWDSetting;?></strong>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<th class='mailBox'><?php echo $lang->admin->resetPWDByMail;?></th>
|
||||
<td class='w-300px text-left'>
|
||||
<?php $checkedKey = isset($config->resetPWDByMail) ? $config->resetPWDByMail : 0;?>
|
||||
<?php foreach($lang->admin->safe->resetPWDList as $key => $value):?>
|
||||
<label class="radio-inline"><input type="radio" name="resetPWDByMail" value="<?php echo $key?>"<?php echo $key == $checkedKey ? " checked='checked'" : ''?> id="resetPWDByMail<?php echo $key;?>"><?php echo $value;?></label>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th>
|
||||
<td class='form-actions'><?php echo html::submitButton();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -24,6 +24,7 @@
|
||||
<?php
|
||||
echo html::a($this->createLink('admin', 'safe'), $lang->admin->safe->set, '', "class='active'");
|
||||
echo html::a($this->createLink('admin', 'checkWeak'), $lang->admin->safe->checkWeak);
|
||||
echo html::a($this->createLink('admin', 'resetPWDSetting'), $lang->admin->resetPWDSetting);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -27,3 +27,29 @@ $config->api->editor->edit = array('id' => 'desc', 'tools' => 'simpleTo
|
||||
$config->api->editor->createRelease = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
$config->api->editor->createstruct = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
$config->api->editor->editstruct = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
|
||||
global $lang;
|
||||
$config->api->search['module'] = 'api';
|
||||
$config->api->search['fields']['title'] = $lang->api->title;
|
||||
$config->api->search['fields']['id'] = $lang->api->id;
|
||||
$config->api->search['fields']['lib'] = $lang->api->lib;
|
||||
$config->api->search['fields']['path'] = $lang->api->path;
|
||||
$config->api->search['fields']['method'] = $lang->api->method;
|
||||
$config->api->search['fields']['status'] = $lang->api->status;
|
||||
$config->api->search['fields']['addedBy'] = $lang->api->addedBy;
|
||||
$config->api->search['fields']['addedDate'] = $lang->api->addedDate;
|
||||
$config->api->search['fields']['editedBy'] = $lang->api->editedBy;
|
||||
$config->api->search['fields']['editedDate'] = $lang->api->editedDate;
|
||||
$config->api->search['fields']['version'] = $lang->api->version;
|
||||
|
||||
$config->api->search['params']['title'] = array('operator' => 'include', 'control' => 'input', 'values' => '');
|
||||
$config->api->search['params']['id'] = array('operator' => '=', 'control' => 'input', 'values' => '');
|
||||
$config->api->search['params']['lib'] = array('operator' => '=', 'control' => 'select', 'values' => '');
|
||||
$config->api->search['params']['path'] = array('operator' => 'include', 'control' => 'input', 'values' => '');
|
||||
$config->api->search['params']['method'] = array('operator' => '=', 'control' => 'select', 'values' => array('' => '') + $lang->api->methodOptions);
|
||||
$config->api->search['params']['status'] = array('operator' => '=', 'control' => 'select', 'values' => array('' => '') + $lang->api->statusOptions);
|
||||
$config->api->search['params']['addedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
|
||||
$config->api->search['params']['addedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
|
||||
$config->api->search['params']['editedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
|
||||
$config->api->search['params']['editedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
|
||||
$config->api->search['params']['version'] = array('operator' => '>=', 'control' => 'input', 'values' => '');
|
||||
|
||||
+22
-1
@@ -28,10 +28,12 @@ class api extends control
|
||||
* @param int $version
|
||||
* @param int $release
|
||||
* @param int $appendLib
|
||||
* @param int $queryID
|
||||
* @param string $param
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function index($libID = 0, $moduleID = 0, $apiID = 0, $version = 0, $release = 0, $appendLib = 0)
|
||||
public function index($libID = 0, $moduleID = 0, $apiID = 0, $version = 0, $release = 0, $appendLib = 0, $queryID = 0, $param = '')
|
||||
{
|
||||
/* Get an api doc. */
|
||||
if($apiID > 0)
|
||||
@@ -71,6 +73,19 @@ class api extends control
|
||||
if($libs) $this->lang->modulePageNav = $this->generateLibsDropMenu($libs, $libID, $release);
|
||||
|
||||
$this->setMenu($libID, $moduleID);
|
||||
if($apiID == 0) $this->lang->TRActions = '<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> ' . $this->lang->api->search . '</a>' . $this->lang->TRActions;
|
||||
|
||||
/* Build the search form. */
|
||||
$queryID = $param == 'bySearch' ? (int)$queryID : 0;
|
||||
$actionURL = $this->createLink('api', 'index', "libID=$libID&moduleID=$moduleID&apiID=$apiID&version=$version&release=$release&appendLib=$appendLib&queryID=myQueryID¶m=bySearch");
|
||||
$this->api->buildSearchForm($lib,$queryID, $actionURL);
|
||||
|
||||
if($param == 'bySearch')
|
||||
{
|
||||
$apiList = $this->api->getApiListBySearch($libID, $queryID);
|
||||
$this->view->apiList = $apiList;
|
||||
$this->view->typeList = $this->api->getTypeList($libID);
|
||||
}
|
||||
|
||||
$this->view->lib = $lib;
|
||||
$this->view->isRelease = $release > 0;
|
||||
@@ -79,6 +94,7 @@ class api extends control
|
||||
$this->view->libID = $libID;
|
||||
$this->view->apiID = $apiID;
|
||||
$this->view->libs = $libs;
|
||||
$this->view->param = $param;
|
||||
$this->view->moduleTree = $libID ? $this->doc->getApiModuleTree($libID, $apiID, $release, $moduleID) : '';
|
||||
$this->view->users = $this->user->getPairs('noclosed,noletter');
|
||||
|
||||
@@ -675,6 +691,11 @@ EOT;
|
||||
$selected = $key == $libID ? 'selected' : '';
|
||||
$output .= html::a(inlink($methodName, "libID=$key"), $lib->name, '', "class='$selected' data-app='{$this->app->tab}'");
|
||||
}
|
||||
if(count($libs) >= 2 and common::hasPriv('doc', 'sortLibs'))
|
||||
{
|
||||
$output .= '<li class="divider"></li>';
|
||||
$output .= html::a($this->createLink('doc', 'sortLibs', "type=api&objectID=0", '', true), "<i class='icon-move'></i> {$this->lang->doc->sortLibs}", '', "data-title='{$this->lang->doc->sortLibs}' data-toggle='modal' data-type='iframe' data-width='400px' data-app='{$this->app->tab}'");
|
||||
}
|
||||
$output .= "</div></div></div></div></div>";
|
||||
|
||||
/* Get lib version */
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
.article-content {width: 100%; display: inline-block;}
|
||||
.outline {position: relative;}
|
||||
.outline .outline-toggle i.icon-angle-right, i.icon-angle-left {width: 18px; height: 18px; background: #efefef; border-radius: 50%; position: absolute; padding-left: 2px; padding-top: 1px;}
|
||||
.outline .outline-toggle i.icon-angle-right, i.icon-angle-left {width: 18px; height: 18px; border-radius: 50%; position: absolute; padding-left: 2px; padding-top: 1px;}
|
||||
.outline .outline-toggle i.icon-angle-right:before {content: "\e314"; cursor: pointer;}
|
||||
.outline .outline-toggle i.icon-angle-left:before {content: "\e315"; cursor: pointer;}
|
||||
.outline ul li {list-style: none;}
|
||||
|
||||
@@ -60,6 +60,8 @@ $lang->api->confirmDeleteLib = "Do you want to delete this interface library?";
|
||||
$lang->api->filterStruct = "use struct";
|
||||
$lang->api->defaultVersion = "Current Version";
|
||||
$lang->api->zentaoAPI = "Zentao API v1";
|
||||
$lang->api->search = "Search";
|
||||
$lang->api->allLibs = "AllLibs";
|
||||
|
||||
/* Common access control lang. */
|
||||
$lang->api->whiteList = 'Whitelist';
|
||||
@@ -124,6 +126,12 @@ $lang->api->query = 'Parameter';
|
||||
$lang->api->params = 'Request Body';
|
||||
$lang->api->response = 'Response';
|
||||
$lang->api->responseExample = 'Response Example';
|
||||
$lang->api->id = 'ID';
|
||||
$lang->api->addedBy = 'AddedBy';
|
||||
$lang->api->addedDate = 'AddedDate';
|
||||
$lang->api->editedBy = 'EditedBy';
|
||||
$lang->api->editedDate = 'EditedDate';
|
||||
$lang->api->version = 'Version';
|
||||
$lang->api->res = new stdClass();
|
||||
$lang->api->res->name = 'Name';
|
||||
$lang->api->res->desc = 'Description';
|
||||
|
||||
@@ -60,6 +60,8 @@ $lang->api->confirmDeleteLib = "Do you want to delete this interface library?";
|
||||
$lang->api->filterStruct = "use struct";
|
||||
$lang->api->defaultVersion = "Current Version";
|
||||
$lang->api->zentaoAPI = "Zentao API v1";
|
||||
$lang->api->search = "Search";
|
||||
$lang->api->allLibs = "AllLibs";
|
||||
|
||||
/* Common access control lang. */
|
||||
$lang->api->whiteList = 'Whitelist';
|
||||
@@ -124,6 +126,12 @@ $lang->api->query = 'Parameter';
|
||||
$lang->api->params = 'Request Body';
|
||||
$lang->api->response = 'Response';
|
||||
$lang->api->responseExample = 'Response Example';
|
||||
$lang->api->id = 'ID';
|
||||
$lang->api->addedBy = 'AddedBy';
|
||||
$lang->api->addedDate = 'AddedDate';
|
||||
$lang->api->editedBy = 'EditedBy';
|
||||
$lang->api->editedDate = 'EditedDate';
|
||||
$lang->api->version = 'Version';
|
||||
$lang->api->res = new stdClass();
|
||||
$lang->api->res->name = 'Name';
|
||||
$lang->api->res->desc = 'Description';
|
||||
|
||||
@@ -60,6 +60,8 @@ $lang->api->confirmDeleteLib = "Do you want to delete this interface library?";
|
||||
$lang->api->filterStruct = "use struct";
|
||||
$lang->api->defaultVersion = "Current Version";
|
||||
$lang->api->zentaoAPI = "Zentao API v1";
|
||||
$lang->api->search = "Search";
|
||||
$lang->api->allLibs = "AllLibs";
|
||||
|
||||
/* Common access control lang. */
|
||||
$lang->api->whiteList = 'Whitelist';
|
||||
@@ -124,6 +126,12 @@ $lang->api->query = 'Parameter';
|
||||
$lang->api->params = 'Request Body';
|
||||
$lang->api->response = 'Response';
|
||||
$lang->api->responseExample = 'Response Example';
|
||||
$lang->api->id = 'ID';
|
||||
$lang->api->addedBy = 'AddedBy';
|
||||
$lang->api->addedDate = 'AddedDate';
|
||||
$lang->api->editedBy = 'EditedBy';
|
||||
$lang->api->editedDate = 'EditedDate';
|
||||
$lang->api->version = 'Version';
|
||||
$lang->api->res = new stdClass();
|
||||
$lang->api->res->name = 'Name';
|
||||
$lang->api->res->desc = 'Description';
|
||||
|
||||
@@ -60,6 +60,8 @@ $lang->api->confirmDeleteLib = "您确定删除该接口库吗?";
|
||||
$lang->api->filterStruct = "使用数据结构填充";
|
||||
$lang->api->defaultVersion = "当前版本";
|
||||
$lang->api->zentaoAPI = "禅道API文档v1";
|
||||
$lang->api->search = "搜索";
|
||||
$lang->api->allLibs = "全部接口库";
|
||||
|
||||
/* Common access control lang. */
|
||||
$lang->api->whiteList = '白名单';
|
||||
@@ -124,6 +126,12 @@ $lang->api->query = '请求参数';
|
||||
$lang->api->params = '请求体';
|
||||
$lang->api->response = '请求响应';
|
||||
$lang->api->responseExample = '响应示例';
|
||||
$lang->api->id = '接口编号';
|
||||
$lang->api->addedBy = '由谁添加';
|
||||
$lang->api->addedDate = '添加时间';
|
||||
$lang->api->editedBy = '由谁更新';
|
||||
$lang->api->editedDate = '更新时间';
|
||||
$lang->api->version = '版本号';
|
||||
$lang->api->res = new stdClass();
|
||||
$lang->api->res->name = '名称';
|
||||
$lang->api->res->desc = '描述';
|
||||
|
||||
@@ -895,4 +895,63 @@ class apiModel extends model
|
||||
$file = $this->app->getAppRoot() . 'db' . DS . 'api' . DS . $version . DS . $table;
|
||||
return unserialize(preg_replace_callback('#s:(\d+):"(.*?)";#s', function($match){return 's:'.strlen($match[2]).':"'.$match[2].'";';}, file_get_contents($file)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Build search form.
|
||||
*
|
||||
* @param object $lib
|
||||
* @param string $queryID
|
||||
* @param string $actionURL
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function buildSearchForm($lib, $queryID, $actionURL)
|
||||
{
|
||||
$lib = array($lib->id => $lib->name);
|
||||
$this->config->api->search['module'] = 'api';
|
||||
$this->config->api->search['queryID'] = $queryID;
|
||||
$this->config->api->search['actionURL'] = $actionURL;
|
||||
$this->config->api->search['params']['lib']['values'] = $lib + array('all' => $this->lang->api->allLibs);
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->api->search);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get api by search.
|
||||
*
|
||||
* @param string $libID
|
||||
* @param int $queryID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getApiListBySearch($libID, $queryID)
|
||||
{
|
||||
if($queryID)
|
||||
{
|
||||
$query = $this->loadModel('search')->getQuery($queryID);
|
||||
if($query)
|
||||
{
|
||||
$this->session->set('apiQuery', $query->sql);
|
||||
$this->session->set('apiForm', $query->form);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->session->set('apiQuery', ' 1 = 1');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if($this->session->apiQuery == false) $this->session->set('apiQuery', ' 1 = 1');
|
||||
}
|
||||
|
||||
$apiQuery = $this->session->apiQuery;
|
||||
$list = $this->dao->select('*')
|
||||
->from(TABLE_API)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere(str_replace("`lib` = 'all'", '1', $apiQuery))
|
||||
->beginIF(strpos($apiQuery, "`lib` = 'all'") === false)->andWhere('lib')->eq($libID)->fi()
|
||||
->fetchAll();
|
||||
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('confirmDelete', $lang->api->confirmDelete);?>
|
||||
<div class="cell<?php if($param == 'bySearch') echo ' show';?>" id="queryBox" data-module=<?php echo 'api';?>></div>
|
||||
<div class="fade main-row split-row" id="mainRow">
|
||||
<?php if($libID):?>
|
||||
<?php $sideWidth = common::checkNotCN() ? '270' : '238';?>
|
||||
|
||||
@@ -326,8 +326,8 @@ $lang->block->default['full']['my']['10']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['10']['grid'] = 8;
|
||||
if($config->systemMode == 'classic')
|
||||
{
|
||||
$lang->block->default['full']['my']['10']['block'] = 'execution';
|
||||
$lang->block->default['full']['my']['10']['source'] = 'execution';
|
||||
$lang->block->default['full']['my']['10']['block'] = 'project';
|
||||
$lang->block->default['full']['my']['10']['source'] = 'project';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['10']['params']['orderBy'] = 'id_desc';
|
||||
@@ -567,7 +567,7 @@ $lang->block->flowchart['admin'] = array('Administrator', 'Abteilung erstellen
|
||||
if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('Program Owner', 'Create Program', 'Link Product', "Create Project", "Budgeting and planning", 'Add Stakeholder');
|
||||
$lang->block->flowchart['product'] = array($lang->productCommon . ' Besitzer', $lang->productCommon . ' erstellen', 'Module pflegen', 'Pläne pflegen', 'Storys pflegen', 'Release erstellen');
|
||||
$lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track');
|
||||
if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track');
|
||||
if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track');
|
||||
$lang->block->flowchart['dev'] = array('Entwickler', 'Aufgabe/Bugs anfordern', 'Update Status', 'Aufgaben/Bugs abschließen');
|
||||
$lang->block->flowchart['tester'] = array('QS Team', 'Fälle erstellen', 'Fälle ausführen', 'Bug Berichte', 'Bugs überprüfen', 'Bugs schließen');
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ $lang->block->remove = 'Remove';
|
||||
$lang->block->refresh = 'Refresh';
|
||||
$lang->block->nbsp = ' ';
|
||||
$lang->block->hidden = 'Hide';
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <em>%s</em> %s <a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <em>%s</em> %s %s</span>";
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <span class='label-action'>%s</span> %s <a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <span class='label-action'>%s</span> %s <span class='label-name'>%s</span></span>";
|
||||
$lang->block->cannotPlaceInLeft = 'Cannot place the block at left side.';
|
||||
$lang->block->cannotPlaceInRight = 'Cannot place the block at right side.';
|
||||
|
||||
|
||||
@@ -326,8 +326,8 @@ $lang->block->default['full']['my']['10']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['10']['grid'] = 8;
|
||||
if($config->systemMode == 'classic')
|
||||
{
|
||||
$lang->block->default['full']['my']['10']['block'] = 'execution';
|
||||
$lang->block->default['full']['my']['10']['source'] = 'execution';
|
||||
$lang->block->default['full']['my']['10']['block'] = 'project';
|
||||
$lang->block->default['full']['my']['10']['source'] = 'project';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['10']['params']['orderBy'] = 'id_desc';
|
||||
@@ -567,7 +567,7 @@ $lang->block->flowchart['admin'] = array('Administrateur', 'Ajoute Compartimen
|
||||
if($config->systemMode == 'new') $lang->block->flowchart['program'] = array('Program Owner', 'Create Program', 'Link Product', "Create Project", "Budgeting and planning", 'Add Stakeholder');
|
||||
$lang->block->flowchart['product'] = array($lang->productCommon . ' Owner', 'Ajoute ' . $lang->productCommon . '/Modules', 'Ajoute ' . $lang->executionCommon . 's', 'Ajoute Stories', 'Maintient Plans', 'Crée Releases');
|
||||
$lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track');
|
||||
if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track');
|
||||
if($config->systemMode == 'new') $lang->block->flowchart['project'] = array('Project Manager', 'Add projects and ' . $lang->executionCommon . 's', 'Maintain Teams', 'Link Stories', 'Create Tasks', 'Track');
|
||||
$lang->block->flowchart['dev'] = array('Développeurs', 'Réclament Tâches/Bugs', 'Effectuent Tâches', 'Corrigent Bugs', 'MàJ Statuts', 'Terminent Tâches/Bugs');
|
||||
$lang->block->flowchart['tester'] = array('Testeurs', 'Rédigent CasTests', 'Jouent CasTests', 'Détectent Bugs', 'Vérifient Corrections', 'Ferment Bugs');
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ $lang->block->refresh = '刷新';
|
||||
$lang->block->nbsp = '';
|
||||
$lang->block->hidden = '隐藏';
|
||||
$lang->block->dynamicInfo = "<span class='timeline-tag'>%s</span> <span class='timeline-text'>%s <span class='label-action'>%s</span> %s <a href='%s' title='%s'>%s</a></span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <em>%s</em> %s %s</span>";
|
||||
$lang->block->noLinkDynamic = "<span class='timeline-tag'>%s</span> <span class='timeline-text' title='%s'>%s <span class='label-action'>%s</span> %s <span class='label-name'>%s</span></span>";
|
||||
$lang->block->cannotPlaceInLeft = '此区块无法放置在左侧。';
|
||||
$lang->block->cannotPlaceInRight = '此区块无法放置在右侧。';
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
.block-dynamic .timeline > li .timeline-text {max-width: 600px; display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-height: 20px;}
|
||||
.block-dynamic .panel-body {padding-top: 0;}
|
||||
.block-dynamic .label-action {margin-left: 12px;}
|
||||
.block-dynamic .label-action + a {color: #838A9D;}
|
||||
.block-dynamic .label-action + a,
|
||||
.block-dynamic .label-name {color: #838A9D;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
.flow-item > div:after {left: auto; right: -10px; z-index: 2}
|
||||
.flow-item > div > span {display: flow-root; overflow: hidden;}
|
||||
.ie-8 .flow-item > div {margin-right: 10px}
|
||||
.flow-item-0 > div {color: #838A9D; font-weight: bold; padding-left: 0;}
|
||||
.flow-item-0 > div {color: #3C4353; font-weight: bold; padding-left: 0;}
|
||||
.flow-item-0 > div:before {display: none}
|
||||
.flow-item-1 > div {background: #E3F2FD}
|
||||
.flow-item-1 > div:after {border-left-color: #E3F2FD}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<style>
|
||||
.timeline > li .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; max-height: 20px; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; }
|
||||
.panel-body {padding-top: 0;}
|
||||
.block-projectdynamic .label-action {margin-left: 12px;}
|
||||
.block-projectdynamic .label-action + a {color: #838A9D;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
|
||||
@@ -61,11 +61,11 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
.block-statistic .project-info .col-xs-5 {padding-left: 0;}
|
||||
|
||||
.block-statistic .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: left; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}
|
||||
.block-statistic .lastIteration {padding-top: 6px;}
|
||||
.block-statistic .progress-text-left {margin-right: 90px}
|
||||
.block-statistic .progress-text-left .progress-text {padding-top: 2px; font-size: 14px; padding-right:5px; left: -45px;}
|
||||
.block-statistic .progress-text-left .progress-text {padding-top: 2px; font-size: 14px; padding-right:5px; left: -50px;}
|
||||
|
||||
.status-count {margin: auto;}
|
||||
.status-count tr:first-child td:last-child {color: #000; font-weight: bold;}
|
||||
@@ -86,6 +86,26 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
.block-statistic .col-12 .waterfall-title .col {padding-right: 0px; padding-left: 0px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
.block-statistic .statistic-title{font-weight: 700; line-height: 1.1; color: inherit; font-size: 14px; margin-top: 10px; margin-bottom: 10px; width: 60%; text-align: left; padding: 0px;}
|
||||
.block-statistic .statistic-title>div{width: 40%; margin-left: 64%; padding: 0px 10px; text-align: left;}
|
||||
.block-statistic .dataTitle>div {width: 40%; text-align: left; font-size: 14px; padding: 0px 10px; margin-left: 64%; text-align-last: justify;}
|
||||
|
||||
.block-statistic.block-sm .statistic-title>div {width: 94%; margin-left: 10%;}
|
||||
.block-statistic.block-sm .dataTitle>div {width: 94%; margin-left: 10%;}
|
||||
|
||||
[lang^='en'] .block-statistic .statistic-title>div {width: 62%; margin-left: 42%;}
|
||||
[lang^='en'] .block-statistic .dataTitle>div {width: 62%; margin-left: 42%;}
|
||||
[lang^='en'] .block-statistic.block-sm .statistic-title>div {width: 94%; margin-left: 10%;}
|
||||
[lang^='en'] .block-statistic.block-sm .dataTitle>div {width: 94%; margin-left: 10%;}
|
||||
|
||||
@media screen and (max-width: 1366px){.block-statistic .statistic-title>div {width: 74%; margin-left: 30%;}}
|
||||
@media screen and (max-width: 1366px){.block-statistic .dataTitle>div {width: 74%; margin-left: 30%;}}
|
||||
|
||||
@media screen and (max-width: 1366px){[lang^='en'] .block-statistic .statistic-title>div {width: 70%; margin-left: 34%;}}
|
||||
@media screen and (max-width: 1366px){[lang^='en'] .block-statistic .dataTitle>div {width: 70%; margin-left: 34%;}}
|
||||
|
||||
@media screen and (max-width: 1366px){.block-statistic.block-sm .statistic-title>div {width: 102%; margin-left: 2%;}}
|
||||
@media screen and (max-width: 1366px){.block-statistic.block-sm .dataTitle>div {width: 102%; margin-left: 2%;}}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
@@ -137,48 +157,57 @@ $(function()
|
||||
<?php if($project->model == 'scrum' or $project->model == 'kanban'):?>
|
||||
<div class='table-row'>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->story;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->allStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allStories;?></div>
|
||||
<div class="col statistic-title"><div><?php echo $lang->block->story;?></div></div>
|
||||
<div class="col data"></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->doneStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneStories;?></div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->project->allStories;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->allStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->surplus . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftStories;?></div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->project->doneStories;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->doneStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->project->surplus;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->leftStories;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->investment;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalPeople . ":";?></div>
|
||||
<div class="col data"><?php echo $project->teamCount;?></div>
|
||||
<div class="col statistic-title"><div><?php echo $lang->block->investment;?></div></div>
|
||||
<div class="col data"></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->estimate . ":";?></div>
|
||||
<div class="col data"><?php echo $project->estimate;?></div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->totalPeople;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->teamCount;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->consumedHours . ":";?></div>
|
||||
<div class="col data"><?php echo $project->consumed;?></div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->estimate;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->estimate;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->consumedHours;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->consumed;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->bug->common;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalBug . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allBugs;?></div>
|
||||
<div class="col statistic-title"><div><?php echo $lang->block->common;?></div></div>
|
||||
<div class="col data"></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->statusList['resolved'] . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneBugs;?></div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->block->totalBug;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->allBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->unResolved . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftBugs;?></div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->bug->statusList['resolved'];?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->doneBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><div><?php echo $lang->bug->unResolved;?></div></div>
|
||||
<div class="col data"><?php echo ":" . $project->leftBugs;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
#cards .project-infos > span {display: inline-block; line-height: 12px;}
|
||||
#cards .project-infos > span > .icon {font-size: 12px; display: inline-block; position: relative; top: -1px}
|
||||
#cards .project-infos > span + span {margin-left: 10px;}
|
||||
#cards .project-detail {position: absolute; bottom: 16px; left: 16px; right: 16px; font-size: 12px; padding-left: 10px;}
|
||||
#cards .project-detail {position: absolute; bottom: 27px; left: 16px; right: 16px; font-size: 12px; padding-left: 10px;}
|
||||
#cards .project-detail > p {margin-bottom: 8px;}
|
||||
#cards .project-detail .progress {height: 4px;}
|
||||
#cards .project-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
|
||||
#cards .panel-heading {cursor: pointer;}
|
||||
#cards .project-stages-container {margin: 0 0 -16px 0; padding: 0 4px; height: 46px; overflow-x: auto; position: relative;}
|
||||
#cards .project-stages-container {margin: 0 0 -16px 0; padding: 0 4px; height: 40px; overflow-x: auto; position: relative;}
|
||||
#cards .project-stages:after {content: ' '; width: 30px; display: block; right: -5px; top: 16px; bottom: -5px; z-index: 1; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); position: absolute;}
|
||||
#cards .project-stages-row {position: relative; height: 30px; z-index: 0;}
|
||||
#cards .project-stage-item {white-space: nowrap; position: absolute; top: 0; min-width: 48px; padding-top: 13px; color: #838A9D;}
|
||||
@@ -33,6 +33,7 @@
|
||||
#cards .project-stage-item.is-going::before {background-color: #0C64EB;}
|
||||
#dashboard .block-recentproject .panel-body {padding: 0;}
|
||||
.execution-name {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.scrollbar::-webkit-scrollbar:horizontal {height: 5px;}
|
||||
</style>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($projects)):?>
|
||||
@@ -83,7 +84,7 @@
|
||||
<div class='label label-outline'><?php echo zget($lang->project->statusList, $project->status);?></div>
|
||||
<?php else: ?>
|
||||
<p class='text-muted'><?php echo $lang->project->ongoingStage;?></p>
|
||||
<div class='project-stages-container scrollbar-hover'>
|
||||
<div class='project-stages-container scrollbar-hover scrollbar'>
|
||||
<div class='project-stages-row'>
|
||||
<?php foreach ($projectProjects as $project):?>
|
||||
<div class='project-stage-item is-<?php echo $project->status;?><?php if($project->status !== 'wait') echo ' is-going';?>'>
|
||||
|
||||
@@ -21,10 +21,10 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
.block-todoes .todoes {padding: 0 10px 10px 10px; margin: 0 -20px; max-height: 350px; overflow: auto; overflow-x:hidden}
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden;}
|
||||
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
|
||||
.block-todoes .todo-title {padding: 5px 15px 5px 5px;}
|
||||
.block-todoes .todo-title {padding: 0px;}
|
||||
.titleBox {max-width: 700px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block;}
|
||||
.block-todoes .todo-pri {margin: 0 5px;}
|
||||
.block-todoes .todo-time {display: inline-block; padding: 0 5px; font-size: 12px; color: #8e939a; width: 95px;}
|
||||
.block-todoes .todo-time {display: inline-block; padding: 0 5px; font-size: 12px; color: #8e939a; width: 95px; min-width: 95px;}
|
||||
.block-todoes .todo-check {position: absolute; top: 5px; left: 10px; display: block; width: 20px; height: 20px; font-size: 20px; color: transparent; cursor: pointer; background: #fff; border: 2px solid #eee; border-radius: 50%;}
|
||||
.block-todoes .todo-check:hover {border-color: #8e939a;}
|
||||
.block-todoes .active > .todo-check {color: #00da88; background: transparent;border: none;}
|
||||
@@ -34,6 +34,10 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
.block-todoes .todoes-form > .form-group:last-child {margin-bottom: 0;}
|
||||
.block-todoes .todoes-form > h3 {padding: 0 20px 15px; margin: 0 -20px 5px; font-size: 14px; line-height: 20px;}
|
||||
.block-todoes.show-form .todoes-form {visibility: visible; opacity: 1;}
|
||||
.block-todoes .todo-flexbetween {display: flex; justify-content: space-between;}
|
||||
.block-todoes #todoList {display: flex; overflow: hidden;}
|
||||
.block-todoes .label-todo {width: 50px; min-width: 50px!important; border: none; color: #43A047;}
|
||||
[lang^='en'] .block-todoes .todo-pri {width: 60px; min-width: 60px;}
|
||||
</style>
|
||||
<div class='block-todoes'>
|
||||
<div class='panel-body'>
|
||||
@@ -97,14 +101,17 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
?>
|
||||
<li data-id='<?php echo $todo->id?>' class='titleBox'>
|
||||
<span class="todo-check icon icon-check-circle"></span>
|
||||
<a href="<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink);?>" class='iframe' data-width='1000px' data-toggle='modal' <?php echo $appid?>>
|
||||
<?php if ($todo->date == '2030-01-01') :?>
|
||||
<span class="todo-time"><?php echo $lang->todo->periods['future'] ?></span>
|
||||
<?php else:?>
|
||||
<span class="todo-time"><?php echo date(DT_DATE4, strtotime($todo->date)) . ' ' . $todo->begin;?></span>
|
||||
<?php endif;?>
|
||||
<span class="todo-pri label-pri label-pri-<?php echo $todo->pri?>" title="<?php echo zget($lang->todo->priList, $todo->pri);?>"><?php echo zget($lang->todo->priList, $todo->pri);?></span>
|
||||
<span class="todo-title" title='<?php echo $todo->name;?>'><?php echo $todo->name;?></span>
|
||||
<a href="<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink);?>" class='iframe todo-flexbetween' data-width='1000px' data-toggle='modal' <?php echo $appid?>>
|
||||
<div id='todoList'>
|
||||
<?php if ($todo->date == '2030-01-01') :?>
|
||||
<div class="todo-time"><?php echo $lang->todo->periods['future'] ?></div>
|
||||
<?php else:?>
|
||||
<div class="todo-time"><?php echo date(DT_DATE4, strtotime($todo->date)) . ' ' . $todo->begin;?></div>
|
||||
<?php endif;?>
|
||||
<div class="todo-pri label-pri label-pri-<?php echo $todo->pri?>" title="<?php echo zget($lang->todo->priList, $todo->pri);?>"><?php echo zget($lang->todo->priList, $todo->pri);?></div>
|
||||
<div class="todo-title text-ellipsis" title='<?php echo $todo->name;?>'><?php echo $todo->name;?></div>
|
||||
</div>
|
||||
<span class="label label-id label-todo hidden"><?php echo $lang->block->done;?></span>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach;?>
|
||||
@@ -166,6 +173,15 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
if(!isFinished) $liTag.addClass('active');
|
||||
if(isFinished) $liTag.removeClass('active');
|
||||
});
|
||||
|
||||
if(isFinished)
|
||||
{
|
||||
$(this).next().find('.label-todo').addClass('hidden');
|
||||
}
|
||||
else
|
||||
{
|
||||
$(this).next().find('.label-todo').removeClass('hidden');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -14,9 +14,8 @@
|
||||
.block-welcome .col-left {width: 25%;}
|
||||
.block-welcome .col-left > h4 {margin: 5px 0;line-height: 30px;}
|
||||
.block-welcome .col-left .timeline {margin: 10px 0 0;font-size: 12px;}
|
||||
.block-welcome .col-right > h4 {font-weight: normal;}
|
||||
.block-welcome .col-right > h4 small {display: inline-block;margin-right: 8px;font-size: 14px;}
|
||||
.block-welcome .col-right .tiles {padding: 10px 0 0 16px;border-left: 1px solid #e5e8ec;}
|
||||
.block-welcome .col-right .tiles {padding: 10px 0 0 16px;}
|
||||
.block-welcome .col-right .tile {width: 33%;}
|
||||
.block-welcome .panel-body {padding-top: 15px;}
|
||||
.block-welcome .user-notification-icon {position: relative;display: inline-block;margin-left: 5px;}
|
||||
@@ -24,17 +23,28 @@
|
||||
.block-welcome.block-sm .col-right {padding: 0;}
|
||||
.block-welcome.block-sm .col-right .tiles {border-left: none; padding-left: 0}
|
||||
.block-welcome.block-sm .tile-title {font-size: 12px; margin: 0 -10px;}
|
||||
.block-welcome .progress-group{margin-top: 20px;}
|
||||
.block-welcome .progress-group{margin-top: 42px;}
|
||||
.block-welcome .progress{margin-top: 10px; width: 85%}
|
||||
.block-welcome .user-welcome{margin-top: 28px !important;}
|
||||
.block-welcome .col-right{border-left: 1px solid #e5e8ec;}
|
||||
.block-welcome.block-sm .col-right {border: none;}
|
||||
.block-welcome .left-today{margin-left: 36px;}
|
||||
.block-welcome .done-progress{display: inline-block; color: #5B606E; font-weight: 500;}
|
||||
.block-welcome .welcome-label{background: #ffebee; border: none;}
|
||||
.block-welcome.block-sm .left-today {margin-left: 0px;}
|
||||
</style>
|
||||
<?php $progress = $tasks == 0 ? 0 : round($doneTasks / $tasks, 3) * 100;?>
|
||||
<div class='panel-move-handler'></div>
|
||||
<div class="panel-body conatiner-fluid">
|
||||
<div class="table-row">
|
||||
<div class="col col-left hide-in-sm">
|
||||
<h4><?php printf($lang->block->welcomeList[$welcomeType], $app->user->realname)?></h4>
|
||||
<div class='progress-group'>
|
||||
<span class="progress-num"><strong><?php echo $lang->block->assignToMe . ' ' . $lang->block->done . " $progress" . '%';?></strong></span>
|
||||
<h4><small class="text-muted"><?php echo date(DT_DATE3)?></small></h4>
|
||||
<h4 class="user-welcome"><?php printf($lang->block->welcomeList[$welcomeType], $app->user->realname)?></h4>
|
||||
<div class="progress-group">
|
||||
<span class="progress-num">
|
||||
<strong><?php echo $lang->block->assignToMe;?></strong>
|
||||
<div class="done-progress"><?php echo $lang->block->done . " $progress" . '%';?></div>
|
||||
</span>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="82" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progress;?>%">
|
||||
</div>
|
||||
@@ -42,14 +52,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col col-right">
|
||||
<h4><small class="text-muted"><?php echo date(DT_DATE3)?></small> <?php echo $lang->block->leftToday?></h4>
|
||||
<h4 class="left-today"><?php echo $lang->block->leftToday?></h4>
|
||||
<div class="row tiles">
|
||||
<div class="col tile">
|
||||
<div class="tile-title"><?php echo $lang->block->myTask?></div>
|
||||
<div class="tile-amount"><?php echo empty($tasks) ? 0 : html::a($this->createLink('my', 'work', 'mode=task'), (int)$tasks);?></div>
|
||||
<?php if(!empty($delay['task'])):?>
|
||||
<div class="tile-info">
|
||||
<span class="label label-danger label-outline"><?php echo $lang->block->delayed . ' ' . $delay['task']?></span>
|
||||
<span class="label label-danger label-outline welcome-label"><?php echo $lang->block->delayed . ' ' . $delay['task']?></span>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
@@ -58,7 +68,7 @@
|
||||
<div class="tile-amount"><?php echo empty($bugs) ? 0 : html::a($this->createLink('my', 'work', 'mode=bug'), (int)$bugs);?></div>
|
||||
<?php if(!empty($delay['bug'])):?>
|
||||
<div class="tile-info">
|
||||
<span class="label label-danger label-outline"><?php echo $lang->block->delayed . ' ' . $delay['bug']?></span>
|
||||
<span class="label label-danger label-outline welcome-label"><?php echo $lang->block->delayed . ' ' . $delay['bug']?></span>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
|
||||
@@ -53,7 +53,7 @@ js::set('page', 'confirmbug');
|
||||
<?php $this->printExtendFields($bug, 'table');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->mailto;?></th>
|
||||
<td colspan='2'><?php echo html::select('mailto[]', $users, str_replace(' ' , '', $bug->mailto), 'class="form-control chosen" multiple');?></td>
|
||||
<td colspan='2'><?php echo html::select('mailto[]', $users, str_replace(' ' , '', $bug->mailto), 'class="form-control picker-select" multiple');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->comment;?></th>
|
||||
|
||||
@@ -333,7 +333,7 @@ if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
<td>
|
||||
<div class='input-group' id='contactListGroup'>
|
||||
<?php
|
||||
echo html::select('mailto[]', $users, str_replace(' ', '', $mailto), "class='form-control chosen' multiple");
|
||||
echo html::select('mailto[]', $users, str_replace(' ', '', $mailto), "class='form-control picker-select' multiple");
|
||||
echo $this->fetch('my', 'buildContactLists');
|
||||
?>
|
||||
</div>
|
||||
|
||||
@@ -186,7 +186,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
<th><?php echo $lang->bug->mailto;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('mailto[]', $users, str_replace(' ', '', $bug->mailto), 'class="form-control chosen" multiple');?>
|
||||
<?php echo html::select('mailto[]', $users, str_replace(' ', '', $bug->mailto), 'class="form-control picker-select" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists');?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
+8
-1
@@ -12,11 +12,18 @@ class ciModel extends model
|
||||
/**
|
||||
* Set menu.
|
||||
*
|
||||
* @param int $repoID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setMenu()
|
||||
public function setMenu($repoID = 0)
|
||||
{
|
||||
if($repoID)
|
||||
{
|
||||
if(!session_id()) session_start();
|
||||
$this->session->set('repoID', $repoID);
|
||||
session_write_close();
|
||||
}
|
||||
common::setMenuVars('devops', $this->session->repoID);
|
||||
}
|
||||
|
||||
|
||||
@@ -396,7 +396,7 @@ $lang->qa->dividerMenu = ',bug,testtask,caselib,';
|
||||
$lang->devops->menu = new stdclass();
|
||||
$lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccommit');
|
||||
$lang->devops->menu->compile = array('link' => "{$lang->devops->compile}|job|browse", 'subModule' => 'compile,job');
|
||||
$lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse");
|
||||
$lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse|repoID=%s");
|
||||
$lang->devops->menu->gitlab = array('link' => "GitLab|gitlab|browse", 'alias' => 'create,edit');
|
||||
$lang->devops->menu->sonarqube = array('link' => "SonarQube|sonarqube|browse");
|
||||
$lang->devops->menu->jenkins = array('link' => "Jenkins|jenkins|browse", 'alias' => 'create,edit');
|
||||
|
||||
@@ -2353,7 +2353,7 @@ EOD;
|
||||
$module == 'tutorial' ||
|
||||
$module == 'install' ||
|
||||
$module == 'upgrade' ||
|
||||
($module == 'user' && strpos('|login|deny|logout|reset|', "|{$method}|") !== false) ||
|
||||
($module == 'user' && strpos('|login|deny|logout|reset|forgetpassword|resetpassword|', "|{$method}|") !== false) ||
|
||||
($module == 'my' && strpos('|changepassword|preference|', "|{$method}|") !== false) ||
|
||||
($module == 'file' && strpos('|read|download|uploadimages|ajaxwopifiles|', "|{$method}|") !== false) ||
|
||||
($module == 'sso' && $method == 'login') ||
|
||||
|
||||
@@ -224,6 +224,15 @@ class company extends control
|
||||
|
||||
/* Get executions' list.*/
|
||||
$executions = $this->loadModel('execution')->getPairs(0, 'all', 'nocode');
|
||||
$executionsIDList = array_keys($executions);
|
||||
$executionsList = $this->execution->getByIdList($executionsIDList);
|
||||
foreach($executionsList as $executionsID => $executionObj)
|
||||
{
|
||||
foreach($projects as $projectsID => $projectsName)
|
||||
{
|
||||
if($executionObj->project == $projectsID) $executions[$executionObj->id] = $projectsName . '/' . $executionObj->name;
|
||||
}
|
||||
}
|
||||
$executions = array($this->lang->execution->common) + $executions;
|
||||
$this->view->executions = $executions;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
.dynamic .timeline-tag {left: -75px; font-size: 14px; color: #838A9D;}
|
||||
.dynamic .timeline-text {color: #3C4353;}
|
||||
.dynamic .text-muted {color: #838A9D;}
|
||||
.dynamic .label-id {top: -1px;}
|
||||
.dynamic .label-id {top: -1px; border: 1px solid rgba(131,138,157,0.25); color: #838A9D;}
|
||||
.dynamic.active .timeline,
|
||||
.dynamic.active .dynamic-date {border-color: #00a9fc;}
|
||||
.dynamic.active .dynamic-date:before {background-color: #00a9fc;}
|
||||
@@ -21,3 +21,7 @@
|
||||
.c-project, .c-product, .c-execution {width: 110px !important; overflow: unset;}
|
||||
.c-user, .c-order {width: 96px !important; overflow: unset;}
|
||||
.c-date {width: 200px;}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-name,
|
||||
.dynamic .label-name a {color: #838A9D;}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<div class="input-control space c-project"><?php echo html::select('project', $projects, $projectID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
|
||||
<?php endif;?>
|
||||
<div class="input-control space c-execution"><?php echo html::select('execution', $executions, $executionID, 'class="form-control chosen" data-max_drop_width="215"'); ?></div>
|
||||
<div class="input-control space c-execution"><?php echo html::select('execution', $executions, $executionID, 'class="form-control chosen" data-max_drop_width="350"'); ?></div>
|
||||
<div class="input-control space c-order"><?php echo html::select('orderBy', $lang->company->order, $orderBy, 'class="form-control chosen" data-max_drop_width="215" data-disable_search="true"'); ?></div>
|
||||
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->action->dynamic->search;?></a>
|
||||
</div>
|
||||
@@ -73,8 +73,12 @@
|
||||
<span class='label-action'><?php echo ' ' . $action->actionLabel;?></span>
|
||||
<?php if($action->action != 'login' and $action->action != 'logout'):?>
|
||||
<span class="text"><?php echo $action->objectLabel;?></span>
|
||||
<?php if($action->objectID):?>
|
||||
<span class="label label-id"><?php echo $action->objectID;?></span>
|
||||
<?php endif;?>
|
||||
<?php $tab = '';?>
|
||||
<?php if($action->objectType == 'meeting') $tab = $action->project ? "data-app='project'" : "data-app='my'";?>
|
||||
<span class="label-name">
|
||||
<?php
|
||||
if(empty($action->objectName) and $action->objectID)
|
||||
{
|
||||
@@ -93,9 +97,7 @@
|
||||
echo html::a($action->objectLink, $action->objectName, '', $tab);
|
||||
}
|
||||
?>
|
||||
<?php if($action->objectID):?>
|
||||
<span class="label label-id"><?php echo $action->objectID;?></span>
|
||||
<?php endif;?>
|
||||
</span>
|
||||
<?php endif;?>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -118,6 +118,14 @@ class custom extends control
|
||||
|
||||
if(strtolower($this->server->request_method) == "post")
|
||||
{
|
||||
$postArray = fixer::input('post');
|
||||
$keys = array();
|
||||
foreach($postArray->data->keys as $key)
|
||||
{
|
||||
if(in_array($key, $keys)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->custom->notice->repeatKey, $key)));;
|
||||
$keys[] = $key;
|
||||
}
|
||||
|
||||
if($module == 'project' and $field == 'unitList')
|
||||
{
|
||||
$data = fixer::input('post')->join('unitList', ',')->get();
|
||||
|
||||
@@ -206,6 +206,7 @@ $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it
|
||||
$lang->custom->notice->confirmReviewCase = 'Set the case in Wait to Normal?';
|
||||
$lang->custom->notice->storyReviewTip = 'After selecting by individual, position, and department, take the union of these three filters. ';
|
||||
$lang->custom->notice->selectAllTip = 'After selecting all people, the reviewers will be emptied and grayed out while hiding their positions and departments.';
|
||||
$lang->custom->notice->repeatKey = 'Repeat Key %s';
|
||||
|
||||
$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?";
|
||||
$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?";
|
||||
|
||||
@@ -206,6 +206,7 @@ $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it
|
||||
$lang->custom->notice->confirmReviewCase = 'Set the case in Wait to Normal?';
|
||||
$lang->custom->notice->storyReviewTip = 'After selecting by individual, position, and department, take the union of these three filters. ';
|
||||
$lang->custom->notice->selectAllTip = 'After selecting all people, the reviewers will be emptied and grayed out while hiding their positions and departments.';
|
||||
$lang->custom->notice->repeatKey = 'Repeat Key %s';
|
||||
|
||||
$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Home. Do you want to go to Product Home?";
|
||||
$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Home. Do you want to go to Project Home?";
|
||||
|
||||
@@ -206,6 +206,7 @@ $lang->custom->notice->confirmDelete = 'Are you sure you want to delete it
|
||||
$lang->custom->notice->confirmReviewCase = 'Set the case in Wait to Normal?';
|
||||
$lang->custom->notice->storyReviewTip = 'After selecting by individual, position, and department, take the union of these three filters. ';
|
||||
$lang->custom->notice->selectAllTip = 'After selecting all people, the reviewers will be emptied and grayed out while hiding their positions and departments.';
|
||||
$lang->custom->notice->repeatKey = 'Repeat Key %s';
|
||||
|
||||
$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ possède une page d'accueil. Voulez-vous consulter la page d'accueil du produit ?";
|
||||
$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ possède une page d'accueil. Voulez-vous consulter la page d'accueil du produit ?";
|
||||
|
||||
@@ -206,6 +206,7 @@ $lang->custom->notice->confirmDelete = '您确定要删除吗?';
|
||||
$lang->custom->notice->confirmReviewCase = '是否将待评审的用例修改为正常状态?';
|
||||
$lang->custom->notice->storyReviewTip = '按人员、职位、部门勾选后,取所有人员的并集。';
|
||||
$lang->custom->notice->selectAllTip = '勾选所有人员后,会清空并置灰评审人员,同时隐藏职位、部门。';
|
||||
$lang->custom->notice->repeatKey = '%s键重复';
|
||||
|
||||
$lang->custom->notice->indexPage['product'] = "从8.2版本起增加了产品主页视图,是否默认进入产品主页?";
|
||||
$lang->custom->notice->indexPage['project'] = "从8.2版本起增加了项目主页视图,是否默认进入项目主页?";
|
||||
|
||||
@@ -92,7 +92,7 @@ EOT;
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="thWidth"><?php echo $lang->custom->superReviewers;?></th>
|
||||
<td><?php echo html::select('superReviewers[]', $users, $superReviewers, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('superReviewers[]', $users, $superReviewers, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='2' class='text-center'><?php echo html::submitButton();?></td>
|
||||
@@ -112,39 +112,39 @@ EOT;
|
||||
</tr>
|
||||
<tr id='userBox' class='forceReview<?php if($needReview) echo " hidden"?>'>
|
||||
<th><?php echo $lang->custom->forceReview . $space . $lang->custom->account;?></th>
|
||||
<td><?php echo html::select('forceReview[]', $users, $forceReview, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceReview[]', $users, $forceReview, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr id='roleBox' class='forceReview<?php if($needReview) echo " hidden"?>'>
|
||||
<th><?php echo $lang->custom->forceReview . $space . $lang->custom->role;?></th>
|
||||
<td><?php echo html::select('forceReviewRoles[]', $lang->user->roleList, $forceReviewRoles, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceReviewRoles[]', $lang->user->roleList, $forceReviewRoles, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr id='deptBox' class='forceReview<?php if($needReview) echo " hidden"?>'>
|
||||
<th><?php echo $lang->custom->forceReview . $space . $lang->custom->dept;?></th>
|
||||
<td><?php echo html::select('forceReviewDepts[]', $depts, $forceReviewDepts, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceReviewDepts[]', $depts, $forceReviewDepts, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr id='userBox' class='forceNotReview<?php if(!$needReview) echo " hidden"?>'>
|
||||
<th><?php echo $lang->custom->forceNotReview . $space . $lang->custom->account;?></th>
|
||||
<td><?php echo html::select('forceNotReview[]', $users, $forceNotReview, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceNotReview[]', $users, $forceNotReview, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr id='roleBox' class='forceNotReview<?php if(!$needReview) echo " hidden"?>'>
|
||||
<th><?php echo $lang->custom->forceNotReview . $space . $lang->custom->role;?></th>
|
||||
<td><?php echo html::select('forceNotReviewRoles[]', $lang->user->roleList, $forceNotReviewRoles, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceNotReviewRoles[]', $lang->user->roleList, $forceNotReviewRoles, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr id='deptBox' class='forceNotReview<?php if(!$needReview) echo " hidden"?>'>
|
||||
<th><?php echo $lang->custom->forceNotReview . $space . $lang->custom->dept;?></th>
|
||||
<td><?php echo html::select('forceNotReviewDepts[]', $depts, $forceNotReviewDepts, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceNotReviewDepts[]', $depts, $forceNotReviewDepts, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php if($module == 'testcase'):?>
|
||||
<?php js::set('oldNeedReview', $needReview);?>
|
||||
<tr <?php if($needReview) echo "class='hidden'"?>>
|
||||
<th><?php echo $lang->custom->forceReview;?></th>
|
||||
<td><?php echo html::select('forceReview[]', $users, $forceReview, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceReview[]', $users, $forceReview, "class='form-control picker-select' multiple");?></td>
|
||||
<td style='width:300px'><?php printf($lang->custom->notice->forceReview, $lang->$module->common);?></td>
|
||||
</tr>
|
||||
<tr <?php if(!$needReview) echo "class='hidden'"?>>
|
||||
<th><?php echo $lang->custom->forceNotReview;?></th>
|
||||
<td><?php echo html::select('forceNotReview[]', $users, $forceNotReview, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('forceNotReview[]', $users, $forceNotReview, "class='form-control picker-select' multiple");?></td>
|
||||
<td style='width:300px'><?php printf($lang->custom->notice->forceNotReview, $lang->$module->common);?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
@@ -212,7 +212,7 @@ EOT;
|
||||
<table class='table table-form mw-800px'>
|
||||
<tr>
|
||||
<th class='w-150px'><?php echo $lang->custom->user->fields['contactField'];?></th>
|
||||
<td><?php echo html::select('contactField[]', $lang->user->contactFieldList, $config->user->contactField, "class='form-control chosen' multiple");?></td>
|
||||
<td><?php echo html::select('contactField[]', $lang->user->contactFieldList, $config->user->contactField, "class='form-control picker-select' multiple");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
|
||||
+64
-16
@@ -482,6 +482,7 @@ class doc extends control
|
||||
$this->view->doc = $doc;
|
||||
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0);
|
||||
$this->view->type = $type;
|
||||
$this->view->lib = $lib;
|
||||
$this->view->libs = $this->doc->getLibs('all', $extra = 'withObject|noBook', $libID, $objectID);
|
||||
$this->view->groups = $this->loadModel('group')->getPairs();
|
||||
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted', $doc->users);
|
||||
@@ -896,13 +897,13 @@ class doc extends control
|
||||
/**
|
||||
* Show files.
|
||||
*
|
||||
* @param string $type
|
||||
* @param int $objectID
|
||||
* @param string $viewType
|
||||
* @param string $orderBy
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @param string $type
|
||||
* @param int $objectID
|
||||
* @param string $viewType
|
||||
* @param string $orderBy
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -1151,13 +1152,18 @@ class doc extends control
|
||||
/**
|
||||
* Show the catalog of the doc library.
|
||||
*
|
||||
* @param string $type
|
||||
* @param int $objectID
|
||||
* @param int $libID
|
||||
* @param string $type
|
||||
* @param int $objectID
|
||||
* @param int $libID
|
||||
* @param int $queryID
|
||||
* @param string $param
|
||||
* @param int $recTotal
|
||||
* @param int $recPerPage
|
||||
* @param int $pageID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function tableContents($type, $objectID = 0, $libID = 0)
|
||||
public function tableContents($type, $objectID = 0, $libID = 0, $queryID = 0, $param = '', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
{
|
||||
list($libs, $libID, $object, $objectID) = $this->doc->setMenuByType($type, $objectID, $libID);
|
||||
$this->session->set('createProjectLocate', $this->app->getURI(true), 'doc');
|
||||
@@ -1168,15 +1174,39 @@ class doc extends control
|
||||
|
||||
$title = ($type == 'book' or $type == 'custom') ? $this->lang->doc->tableContents : $object->name . $this->lang->colon . $this->lang->doc->tableContents;
|
||||
|
||||
/* Build the search form. */
|
||||
$queryID = $param == 'bySearch' ? (int)$queryID : 0;
|
||||
$actionURL = $this->createLink('doc', 'tableContents', "type=$type&objectID=$objectID&libID=$libID&queryID=myQueryID¶m=bySearch");
|
||||
$this->doc->buildSearchForm($libID, $libs, $queryID, $actionURL, $type);
|
||||
|
||||
$this->view->title = $title;
|
||||
$this->view->type = $type;
|
||||
$this->view->libs = $libs;
|
||||
$this->view->objectID = $objectID;
|
||||
$this->view->libID = $libID;
|
||||
$this->view->moduleTree = $moduleTree;
|
||||
$this->view->param = $param;
|
||||
$this->view->queryID = $queryID;
|
||||
$this->view->users = $this->user->getPairs('noletter');
|
||||
if($param == 'bySearch')
|
||||
{
|
||||
/* Load pager. */
|
||||
$rawMethod = $this->app->rawMethod;
|
||||
$this->app->rawMethod = 'tableContents';
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager($recTotal, $recPerPage, $pageID);
|
||||
$this->app->rawMethod = $rawMethod;
|
||||
|
||||
$this->display();
|
||||
$this->view->docs = $this->doc->getDocsBySearch($type, $objectID, $libID, $queryID, $pager);
|
||||
$this->view->browseType = 'bySearch';
|
||||
$this->view->pager = $pager;
|
||||
$this->display('doc', 'browse', "browseType=bySearch¶m=$queryID");
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->view->libs = $libs;
|
||||
$this->view->objectID = $objectID;
|
||||
$this->view->libID = $libID;
|
||||
$this->view->moduleTree = $moduleTree;
|
||||
|
||||
$this->display();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1199,4 +1229,22 @@ class doc extends control
|
||||
unset($this->lang->doc->libTypeList['book']);
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort libs.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function sortLibs($type, $objectID)
|
||||
{
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$this->doc->updateLibOrder();
|
||||
return print(js::reload('parent.parent'));
|
||||
}
|
||||
$this->view->title = $this->lang->doc->sortLibs;
|
||||
$this->view->libs = $this->doc->getLibs($type, '', '', $objectID);
|
||||
$this->display();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
#pageActions ul.dropdown-menu {left: 67px !important;}
|
||||
#mainContent .c-id {width: 70px;}
|
||||
#mainContent .c-id > a {color: #0c60e1;}
|
||||
|
||||
@@ -103,3 +103,4 @@ ol, ul {margin-bottom: 0}
|
||||
.fullscreen-close {top: 8px !important;}
|
||||
|
||||
#subHeader .list-group>a.selected {color: #e9f2fb !important; background-color: #0c64eb !important;}
|
||||
#pageNav #dropMenu .table-col .list-group .icon-move {display:block; float: left; font-size: 12px; padding: 3px 4px 3px 1px;}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
.article-content {width: 100%; display: inline-block;}
|
||||
.outline {position: relative;}
|
||||
.outline .outline-toggle i.icon-angle-right, i.icon-angle-left {width: 18px; height: 18px; background: #efefef; border-radius: 50%; position: absolute; padding-left: 2px; padding-top: 1px;}
|
||||
.outline .outline-toggle i.icon-angle-right, i.icon-angle-left {width: 18px; height: 18px; border-radius: 50%; position: absolute; padding-left: 2px; padding-top: 1px;}
|
||||
.outline .outline-toggle i.icon-angle-right:before {content: "\e314"; cursor: pointer;}
|
||||
.outline .outline-toggle i.icon-angle-left:before {content: "\e315"; cursor: pointer;}
|
||||
.outline ul li {list-style: none;}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
#mainContent .doclib-name {font-size: 13px; font-weight: 550; padding: 10px 0px;}
|
||||
#mainContent #libs {padding-bottom: 10px;}
|
||||
#mainContent #libs .lib {padding-bottom: 5px;}
|
||||
#mainContent #libs .lib .lib-name{cursor: pointer;}
|
||||
#mainContent #libs .lib .icon-move {padding-left: 4px; font-size:13px; vertical-align: text-top; cursor: pointer;}
|
||||
@@ -0,0 +1,40 @@
|
||||
$(function()
|
||||
{
|
||||
/* Make libs sortable. */
|
||||
$('#libs').sortable(
|
||||
{
|
||||
trigger: '.lib > .icon-move, .lib > .lib-name',
|
||||
dropToClass: 'sort-to',
|
||||
stopPropagation: true,
|
||||
nested: true,
|
||||
selector: 'div',
|
||||
dragCssClass: 'drop-here',
|
||||
canMoveHere: function($ele, $target)
|
||||
{
|
||||
var maxTop = $('#libs .libList').height() - $ele.height();
|
||||
if(parseFloat($('.drag-shadow').css('top')) < 0) $('.drag-shadow').css('top', '0');
|
||||
if(parseFloat($('.drag-shadow').css('left')) != 0) $('.drag-shadow').css('left', '0');
|
||||
if(parseFloat($('.drag-shadow').css('top')) > maxTop) $('.drag-shadow').css('top', maxTop + 'px');
|
||||
if(parseFloat($('.drag-shadow').css('bottom')) > $('#libs').height()) $('.drag-shadow').css('bottom', '0');
|
||||
return true;
|
||||
},
|
||||
targetSelector: function($ele, $root)
|
||||
{
|
||||
var $libs = $ele.closest('#libs .libList');
|
||||
return $libs.children('div.lib');
|
||||
},
|
||||
always: function()
|
||||
{
|
||||
$('#libs,#libs .is-sorting').removeClass('is-sorting');
|
||||
},
|
||||
finish: function(e)
|
||||
{
|
||||
var orders = ',';
|
||||
$('#libs .libList').find('div.lib').each(function()
|
||||
{
|
||||
orders += $(this).attr('data-id') + ',';
|
||||
});
|
||||
$('#libs #libIdList').attr('value', orders);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -96,3 +96,7 @@ $(function()
|
||||
}
|
||||
});
|
||||
})
|
||||
$(document).on("click", '#bysearchTab', function()
|
||||
{
|
||||
$('.main-content > .cell > .detail > .menu-actions').remove();
|
||||
});
|
||||
|
||||
@@ -151,6 +151,7 @@ $lang->doc->removeMenu = 'Vom Menü entfernen';
|
||||
$lang->doc->search = 'Suche';
|
||||
$lang->doc->allCollections = 'All Collections';
|
||||
$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
|
||||
$lang->doc->sortLibs = 'Sort Libs';
|
||||
|
||||
global $config;
|
||||
/* Query condition list. */
|
||||
|
||||
@@ -151,6 +151,7 @@ $lang->doc->removeMenu = 'Remove from Menu';
|
||||
$lang->doc->search = 'Search';
|
||||
$lang->doc->allCollections = 'All Collections';
|
||||
$lang->doc->keywordsTips = 'Please use commas to separate keywords.';
|
||||
$lang->doc->sortLibs = 'Sort Libs';
|
||||
|
||||
global $config;
|
||||
/* Query condition list. */
|
||||
|
||||
@@ -151,6 +151,7 @@ $lang->doc->removeMenu = 'Décoller du Menu';
|
||||
$lang->doc->search = 'Rechercher';
|
||||
$lang->doc->allCollections = 'All Collections';
|
||||
$lang->doc->keywordsTips = 'Please use commas to separate multiple keywords.';
|
||||
$lang->doc->sortLibs = 'Sort Libs';
|
||||
|
||||
global $config;
|
||||
/* Query condition list. */
|
||||
|
||||
@@ -45,7 +45,7 @@ $lang->doclib->nameList['custom'] = '自定义文档库名称';
|
||||
|
||||
/* 字段列表。*/
|
||||
$lang->doc->common = '文档';
|
||||
$lang->doc->id = '编号';
|
||||
$lang->doc->id = '文档编号';
|
||||
$lang->doc->product = '所属' . $lang->productCommon;
|
||||
$lang->doc->project = '所属项目';
|
||||
$lang->doc->execution = '所属' . $lang->execution->common;
|
||||
@@ -151,6 +151,7 @@ $lang->doc->removeMenu = '从菜单栏移除';
|
||||
$lang->doc->search = '搜索';
|
||||
$lang->doc->allCollections = '查看全部收藏文档';
|
||||
$lang->doc->keywordsTips = '多个关键字请用逗号分隔。';
|
||||
$lang->doc->sortLibs = '文档库排序';
|
||||
|
||||
global $config;
|
||||
/* 查询条件列表 */
|
||||
|
||||
+175
-18
@@ -48,7 +48,7 @@ class docModel extends model
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->eq('api')
|
||||
->beginIF(!empty($appendLib))->orWhere('id')->eq($appendLib)->fi()
|
||||
->orderBy('id_desc')
|
||||
->orderBy('`order`_asc, id_desc')
|
||||
->fetchAll('id');
|
||||
$libs = array_filter($libs, array($this, 'checkPrivLib'));
|
||||
return $libs;
|
||||
@@ -61,6 +61,7 @@ class docModel extends model
|
||||
* @param string $extra
|
||||
* @param string $appendLibs
|
||||
* @param int $projectID
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -72,7 +73,7 @@ class docModel extends model
|
||||
->where('type')->ne('api')
|
||||
->beginIF($type == 'all')->andWhere('deleted')->eq(0)->fi()
|
||||
->andWhere('vision')->eq($this->config->vision)
|
||||
->orderBy('id_desc')
|
||||
->orderBy('`order` asc, id_desc')
|
||||
->query();
|
||||
}
|
||||
else
|
||||
@@ -83,7 +84,7 @@ class docModel extends model
|
||||
->beginIF($type)->andWhere('type')->eq($type)->fi()
|
||||
->beginIF(!$type)->andWhere('type')->ne('api')->fi()
|
||||
->beginIF($objectID and strpos(',product,project,execution,', ",$type,") !== false)->andWhere($type)->eq($objectID)->fi()
|
||||
->orderBy('`order`, id desc')->query();
|
||||
->orderBy("`order` asc, id_desc")->query();
|
||||
}
|
||||
|
||||
$products = $this->loadModel('product')->getPairs();
|
||||
@@ -128,7 +129,7 @@ class docModel extends model
|
||||
|
||||
if(!empty($appendLibs))
|
||||
{
|
||||
$stmt = $this->dao->select('*')->from(TABLE_DOCLIB)->where('id')->in($appendLibs)->orderBy('`order`, id desc')->query();
|
||||
$stmt = $this->dao->select('*')->from(TABLE_DOCLIB)->where('id')->in($appendLibs)->orderBy("`order` asc, id_desc")->query();
|
||||
while($lib = $stmt->fetch())
|
||||
{
|
||||
if(!isset($libPairs[$lib->id]) and $this->checkPrivLib($lib, $extra)) $libPairs[$lib->id] = $lib->name;
|
||||
@@ -931,19 +932,29 @@ class docModel extends model
|
||||
$this->config->doc->search['params']['project']['values'] = array('' => '') + $this->loadModel('project')->getPairsByProgram() + array('all' => $this->lang->doc->allProjects);
|
||||
$this->config->doc->search['params']['execution']['values'] = array('' => '') + $this->loadModel('execution')->getPairs() + array('all' => $this->lang->doc->allExecutions);
|
||||
$this->config->doc->search['params']['lib']['values'] = array('' => '') + $this->loadModel('doc')->getLibs('all', 'withObject') + array('all' => $this->lang->doclib->all);
|
||||
$this->config->doc->search['params']['product']['values'] = array('' => '') + $products + array('all' => $this->lang->doc->allProduct);
|
||||
|
||||
unset($this->config->doc->search['fields']['module']);
|
||||
}
|
||||
elseif(in_array($type, array('product', 'project', 'execution', 'custom', 'book')))
|
||||
{
|
||||
$queryName = $type . 'Doc';
|
||||
$this->config->doc->search['module'] = $queryName;
|
||||
$this->config->doc->search['params']['lib']['values'] = array('' => '', $libID => (isset($libs[$libID]) ? $libs[$libID]->name : $libID), 'all' => $this->lang->doclib->all);
|
||||
unset($this->config->doc->search['fields']['product']);
|
||||
unset($this->config->doc->search['fields']['execution']);
|
||||
unset($this->config->doc->search['fields']['module']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$products = $this->product->getPairs('nocode', $this->session->project);
|
||||
$this->config->doc->search['params']['execution']['values'] = array('' => '') + $this->loadModel('execution')->getPairs($this->session->project, 'all', 'noclosed') + array('all' => $this->lang->doc->allExecutions);
|
||||
$this->config->doc->search['params']['lib']['values'] = array('' => '', $libID => ($libID ? $libs[$libID] : 0), 'all' => $this->lang->doclib->all);
|
||||
$this->config->doc->search['params']['product']['values'] = array('' => '') + $products + array('all' => $this->lang->doc->allProduct);
|
||||
}
|
||||
|
||||
$this->config->doc->search['actionURL'] = $actionURL;
|
||||
$this->config->doc->search['queryID'] = $queryID;
|
||||
$this->config->doc->search['params']['product']['values'] = array('' => '') + $products + array('all' => $this->lang->doc->allProduct);
|
||||
$this->config->doc->search['actionURL'] = $actionURL;
|
||||
$this->config->doc->search['queryID'] = $queryID;
|
||||
|
||||
/* Get the modules. */
|
||||
$moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($libID, 'doc', $startModuleID = 0);
|
||||
@@ -1401,8 +1412,8 @@ class docModel extends model
|
||||
->andWhere('vision')->eq($this->config->vision)
|
||||
->andWhere('type')->eq($type)
|
||||
->beginIF(!empty($appendLib))->orWhere('id')->eq($appendLib)->fi()
|
||||
->beginIF($type == 'custom')->orderBy('`order`, id')->fi()
|
||||
->beginIF($type == 'book')->orderBy('id_desc')->fi()
|
||||
->beginIF($type == 'custom')->orderBy('`order` asc, id_desc')->fi()
|
||||
->beginIF($type == 'book')->orderBy('`order` asc, id_desc')->fi()
|
||||
->fetchAll('id');
|
||||
}
|
||||
elseif($type != 'product' and $type != 'project' and $type != 'execution')
|
||||
@@ -1417,7 +1428,7 @@ class docModel extends model
|
||||
->andWhere($type)->eq($objectID)
|
||||
->beginIF(!empty($appendLib))->orWhere('id')->eq($appendLib)->fi()
|
||||
->beginIF($type == 'project')->andWhere('execution')->eq(0)->fi()
|
||||
->orderBy('`order`, id')
|
||||
->orderBy('`order` asc, id_desc')
|
||||
->fetchAll('id');
|
||||
}
|
||||
|
||||
@@ -1432,10 +1443,24 @@ class docModel extends model
|
||||
->fetchPairs('product', 'projectCount');
|
||||
}
|
||||
|
||||
$docCountPairs = $this->dao->select('lib, count(id) as docCount')->from(TABLE_DOC)
|
||||
->where('lib')->in(array_keys($objectLibs))
|
||||
->andWhere('vision')->eq($this->config->vision)
|
||||
->andWhere('type')->notin('chapter')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->groupBy('lib')
|
||||
->fetchPairs('lib');
|
||||
|
||||
$libs = array();
|
||||
foreach($objectLibs as $lib)
|
||||
{
|
||||
if($this->checkPrivLib($lib)) $libs[$lib->id] = $lib;
|
||||
if($this->checkPrivLib($lib))
|
||||
{
|
||||
$docCount = zget($docCountPairs, $lib->id, 0);
|
||||
$lib->docCount = $docCount > 99 ? '99+' : $docCount;
|
||||
|
||||
$libs[$lib->id] = $lib;
|
||||
}
|
||||
}
|
||||
|
||||
$itemCounts = $this->statLibCounts(array_keys($libs));
|
||||
@@ -1638,7 +1663,7 @@ class docModel extends model
|
||||
|
||||
$idList = array_keys($docs);
|
||||
$docIdList = $this->dao->select('id')->from(TABLE_DOC)->where($type)->eq($objectID)->andWhere('id')->in($idList)->get();
|
||||
$searchTitle = $this->get->title;
|
||||
$searchTitle = $this->post->title;
|
||||
if($type == 'product')
|
||||
{
|
||||
$storyIdList = $this->dao->select('id')->from(TABLE_STORY)->where('product')->eq($objectID)->andWhere('deleted')->eq('0')->andWhere('product')->in($userView)->get();
|
||||
@@ -1699,7 +1724,7 @@ class docModel extends model
|
||||
->orWhere("(objectType = 'build' and objectID in ($buildIdList))")
|
||||
->fi()
|
||||
->markRight(1)
|
||||
->beginIF($searchTitle)->andWhere('title')->like("%{$searchTitle}%")->fi()
|
||||
->beginIF($searchTitle !== false)->andWhere('title')->like("%{$searchTitle}%")->fi()
|
||||
->orderBy($orderBy)
|
||||
->page($pager)
|
||||
->fetchAll('id');
|
||||
@@ -2141,7 +2166,21 @@ class docModel extends model
|
||||
->limit($favoritesLimit)
|
||||
->fetchAll();
|
||||
|
||||
$html = "<div class='btn-group dropdown-hover'>";
|
||||
$html = '';
|
||||
$rawMethod = $this->app->rawMethod;
|
||||
if($this->app->rawMethod == 'showfiles')
|
||||
{
|
||||
$html = '<div class="btn-group">';
|
||||
$html .= '<form class="input-control has-icon-right table-col" method="post">';
|
||||
$html .= html::input('title', $this->post->title, "class='form-control' placeholder='{$this->lang->doc->fileTitle}'");
|
||||
$html .= html::submitButton("<i class='icon icon-search'></i>", '', "btn btn-icon btn-link input-control-icon-right");
|
||||
$html .= '</form></div>';
|
||||
}
|
||||
elseif(in_array($rawMethod, array('tablecontents', 'objectlibs', 'product', 'project', 'execution', 'book', 'custom')))
|
||||
{
|
||||
$html = '<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i>' . $this->lang->doc->search . '</a>';
|
||||
}
|
||||
$html .= "<div class='btn-group dropdown-hover'>";
|
||||
$html .= "<a href='javascript:;' class='btn btn-link' data-toggle='dropdown'>{$this->lang->doc->myCollection}</a>";
|
||||
$html .= "<ul class='dropdown-menu pull-right' id='collection-menu'>";
|
||||
|
||||
@@ -2353,12 +2392,20 @@ EOT;
|
||||
foreach($libs as $key => $lib)
|
||||
{
|
||||
$selected = $key == $libID ? 'selected' : '';
|
||||
$output .= html::a(inlink($methodName, "type=$type&objectID=$objectID&libID=$key"), $lib->name, '', "class='$selected' data-app='{$this->app->tab}'");
|
||||
$docCount = isset($lib->docCount) ? $lib->docCount : 0;
|
||||
$output .= html::a(inlink($methodName, "type=$type&objectID=$objectID&libID=$key"), "<span style='display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;'>$lib->name</span> <span>($docCount)</span>", '', "class='$selected' data-app='{$this->app->tab}' title='$lib->name ($docCount)' style='display: flex; justify-content: start;'");
|
||||
}
|
||||
if($type != 'custom' and $type != 'book')
|
||||
{
|
||||
$selected = empty($libID) ? 'selected' : '';
|
||||
$output .= html::a(inlink('showFiles', "type=$type&objectID=$objectID"), $this->lang->doclib->files, '', "class='$selected' data-app='{$this->app->tab}'");
|
||||
$files = $this->getLibFiles($type, $objectID, 't1.id_desc');
|
||||
$fileCount = count($files) > 99 ? '99+' : count($files);
|
||||
$selected = empty($libID) ? 'selected' : '';
|
||||
$output .= html::a(inlink('showFiles', "type=$type&objectID=$objectID"), "{$this->lang->doclib->files} ($fileCount)", '', "class='$selected' data-app='{$this->app->tab}' title='{$this->lang->doclib->files} ($fileCount)'");
|
||||
}
|
||||
if(count($libs) >= 2 and common::hasPriv('doc', 'sortLibs'))
|
||||
{
|
||||
$output .= '<li class="divider"></li>';
|
||||
$output .= html::a(inlink('sortLibs', "type=$type&objectID=$objectID", '', true), "<i class='icon-move'></i> {$this->lang->doc->sortLibs}", '', "data-title='{$this->lang->doc->sortLibs}' data-toggle='modal' data-type='iframe' data-width='400px' data-app='{$this->app->tab}'");
|
||||
}
|
||||
$output .= "</div></div></div></div></div>";
|
||||
}
|
||||
@@ -2767,7 +2814,7 @@ EOT;
|
||||
$table = $this->config->objectTables[$type];
|
||||
$libs = $this->getLibsByObject($type, $objectID, '', $appendLib);
|
||||
|
||||
if($libID == 0) $libID = key($libs);
|
||||
if($libID == 0) $libID = reset($libs)->id;
|
||||
$this->lang->modulePageNav = $this->select($type, $objects, $objectID, $libs, $libID);
|
||||
|
||||
if($this->app->tab == 'doc') $this->app->rawMethod = $type;
|
||||
@@ -2812,4 +2859,114 @@ EOT;
|
||||
|
||||
return $autoloadPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get docs by search.
|
||||
*
|
||||
* @param string $type
|
||||
* @param int $objectID
|
||||
* @param int $libID
|
||||
* @param int $queryID
|
||||
* @param object $pager
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDocsBySearch($type, $objectID, $libID, $queryID, $pager)
|
||||
{
|
||||
$queryName = $type . 'DocQuery';
|
||||
$queryForm = $type . 'DocForm';
|
||||
if($queryID)
|
||||
{
|
||||
$query = $this->loadModel('search')->getQuery($queryID);
|
||||
if($query)
|
||||
{
|
||||
$this->session->set($queryName, $query->sql);
|
||||
$this->session->set($queryForm, $query->form);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->session->set($queryName, ' 1 = 1');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if($this->session->$queryName == false) $this->session->set($queryName, ' 1 = 1');
|
||||
}
|
||||
|
||||
$libs = $this->getLibsByObject($type, $objectID);
|
||||
$query = $this->session->$queryName;
|
||||
$docs = $this->dao->select('*')->from(TABLE_DOC)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere(str_replace("`lib` = 'all'", '1', $query))
|
||||
->beginIF(strpos($query, "`lib` = 'all'") === false)->andWhere('lib')->eq($libID)->fi()
|
||||
->andWhere('lib')->in(array_keys($libs))
|
||||
->beginIF($this->config->doc->notArticleType)->andWhere('type')->notIN($this->config->doc->notArticleType)->fi()
|
||||
->orderBy('id_desc')
|
||||
->page($pager)
|
||||
->fetchAll('id');
|
||||
|
||||
$docContents = $this->dao->select('*')->from(TABLE_DOCCONTENT)->where('doc')->in(array_keys($docs))->orderBy('version,doc')->fetchAll('doc');
|
||||
|
||||
$files = $this->dao->select('*')->from(TABLE_FILE)
|
||||
->where('objectType')->eq('doc')
|
||||
->andWhere('objectID')->in(array_keys($docs))
|
||||
->fetchGroup('objectID');
|
||||
foreach($docs as $docID => $doc)
|
||||
{
|
||||
$docs[$docID]->fileSize = 0;
|
||||
if(isset($files[$docID]))
|
||||
{
|
||||
$docContent = $docContents[$docID];
|
||||
$fileSize = 0;
|
||||
foreach($files[$docID] as $file)
|
||||
{
|
||||
if(strpos(",{$docContent->files},", ",{$file->id},") === false) continue;
|
||||
$fileSize += $file->size;
|
||||
}
|
||||
|
||||
if($fileSize < 1024)
|
||||
{
|
||||
$fileSize .= 'B';
|
||||
}
|
||||
elseif($fileSize < 1024 * 1024)
|
||||
{
|
||||
$fileSize = round($fileSize / 1024, 2) . 'KB';
|
||||
}
|
||||
elseif($fileSize < 1024 * 1024 * 1024)
|
||||
{
|
||||
$fileSize = round($fileSize / 1024 / 1024, 2) . 'MB';
|
||||
}
|
||||
else
|
||||
{
|
||||
$fileSize = round($fileSize / 1024 / 1024 / 1024, 2) . 'G';
|
||||
}
|
||||
|
||||
$docs[$docID]->fileSize = $fileSize;
|
||||
}
|
||||
}
|
||||
return $docs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Lib orders.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function updateLibOrder()
|
||||
{
|
||||
$libIdList = $this->post->libIdList;
|
||||
$libIdList = explode(',', $libIdList);
|
||||
|
||||
$order = 1;
|
||||
foreach($libIdList as $libID)
|
||||
{
|
||||
if(!$libID) continue;
|
||||
|
||||
$this->dao->update(TABLE_DOCLIB)->set('`order`')->eq($order * 10)->where('id')->eq($libID)->exec();
|
||||
|
||||
$order++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,11 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php js::set('browseType', $browseType);?>
|
||||
<?php js::set('docLang', $lang->doc);?>
|
||||
<?php js::set('confirmDelete', $lang->doc->confirmDelete)?>
|
||||
<?php if($browseType == 'bySearch'):?>
|
||||
<div class="cell<?php if($browseType == 'bySearch') echo ' show';?>" id="queryBox" data-module=<?php echo $type . 'Doc';?>></div>
|
||||
<?php endif;?>
|
||||
<div class="main-row fade" id="mainRow">
|
||||
<div id="mainContent">
|
||||
<div class="panel block-files block-sm no-margin">
|
||||
@@ -26,8 +30,13 @@
|
||||
<table class="table table-borderless table-hover table-files table-fixed no-margin">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if($browseType !== 'bySearch'):?>
|
||||
<th class="c-name"><?php echo $lang->doc->title;?></th>
|
||||
<th class="w-200px c-name"><?php echo $lang->doc->object;?></th>
|
||||
<?php else:?>
|
||||
<th class="c-id"><?php echo $lang->doc->id;?></th>
|
||||
<th class="c-name"><?php echo $lang->doc->title;?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-num"><?php echo $lang->doc->size;?></th>
|
||||
<th class="c-user"><?php echo $lang->doc->addedBy;?></th>
|
||||
<th class="c-datetime"><?php echo $lang->doc->addedDate;?></th>
|
||||
@@ -40,6 +49,7 @@
|
||||
<?php $star = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
|
||||
<?php $collectTitle = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?>
|
||||
<tr>
|
||||
<?php if($browseType !== 'bySearch'):?>
|
||||
<?php if(common::hasPriv('doc', 'view')):?>
|
||||
<td class="c-name"><?php echo html::a($this->createLink('doc', 'view', "docID=$doc->id&version=0", '', true), "<i class='icon icon-file-text text-muted'></i> " . $doc->title, '', "title='{$doc->title}' class='iframe' data-width='90%'");?></td>
|
||||
<?php else:?>
|
||||
@@ -54,6 +64,16 @@
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<?php else:?>
|
||||
<?php if(common::hasPriv('doc', 'objectLibs')):?>
|
||||
<?php $objectID = isset($doc->{$type}) ? $doc->{$type} : 0;?>
|
||||
<td class="c-id"><?php echo html::a($this->createLink('doc', 'objectLibs', "type=$type&objectID=$objectID&libID=$doc->lib&docID=$doc->id"), $doc->id, '', "title='{$doc->id}' data-app='{$this->app->tab}'");?></td>
|
||||
<td class="c-name"><?php echo html::a($this->createLink('doc', 'objectLibs', "type=$type&objectID=$objectID&libID=$doc->lib&docID=$doc->id"), "<i class='icon icon-file-text text-muted'></i> " . $doc->title, '', "title='{$doc->title}' data-app='{$this->app->tab}'");?></td>
|
||||
<?php else:?>
|
||||
<td class='c-id' title='<?php echo $doc->id;?>'><?php echo "<i class='icon icon-file-text text-muted'></i> {$doc->id}";?></td>
|
||||
<td class='c-name' title='<?php echo $doc->title;?>'><?php echo "<i class='icon icon-file-text text-muted'></i> {$doc->title}";?></td>
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<td class="c-num"><?php echo $doc->fileSize ? $doc->fileSize : '-';?></td>
|
||||
<td class="c-user"><?php echo zget($users, $doc->addedBy);?></td>
|
||||
<td class="c-datetime"><?php echo formatTime($doc->addedDate, 'y-m-d');?></td>
|
||||
|
||||
@@ -99,7 +99,7 @@ $("a[href^='###']").click(function()
|
||||
<td colspan="2">
|
||||
<div class="input-group">
|
||||
<?php
|
||||
echo html::select('mailto[]', $users, '', "multiple class='form-control chosen'");
|
||||
echo html::select('mailto[]', $users, '', "multiple class='form-control picker-select' data-dropDirection='top'");
|
||||
echo $this->fetch('my', 'buildContactLists');
|
||||
?>
|
||||
</div>
|
||||
@@ -118,11 +118,11 @@ $("a[href^='###']").click(function()
|
||||
<td colspan='2'>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->doclib->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control picker-select' multiple data-dropDirection='top'")?>
|
||||
</div>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->doclib->user?></span>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control picker-select' multiple data-dropDirection='top'")?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -69,11 +69,11 @@
|
||||
<td>
|
||||
<div id='groupBox' class='input-group'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->doclib->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('groups[]', $groups, '', "class='form-control picker-select' multiple")?>
|
||||
</div>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->doclib->user?></span>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('users[]', $users, '', "class='form-control picker-select' multiple")?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
<?php echo html::a($this->createLink('doc', 'view', "docID=$doc->id"), $doc->title, '', "title='$doc->title'");?>
|
||||
<small> <?php echo $lang->arrow . ' ' . $lang->doc->edit;?></small>
|
||||
</h2>
|
||||
<div class='pull-right'><?php echo html::a('###', $lang->save, '', 'id="top-submit" class="btn btn-primary"');?></div>
|
||||
</div>
|
||||
<form class='load-indicator main-form form-ajax' method='post' enctype='multipart/form-data' id='dataform'>
|
||||
<table class='table table-form'>
|
||||
@@ -75,7 +74,7 @@
|
||||
<td colspan="2">
|
||||
<div class="input-group">
|
||||
<?php
|
||||
echo html::select('mailto[]', $users, $doc->mailto, "multiple class='form-control chosen'");
|
||||
echo html::select('mailto[]', $users, $doc->mailto, "multiple class='form-control picker-select'");
|
||||
echo $this->fetch('my', 'buildContactLists');
|
||||
?>
|
||||
</div>
|
||||
@@ -94,11 +93,11 @@
|
||||
<td colspan='2'>
|
||||
<div class='input-group w-p100'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->doclib->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, $doc->groups, "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('groups[]', $groups, $doc->groups, "class='form-control picker-select' multiple")?>
|
||||
</div>
|
||||
<div class='input-group w-p100'>
|
||||
<span class='input-group-addon'><?php echo $lang->doclib->user?></span>
|
||||
<?php echo html::select('users[]', $users, $doc->users, "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('users[]', $users, $doc->users, "class='form-control picker-select' multiple")?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -66,11 +66,11 @@
|
||||
<td>
|
||||
<div id='groupBox' class='input-group'>
|
||||
<span class='input-group-addon groups-addon'><?php echo $lang->doclib->group?></span>
|
||||
<?php echo html::select('groups[]', $groups, $lib->groups, "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('groups[]', $groups, $lib->groups, "class='form-control picker-select' multiple")?>
|
||||
</div>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon'><?php echo $lang->doclib->user?></span>
|
||||
<?php echo html::select('users[]', $users, $lib->users, "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select('users[]', $users, $lib->users, "class='form-control picker-select' multiple")?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<?php if($app->tab == 'execution'):;?>
|
||||
<style>.panel-body{min-height: 180px}</style>
|
||||
<?php endif;?>
|
||||
<div class="cell<?php if($type == 'bySearch') echo ' show';?>" id="queryBox" data-module=<?php echo $type . 'Doc';?>></div>
|
||||
<div class="fade main-row split-row" id="mainRow">
|
||||
<?php if($libID):?>
|
||||
<?php include './side.html.php';?>
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* The sortlibs view file of doc module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2022 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Mengyi Liu <liumengyi@easycorp.ltd>
|
||||
* @package doc
|
||||
* @version $Id: sorlibs.html.php 958 2022-06-21 14:20:42Z $
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id="main">
|
||||
<div class='main-header'>
|
||||
<h2><?php echo $lang->doc->order;?></h2>
|
||||
</div>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='doclib-name'><?php echo $lang->doclib->name?></div>
|
||||
<?php $libIdList = ',';?>
|
||||
<form id='libs' class='load-indicator main-form' method='post' target='hiddenwin'>
|
||||
<div class='libList'>
|
||||
<?php foreach($libs as $libID => $libName):?>
|
||||
<?php $libIdList .= "$libID,";?>
|
||||
<div class='lib' data-id='<?php echo $libID;?>'>
|
||||
<span class='lib-name'><?php echo $libName;?></span><i class='icon-move'></i>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php echo html::hidden('libIdList', trim($libIdList, ','));?>
|
||||
<div class='text-center'><?php echo html::submitButton($lang->save);?></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -12,6 +12,7 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('moduleTree', $moduleTree);?>
|
||||
<?php js::set('docLang', $lang->doc);?>
|
||||
<?php
|
||||
$sideLibs = array();
|
||||
foreach($lang->doclib->tabList as $libType => $typeName) $sideLibs[$libType] = $this->doc->getLimitLibs($libType);
|
||||
@@ -27,6 +28,7 @@ if($this->methodName != 'browse')
|
||||
}
|
||||
if(empty($type)) $type = 'product';
|
||||
?>
|
||||
<div class="cell<?php if($param == 'bySearch') echo ' show';?>" id="queryBox" data-module=<?php echo $type . 'Doc';?>></div>
|
||||
<div class="main-content">
|
||||
<div class="cell" id="<?php echo $type;?>">
|
||||
<div class="detail">
|
||||
|
||||
@@ -2924,8 +2924,8 @@ class execution extends control
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$this->execution->linkStory($objectID, array(), array(), $extra);
|
||||
if($object->type != 'project' and $object->project != 0) $this->execution->linkStory($object->project);
|
||||
$this->execution->linkStory($objectID, array(), array(), $extra);
|
||||
|
||||
if(isonlybody())
|
||||
{
|
||||
@@ -3232,7 +3232,7 @@ class execution extends control
|
||||
$users = $this->loadModel('user')->getPairs('nodeleted|noclosed');
|
||||
$members = $this->user->getTeamMemberPairs($objectID, $type);
|
||||
|
||||
return print(html::select('teamMembers[]', $users, array_keys($members), "class='form-control chosen' multiple"));
|
||||
return print(html::select('teamMembers[]', $users, array_keys($members), "class='form-control picker-select' multiple"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,10 +12,13 @@
|
||||
.dynamic .timeline-tag {left: -75px; font-size: 14px; color: #838A9D;}
|
||||
.dynamic .timeline-text {color: #3C4353;}
|
||||
.dynamic .text-muted {color: #838A9D;}
|
||||
.dynamic .label-id {top: -1px;}
|
||||
.dynamic .label-id {top: -1px; border: 1px solid rgba(131,138,157,0.25); color: #838A9D;}
|
||||
.dynamic.active .timeline,
|
||||
.dynamic.active .dynamic-date {border-color: #00a9fc;}
|
||||
.dynamic.active .dynamic-date:before {background-color: #00a9fc;}
|
||||
.dynamic.collapsed .timeline {max-height: 58px;}
|
||||
.dynamic.collapsed .timeline > li + li {display: none;}
|
||||
.dynamic.collapsed .dynamic-btn > .icon:before {content: '\f0d8';}
|
||||
|
||||
.dynamic .label-action {margin-left: 12px;}
|
||||
.dynamic .label-id + a {color: #838A9D;}
|
||||
|
||||
@@ -72,7 +72,7 @@ $(function()
|
||||
$.get(createLink('execution', 'ajaxGetTeamMembers', 'objectID=' + objectID), function(data)
|
||||
{
|
||||
$('#teamMembers').parent().html(data);
|
||||
$('#teamMembers').chosen();
|
||||
$('#teamMembers').picker({chosenMode: true});
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
@@ -134,6 +134,7 @@ $lang->execution->sortColumn = 'Kanban Card Sorting';
|
||||
$lang->execution->batchCreateStory = "Batch create {$lang->SRCommon}";
|
||||
$lang->execution->batchCreateTask = 'Batch create task';
|
||||
$lang->execution->kanbanNoLinkProduct = "Kanban not linked {$lang->productCommon}";
|
||||
$lang->execution->myTask = "My Task";
|
||||
$lang->execution->list = 'List';
|
||||
|
||||
/* Fields of zt_team. */
|
||||
|
||||
@@ -134,6 +134,7 @@ $lang->execution->sortColumn = '看板列卡片排序';
|
||||
$lang->execution->batchCreateStory = "批量新建{$lang->SRCommon}";
|
||||
$lang->execution->batchCreateTask = '批量建任务';
|
||||
$lang->execution->kanbanNoLinkProduct = "看板没有关联{$lang->productCommon}";
|
||||
$lang->execution->myTask = "我的任务";
|
||||
$lang->execution->list = '列表';
|
||||
|
||||
/* Fields of zt_team. */
|
||||
|
||||
@@ -167,7 +167,10 @@ js::set('isCNLang', !$this->loadModel('common')->checkNotCN())
|
||||
<div class='table-footer'>
|
||||
<?php if($canBatchEdit):?>
|
||||
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
|
||||
<div class="table-actions btn-toolbar"><?php echo html::submitButton($lang->execution->batchEdit, '', 'btn');?></div>
|
||||
<div class="table-actions btn-toolbar">
|
||||
<?php echo html::submitButton($lang->execution->batchEdit, '', 'btn');?>
|
||||
<div class="table-statistic"></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->execution->team;?></th>
|
||||
<td colspan='3'><?php echo html::select('teamMembers[]', $users, '', "class='form-control chosen' multiple"); ?></td>
|
||||
<td colspan='3'><?php echo html::select('teamMembers[]', $users, '', "class='form-control picker-select' multiple"); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->kanban->columnWidth;?></th>
|
||||
@@ -246,7 +246,7 @@
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td colspan='2'>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('whitelist[]', $users, $whitelist, 'class="form-control chosen" multiple');?>
|
||||
<?php echo html::select('whitelist[]', $users, $whitelist, 'class="form-control picker-select" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName=whitelist");?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
<?php endif; ?>
|
||||
<tr>
|
||||
<th><?php echo $lang->execution->team;?></th>
|
||||
<td colspan='2'><?php echo html::select('teamMembers[]', $users, array_keys($teamMembers), "class='form-control chosen' multiple"); ?></td>
|
||||
<td colspan='2'><?php echo html::select('teamMembers[]', $users, array_keys($teamMembers), "class='form-control picker-select' multiple"); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->kanban->columnWidth;?></th>
|
||||
@@ -221,7 +221,7 @@
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select('whitelist[]', $users, $execution->whitelist, 'class="form-control chosen" multiple');?>
|
||||
<?php echo html::select('whitelist[]', $users, $execution->whitelist, 'class="form-control picker-select" multiple');?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists', "dropdownName=whitelist");?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<table class='table table-form'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class='w-80px'><?php echo $lang->execution->dateRange;?></th>
|
||||
<th class='c-date'><?php echo $lang->execution->dateRange;?></th>
|
||||
<td colspan='2'>
|
||||
<div class='input-group'>
|
||||
<?php echo html::input('begin', $execution->begin, "class='form-control form-date' onchange='computeWorkDays()' placeholder='" . $lang->execution->begin . "'");?>
|
||||
@@ -43,7 +43,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class='w-100px'></td>
|
||||
<td class='c-date'></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->execution->days;?></th>
|
||||
|
||||
@@ -35,24 +35,23 @@ $account = $this->app->user->account;
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class='btn-group'>
|
||||
<?php common::printIcon('story', 'export', "productID=$productID&orderBy=id_desc", '', 'button', '', '', 'export', '', "data-group='execution'");?>
|
||||
</div>
|
||||
<?php if($canBeChanged and $productID and !$this->loadModel('story')->checkForceReview()) common::printLink('story', 'create', "productID=$productID&branch=&moduleID=0&story=0&execution=$execution->id", "<i class='icon icon-plus'></i> " . $lang->execution->createStory, '', "class='btn btn-secondary' class='btn btn-link export' data-group='execution'");?>
|
||||
<?php
|
||||
common::printIcon('story', 'export', "productID=$productID&orderBy=id_desc", '', 'button', '', '', 'export', '', "data-group='execution'");
|
||||
|
||||
if($canBeChanged)
|
||||
{
|
||||
if(commonModel::isTutorialMode())
|
||||
{
|
||||
$wizardParams = helper::safe64Encode("execution=$execution->id");
|
||||
echo html::a($this->createLink('tutorial', 'wizard', "module=execution&method=linkStory¶ms=$wizardParams"), "<i class='icon-link'></i> {$lang->execution->linkStory}",'', "class='btn btn-link link-story-btn'");
|
||||
echo html::a($this->createLink('tutorial', 'wizard', "module=execution&method=linkStory¶ms=$wizardParams"), "<i class='icon-link'></i> {$lang->execution->linkStory}", '', "class='btn btn-primary'");
|
||||
}
|
||||
else
|
||||
{
|
||||
common::printIcon('execution', 'linkStory', "execution=$execution->id", '', 'button', 'link', '', 'btn-link link-story-btn');
|
||||
common::printLink('execution', 'linkStory', "execution=$execution->id", "<i class='icon icon-link'></i> " . $lang->execution->linkStory, '', "class='btn btn-primary'");
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php if($canBeChanged and $productID and !$this->loadModel('story')->checkForceReview()) common::printLink('story', 'create', "productID=$productID&branch=&moduleID=0&story=0&execution=$execution->id", "<i class='icon icon-plus'></i> " . $lang->execution->createStory, '', "class='btn btn-primary' class='btn btn-link export' data-group='execution'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="kanban" class="main-table" data-ride="table" data-checkable="false" data-group="true">
|
||||
|
||||
@@ -1209,6 +1209,7 @@ $lang->resource->doc->collect = 'collectAction';
|
||||
$lang->resource->doc->tableContents = 'tableContents';
|
||||
$lang->resource->doc->showFiles = 'showFiles';
|
||||
$lang->resource->doc->updateOrder = 'updateOrder';
|
||||
$lang->resource->doc->sortLibs = 'sortLibs';
|
||||
|
||||
$lang->doc->methodOrder[0] = 'index';
|
||||
$lang->doc->methodOrder[5] = 'browse';
|
||||
@@ -1225,6 +1226,8 @@ $lang->doc->methodOrder[55] = 'objectLibs';
|
||||
$lang->doc->methodOrder[60] = 'collect';
|
||||
$lang->doc->methodOrder[65] = 'tableContents';
|
||||
$lang->doc->methodOrder[70] = 'showFiles';
|
||||
$lang->doc->methodOrder[75] = 'updateOrder';
|
||||
$lang->doc->methodOrder[80] = 'sortLibs';
|
||||
|
||||
/* Mail. */
|
||||
$lang->resource->mail = new stdclass();
|
||||
@@ -1580,13 +1583,14 @@ $lang->search->methodOrder[35] = 'buildIndex';
|
||||
|
||||
/* Admin. */
|
||||
$lang->resource->admin = new stdclass();
|
||||
$lang->resource->admin->index = 'index';
|
||||
$lang->resource->admin->checkDB = 'checkDB';
|
||||
$lang->resource->admin->safe = 'safeIndex';
|
||||
$lang->resource->admin->checkWeak = 'checkWeak';
|
||||
$lang->resource->admin->sso = 'ssoAction';
|
||||
$lang->resource->admin->register = 'register';
|
||||
$lang->resource->admin->ztCompany = 'ztCompany';
|
||||
$lang->resource->admin->index = 'index';
|
||||
$lang->resource->admin->checkDB = 'checkDB';
|
||||
$lang->resource->admin->safe = 'safeIndex';
|
||||
$lang->resource->admin->checkWeak = 'checkWeak';
|
||||
$lang->resource->admin->sso = 'ssoAction';
|
||||
$lang->resource->admin->register = 'register';
|
||||
$lang->resource->admin->ztCompany = 'ztCompany';
|
||||
$lang->resource->admin->resetPWDSetting = 'resetPWDSetting';
|
||||
|
||||
$lang->admin->methodOrder[0] = 'index';
|
||||
$lang->admin->methodOrder[5] = 'checkDB';
|
||||
@@ -1595,6 +1599,7 @@ $lang->admin->methodOrder[15] = 'checkWeak';
|
||||
$lang->admin->methodOrder[20] = 'sso';
|
||||
$lang->admin->methodOrder[25] = 'register';
|
||||
$lang->admin->methodOrder[30] = 'ztCompany';
|
||||
$lang->admin->methodOrder[35] = 'resetPWDSetting';
|
||||
|
||||
/* Extension. */
|
||||
$lang->resource->extension = new stdclass();
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<td>
|
||||
<?php if($programs):?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("actions[programs][]", $programs, isset($group->acl['programs']) ? join(',', $group->acl['programs']) : '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select("actions[programs][]", $programs, isset($group->acl['programs']) ? join(',', $group->acl['programs']) : '', "class='form-control picker-select' multiple")?>
|
||||
<span class='input-group-addon strong'><?php echo $lang->group->noticeVisit?></span>
|
||||
</div>
|
||||
<?php else:?>
|
||||
@@ -65,7 +65,7 @@
|
||||
<td>
|
||||
<?php if($products):?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("actions[products][]", $products, isset($group->acl['products']) ? join(',', $group->acl['products']) : '', "class='form-control chosen' multiple")?>
|
||||
<?php echo html::select("actions[products][]", $products, isset($group->acl['products']) ? join(',', $group->acl['products']) : '', "class='form-control picker-select' multiple")?>
|
||||
<span class='input-group-addon strong'><?php echo $lang->group->noticeVisit?></span>
|
||||
</div>
|
||||
<?php else:?>
|
||||
@@ -78,7 +78,7 @@
|
||||
<td>
|
||||
<?php if($projects):?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("actions[projects][]", $projects, isset($group->acl['projects']) ? join(',', $group->acl['projects']) : '', "class='form-control chosen' drop_direction='down' multiple")?>
|
||||
<?php echo html::select("actions[projects][]", $projects, isset($group->acl['projects']) ? join(',', $group->acl['projects']) : '', "class='form-control picker-select' data-dropDirection='bottom' multiple")?>
|
||||
<span class='input-group-addon strong'><?php echo $lang->group->noticeVisit?></span>
|
||||
</div>
|
||||
<?php else:?>
|
||||
@@ -91,7 +91,7 @@
|
||||
<td>
|
||||
<?php if($executions):?>
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("actions[sprints][]", $executions, isset($group->acl['sprints']) ? join(',', $group->acl['sprints']) : '', "class='form-control chosen' drop_direction='down' multiple")?>
|
||||
<?php echo html::select("actions[sprints][]", $executions, isset($group->acl['sprints']) ? join(',', $group->acl['sprints']) : '', "class='form-control picker-select' data-dropDirection='bottom' multiple")?>
|
||||
<span class='input-group-addon strong'><?php echo $lang->group->noticeVisit?></span>
|
||||
</div>
|
||||
<?php else:?>
|
||||
|
||||
@@ -233,13 +233,13 @@ class install extends control
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$this->install->grantPriv();
|
||||
if(dao::isError()) return print(js::error(dao::getError()) . js::locate('back'));
|
||||
if(dao::isError()) return print(js::error(dao::getError()));
|
||||
|
||||
$this->install->updateLang();
|
||||
if(dao::isError()) return print(js::error(dao::getError()) . js::locate('back'));
|
||||
if(dao::isError()) return print(js::error(dao::getError()));
|
||||
|
||||
if($this->post->importDemoData) $this->install->importDemoData();
|
||||
if(dao::isError()) return print(js::alert($this->lang->install->errorImportDemoData) . js::locate('back'));
|
||||
if(dao::isError()) return print(js::alert($this->lang->install->errorImportDemoData));
|
||||
|
||||
$this->loadModel('setting');
|
||||
$this->setting->updateVersion($this->config->version);
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
.c-company {width: 80px !important;}
|
||||
.c-company-value {width: 300px !important;}
|
||||
|
||||
.mw-table {max-width: 650px !important;}
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
.c-company {width: 150px !important;}
|
||||
.c-company-value {width: 350px !important;}
|
||||
|
||||
.mw-table {max-width: 950px !important;}
|
||||
|
||||
@@ -161,6 +161,9 @@ $lang->install->company = 'Firmenname';
|
||||
$lang->install->account = 'Admin Konto';
|
||||
$lang->install->password = 'Admin Passwort';
|
||||
|
||||
$lang->install->placeholder = new stdclass();
|
||||
$lang->install->placeholder->password = 'Combination of letters, numbers and special symbols, at least 6 characters';
|
||||
|
||||
$lang->install->errorEmpty['company'] = "{$lang->install->company} should not be blank.";
|
||||
$lang->install->errorEmpty['account'] = "{$lang->install->account} should not be blank.";
|
||||
$lang->install->errorEmpty['password'] = "{$lang->install->password} should not be blank.";
|
||||
|
||||
@@ -161,6 +161,9 @@ $lang->install->company = 'Company Name';
|
||||
$lang->install->account = 'Admin Account';
|
||||
$lang->install->password = 'Admin Password';
|
||||
|
||||
$lang->install->placeholder = new stdclass();
|
||||
$lang->install->placeholder->password = 'Combination of letters, numbers and special symbols, at least 6 characters';
|
||||
|
||||
$lang->install->errorEmpty['company'] = "{$lang->install->company} should not be blank.";
|
||||
$lang->install->errorEmpty['account'] = "{$lang->install->account} should not be blank.";
|
||||
$lang->install->errorEmpty['password'] = "{$lang->install->password} should not be blank.";
|
||||
|
||||
@@ -161,6 +161,9 @@ $lang->install->company = 'Nom Entreprise';
|
||||
$lang->install->account = 'Compte Admin';
|
||||
$lang->install->password = 'Mot de Passe Admin';
|
||||
|
||||
$lang->install->placeholder = new stdclass();
|
||||
$lang->install->placeholder->password = 'Combination of letters, numbers and special symbols, at least 6 characters';
|
||||
|
||||
$lang->install->errorEmpty['company'] = "{$lang->install->company} should not be blank.";
|
||||
$lang->install->errorEmpty['account'] = "{$lang->install->account} should not be blank.";
|
||||
$lang->install->errorEmpty['password'] = "{$lang->install->password} should not be blank.";
|
||||
|
||||
@@ -161,6 +161,9 @@ $lang->install->company = '公司名称';
|
||||
$lang->install->account = '管理员帐号';
|
||||
$lang->install->password = '管理员密码';
|
||||
|
||||
$lang->install->placeholder = new stdclass();
|
||||
$lang->install->placeholder->password = '六位及以上,包含数字、字母和特殊字符';
|
||||
|
||||
$lang->install->errorEmpty['company'] = "{$lang->install->company}不能为空";
|
||||
$lang->install->errorEmpty['account'] = "{$lang->install->account}不能为空";
|
||||
$lang->install->errorEmpty['password'] = "{$lang->install->password}不能为空";
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
<strong><?php echo $lang->install->getPriv;?></strong>
|
||||
</div>
|
||||
<div class='modal-body'>
|
||||
<form method='post'>
|
||||
<table class='table table-form mw-500px' style='margin: 0 auto'>
|
||||
<form method='post' target='hiddenwin'>
|
||||
<table class='table table-form mw-table' style='margin: 0 auto'>
|
||||
<tr>
|
||||
<th class='c-company'><?php echo $lang->install->company;?></th>
|
||||
<td class='c-company-value'><?php echo html::input('company', '', "class='form-control'");?></td>
|
||||
@@ -62,7 +62,7 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->install->password;?></th>
|
||||
<td><?php echo html::input('password', '', "class='form-control' oninput=\"this.value = this.value.replace(/[\u4e00-\u9fa5d]/g, '');\"");?></td>
|
||||
<td><?php echo $lang->user->placeholder->password1;?></td>
|
||||
<td><?php echo $lang->install->placeholder->password;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th></th><td><?php echo html::checkBox('importDemoData', $lang->install->importDemoData);?></td>
|
||||
|
||||
@@ -91,7 +91,7 @@ $lang->kanban->alignment = 'Alignment';
|
||||
/* Fields. */
|
||||
$lang->kanban->space = 'Space';
|
||||
$lang->kanban->name = 'Name';
|
||||
$lang->kanban->archived = 'Archive';
|
||||
$lang->kanban->archived = 'Archived';
|
||||
$lang->kanban->owner = 'Owner';
|
||||
$lang->kanban->team = 'Team';
|
||||
$lang->kanban->desc = 'Description';
|
||||
|
||||
@@ -212,7 +212,7 @@ $lang->kanban->error->childLimitEmpty = 'Please set the WIP quantity of the su
|
||||
|
||||
$lang->kanban->importList = array();
|
||||
$lang->kanban->importList['off'] = 'Import is not enabled';
|
||||
$lang->kanban->importList['on'] = 'Enable the import function, you can only import content that you have permission to view.';
|
||||
$lang->kanban->importList['on'] = 'Enable import function (You can import content that you have permission to view as cards.)';
|
||||
|
||||
$lang->kanban->importObjectList = array();
|
||||
$lang->kanban->importObjectList['plans'] = 'Product Plan';
|
||||
|
||||
@@ -91,7 +91,7 @@ $lang->kanban->alignment = 'Alignment';
|
||||
/* Fields. */
|
||||
$lang->kanban->space = 'Space';
|
||||
$lang->kanban->name = 'Name';
|
||||
$lang->kanban->archived = 'Archive';
|
||||
$lang->kanban->archived = 'Archived';
|
||||
$lang->kanban->owner = 'Owner';
|
||||
$lang->kanban->team = 'Team';
|
||||
$lang->kanban->desc = 'Description';
|
||||
|
||||
@@ -212,7 +212,7 @@ $lang->kanban->error->childLimitEmpty = '请先设置子列的在制品数量
|
||||
|
||||
$lang->kanban->importList = array();
|
||||
$lang->kanban->importList['off'] = '不启用导入功能';
|
||||
$lang->kanban->importList['on'] = '启用导入功能,只能导入自己有权限查看的内容';
|
||||
$lang->kanban->importList['on'] = '启用导入功能(可以导入自己有权查看的内容作为卡片)';
|
||||
|
||||
$lang->kanban->importObjectList = array();
|
||||
$lang->kanban->importObjectList['plans'] = '计划';
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<th><?php echo $lang->kanban->team;?></th>
|
||||
<td colspan='2'>
|
||||
<div class="input-group">
|
||||
<?php echo html::select('team[]', $users, '', "class='form-control chosen' multiple data-drop_direction='down'");?>
|
||||
<?php echo html::select('team[]', $users, '', "class='form-control picker-select' multiple data-dropDirection='bottom'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -86,7 +86,7 @@
|
||||
<?php if($type == 'private'):?>
|
||||
<tr id="whitelistBox">
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td><?php echo html::select('whitelist[]', $whitelist, '', 'class="form-control chosen" multiple');?></td>
|
||||
<td><?php echo html::select('whitelist[]', $whitelist, '', 'class="form-control picker-select" multiple');?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<th><?php echo $lang->kanbanspace->team;?></th>
|
||||
<td colspan='2'>
|
||||
<div class="input-group">
|
||||
<?php echo html::select('team[]', $users, '', "class='form-control chosen' multiple data-drop_direction='down'");?>
|
||||
<?php echo html::select('team[]', $users, '', "class='form-control picker-select' multiple data-dropDirection='bottom'");?>
|
||||
<?php echo $this->fetch('my', 'buildContactLists');?>
|
||||
</div>
|
||||
</td>
|
||||
@@ -48,7 +48,7 @@
|
||||
</tr>
|
||||
<tr id="whitelistBox" class="<?php echo $type == 'private' ? '' : 'hidden';?>">
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td><?php echo html::select('whitelist[]', $users, '', 'class="form-control chosen" multiple');?></td>
|
||||
<td><?php echo html::select('whitelist[]', $users, '', 'class="form-control picker-select" multiple');?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan='3' class='text-center form-actions'>
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
<th><?php echo $lang->kanban->team;?></th>
|
||||
<td colspan='2'>
|
||||
<div class="input-group">
|
||||
<?php echo html::select('team[]', $users, $kanban->team, "class='form-control chosen' multiple data-drop_direction='down'");?>
|
||||
<?php echo html::select('team[]', $users, $kanban->team, "class='form-control picker-select' multiple data-dropDirection='bottom'");?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -85,7 +85,7 @@
|
||||
<?php if($type == 'private'):?>
|
||||
<tr id="whitelistBox">
|
||||
<th><?php echo $lang->whitelist;?></th>
|
||||
<td><?php echo html::select('whitelist[]', $whitelist, $kanban->whitelist, 'class="form-control chosen" multiple');?></td>
|
||||
<td><?php echo html::select('whitelist[]', $whitelist, $kanban->whitelist, 'class="form-control picker-select" multiple');?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user