Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3
This commit is contained in:
@@ -110,7 +110,7 @@ zentaoxx:
|
||||
sed -i '/deviceToken/d' zentaoxx/db/*.sql
|
||||
sed -i '/deviceType/d' zentaoxx/db/*.sql
|
||||
sed -i "/fetch('push', 'pushMessage');/d" zentaoxx/module/im/control.php
|
||||
sed -i "s/marked\.html\.php';?>/marked\.html\.php';?>\n<div id='mainMenu' class='clearfix'><div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('xuanxuan');?><\/div><\/div>/g" zentaoxx/module/client/view/checkupgrade.html.php
|
||||
#sed -i "s/marked\.html\.php';?>/marked\.html\.php';?>\n<div id='mainMenu' class='clearfix'><div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('xuanxuan');?><\/div><\/div>/g" zentaoxx/module/client/view/checkupgrade.html.php
|
||||
sed -i '/var serverVersions/d' zentaoxx/module/client/js/checkupgrade.js
|
||||
sed -i '/var currentVersion/d' zentaoxx/module/client/js/checkupgrade.js
|
||||
sed -i '/setRequiredFields(/d' zentaoxx/module/common/view/header.modal.html.php
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
|
||||
$lang->action->common = 'Log';
|
||||
$lang->action->product = $lang->productCommon;
|
||||
$lang->action->project = 'Project';
|
||||
@@ -30,6 +32,9 @@ $lang->action->editComment = 'Edit Comment';
|
||||
$lang->action->create = 'Add Comment';
|
||||
$lang->action->comment = 'Comment';
|
||||
|
||||
$lang->action->undeleteAction = 'Reset Data';
|
||||
$lang->action->hideOneAction = 'Hide Data';
|
||||
|
||||
$lang->action->trashTips = 'Note: Delete in ZenTao is logic.';
|
||||
$lang->action->textDiff = 'Text Format';
|
||||
$lang->action->original = 'Original Format';
|
||||
@@ -96,7 +101,6 @@ $lang->action->objectTypes['stakeholder'] = 'Stakeholder';
|
||||
$lang->action->objectTypes['budget'] = 'Cost Estimate';
|
||||
$lang->action->objectTypes['entry'] = 'Entry';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = 'Job';
|
||||
|
||||
/* Used to describe operation history. */
|
||||
$lang->action->desc = new stdclass();
|
||||
|
||||
@@ -431,6 +431,7 @@ $lang->action->dynamicAction->entry['created'] = '添加应用';
|
||||
$lang->action->dynamicAction->entry['edited'] = '编辑应用';
|
||||
|
||||
/* 用来生成相应对象的链接。*/
|
||||
global $config;
|
||||
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
|
||||
$lang->action->label->productplan = "计划|productplan|view|productID=%s";
|
||||
$lang->action->label->release = '发布|release|view|productID=%s';
|
||||
|
||||
@@ -8,6 +8,9 @@ $lang->backup->restore = 'Restore';
|
||||
$lang->backup->change = 'Edit Expiration';
|
||||
$lang->backup->changeAB = 'Edit';
|
||||
$lang->backup->rmPHPHeader = 'Remove PHP header';
|
||||
$lang->backup->setting = 'Setting';
|
||||
|
||||
$lang->backup->settingAction = 'Backup Setting';
|
||||
|
||||
$lang->backup->time = 'Date';
|
||||
$lang->backup->files = 'Files';
|
||||
@@ -19,7 +22,6 @@ $lang->backup->status = 'Status';
|
||||
$lang->backup->statusList['success'] = 'Success';
|
||||
$lang->backup->statusList['fail'] = 'Fail';
|
||||
|
||||
$lang->backup->setting = 'Settings';
|
||||
$lang->backup->settingDir = 'Backup Directory';
|
||||
$lang->backup->settingList['nofile'] = 'Do not back up files or codes.';
|
||||
$lang->backup->settingList['nosafe'] = 'Do not prevent downloading PHP file header.';
|
||||
|
||||
+21
-20
@@ -27,26 +27,27 @@ $lang->build->confirmUnlinkBug = "Do you want to unlink this Bug?";
|
||||
|
||||
$lang->build->basicInfo = 'Basic Info';
|
||||
|
||||
$lang->build->id = 'ID';
|
||||
$lang->build->product = $lang->productCommon;
|
||||
$lang->build->branch = 'Platform/Branch';
|
||||
$lang->build->execution = $lang->executionCommon;
|
||||
$lang->build->name = 'Name';
|
||||
$lang->build->date = 'Date';
|
||||
$lang->build->builder = 'Builder';
|
||||
$lang->build->scmPath = 'SCM Path';
|
||||
$lang->build->filePath = 'File Path';
|
||||
$lang->build->desc = 'Description';
|
||||
$lang->build->files = 'Files';
|
||||
$lang->build->last = 'Last Build';
|
||||
$lang->build->packageType = 'Package Type';
|
||||
$lang->build->unlinkStory = "Unlink {$lang->SRCommon}";
|
||||
$lang->build->unlinkBug = 'Unlink Bug';
|
||||
$lang->build->stories = "Finished {$lang->SRCommon}";
|
||||
$lang->build->bugs = 'Resolved Bugs';
|
||||
$lang->build->generatedBugs = 'Reported Bugs';
|
||||
$lang->build->noProduct = " <span id='noProduct' style='color:red'>This {$lang->executionCommon} is not linked to {$lang->productCommon}, so the Build cannot be created. Please first <a href='%s' data-app='%s' data-toggle='modal' data-type='iframe'> link {$lang->productCommon}</a></span>";
|
||||
$lang->build->noBuild = 'No builds yet.';
|
||||
$lang->build->id = 'ID';
|
||||
$lang->build->product = $lang->productCommon;
|
||||
$lang->build->branch = 'Platform/Branch';
|
||||
$lang->build->execution = $lang->executionCommon;
|
||||
$lang->build->name = 'Name';
|
||||
$lang->build->date = 'Date';
|
||||
$lang->build->builder = 'Builder';
|
||||
$lang->build->scmPath = 'SCM Path';
|
||||
$lang->build->filePath = 'File Path';
|
||||
$lang->build->desc = 'Description';
|
||||
$lang->build->files = 'Files';
|
||||
$lang->build->last = 'Last Build';
|
||||
$lang->build->packageType = 'Package Type';
|
||||
$lang->build->unlinkStory = "Unlink {$lang->SRCommon}";
|
||||
$lang->build->unlinkBug = 'Unlink Bug';
|
||||
$lang->build->stories = "Finished {$lang->SRCommon}";
|
||||
$lang->build->bugs = 'Resolved Bugs';
|
||||
$lang->build->generatedBugs = 'Reported Bugs';
|
||||
$lang->build->noProduct = " <span id='noProduct' style='color:red'>This {$lang->executionCommon} is not linked to {$lang->productCommon}, so the Build cannot be created. Please first <a href='%s' data-app='%s' data-toggle='modal' data-type='iframe'> link {$lang->productCommon}</a></span>";
|
||||
$lang->build->noBuild = 'No builds yet.';
|
||||
$lang->build->emptyExecution = $lang->executionCommon . 'should be not empty.';
|
||||
|
||||
$lang->build->notice = new stdclass();
|
||||
$lang->build->notice->changeProduct = "The {$lang->SRCommon}, bug, or the version of the submitted test order has been linked, and its {$lang->productCommon} cannot be modified";
|
||||
|
||||
@@ -24,9 +24,13 @@ $lang->caselib->deleted = 'Deleted';
|
||||
$lang->caselib->exportTemplet = 'Export Template';
|
||||
$lang->caselib->batchCreateCase = 'Batch Create';
|
||||
$lang->caselib->import = 'Import';
|
||||
$lang->caselib->importAction = 'Import Case';
|
||||
$lang->caselib->showImport = 'Imported Data';
|
||||
|
||||
$lang->caselib->browseAction = 'Caselib List';
|
||||
$lang->caselib->deleteAction = "Delete Caselib";
|
||||
$lang->caselib->importAction = 'Import Case';
|
||||
$lang->caselib->linkVersion = "Version";
|
||||
|
||||
$lang->caselib->id = 'ID';
|
||||
$lang->caselib->name = 'Name';
|
||||
$lang->caselib->desc = 'Description';
|
||||
|
||||
@@ -25,7 +25,14 @@ if($config->systemMode == 'new') $lang->mainNav->program = "{$lang->navIcons['pr
|
||||
$lang->mainNav->product = "{$lang->navIcons['product']} {$lang->product->common}|$productModule|$productMethod|";
|
||||
if($config->systemMode == 'new') $lang->mainNav->project = "{$lang->navIcons['project']} {$lang->project->common}|$projectModule|$projectMethod|";
|
||||
|
||||
$lang->mainNav->execution = "{$lang->navIcons['execution']} {$lang->execution->common}|$executionModule|$executionMethod|";
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->mainNav->execution = "{$lang->navIcons['execution']} {$lang->execution->common}|$executionModule|$executionMethod|";
|
||||
}
|
||||
else
|
||||
{
|
||||
$lang->mainNav->execution = "{$lang->navIcons['project']} {$lang->execution->common}|$executionModule|$executionMethod|";
|
||||
}
|
||||
$lang->mainNav->qa = "{$lang->navIcons['qa']} {$lang->qa->common}|qa|index|";
|
||||
$lang->mainNav->devops = "{$lang->navIcons['devops']} DevOps|repo|browse|";
|
||||
$lang->mainNav->doc = "{$lang->navIcons['doc']} {$lang->doc->common}|doc|index|";
|
||||
@@ -328,7 +335,7 @@ $lang->doc->menu->my = array('link' => "{$lang->doc->my}|doc|browse|libID
|
||||
$lang->doc->menu->collect = array('link' => "{$lang->doc->favorite}|doc|browse|libID=0&browseTyp=collectedbyme", 'alias' => 'collect');
|
||||
$lang->doc->menu->product = array('link' => "{$lang->doc->product}|doc|objectLibs|type=product", 'alias' => 'product');
|
||||
$lang->doc->menu->project = array('link' => "{$lang->doc->project}|doc|objectLibs|type=project", 'alias' => 'project');
|
||||
$lang->doc->menu->custom = array('link' => "{$lang->doc->custom}|doc|objectLibs|libID=0");
|
||||
$lang->doc->menu->custom = array('link' => "{$lang->doc->custom}|doc|objectLibs|type=custom", 'alias' => 'custom');
|
||||
|
||||
$lang->doc->dividerMenu = ',product,';
|
||||
|
||||
@@ -343,6 +350,7 @@ $lang->doc->menuOrder[35] = 'custom';
|
||||
|
||||
$lang->doc->menu->product['subMenu'] = new stdclass();
|
||||
$lang->doc->menu->project['subMenu'] = new stdclass();
|
||||
$lang->doc->menu->custom['subMenu'] = new stdclass();
|
||||
|
||||
/* Report menu.*/
|
||||
$lang->report->menu = new stdclass();
|
||||
|
||||
@@ -692,7 +692,7 @@ class commonModel extends model
|
||||
$subActive = 'active';
|
||||
$label = $subLabel;
|
||||
}
|
||||
$dropMenu .= "<li class='$subActive' data-id='$subLabel'>" . html::a($subLink, $subLabel) . '</li>';
|
||||
$dropMenu .= "<li class='$subActive' data-id='$subLabel'>" . html::a($subLink, $subLabel, '', "data-app='$openApp'") . '</li>';
|
||||
}
|
||||
|
||||
if(empty($dropMenu)) continue;
|
||||
@@ -726,11 +726,17 @@ class commonModel extends model
|
||||
public static function printSearchBox()
|
||||
{
|
||||
global $lang;
|
||||
global $config;
|
||||
|
||||
$searchObject = 'bug';
|
||||
echo "<div class='input-group-btn'>";
|
||||
echo html::hidden('searchType', $searchObject);
|
||||
echo "<ul id='searchTypeMenu' class='dropdown-menu'>";
|
||||
foreach ($lang->searchObjects as $key => $value)
|
||||
|
||||
$searchObjects = $lang->searchObjects;
|
||||
if($config->systemMode != 'new') unset($searchObjects['program'], $searchObjects['project']);
|
||||
|
||||
foreach ($searchObjects as $key => $value)
|
||||
{
|
||||
$class = $key == $searchObject ? "class='selected'" : '';
|
||||
if($key == 'program') $key = 'program-product';
|
||||
@@ -1003,7 +1009,7 @@ class commonModel extends model
|
||||
$className = 'header';
|
||||
}
|
||||
$link = helper::createLink($module, $method, sprintf($vars, $orderBy));
|
||||
echo $isMobile ? html::a($link, $label, '', "class='$className'") : html::a($link, $label, '', "class='$className'");
|
||||
echo $isMobile ? html::a($link, $label, '', "class='$className' data-app={$app->openApp}") : html::a($link, $label, '', "class='$className' data-app={$app->openApp}");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -158,6 +158,7 @@ class datatableModel extends model
|
||||
$title = (isset($col->name) and $col->name) ? "title='$col->name'" : $title;
|
||||
if($id == 'id' and (int)$width < 90) $width = '90px';
|
||||
$align = $id == 'actions' ? 'text-center' : '';
|
||||
$align = in_array($id, array('budget', 'teamCount', 'estimate', 'consume')) ? 'text-right' : $align;
|
||||
|
||||
$style = '';
|
||||
$data = '';
|
||||
|
||||
+132
-32
@@ -55,9 +55,9 @@ class doc extends control
|
||||
|
||||
$this->view->latestEditedDocs = $this->doc->getDocsByBrowseType(0, 'byediteddate', 0, 0, 'editedDate_desc, id_desc', $pager);
|
||||
$this->view->myDocs = $this->doc->getDocsByBrowseType(0, 'openedbyme', 0, 0, 'addedDate_desc', $pager);
|
||||
$this->view->collectedDocs = $this->doc->getDocsByBrowseType(0, 'collectedbyme', 0, 0, 'addedDate_desc', $pager);
|
||||
$this->view->statisticInfo = $this->doc->getStatisticInfo();
|
||||
$this->view->users = $this->user->getPairs('noletter');
|
||||
$this->view->doingExecutions = $this->execution->getByProject($this->projectID, 'undone', 5);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
@@ -214,7 +214,7 @@ class doc extends control
|
||||
if(!dao::isError())
|
||||
{
|
||||
$this->action->create('docLib', $libID, 'Created');
|
||||
die(js::locate($this->createLink('doc', 'objectLibs', "type=$type&objectID=$objectID&libID=$libID"), 'parent.parent'));
|
||||
die(js::locate($this->createLink('doc', 'objectLibs', "type={$this->post->type}&objectID=$objectID&libID=$libID"), 'parent.parent'));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -297,6 +297,11 @@ class doc extends control
|
||||
if(!empty($lib->main)) die(js::alert($this->lang->doc->errorMainSysLib));
|
||||
|
||||
$this->doc->delete(TABLE_DOCLIB, $libID);
|
||||
if(isonlybody())
|
||||
{
|
||||
unset($_GET['onlybody']);
|
||||
die(js::locate($this->createLink('doc', 'objectLibs', 'type=book'), 'parent.parent'));
|
||||
}
|
||||
die(js::locate($this->createLink('doc', 'index'), 'parent'));
|
||||
}
|
||||
}
|
||||
@@ -304,13 +309,15 @@ class doc extends control
|
||||
/**
|
||||
* Create a doc.
|
||||
*
|
||||
* @param string $objectType
|
||||
* @param int $objectID
|
||||
* @param int|string $libID
|
||||
* @param int $moduleID
|
||||
* @param string $docType
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($type, $objectID, $libID, $moduleID = 0, $docType = '')
|
||||
public function create($objectType, $objectID, $libID, $moduleID = 0, $docType = '')
|
||||
{
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -330,9 +337,8 @@ class doc extends control
|
||||
if(!empty($files)) $fileAction = $this->lang->addFiles . join(',', $files) . "\n" ;
|
||||
$this->action->create('doc', $docID, 'Created', $fileAction);
|
||||
|
||||
$vars = "libID=" . (int)$this->post->lib . "&browseType=byModule&moduleID=" . (int)$this->post->module . "&orderBy=id_desc&from=$this->from";
|
||||
$link = $this->createLink('doc', 'browse', $vars);
|
||||
if($this->app->getViewType() == 'xhtml') $link = $this->createLink('doc', 'view', "docID=$docID");
|
||||
$params = "type=$objectType&objectID=$objectID&libID=$libID&docID=" . $docResult['id'];
|
||||
$link = $this->createLink('doc', 'objectLibs', $params);
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $link));
|
||||
}
|
||||
|
||||
@@ -351,6 +357,10 @@ class doc extends control
|
||||
$this->execution->setMenu($objectID);
|
||||
unset($this->lang->exectuion->menu->doc['subMenu']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->app->rawMethod = $objectType;
|
||||
}
|
||||
|
||||
$lib = $this->doc->getLibByID($libID);
|
||||
$type = $lib->type;
|
||||
@@ -393,10 +403,13 @@ class doc extends control
|
||||
*
|
||||
* @param int $docID
|
||||
* @param bool $comment
|
||||
* @param string $objectType
|
||||
* @param int $objectID
|
||||
* @param int $libID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function edit($docID, $comment = false)
|
||||
public function edit($docID, $comment = false, $objectType = '', $objectID = 0, $libID = 0)
|
||||
{
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -415,7 +428,16 @@ class doc extends control
|
||||
$actionID = $this->action->create('doc', $docID, $action, $fileAction . $this->post->comment);
|
||||
if(!empty($changes)) $this->action->logHistory($actionID, $changes);
|
||||
}
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('doc', 'view', "docID=$docID")));
|
||||
|
||||
if($objectType)
|
||||
{
|
||||
$link = $this->createLink('doc', 'objectLibs', "type=$objectType&objectID=$objectID&libID=$libID&docID=$docID");
|
||||
}
|
||||
else
|
||||
{
|
||||
$link = $this->createLink('doc', 'view', "docID=$docID");
|
||||
}
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $link));
|
||||
}
|
||||
|
||||
/* Get doc and set menu. */
|
||||
@@ -436,6 +458,10 @@ class doc extends control
|
||||
{
|
||||
$this->project->setMenu($lib->project);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->app->rawMethod = $objectType;
|
||||
}
|
||||
|
||||
/* Set my menu. */
|
||||
if($this->app->openApp == 'my')
|
||||
@@ -474,11 +500,29 @@ class doc extends control
|
||||
$doc = $this->doc->getById($docID, $version, true);
|
||||
if(!$doc) die(js::error($this->lang->notFound) . js::locate('back'));
|
||||
|
||||
/* The global search opens in the document library. */
|
||||
if(!isonlybody())
|
||||
{
|
||||
$docLib = $this->doc->getLibById($doc->lib);
|
||||
if($docLib->type == 'custom')
|
||||
{
|
||||
$libID = $doc->lib;
|
||||
$objectID = 0;
|
||||
$type = 'custom';
|
||||
}
|
||||
else
|
||||
{
|
||||
$libID = $docLib->id;
|
||||
$type = $docLib->type;
|
||||
$objectID = $docLib->$type;
|
||||
}
|
||||
$this->locate(inLink('objectLibs', "type=$type&objectID=$objectID&libID=$libID&docID=$docID"));
|
||||
}
|
||||
|
||||
if($doc->contentType == 'markdown')
|
||||
{
|
||||
$hyperdown = $this->app->loadClass('hyperdown');
|
||||
$doc->content = $hyperdown->makeHtml($doc->content);
|
||||
|
||||
$doc->digest = $hyperdown->makeHtml($doc->digest);
|
||||
}
|
||||
|
||||
@@ -517,14 +561,17 @@ class doc extends control
|
||||
*
|
||||
* @param int $docID
|
||||
* @param string $confirm yes|no
|
||||
* @param string $from
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function delete($docID, $confirm = 'no')
|
||||
public function delete($docID, $confirm = 'no', $from = 'list')
|
||||
{
|
||||
if($confirm == 'no')
|
||||
{
|
||||
die(js::confirm($this->lang->doc->confirmDelete, inlink('delete', "docID=$docID&confirm=yes")));
|
||||
$type = $this->dao->select('type')->from(TABLE_DOC)->where('id')->eq($docID)->fetch('type');
|
||||
$tips = $type == 'chapter' ? $this->lang->doc->confirmDeleteChapter : $this->lang->doc->confirmDelete;
|
||||
die(js::confirm($tips, inlink('delete', "docID=$docID&confirm=yes")));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -542,9 +589,17 @@ class doc extends control
|
||||
{
|
||||
$response['result'] = 'success';
|
||||
$response['message'] = '';
|
||||
|
||||
if($from == 'lib')
|
||||
{
|
||||
$pos = strpos($this->session->docList, 'docID');
|
||||
$link = $pos !== false ? substr($this->session->docList, 0, $pos - 1) : $this->session->docList;
|
||||
$response['locate'] = $link;
|
||||
}
|
||||
}
|
||||
$this->send($response);
|
||||
}
|
||||
|
||||
die(js::locate($this->session->docList, 'parent'));
|
||||
}
|
||||
}
|
||||
@@ -874,42 +929,84 @@ class doc extends control
|
||||
* @param int $objectID projectID|productID
|
||||
* @param int $libID
|
||||
* @param int $docID
|
||||
* @param int $version
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function objectLibs($type, $objectID = 0, $libID = 0, $docID = 0)
|
||||
public function objectLibs($type, $objectID = 0, $libID = 0, $docID = 0, $version = 0)
|
||||
{
|
||||
$this->session->set('docList', $this->app->getURI(true), 'doc');
|
||||
|
||||
$objects = $this->doc->getOrderedObjects($type);
|
||||
if($type == 'product')
|
||||
|
||||
if($type == 'custom')
|
||||
{
|
||||
$objectID = $this->product->saveState($objectID, $objects);
|
||||
$table = TABLE_PRODUCT;
|
||||
|
||||
$libs = $this->doc->getLibsByObject('product', $objectID);
|
||||
|
||||
$libs = $this->doc->getLibsByObject('custom', 0);
|
||||
$this->app->rawMethod = 'custom';
|
||||
if($libID == 0) $libID = key($libs);
|
||||
$this->lang->modulePageNav = $this->doc->select($type, $objects, $objectID, $libs, $libID);
|
||||
|
||||
$this->app->rawMethod = 'product';
|
||||
$object = new stdclass();
|
||||
$object->id = 0;
|
||||
}
|
||||
elseif($type == 'book')
|
||||
{
|
||||
$libs = $this->doc->getLibsByObject('book', 0);
|
||||
$this->app->rawMethod = 'book';
|
||||
if($libID == 0) $libID = key($libs);
|
||||
$this->lang->modulePageNav = $this->doc->select($type, $objects, $objectID, $libs, $libID);
|
||||
|
||||
if(!$docID) $docID = $this->dao->select('id')->from(TABLE_DOC)
|
||||
->where('lib')->eq($libID)
|
||||
->andWhere('type')->eq('article')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetch('id');
|
||||
|
||||
$object = new stdclass();
|
||||
$object->id = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
$objectID = $this->project->saveState($objectID, $objects);
|
||||
$table = TABLE_PROJECT;
|
||||
if($type == 'product')
|
||||
{
|
||||
$objectID = $this->product->saveState($objectID, $objects);
|
||||
$table = TABLE_PRODUCT;
|
||||
|
||||
$libs = $this->doc->getLibsByObject('project', $objectID);
|
||||
$libs = $this->doc->getLibsByObject('product', $objectID);
|
||||
|
||||
if($libID == 0) $libID = key($libs);
|
||||
$this->lang->modulePageNav = $this->doc->select($type, $objects, $objectID, $libs, $libID);
|
||||
if($libID == 0) $libID = key($libs);
|
||||
$this->lang->modulePageNav = $this->doc->select($type, $objects, $objectID, $libs, $libID);
|
||||
|
||||
$this->app->rawMethod = 'project';
|
||||
$this->app->rawMethod = 'product';
|
||||
}
|
||||
else if($type == 'project')
|
||||
{
|
||||
$objectID = $this->project->saveState($objectID, $objects);
|
||||
$table = TABLE_PROJECT;
|
||||
|
||||
$libs = $this->doc->getLibsByObject('project', $objectID);
|
||||
|
||||
if($libID == 0) $libID = key($libs);
|
||||
$this->lang->modulePageNav = $this->doc->select($type, $objects, $objectID, $libs, $libID);
|
||||
|
||||
$this->app->rawMethod = 'project';
|
||||
}
|
||||
else if($type == 'execution')
|
||||
{
|
||||
$table = TABLE_EXECUTION;
|
||||
$libs = $this->doc->getLibsByObject('execution', $objectID);
|
||||
|
||||
if($libID == 0) $libID = key($libs);
|
||||
$this->lang->modulePageNav = $this->doc->select($type, $objects, $objectID, $libs, $libID);
|
||||
|
||||
$this->app->rawMethod = 'execution';
|
||||
}
|
||||
|
||||
$object = $this->dao->select('id,name,status')->from($table)->where('id')->eq($objectID)->fetch();
|
||||
if(empty($object)) $this->locate($this->createLink($type, 'create', '', '', '', $this->session->project));
|
||||
}
|
||||
|
||||
if(!$libID) $libID = key($libs);
|
||||
$object = $this->dao->select('id,name,status')->from($table)->where('id')->eq($objectID)->fetch();
|
||||
if(empty($object)) $this->locate($this->createLink($type, 'create', '', '', '', $this->session->project));
|
||||
|
||||
$openApp = $this->app->openApp;
|
||||
if($openApp != 'doc') $this->loadModel($openApp)->setMenu($objectID);
|
||||
@@ -922,12 +1019,12 @@ class doc extends control
|
||||
|
||||
$this->lang->TRActions = common::hasPriv('doc', 'create') ? $this->doc->buildCreateButton4Doc($type, $objectID, $libID) : '';
|
||||
|
||||
$moduleTree = $this->doc->getTreeMenu($type, $objectID, $libID, 0, $docID);
|
||||
$moduleTree = $type == 'book' ? $this->doc->getBookStructure($libID) : $this->doc->getTreeMenu($type, $objectID, $libID, 0, $docID);
|
||||
|
||||
/* Get doc. */
|
||||
if($docID)
|
||||
{
|
||||
$doc = $this->doc->getById($docID, 0, true);
|
||||
$doc = $this->doc->getById($docID, $version, true);
|
||||
if(!$doc) die(js::error($this->lang->notFound) . js::locate('back'));
|
||||
|
||||
if($doc->contentType == 'markdown')
|
||||
@@ -941,15 +1038,18 @@ class doc extends control
|
||||
$this->view->customObjectLibs = $customObjectLibs;
|
||||
$this->view->showLibs = $this->config->doc->custom->objectLibs;
|
||||
|
||||
$this->view->title = $object->name;
|
||||
$this->view->position[] = $object->name;
|
||||
$this->view->title = ($type == 'book' or $type == 'custom') ? $this->lang->doc->customAB : $object->name;
|
||||
$this->view->position[] = ($type == 'book' or $type == 'custom') ? $this->lang->doc->customAB : $object->name;
|
||||
|
||||
$this->view->docID = $docID;
|
||||
$this->view->doc = $docID ? $doc : '';
|
||||
$this->view->type = $type;
|
||||
$this->view->version = $version;
|
||||
$this->view->object = $object;
|
||||
$this->view->objectType = $type;
|
||||
$this->view->libID = $libID;
|
||||
$this->view->lib = isset($libs[$libID]) ? $libs[$libID] : array();
|
||||
$this->view->lib = isset($libs[$libID]) ? $libs[$libID] : new stdclass();
|
||||
|
||||
$this->view->libs = $this->doc->getLibsByObject($type, $objectID);
|
||||
$this->view->moduleTree = $moduleTree;
|
||||
$this->view->canBeChanged = common::canModify($type, $object); // Determines whether an object is editable.
|
||||
|
||||
@@ -8,10 +8,18 @@
|
||||
.main-col .block-files .panel-heading .panel-title {height: 35px; line-height: 30px;}
|
||||
.side-col .action a {margin: 0 auto 3px; display: block; max-width: 200px;}
|
||||
.side-col .tips {padding: 0 10px;}
|
||||
.main-col .detail-title {display: flex;}
|
||||
.main-col .detail-title .title {margin-right: 10px;}
|
||||
.main-col .detail-title .info {flex: 1 1 0;}
|
||||
.main-col .detail-title .actions i {font-size: 15px; color: #8c8c8c; margin-left: 2px;}
|
||||
#sidebar {width: 250px;}
|
||||
#sidebar>.cell {width: 220px;}
|
||||
#sidebar>.sidebar-toggle {left: 5px; right: auto;}
|
||||
.main-col .doc-title {display: flex; font-size: 16px; margin-bottom: 15px;}
|
||||
.main-col .doc-title .title {margin-right: 10px; line-height: 32px; font-size: 25px;}
|
||||
.main-col .doc-title .info {flex: 1 1 0;}
|
||||
.main-col .doc-title .version a {font-size: 13px; color: #8c8c8c;}
|
||||
.main-col .doc-title .version .dropdown-menu a:hover {color: #ffffff;}
|
||||
.main-col .doc-title .actions a {margin-right: 8px;}
|
||||
.main-col .doc-title .actions i {font-size: 15px; color: #8c8c8c;}
|
||||
#sidebar {width: 275px;}
|
||||
#sidebar>.cell {width: 265px;}
|
||||
#sidebar>.sidebar-toggle {left: 3px; right: auto;}
|
||||
.hide-sidebar #sidebar>.cell {left: -270px;}
|
||||
.hide-sidebar #sidebar>.sidebar-toggle>.icon:before {content: "\e314";}
|
||||
.detail.empty {line-height: 200px;}
|
||||
.main-col+.side-col {padding-left: 16px;}
|
||||
.main-col iframe {min-height: 380px;}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
.main-row > .side-col {transition: width .2s;}
|
||||
.main-row > .main-col .article-content {transition: max-width; margin: 0 auto !important;}
|
||||
.main-row > .side-col > .cell {transition: opacity .2s;}
|
||||
.main-row > .side-col > .cell {transition: opacity .2s; margin-bottom: 10px;}
|
||||
.doc-fullscreen .main-row > .side-col {width: 0; position: relative; overflow: hidden;}
|
||||
.doc-fullscreen .fullscreen-btn > .icon-fullscreen:before {content: '\e972';}
|
||||
.right-icon a {color: #1183fb;}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
function ajaxDeleteDoc(link, replaceID, notice)
|
||||
{
|
||||
if(confirm(notice))
|
||||
{
|
||||
$.get(link, function(data)
|
||||
{
|
||||
location.href = JSON.parse(data).locate;
|
||||
})
|
||||
}
|
||||
}
|
||||
+25
-16
@@ -48,6 +48,8 @@ $lang->doc->item = ' Einträge';
|
||||
$lang->doc->num = 'Doks';
|
||||
$lang->doc->searchResult = 'Suchergebnis';
|
||||
$lang->doc->mailto = 'Mailto';
|
||||
$lang->doc->noModule = 'No document in this lib, please create it';
|
||||
$lang->doc->noChapter = 'No chapters or articles in this book. Please add chapters and articles.';
|
||||
|
||||
$lang->doc->moduleDoc = 'Nach Modulen';
|
||||
$lang->doc->searchDoc = 'Suche';
|
||||
@@ -74,6 +76,9 @@ $lang->doc->diff = 'Diff';
|
||||
$lang->doc->diffAction = 'Diff Document';
|
||||
$lang->doc->sort = 'Sortierung';
|
||||
$lang->doc->manageType = 'Kategorie verwalten';
|
||||
$lang->doc->createBook = 'Create Book';
|
||||
$lang->doc->manageBook = 'Manage Book';
|
||||
$lang->doc->editBook = 'Edit Book';
|
||||
$lang->doc->editType = 'Bearbeiten';
|
||||
$lang->doc->deleteType = 'Löschen';
|
||||
$lang->doc->addType = 'Hinzufügen';
|
||||
@@ -157,22 +162,26 @@ $lang->doc->mail->edit = new stdclass();
|
||||
$lang->doc->mail->create->title = "%s created document #%s:%s";
|
||||
$lang->doc->mail->edit->title = "%s edited document #%s:%s";
|
||||
|
||||
$lang->doc->confirmDelete = "Möchten Sie dieses Dokument löschen?";
|
||||
$lang->doc->confirmDeleteLib = "Möchten Sie diese Bibliothek löschen?";
|
||||
$lang->doc->errorEditSystemDoc = "System Dokumentenbibliothek darf nicht geändert werden.";
|
||||
$lang->doc->errorEmptyProduct = "Kein {$lang->productCommon}. Kann nicht erstellt werden.";
|
||||
$lang->doc->errorEmptyProject = "Kein {$lang->executionCommon}. Kann nicht erstellt werden.";
|
||||
$lang->doc->errorMainSysLib = "Diese Bibliothek kann nicht gelöscht werden.";
|
||||
$lang->doc->accessDenied = "Zugriff verweigert!";
|
||||
$lang->doc->versionNotFount = 'Existiert nicht in diesem Build.';
|
||||
$lang->doc->noDoc = 'Keine Dokumente. ';
|
||||
$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact us at renee@easysoft.ltd to try ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'Nichts gesucht.';
|
||||
$lang->doc->noEditedDoc = 'Sie haben kein Dokument bearbeitet.';
|
||||
$lang->doc->noOpenedDoc = 'Sie haben kein Dokument erstellt.';
|
||||
$lang->doc->noCollectedDoc = 'Sie haben kein Dokument gesammelt.';
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmDelete = "Möchten Sie dieses Dokument löschen?";
|
||||
$lang->doc->confirmDeleteLib = "Möchten Sie diese Bibliothek löschen?";
|
||||
$lang->doc->confirmDeleteChapter = "Do you want to delete this chapter?";
|
||||
$lang->doc->errorEditSystemDoc = "System Dokumentenbibliothek darf nicht geändert werden.";
|
||||
$lang->doc->errorEmptyProduct = "Kein {$lang->productCommon}. Kann nicht erstellt werden.";
|
||||
$lang->doc->errorEmptyProject = "Kein {$lang->executionCommon}. Kann nicht erstellt werden.";
|
||||
$lang->doc->errorMainSysLib = "Diese Bibliothek kann nicht gelöscht werden.";
|
||||
$lang->doc->accessDenied = "Zugriff verweigert!";
|
||||
$lang->doc->versionNotFount = 'Existiert nicht in diesem Build.';
|
||||
$lang->doc->noDoc = 'Keine Dokumente. ';
|
||||
$lang->doc->noArticle = 'No articles.';
|
||||
$lang->doc->noLib = 'No libraries. ';
|
||||
$lang->doc->noBook = 'The WIKI library has not created a manual, please create a new one :)';
|
||||
$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact us at renee@easysoft.ltd to try ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'Nichts gesucht.';
|
||||
$lang->doc->noEditedDoc = 'Sie haben kein Dokument bearbeitet.';
|
||||
$lang->doc->noOpenedDoc = 'Sie haben kein Dokument erstellt.';
|
||||
$lang->doc->noCollectedDoc = 'Sie haben kein Dokument gesammelt.';
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Users who can access the selected product can access it.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users who can access the selected product or users in the whiltelist can access it.';
|
||||
|
||||
+77
-69
@@ -10,60 +10,61 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* Fields. */
|
||||
$lang->doc->common = 'Document';
|
||||
$lang->doc->id = 'ID';
|
||||
$lang->doc->product = $lang->productCommon;
|
||||
$lang->doc->project = 'Project';
|
||||
$lang->doc->execution = $lang->executionCommon;
|
||||
$lang->doc->lib = 'Library';
|
||||
$lang->doc->module = 'Category';
|
||||
$lang->doc->title = 'Name';
|
||||
$lang->doc->digest = 'Summary';
|
||||
$lang->doc->comment = 'Comment';
|
||||
$lang->doc->type = 'Type';
|
||||
$lang->doc->content = 'Text';
|
||||
$lang->doc->keywords = 'Tags';
|
||||
$lang->doc->url = 'URL';
|
||||
$lang->doc->files = 'Files';
|
||||
$lang->doc->addedBy = 'Author';
|
||||
$lang->doc->addedDate = 'Added';
|
||||
$lang->doc->editedBy = 'UpdatedBy';
|
||||
$lang->doc->editedDate = 'UpdatedDate';
|
||||
$lang->doc->version = 'Version';
|
||||
$lang->doc->basicInfo = 'Basic Info';
|
||||
$lang->doc->deleted = 'Deleted';
|
||||
$lang->doc->fileObject = 'Dependent Item';
|
||||
$lang->doc->whiteList = 'White List';
|
||||
$lang->doc->contentType = 'Format';
|
||||
$lang->doc->separator = "<i class='icon-angle-right'></i>";
|
||||
$lang->doc->fileTitle = 'File Name';
|
||||
$lang->doc->filePath = 'File Path';
|
||||
$lang->doc->extension = 'Extension';
|
||||
$lang->doc->size = 'Size';
|
||||
$lang->doc->download = 'Download';
|
||||
$lang->doc->acl = 'Right';
|
||||
$lang->doc->fileName = 'Files';
|
||||
$lang->doc->groups = 'Groups';
|
||||
$lang->doc->users = 'Users';
|
||||
$lang->doc->item = ' Items';
|
||||
$lang->doc->num = 'Documents';
|
||||
$lang->doc->searchResult = 'Search Result';
|
||||
$lang->doc->mailto = 'Mailto';
|
||||
$lang->doc->noModule = 'No document in this lib, please create it';
|
||||
$lang->doc->common = 'Document';
|
||||
$lang->doc->id = 'ID';
|
||||
$lang->doc->product = $lang->productCommon;
|
||||
$lang->doc->project = 'Project';
|
||||
$lang->doc->execution = $lang->executionCommon;
|
||||
$lang->doc->lib = 'Library';
|
||||
$lang->doc->module = 'Category';
|
||||
$lang->doc->title = 'Name';
|
||||
$lang->doc->digest = 'Summary';
|
||||
$lang->doc->comment = 'Comment';
|
||||
$lang->doc->type = 'Type';
|
||||
$lang->doc->content = 'Text';
|
||||
$lang->doc->keywords = 'Tags';
|
||||
$lang->doc->url = 'URL';
|
||||
$lang->doc->files = 'Files';
|
||||
$lang->doc->addedBy = 'Author';
|
||||
$lang->doc->addedDate = 'Added';
|
||||
$lang->doc->editedBy = 'UpdatedBy';
|
||||
$lang->doc->editedDate = 'UpdatedDate';
|
||||
$lang->doc->version = 'Version';
|
||||
$lang->doc->basicInfo = 'Basic Info';
|
||||
$lang->doc->deleted = 'Deleted';
|
||||
$lang->doc->fileObject = 'Dependent Item';
|
||||
$lang->doc->whiteList = 'White List';
|
||||
$lang->doc->contentType = 'Format';
|
||||
$lang->doc->separator = "<i class='icon-angle-right'></i>";
|
||||
$lang->doc->fileTitle = 'File Name';
|
||||
$lang->doc->filePath = 'File Path';
|
||||
$lang->doc->extension = 'Extension';
|
||||
$lang->doc->size = 'Size';
|
||||
$lang->doc->download = 'Download';
|
||||
$lang->doc->acl = 'Right';
|
||||
$lang->doc->fileName = 'Files';
|
||||
$lang->doc->groups = 'Groups';
|
||||
$lang->doc->users = 'Users';
|
||||
$lang->doc->item = ' Items';
|
||||
$lang->doc->num = 'Documents';
|
||||
$lang->doc->searchResult = 'Search Result';
|
||||
$lang->doc->mailto = 'Mailto';
|
||||
$lang->doc->noModule = 'No document in this lib, please create it';
|
||||
$lang->doc->noChapter = 'No chapters or articles in this book. Please add chapters and articles.';
|
||||
|
||||
$lang->doc->moduleDoc = 'By Module';
|
||||
$lang->doc->searchDoc = 'Search';
|
||||
$lang->doc->fast = 'Quick Entry';
|
||||
$lang->doc->allDoc = 'All Documents';
|
||||
$lang->doc->openedByMe = 'My';
|
||||
$lang->doc->editedByMe = 'Edited By Me';
|
||||
$lang->doc->orderByOpen = 'Recent Added';
|
||||
$lang->doc->orderByEdit = 'Recent Updated';
|
||||
$lang->doc->orderByVisit = 'Last Visited';
|
||||
$lang->doc->todayEdited = 'Updated Today';
|
||||
$lang->doc->pastEdited = 'Total Updated';
|
||||
$lang->doc->myDoc = 'My Documents';
|
||||
$lang->doc->myCollection = 'My Favorites';
|
||||
$lang->doc->moduleDoc = 'By Module';
|
||||
$lang->doc->searchDoc = 'Search';
|
||||
$lang->doc->fast = 'Quick Entry';
|
||||
$lang->doc->allDoc = 'All Documents';
|
||||
$lang->doc->openedByMe = 'My';
|
||||
$lang->doc->editedByMe = 'Edited By Me';
|
||||
$lang->doc->orderByOpen = 'Recent Added';
|
||||
$lang->doc->orderByEdit = 'Recent Updated';
|
||||
$lang->doc->orderByVisit = 'Last Visited';
|
||||
$lang->doc->todayEdited = 'Updated Today';
|
||||
$lang->doc->pastEdited = 'Total Updated';
|
||||
$lang->doc->myDoc = 'My Documents';
|
||||
$lang->doc->myCollection = 'My Favorites';
|
||||
|
||||
/* Methods list */
|
||||
$lang->doc->index = 'Document Home';
|
||||
@@ -76,6 +77,9 @@ $lang->doc->diff = 'Diff';
|
||||
$lang->doc->diffAction = 'Diff Document';
|
||||
$lang->doc->sort = 'Rank Document';
|
||||
$lang->doc->manageType = 'Manage Category';
|
||||
$lang->doc->createBook = 'Create Book';
|
||||
$lang->doc->manageBook = 'Manage Book';
|
||||
$lang->doc->editBook = 'Edit Book';
|
||||
$lang->doc->editType = 'Edit';
|
||||
$lang->doc->deleteType = 'Delete';
|
||||
$lang->doc->addType = 'Add';
|
||||
@@ -162,22 +166,26 @@ $lang->doc->mail->edit = new stdclass();
|
||||
$lang->doc->mail->create->title = "%s created document #%s:%s";
|
||||
$lang->doc->mail->edit->title = "%s edited document #%s:%s";
|
||||
|
||||
$lang->doc->confirmDelete = "Do you want to delete this document?";
|
||||
$lang->doc->confirmDeleteLib = "Do you want to delete this document library?";
|
||||
$lang->doc->errorEditSystemDoc = "You don't have to change system document library.";
|
||||
$lang->doc->errorEmptyProduct = "No {$lang->productCommon}. It cannot be created.";
|
||||
$lang->doc->errorEmptyProject = "No {$lang->executionCommon}. It cannot be created.";
|
||||
$lang->doc->errorMainSysLib = "This library cannot be deleted.";
|
||||
$lang->doc->accessDenied = "Access is denied!";
|
||||
$lang->doc->versionNotFount = 'It does not exist in this build.';
|
||||
$lang->doc->noDoc = 'No documents. ';
|
||||
$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact us at renee@easysoft.ltd to try ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'No documents found.';
|
||||
$lang->doc->noEditedDoc = 'You have not edited any documents.';
|
||||
$lang->doc->noOpenedDoc = 'You have not created any documents.';
|
||||
$lang->doc->noCollectedDoc = 'You have not favorited any documents.';
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmDelete = "Do you want to delete this document?";
|
||||
$lang->doc->confirmDeleteLib = "Do you want to delete this document library?";
|
||||
$lang->doc->confirmDeleteChapter = "Do you want to delete this chapter?";
|
||||
$lang->doc->errorEditSystemDoc = "You don't have to change system document library.";
|
||||
$lang->doc->errorEmptyProduct = "No {$lang->productCommon}. It cannot be created.";
|
||||
$lang->doc->errorEmptyProject = "No {$lang->executionCommon}. It cannot be created.";
|
||||
$lang->doc->errorMainSysLib = "This library cannot be deleted.";
|
||||
$lang->doc->accessDenied = "Access is denied!";
|
||||
$lang->doc->versionNotFount = 'It does not exist in this build.';
|
||||
$lang->doc->noDoc = 'No documents. ';
|
||||
$lang->doc->noArticle = 'No articles.';
|
||||
$lang->doc->noLib = 'No libraries. ';
|
||||
$lang->doc->noBook = 'The WIKI library has not created a manual, please create a new one :)';
|
||||
$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact us at renee@easysoft.ltd to try ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'No documents found.';
|
||||
$lang->doc->noEditedDoc = 'You have not edited any documents.';
|
||||
$lang->doc->noOpenedDoc = 'You have not created any documents.';
|
||||
$lang->doc->noCollectedDoc = 'You have not favorited any documents.';
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Users who can access the selected product can access it.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users who can access the selected product or users in the whiltelist can access it.';
|
||||
|
||||
+25
-16
@@ -48,6 +48,8 @@ $lang->doc->item = ' Objets';
|
||||
$lang->doc->num = 'Documents';
|
||||
$lang->doc->searchResult = 'Résultat de Recherche';
|
||||
$lang->doc->mailto = 'Mailto';
|
||||
$lang->doc->noModule = 'No document in this lib, please create it';
|
||||
$lang->doc->noChapter = 'No chapters or articles in this book. Please add chapters and articles.';
|
||||
|
||||
$lang->doc->moduleDoc = 'Par Module';
|
||||
$lang->doc->searchDoc = 'Rechercher';
|
||||
@@ -74,6 +76,9 @@ $lang->doc->diff = 'Diff';
|
||||
$lang->doc->diffAction = 'Document Diff';
|
||||
$lang->doc->sort = 'Rang Document';
|
||||
$lang->doc->manageType = 'Gérer Catégories';
|
||||
$lang->doc->createBook = 'Create Book';
|
||||
$lang->doc->manageBook = 'Manage Book';
|
||||
$lang->doc->editBook = 'Edit Book';
|
||||
$lang->doc->editType = 'Editer';
|
||||
$lang->doc->deleteType = 'Supprimer';
|
||||
$lang->doc->addType = 'Ajouter';
|
||||
@@ -157,22 +162,26 @@ $lang->doc->mail->edit = new stdclass();
|
||||
$lang->doc->mail->create->title = "%s created document #%s:%s";
|
||||
$lang->doc->mail->edit->title = "%s edited document #%s:%s";
|
||||
|
||||
$lang->doc->confirmDelete = "Voulez-vous supprimer ce document ?";
|
||||
$lang->doc->confirmDeleteLib = "Voulez-vous supprimer cette Bibliothèque ?";
|
||||
$lang->doc->errorEditSystemDoc = "Vous n'avez pas besoin de changer de système de Bibliothèque.";
|
||||
$lang->doc->errorEmptyProduct = "Aucun {$lang->productCommon}. Il ne peut pas être créé.";
|
||||
$lang->doc->errorEmptyProject = "Aucun {$lang->executionCommon}. Il ne peut pas être créé.";
|
||||
$lang->doc->errorMainSysLib = "Cette Bibliothèque ne peut pas être supprimée.";
|
||||
$lang->doc->accessDenied = "Access is denied !";
|
||||
$lang->doc->versionNotFount = "N'existe pas dans ce build.";
|
||||
$lang->doc->noDoc = 'Aucun documents. ';
|
||||
$lang->doc->cannotCreateOffice = 'Désolé, %s peut seulement être créé dans ZenTao Enterprise. Contactez Zentao à renee@easysoft.ltd pour essayer ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'Aucun documents trouvé.';
|
||||
$lang->doc->noEditedDoc = "Vous n'avez pas mis à jour de documents.";
|
||||
$lang->doc->noOpenedDoc = "Vous n'avez pas ajouté de documents.";
|
||||
$lang->doc->noCollectedDoc = "Vous avez aucun document dans vos favoris.";
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmDelete = "Voulez-vous supprimer ce document ?";
|
||||
$lang->doc->confirmDeleteLib = "Voulez-vous supprimer cette Bibliothèque ?";
|
||||
$lang->doc->confirmDeleteChapter = "Do you want to delete this chapter?";
|
||||
$lang->doc->errorEditSystemDoc = "Vous n'avez pas besoin de changer de système de Bibliothèque.";
|
||||
$lang->doc->errorEmptyProduct = "Aucun {$lang->productCommon}. Il ne peut pas être créé.";
|
||||
$lang->doc->errorEmptyProject = "Aucun {$lang->executionCommon}. Il ne peut pas être créé.";
|
||||
$lang->doc->errorMainSysLib = "Cette Bibliothèque ne peut pas être supprimée.";
|
||||
$lang->doc->accessDenied = "Access is denied !";
|
||||
$lang->doc->versionNotFount = "N'existe pas dans ce build.";
|
||||
$lang->doc->noDoc = 'Aucun documents. ';
|
||||
$lang->doc->noArticle = 'No articles.';
|
||||
$lang->doc->noLib = 'No libraries. ';
|
||||
$lang->doc->noBook = 'The WIKI library has not created a manual, please create a new one :)';
|
||||
$lang->doc->cannotCreateOffice = 'Désolé, %s peut seulement être créé dans ZenTao Enterprise. Contactez Zentao à renee@easysoft.ltd pour essayer ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'Aucun documents trouvé.';
|
||||
$lang->doc->noEditedDoc = "Vous n'avez pas mis à jour de documents.";
|
||||
$lang->doc->noOpenedDoc = "Vous n'avez pas ajouté de documents.";
|
||||
$lang->doc->noCollectedDoc = "Vous avez aucun document dans vos favoris.";
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Les utilisateurs qui ont accès au Product peuvent y accéder.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Les utilisateurs qui ont accès au Product ou les utilisateurs de la Liste Blanche peuvent y accéder.';
|
||||
|
||||
+25
-16
@@ -48,6 +48,8 @@ $lang->doc->item = ' Items';
|
||||
$lang->doc->num = 'Documents';
|
||||
$lang->doc->searchResult = 'Search kết quả';
|
||||
$lang->doc->mailto = 'Mailto';
|
||||
$lang->doc->noModule = 'No document in this lib, please create it';
|
||||
$lang->doc->noChapter = 'No chapters or articles in this book. Please add chapters and articles.';
|
||||
|
||||
$lang->doc->moduleDoc = 'By Module';
|
||||
$lang->doc->searchDoc = 'Tìm kiếm';
|
||||
@@ -74,6 +76,9 @@ $lang->doc->diff = 'Diff';
|
||||
$lang->doc->diffAction = 'Diff tài liệu';
|
||||
$lang->doc->sort = 'Đánh giá tài liệu';
|
||||
$lang->doc->manageType = 'Quản lý danh mục';
|
||||
$lang->doc->createBook = 'Create Book';
|
||||
$lang->doc->manageBook = 'Manage Book';
|
||||
$lang->doc->editBook = 'Edit Book';
|
||||
$lang->doc->editType = 'Sửa';
|
||||
$lang->doc->deleteType = 'Xóa';
|
||||
$lang->doc->addType = 'Thêm';
|
||||
@@ -157,22 +162,26 @@ $lang->doc->mail->edit = new stdclass();
|
||||
$lang->doc->mail->create->title = "%s created document #%s:%s";
|
||||
$lang->doc->mail->edit->title = "%s edited document #%s:%s";
|
||||
|
||||
$lang->doc->confirmDelete = "Bạn có muốn xóa this document?";
|
||||
$lang->doc->confirmDeleteLib = "Bạn có muốn xóa this document library?";
|
||||
$lang->doc->errorEditSystemDoc = "You don't have to change system document library.";
|
||||
$lang->doc->errorEmptyProduct = "Không có {$lang->productCommon}. It cannot be created.";
|
||||
$lang->doc->errorEmptyProject = "Không có {$lang->executionCommon}. It cannot be created.";
|
||||
$lang->doc->errorMainSysLib = "This library không thể xóa.";
|
||||
$lang->doc->accessDenied = "Access bị từ chối!";
|
||||
$lang->doc->versionNotFount = 'Nó does not exist in bản dựng này.';
|
||||
$lang->doc->noDoc = 'Không có documents. ';
|
||||
$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact us at renee@easysoft.ltd to try ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'Không có documents found.';
|
||||
$lang->doc->noEditedDoc = 'Bạn có not edited any documents.';
|
||||
$lang->doc->noOpenedDoc = 'Bạn chưa tạo any documents.';
|
||||
$lang->doc->noCollectedDoc = 'Bạn có not favorited any documents.';
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
$lang->doc->confirmDelete = "Bạn có muốn xóa this document?";
|
||||
$lang->doc->confirmDeleteLib = "Bạn có muốn xóa this document library?";
|
||||
$lang->doc->confirmDeleteChapter = "Do you want to delete this chapter?";
|
||||
$lang->doc->errorEditSystemDoc = "You don't have to change system document library.";
|
||||
$lang->doc->errorEmptyProduct = "Không có {$lang->productCommon}. It cannot be created.";
|
||||
$lang->doc->errorEmptyProject = "Không có {$lang->executionCommon}. It cannot be created.";
|
||||
$lang->doc->errorMainSysLib = "This library không thể xóa.";
|
||||
$lang->doc->accessDenied = "Access bị từ chối!";
|
||||
$lang->doc->versionNotFount = 'Nó does not exist in bản dựng này.';
|
||||
$lang->doc->noDoc = 'Không có documents. ';
|
||||
$lang->doc->noArticle = 'No articles.';
|
||||
$lang->doc->noLib = 'No libraries. ';
|
||||
$lang->doc->noBook = 'The WIKI library has not created a manual, please create a new one :)';
|
||||
$lang->doc->cannotCreateOffice = 'Sorry, %s can only be created in ZenTao Enterprise. Contact us at renee@easysoft.ltd to try ZenTao Enterprise.';
|
||||
$lang->doc->notSetOffice = "<p>To create a %s document, you need to configure <a href='%s' target='_parent'>office convert</a>.<p>";
|
||||
$lang->doc->noSearchedDoc = 'Không có documents found.';
|
||||
$lang->doc->noEditedDoc = 'Bạn có not edited any documents.';
|
||||
$lang->doc->noOpenedDoc = 'Bạn chưa tạo any documents.';
|
||||
$lang->doc->noCollectedDoc = 'Bạn có not favorited any documents.';
|
||||
$lang->doc->errorEmptyLib = 'No data in document library.';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = 'Users who can access the selected product có thể truy cập nó.';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = 'Users who can access the selected product or users in the whiltelist có thể truy cập nó.';
|
||||
|
||||
+77
-69
@@ -10,60 +10,61 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* 字段列表。*/
|
||||
$lang->doc->common = '文档';
|
||||
$lang->doc->id = '文档编号';
|
||||
$lang->doc->product = '所属' . $lang->productCommon;
|
||||
$lang->doc->project = '所属项目';
|
||||
$lang->doc->execution = '所属' . $lang->executionCommon;
|
||||
$lang->doc->lib = '所属文档库';
|
||||
$lang->doc->module = '所属分类';
|
||||
$lang->doc->title = '文档标题';
|
||||
$lang->doc->digest = '文档摘要';
|
||||
$lang->doc->comment = '文档备注';
|
||||
$lang->doc->type = '文档类型';
|
||||
$lang->doc->content = '文档正文';
|
||||
$lang->doc->keywords = '关键字';
|
||||
$lang->doc->url = '文档URL';
|
||||
$lang->doc->files = '附件';
|
||||
$lang->doc->addedBy = '由谁添加';
|
||||
$lang->doc->addedDate = '添加时间';
|
||||
$lang->doc->editedBy = '由谁更新';
|
||||
$lang->doc->editedDate = '更新时间';
|
||||
$lang->doc->version = '版本号';
|
||||
$lang->doc->basicInfo = '基本信息';
|
||||
$lang->doc->deleted = '已删除';
|
||||
$lang->doc->fileObject = '所属对象';
|
||||
$lang->doc->whiteList = '白名单';
|
||||
$lang->doc->contentType = '文档格式';
|
||||
$lang->doc->separator = "<i class='icon-angle-right'></i>";
|
||||
$lang->doc->fileTitle = '附件名';
|
||||
$lang->doc->filePath = '地址';
|
||||
$lang->doc->extension = '类型';
|
||||
$lang->doc->size = '大小';
|
||||
$lang->doc->download = '下载';
|
||||
$lang->doc->acl = '权限';
|
||||
$lang->doc->fileName = '附件';
|
||||
$lang->doc->groups = '分组';
|
||||
$lang->doc->users = '用户';
|
||||
$lang->doc->item = '项';
|
||||
$lang->doc->num = '文档数量';
|
||||
$lang->doc->searchResult = '搜索结果';
|
||||
$lang->doc->mailto = '抄送给';
|
||||
$lang->doc->noModule = '文档库下没有目录和文档,请维护目录或者创建文档';
|
||||
$lang->doc->common = '文档';
|
||||
$lang->doc->id = '文档编号';
|
||||
$lang->doc->product = '所属' . $lang->productCommon;
|
||||
$lang->doc->project = '所属项目';
|
||||
$lang->doc->execution = '所属' . $lang->executionCommon;
|
||||
$lang->doc->lib = '所属文档库';
|
||||
$lang->doc->module = '所属分类';
|
||||
$lang->doc->title = '文档标题';
|
||||
$lang->doc->digest = '文档摘要';
|
||||
$lang->doc->comment = '文档备注';
|
||||
$lang->doc->type = '文档类型';
|
||||
$lang->doc->content = '文档正文';
|
||||
$lang->doc->keywords = '关键字';
|
||||
$lang->doc->url = '文档URL';
|
||||
$lang->doc->files = '附件';
|
||||
$lang->doc->addedBy = '由谁添加';
|
||||
$lang->doc->addedDate = '添加时间';
|
||||
$lang->doc->editedBy = '由谁更新';
|
||||
$lang->doc->editedDate = '更新时间';
|
||||
$lang->doc->version = '版本号';
|
||||
$lang->doc->basicInfo = '基本信息';
|
||||
$lang->doc->deleted = '已删除';
|
||||
$lang->doc->fileObject = '所属对象';
|
||||
$lang->doc->whiteList = '白名单';
|
||||
$lang->doc->contentType = '文档格式';
|
||||
$lang->doc->separator = "<i class='icon-angle-right'></i>";
|
||||
$lang->doc->fileTitle = '附件名';
|
||||
$lang->doc->filePath = '地址';
|
||||
$lang->doc->extension = '类型';
|
||||
$lang->doc->size = '大小';
|
||||
$lang->doc->download = '下载';
|
||||
$lang->doc->acl = '权限';
|
||||
$lang->doc->fileName = '附件';
|
||||
$lang->doc->groups = '分组';
|
||||
$lang->doc->users = '用户';
|
||||
$lang->doc->item = '项';
|
||||
$lang->doc->num = '文档数量';
|
||||
$lang->doc->searchResult = '搜索结果';
|
||||
$lang->doc->mailto = '抄送给';
|
||||
$lang->doc->noModule = '文档库下没有目录和文档,请维护目录或者创建文档';
|
||||
$lang->doc->noChapter = '手册下没有章节和文章,请维护手册';
|
||||
|
||||
$lang->doc->moduleDoc = '按模块浏览';
|
||||
$lang->doc->searchDoc = '搜索';
|
||||
$lang->doc->fast = '快速访问';
|
||||
$lang->doc->allDoc = '所有文档';
|
||||
$lang->doc->openedByMe = '由我创建';
|
||||
$lang->doc->editedByMe = '由我编辑';
|
||||
$lang->doc->orderByOpen = '最近添加';
|
||||
$lang->doc->orderByEdit = '最近更新';
|
||||
$lang->doc->orderByVisit = '最近访问';
|
||||
$lang->doc->todayEdited = '今日更新';
|
||||
$lang->doc->pastEdited = '往日更新';
|
||||
$lang->doc->myDoc = '我的文档';
|
||||
$lang->doc->myCollection = '我的收藏';
|
||||
$lang->doc->moduleDoc = '按模块浏览';
|
||||
$lang->doc->searchDoc = '搜索';
|
||||
$lang->doc->fast = '快速访问';
|
||||
$lang->doc->allDoc = '所有文档';
|
||||
$lang->doc->openedByMe = '由我创建';
|
||||
$lang->doc->editedByMe = '由我编辑';
|
||||
$lang->doc->orderByOpen = '最近添加';
|
||||
$lang->doc->orderByEdit = '最近更新';
|
||||
$lang->doc->orderByVisit = '最近访问';
|
||||
$lang->doc->todayEdited = '今日更新';
|
||||
$lang->doc->pastEdited = '往日更新';
|
||||
$lang->doc->myDoc = '我的文档';
|
||||
$lang->doc->myCollection = '我的收藏';
|
||||
|
||||
/* 方法列表。*/
|
||||
$lang->doc->index = '文档主页';
|
||||
@@ -76,6 +77,9 @@ $lang->doc->diff = '对比';
|
||||
$lang->doc->diffAction = '对比文档';
|
||||
$lang->doc->sort = '文档排序';
|
||||
$lang->doc->manageType = '维护目录';
|
||||
$lang->doc->createBook = '创建手册';
|
||||
$lang->doc->manageBook = '维护手册';
|
||||
$lang->doc->editBook = '编辑手册';
|
||||
$lang->doc->editType = '编辑目录';
|
||||
$lang->doc->deleteType = '删除目录';
|
||||
$lang->doc->addType = '增加目录';
|
||||
@@ -162,22 +166,26 @@ $lang->doc->mail->edit = new stdclass();
|
||||
$lang->doc->mail->create->title = "%s创建了文档 #%s:%s";
|
||||
$lang->doc->mail->edit->title = "%s编辑了文档 #%s:%s";
|
||||
|
||||
$lang->doc->confirmDelete = "您确定删除该文档吗?";
|
||||
$lang->doc->confirmDeleteLib = "您确定删除该文档库吗?";
|
||||
$lang->doc->errorEditSystemDoc = "系统文档库无需修改。";
|
||||
$lang->doc->errorEmptyProduct = "没有{$lang->productCommon},无法创建文档";
|
||||
$lang->doc->errorEmptyProject = "没有{$lang->executionCommon},无法创建文档";
|
||||
$lang->doc->errorMainSysLib = "该系统文档库不能删除!";
|
||||
$lang->doc->accessDenied = "您没有权限访问!";
|
||||
$lang->doc->versionNotFount = '该版本文档不存在';
|
||||
$lang->doc->noDoc = '暂时没有文档。';
|
||||
$lang->doc->cannotCreateOffice = '<p>对不起,企业版才能创建%s文档。<p><p>试用企业版,请联系我们:4006-8899-23 0532-86893032。</p>';
|
||||
$lang->doc->notSetOffice = "<p>创建%s文档,需要配置<a href='%s' target='_parent'>Office转换设置</a>。<p>";
|
||||
$lang->doc->noSearchedDoc = '没有搜索到任何文档。';
|
||||
$lang->doc->noEditedDoc = '您还没有编辑任何文档。';
|
||||
$lang->doc->noOpenedDoc = '您还没有创建任何文档。';
|
||||
$lang->doc->noCollectedDoc = '您还没有收藏任何文档。';
|
||||
$lang->doc->errorEmptyLib = '文档库暂无数据。';
|
||||
$lang->doc->confirmDelete = "您确定删除该文档吗?";
|
||||
$lang->doc->confirmDeleteLib = "您确定删除该文档库吗?";
|
||||
$lang->doc->confirmDeleteChapter = "您确定删除该章节吗?";
|
||||
$lang->doc->errorEditSystemDoc = "系统文档库无需修改。";
|
||||
$lang->doc->errorEmptyProduct = "没有{$lang->productCommon},无法创建文档";
|
||||
$lang->doc->errorEmptyProject = "没有{$lang->executionCommon},无法创建文档";
|
||||
$lang->doc->errorMainSysLib = "该系统文档库不能删除!";
|
||||
$lang->doc->accessDenied = "您没有权限访问!";
|
||||
$lang->doc->versionNotFount = '该版本文档不存在';
|
||||
$lang->doc->noDoc = '暂时没有文档。';
|
||||
$lang->doc->noArticle = '暂时没有文章。';
|
||||
$lang->doc->noLib = '暂时没有文档库。';
|
||||
$lang->doc->noBook = 'WIKI库还未创建手册,请新建 :)';
|
||||
$lang->doc->cannotCreateOffice = '<p>对不起,企业版才能创建%s文档。<p><p>试用企业版,请联系我们:4006-8899-23 0532-86893032。</p>';
|
||||
$lang->doc->notSetOffice = "<p>创建%s文档,需要配置<a href='%s' target='_parent'>Office转换设置</a>。<p>";
|
||||
$lang->doc->noSearchedDoc = '没有搜索到任何文档。';
|
||||
$lang->doc->noEditedDoc = '您还没有编辑任何文档。';
|
||||
$lang->doc->noOpenedDoc = '您还没有创建任何文档。';
|
||||
$lang->doc->noCollectedDoc = '您还没有收藏任何文档。';
|
||||
$lang->doc->errorEmptyLib = '文档库暂无数据。';
|
||||
|
||||
$lang->doc->noticeAcl['lib']['product']['default'] = '有所选产品访问权限的用户可以访问。';
|
||||
$lang->doc->noticeAcl['lib']['product']['custom'] = '有所选产品访问权限或白名单里的用户可以访问。';
|
||||
|
||||
@@ -74,6 +74,9 @@ $lang->doc->diff = '對比';
|
||||
$lang->doc->diffAction = '對比文檔';
|
||||
$lang->doc->sort = '文檔排序';
|
||||
$lang->doc->manageType = '維護分類';
|
||||
$lang->doc->createBook = '創建手冊';
|
||||
$lang->doc->manageBook = '維護手冊';
|
||||
$lang->doc->editBook = '編輯手冊';
|
||||
$lang->doc->editType = '編輯分類';
|
||||
$lang->doc->deleteType = '刪除分類';
|
||||
$lang->doc->addType = '增加分類';
|
||||
@@ -168,6 +171,9 @@ $lang->doc->errorMainSysLib = "該系統文檔庫不能刪除!";
|
||||
$lang->doc->accessDenied = "您沒有權限訪問!";
|
||||
$lang->doc->versionNotFount = '該版本文檔不存在';
|
||||
$lang->doc->noDoc = '暫時沒有文檔。';
|
||||
$lang->doc->noArticle = '暫時沒有文章。';
|
||||
$lang->doc->noLib = '暫時沒有文檔庫';
|
||||
$lang->doc->noBook = 'WIKI庫還沒有創建手冊,請新建 :)';
|
||||
$lang->doc->cannotCreateOffice = '<p>對不起,企業版才能創建%s文檔。<p><p>試用企業版,請聯繫我們:4006-8899-23 0532-86893032。</p>';
|
||||
$lang->doc->notSetOffice = "<p>創建%s文檔,需要配置<a href='%s' target='_parent'>Office轉換設置</a>。<p>";
|
||||
$lang->doc->noSearchedDoc = '沒有搜索到任何文檔。';
|
||||
|
||||
+95
-50
@@ -535,10 +535,13 @@ class docModel extends model
|
||||
/* Fix bug #2929. strip_tags($this->post->contentMarkdown, $this->config->allowedTags)*/
|
||||
$doc->contentMarkdown = $this->post->contentMarkdown;
|
||||
if($doc->acl == 'private') $doc->users = $this->app->user->account;
|
||||
$condition = "lib = '$doc->lib' AND module = $doc->module";
|
||||
|
||||
$result = $this->loadModel('common')->removeDuplicate('doc', $doc, $condition);
|
||||
if($result['stop']) return array('status' => 'exists', 'id' => $result['duplicate']);
|
||||
if($doc->title)
|
||||
{
|
||||
$condition = "lib = '$doc->lib' AND module = $doc->module";
|
||||
$result = $this->loadModel('common')->removeDuplicate('doc', $doc, $condition);
|
||||
if($result['stop']) return array('status' => 'exists', 'id' => $result['duplicate']);
|
||||
}
|
||||
|
||||
$lib = $this->getLibByID($doc->lib);
|
||||
$doc = $this->loadModel('file')->processImgURL($doc, $this->config->doc->editor->create['id'], $this->post->uid);
|
||||
@@ -650,7 +653,7 @@ class docModel extends model
|
||||
if(isset($doc->digest)) $docContent->digest = $doc->digest;
|
||||
if($files) $docContent->files .= ',' . join(',', array_keys($files));
|
||||
$docContent->files = trim($docContent->files, ',');
|
||||
$this->dao->insert(TABLE_DOCCONTENT)->data($docContent)->exec();
|
||||
$this->dao->replace(TABLE_DOCCONTENT)->data($docContent)->exec();
|
||||
}
|
||||
unset($doc->contentType);
|
||||
|
||||
@@ -1116,9 +1119,18 @@ class docModel extends model
|
||||
*/
|
||||
public function getLibsByObject($type, $objectID, $mode = '')
|
||||
{
|
||||
if($type != 'product' and $type != 'project' and $type != 'execution') return false;
|
||||
|
||||
$objectLibs = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere($type)->eq($objectID)->orderBy('`order`, id')->fetchAll('id');
|
||||
if($type == 'custom' or $type == 'book')
|
||||
{
|
||||
$objectLibs = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere('type')->eq($type)->orderBy('`order`, id')->fetchAll('id');
|
||||
}
|
||||
else if($type != 'product' and $type != 'project' and $type != 'execution')
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$objectLibs = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere($type)->eq($objectID)->orderBy('`order`, id')->fetchAll('id');
|
||||
}
|
||||
|
||||
if($type == 'product')
|
||||
{
|
||||
@@ -1140,24 +1152,15 @@ class docModel extends model
|
||||
$itemCounts = $this->statLibCounts(array_keys($libs));
|
||||
foreach($libs as $libID => $lib) $libs[$libID]->allCount = $itemCounts[$libID];
|
||||
|
||||
/*
|
||||
if(common::hasPriv('doc', 'showFiles'))
|
||||
{
|
||||
$libs['files'] = new stdclass();
|
||||
$libs['files']->name = $this->lang->doclib->files;
|
||||
$libs['files']->allCount = count($this->getLibFiles($type, $objectID, 'id_desc'));
|
||||
}
|
||||
*/
|
||||
|
||||
return $libs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ordered objects for dic.
|
||||
*
|
||||
* @param string $objectType
|
||||
*
|
||||
* @param string $objectType
|
||||
* @access public
|
||||
* @return array
|
||||
* @return array
|
||||
*/
|
||||
public function getOrderedObjects($objectType = 'product')
|
||||
{
|
||||
@@ -1166,17 +1169,17 @@ class docModel extends model
|
||||
{
|
||||
$products = $this->loadModel('product')->getList();
|
||||
foreach($products as $id => $product)
|
||||
{
|
||||
{
|
||||
if($product->status == 'normal' and $product->PO == $this->app->user->account)
|
||||
{
|
||||
$myObjects[$id] = $product->name;
|
||||
{
|
||||
$myObjects[$id] = $product->name;
|
||||
}
|
||||
elseif($product->status == 'normal' and !($product->PO == $this->app->user->account))
|
||||
{
|
||||
{
|
||||
$normalObjects[$id] = $product->name;
|
||||
}
|
||||
elseif($product->status == 'closed')
|
||||
{
|
||||
{
|
||||
$closedObjects[$id] = $product->name;
|
||||
}
|
||||
}
|
||||
@@ -1193,9 +1196,9 @@ class docModel extends model
|
||||
|
||||
$orderedProjects = array();
|
||||
foreach($programs as $programID => $programName)
|
||||
{
|
||||
{
|
||||
foreach($projects as $id => $project)
|
||||
{
|
||||
{
|
||||
if($project->parent and $project->parent != $programID) continue;
|
||||
$orderedProjects[$id] = $project;
|
||||
unset($projects[$project->id]);
|
||||
@@ -1218,6 +1221,32 @@ class docModel extends model
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif($objectType == 'execution')
|
||||
{
|
||||
$executions = $this->dao->select('*')->from(TABLE_EXECUTION)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->in('sprint,stage')
|
||||
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi()
|
||||
->orderBy('order_asc')
|
||||
->fetchAll('id');
|
||||
|
||||
$orderedExecutions = array();
|
||||
foreach($executions as $id => $execution)
|
||||
{
|
||||
if($execution->status != 'done' and $execution->status != 'closed' and $execution->PM == $this->app->user->account)
|
||||
{
|
||||
$myObjects[$id] = $execution->name;
|
||||
}
|
||||
else if($execution->status != 'done' and $execution->status != 'closed' and !($execution->PM == $this->app->user->account))
|
||||
{
|
||||
$normalObjects[$id] = $execution->name;
|
||||
}
|
||||
else if($execution->status == 'done' or $execution->status == 'closed')
|
||||
{
|
||||
$closedObjects[$id] = $execution->name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $myObjects + $normalObjects + $closedObjects;
|
||||
}
|
||||
@@ -1666,31 +1695,42 @@ class docModel extends model
|
||||
/**
|
||||
* Build document module index page create document button.
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $objectType
|
||||
* @param int $objectID
|
||||
* @param int $libID
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function buildCreateButton4Doc($type, $objectID, $libID)
|
||||
public function buildCreateButton4Doc($objectType, $objectID, $libID)
|
||||
{
|
||||
$html = "<div class='dropdown' id='createDropdown'>";
|
||||
$html .= "<button class='btn btn-primary' type='button' data-toggle='dropdown'><i class='icon icon-plus'></i>" . $this->lang->doc->create . " <span class='caret'></span></button>";
|
||||
$html .= "<ul class='dropdown-menu' style='left:0px'>";
|
||||
foreach($this->lang->doc->typeList as $typeKey => $typeName)
|
||||
if($objectType == 'book')
|
||||
{
|
||||
$class = strpos($this->config->doc->officeTypes, $typeKey) !== false ? 'iframe' : '';
|
||||
$html .= "<li>";
|
||||
$html .= html::a(helper::createLink('doc', 'create', "type=$type&objectID=$objectID&libID=$libID&moduleID=0&type=$typeKey"), $typeName, '', "class='$class' data-app='{$this->app->openApp}'");
|
||||
$html .= "</li>";
|
||||
$html = html::a(helper::createLink('doc', 'createLib', "type=$objectType&objectID=$objectID"), '<i class="icon icon-plus"></i>' . $this->lang->doc->createBook, '', 'class="btn btn-secondary iframe"');
|
||||
}
|
||||
elseif($libID)
|
||||
{
|
||||
$html = "<div class='dropdown' id='createDropdown'>";
|
||||
$html .= "<button class='btn btn-primary' type='button' data-toggle='dropdown'><i class='icon icon-plus'></i>" . $this->lang->doc->create . " <span class='caret'></span></button>";
|
||||
$html .= "<ul class='dropdown-menu' style='left:0px'>";
|
||||
foreach($this->lang->doc->typeList as $typeKey => $typeName)
|
||||
{
|
||||
$class = strpos($this->config->doc->officeTypes, $typeKey) !== false ? 'iframe' : '';
|
||||
$html .= "<li>";
|
||||
$html .= html::a(helper::createLink('doc', 'create', "objectType=$objectType&objectID=$objectID&libID=$libID&moduleID=0&type=$typeKey"), $typeName, '', "class='$class' data-app='{$this->app->openApp}'");
|
||||
$html .= "</li>";
|
||||
|
||||
}
|
||||
if(common::hasPriv('doc', 'createLib'))
|
||||
{
|
||||
$html .= '<li class="divider"></li>';
|
||||
$html .= '<li>' . html::a(helper::createLink('doc', 'createLib', "type=$objectType&objectID=$objectID"), $this->lang->doc->createLib, '', "class='iframe' data-width='70%'") . '</li>';
|
||||
}
|
||||
$html .= "</ul></div>";
|
||||
}
|
||||
if(common::hasPriv('doc', 'createLib'))
|
||||
else
|
||||
{
|
||||
$html .= '<li class="divider"></li>';
|
||||
$html .= '<li>' . html::a(helper::createLink('doc', 'createLib', "type=$type&objectID=$objectID"), $this->lang->doc->createLib, '', "class='iframe' data-width='70%'") . '</li>';
|
||||
$html = html::a(helper::createLink('doc', 'createLib', "type=$objectType&objectID=$objectID"), '<i class="icon icon-plus"></i>' . $this->lang->doc->createLib, '', 'class="btn btn-secondary iframe"');
|
||||
}
|
||||
$html .= "</ul></div>";
|
||||
|
||||
return $html;
|
||||
}
|
||||
@@ -1860,18 +1900,21 @@ EOF;
|
||||
*/
|
||||
public function select($type, $objects, $objectID, $libs, $libID = 0)
|
||||
{
|
||||
if(empty($objects)) return '';
|
||||
if($type != 'custom' and $type != 'book' and empty($objects)) return '';
|
||||
|
||||
$output = '';
|
||||
|
||||
$output = "<div class='btn-group angle-btn'><div class='btn-group'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$objects[$objectID]}'><span class='text'>{$objects[$objectID]}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "<div class='table-col'><div class='list-group'>";
|
||||
foreach($objects as $key => $object)
|
||||
if($this->app->openApp == 'doc' and $type != 'custom' and $type != 'book')
|
||||
{
|
||||
$output .= html::a(inlink('objectLibs', "type=$type&objectID=$key"), $object);
|
||||
$output = "<div class='btn-group angle-btn'><div class='btn-group'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$objects[$objectID]}'><span class='text'>{$objects[$objectID]}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
$output .= "<div class='table-col'><div class='list-group'>";
|
||||
foreach($objects as $key => $object)
|
||||
{
|
||||
$output .= html::a(inlink('objectLibs', "type=$type&objectID=$key"), $object, '', "data-app='{$this->app->openApp}'");
|
||||
}
|
||||
$output .= "</div></div></div></div></div>";
|
||||
}
|
||||
$output .= "</div></div></div></div></div>";
|
||||
|
||||
if(!empty($libs))
|
||||
{
|
||||
@@ -1880,7 +1923,7 @@ EOF;
|
||||
$output .= "<div class='table-col'><div class='list-group'>";
|
||||
foreach($libs as $key => $lib)
|
||||
{
|
||||
$output .= html::a(inlink('objectLibs', "type=$type&objectID=$objectID&libID=$key"), $lib->name);
|
||||
$output .= html::a(inlink('objectLibs', "type=$type&objectID=$objectID&libID=$key"), $lib->name, '', "data-app='{$this->app->openApp}'");
|
||||
}
|
||||
$output .= "</div></div></div></div></div>";
|
||||
}
|
||||
@@ -1931,10 +1974,12 @@ EOF;
|
||||
|
||||
if(isset($moduleDocs[0]))
|
||||
{
|
||||
if(!isset($treeMenu[0])) $treeMenu[0] = '';
|
||||
|
||||
foreach($moduleDocs[0] as $doc)
|
||||
{
|
||||
if(!$docID) $docID = $doc->id;
|
||||
$treeMenu[0] .= '<li' . ($doc->id == $docID ? ' class="active"' : '') . '>' . html::a(inlink('objectLibs', "type=$type&objectID=$objectID&libID=$rootID&docID={$doc->id}"), $doc->title) . '</li>';
|
||||
$treeMenu[0] .= '<li' . ($doc->id == $docID ? ' class="active"' : '') . '>' . html::a(inlink('objectLibs', "type=$type&objectID=$objectID&libID=$rootID&docID={$doc->id}"), $doc->title, '', "data-app='{$this->app->openApp}'") . '</li>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1966,7 +2011,7 @@ EOF;
|
||||
foreach($moduleDocs[$module->id] as $doc)
|
||||
{
|
||||
if(!$docID) $docID = $doc->id;
|
||||
$treeMenu[$module->id] .= '<li' . ($doc->id == $docID ? ' class="active"' : '') . '>' . html::a(inlink('objectLibs', "type=$type&objectID=$objectID&libID=$libID&docID={$doc->id}"), $doc->title) . '</li>';
|
||||
$treeMenu[$module->id] .= '<li' . ($doc->id == $docID ? ' class="active"' : '') . '>' . html::a(inlink('objectLibs', "type=$type&objectID=$objectID&libID=$libID&docID={$doc->id}"), $doc->title, '', "data-app='{$this->app->openApp}'") . '</li>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,27 +3,42 @@
|
||||
<div class="main-col col-8">
|
||||
<div class="cell">
|
||||
<div class="detail no-padding">
|
||||
<div class="detail-title no-margin no-padding">
|
||||
<div class="detail-title no-padding doc-title">
|
||||
<div class="title"><?php echo $doc->title;?></div>
|
||||
<div class="info">
|
||||
<div class="version"></div>
|
||||
<div class="version">
|
||||
<div class='btn-group'>
|
||||
<a href='javascript:;' class='btn btn-link btn-limit text-ellipsis' data-toggle='dropdown' style="max-width: 120px;">
|
||||
#<?php echo $version ? $version : $doc->version;?>
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class='dropdown-menu' style='max-height:240px; max-width: 300px; overflow-y:auto'>
|
||||
<?php
|
||||
for($version = $doc->version; $version > 0; $version--)
|
||||
{
|
||||
echo "<li>" . html::a($this->createLink('doc', 'objectLibs', "type=$objectType&objectID=$object->id&libID=$libID&docID=$doc->id&version=$version"), '#' . $version) . "</li>";
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="user"></div>
|
||||
<div class="time"></div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<?php
|
||||
if(common::hasPriv('doc', 'edit')) echo html::a(inlink('edit', "docID=$doc->id"), '<i class="icon-edit"></i>', '', "title='{$lang->doc->edit}'");
|
||||
if(common::hasPriv('doc', 'edit')) echo html::a(inlink('edit', "docID=$doc->id&comment=false&objectType=$objectType&objectID=$object->id&libID=$libID"), '<i class="icon-edit"></i>', '', "title='{$lang->doc->edit}' class='btn btn-link'");
|
||||
if(common::hasPriv('doc', 'delete'))
|
||||
{
|
||||
$deleteURL = $this->createLink('doc', 'delete', "docID=$doc->id&confirm=yes");
|
||||
echo html::a("javascript:ajaxDelete(\"$deleteURL\", \"docList\", confirmDelete)", '<i class="icon-trash"></i>', '', "title='{$lang->doc->delete}'");
|
||||
$deleteURL = $this->createLink('doc', 'delete', "docID=$doc->id&confirm=yes&from=lib");
|
||||
echo html::a("javascript:ajaxDeleteDoc(\"$deleteURL\", \"docList\", confirmDelete)", '<i class="icon-trash"></i>', '', "title='{$lang->doc->delete}' class='btn btn-link'");
|
||||
}
|
||||
?>
|
||||
<?php $star = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
|
||||
<a data-url="<?php echo $this->createLink('doc', 'collect', "objectID=$doc->id&objectType=doc");?>" title="<?php echo $lang->doc->collect;?>" class='ajaxCollect'><i class='icon <?php echo $star;?>'></i></a>
|
||||
<a data-url="<?php echo $this->createLink('doc', 'collect', "objectID=$doc->id&objectType=doc");?>" title="<?php echo $lang->doc->collect;?>" class='ajaxCollect btn btn-link'><i class='icon <?php echo $star;?>'></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-content article-content no-margin no-padding">
|
||||
<div class="detail-content article-content">
|
||||
<?php
|
||||
if($doc->type == 'url')
|
||||
{
|
||||
@@ -55,7 +70,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $doc->content ? $doc->content : '空';
|
||||
echo $doc->content;
|
||||
}
|
||||
?>
|
||||
<?php foreach($doc->files as $file):?>
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($latestEditedDocs as $doc):?>
|
||||
<tr data-url="<?php echo $this->createLink('doc', 'view', "docID={$doc->id}");?>">
|
||||
<td class="c-name" title="<?php echo $doc->title?>"><?php echo $doc->title;?></td>
|
||||
<tr>
|
||||
<td class="c-name"><?php echo html::a($this->createLink('doc', 'view', "docID={$doc->id}", '', true), $doc->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'")?></a></td>
|
||||
<td class="c-num text-right"><?php echo $doc->fileSize ? $doc->fileSize : '-';?></td>
|
||||
<td class="c-user"><?php echo zget($users, $doc->addedBy);?></td>
|
||||
<td class="c-datetime"><?php echo helper::isZeroDate($doc->editedDate) ? formatTime($doc->addedDate, 'Y-m-d') : formatTime($doc->editedDate, 'Y-m-d');?></td>
|
||||
@@ -125,26 +125,28 @@
|
||||
<div class="col-sm-7">
|
||||
<div class="panel block-files block-sm" style="height: 290px;">
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title"><?php echo $lang->execution->undone . (common::checkNotCN() ? "{$lang->executionCommon}s" : "$lang->executionCommon");?></div>
|
||||
<div class="panel-title"><?php echo $lang->doc->myDoc;?></div>
|
||||
<nav class="panel-actions nav nav-default">
|
||||
<li><?php echo html::a($this->createLink('doc', 'allLibs', 'type=execution'), '<i class="icon icon-more icon-sm"></i>', '', "title='{$lang->more}'");?></li>
|
||||
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseTyp=openedbyme"), '<i class="icon icon-more icon-sm"></i>', '', "title='{$lang->more}'");?></li>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="panel-body has-table">
|
||||
<table class="table table-borderless table-fixed-head table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="c-name"><?php echo $lang->execution->name;?></th>
|
||||
<th class="c-date"><?php echo $lang->execution->begin;?></th>
|
||||
<th class="c-date"><?php echo $lang->execution->end;?></th>
|
||||
<th class="c-name"><?php echo $lang->doc->title;?></th>
|
||||
<th class="c-num text-right"><?php echo $lang->doc->size;?></th>
|
||||
<th class="c-user"><?php echo $lang->doc->addedBy;?></th>
|
||||
<th class="c-datetime"><?php echo $lang->doc->editedDate;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($doingExecutions as $execution):?>
|
||||
<tr data-url="<?php echo $this->createLink('doc', 'objectLibs', "type=execution&objectID={$execution->id}")?>">
|
||||
<td class="c-name"><i class="icon icon-folder text-yellow"></i> <?php echo $execution->name;?></td>
|
||||
<td class="c-datetime"><?php echo formatTime($execution->begin);?></td>
|
||||
<td class="c-datetime"><?php echo formatTime($execution->end);?></td>
|
||||
<?php foreach($myDocs as $doc):?>
|
||||
<tr>
|
||||
<td class="c-name"><?php echo html::a($this->createLink('doc', 'view', "docID={$doc->id}", '', true), $doc->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'")?></a></td>
|
||||
<td class="c-num text-right"><?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->editedDate) ? formatTime($doc->editedDate, 'Y-m-d') : formatTime($doc->addedDate, 'y-m-d');?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
@@ -155,9 +157,9 @@
|
||||
<div class="col-sm-5">
|
||||
<div class="panel block-files block-sm" style="height: 290px;">
|
||||
<div class="panel-heading">
|
||||
<div class="panel-title"><?php echo $lang->doc->myDoc;?></div>
|
||||
<div class="panel-title"><?php echo $lang->doc->myCollection;?></div>
|
||||
<nav class="panel-actions nav nav-default">
|
||||
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseTyp=openedbyme"), '<i class="icon icon-more icon-sm"></i>', '', "title='{$lang->more}'");?></li>
|
||||
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseTyp=collectedbyme"), '<i class="icon icon-more icon-sm"></i>', '', "title='{$lang->more}'");?></li>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="panel-body has-table">
|
||||
@@ -170,9 +172,9 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($myDocs as $doc):?>
|
||||
<tr data-url="<?php echo $this->createLink('doc', 'view', "docID={$doc->id}");?>">
|
||||
<td class="c-name" title="<?php echo $doc->title;?>"><?php echo $doc->title;?></td>
|
||||
<?php foreach($collectedDocs as $doc):?>
|
||||
<tr>
|
||||
<td class="c-name"><?php echo html::a($this->createLink('doc', 'view', "docID={$doc->id}", '', true), $doc->title, '', "data-toggle='modal' data-type='iframe' data-width='90%'")?></a></td>
|
||||
<td class="c-user"><?php echo zget($users, $doc->addedBy);?></td>
|
||||
<td class="c-datetime"><?php echo formatTime($doc->editedDate) ? formatTime($doc->editedDate, 'Y-m-d') : formatTime($doc->addedDate, 'y-m-d');?></td>
|
||||
</tr>
|
||||
|
||||
@@ -14,19 +14,28 @@
|
||||
<?php if($app->openApp == 'execution'):;?>
|
||||
<style>.panel-body{min-height: 180px}</style>
|
||||
<?php endif;?>
|
||||
<div class="fade main-row <?php if($app->openApp == 'doc') echo 'split-row';?>" id="mainRow">
|
||||
<?php include './side.html.php';?>
|
||||
<div class="main-col" data-min-width="400">
|
||||
<?php if($docID):?>
|
||||
<?php include './content.html.php';?>
|
||||
<?php else:?>
|
||||
<div class="fade main-row split-row" id="mainRow">
|
||||
<?php if($libID):?>
|
||||
<?php include './side.html.php';?>
|
||||
<div class="main-col" data-min-width="400">
|
||||
<?php if($docID):?>
|
||||
<?php include './content.html.php';?>
|
||||
<?php else:?>
|
||||
<div class="cell">
|
||||
<div class="detail empty text-center">
|
||||
<?php echo $type == 'book' ? $lang->doc->noArticle : $lang->doc->noDoc;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="cell">
|
||||
<div class="detail no-padding">
|
||||
<?php echo $lang->doc->noDoc;?>
|
||||
<div class="detail empty text-center">
|
||||
<?php echo $type == 'book' ? $lang->doc->noBook : $lang->doc->noLib;?>
|
||||
<?php if($type != 'book') echo html::a($this->createLink('doc', 'createLib', "type={$objectType}&objectID=$object->id"), "<i class='icon icon-plus'></i> " . $lang->doc->createLib, '', "class='btn btn-info iframe'");?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<?php js::set('type', 'doc');?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -15,19 +15,33 @@ if(empty($type)) $type = 'product';
|
||||
$sideWidth = common::checkNotCN() ? '270' : '238';
|
||||
?>
|
||||
<div class="side-col" style="width:<?php echo $sideWidth;?>px" data-min-width="<?php echo $sideWidth;?>">
|
||||
<div class="cell">
|
||||
<div class="cell" id="<?php echo $type;?>">
|
||||
<?php if(!$moduleTree):?>
|
||||
<hr class="space">
|
||||
<div class="text-center text-muted tips">
|
||||
<?php echo $lang->doc->noModule;?>
|
||||
<?php echo $type == 'book' ? $lang->doc->noChapter : $lang->doc->noModule;?>
|
||||
</div>
|
||||
<hr class="space">
|
||||
<?php endif;?>
|
||||
<?php if($type == 'book'):?>
|
||||
<?php include './bookside.html.php';?>
|
||||
<?php else:?>
|
||||
<?php echo $moduleTree;?>
|
||||
<?php endif;?>
|
||||
<div class="text-center action">
|
||||
<?php common::printLink('tree', 'browse', "rootID=$libID&view=doc", $lang->doc->manageType, '', "class='btn btn-info btn-wide iframe'", '', true);?>
|
||||
<?php common::printLink('doc', 'editLib', "rootID=$libID", $lang->doc->editLib, '', "class='btn btn-info btn-wide iframe'", '', true);?>
|
||||
<?php common::printLink('doc', 'deleteLib', "rootID=$libID", $lang->doc->deleteLib, 'hiddenwin', "class='btn btn-info btn-wide'");?>
|
||||
<?php
|
||||
if($type == 'book')
|
||||
{
|
||||
common::printLink('doc', 'editLib', "rootID=$libID", $lang->doc->editBook, '', "class='btn btn-info btn-wide iframe'", '', true);
|
||||
common::printLink('doc', 'manageBook', "bookID=$libID", $lang->doc->manageBook, '', "class='btn btn-info btn-wide iframe'", '', true);
|
||||
}
|
||||
else
|
||||
{
|
||||
common::printLink('tree', 'browse', "rootID=$libID&view=doc", $lang->doc->manageType, '', "class='btn btn-info btn-wide iframe'", '', true);
|
||||
common::printLink('doc', 'editLib', "rootID=$libID", $lang->doc->editLib, '', "class='btn btn-info btn-wide iframe'", '', true);
|
||||
common::printLink('doc', 'deleteLib', "rootID=$libID", $lang->doc->deleteLib, 'hiddenwin', "class='btn btn-info btn-wide'");
|
||||
}
|
||||
?>
|
||||
<hr class="space-sm" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php echo css::internal($keTableCSS);?>
|
||||
<style>.detail-content .file-image {padding: 0 50px 0 10px;}</style>
|
||||
<?php $browseLink = $this->session->docList ? $this->session->docList : inlink('browse');?>
|
||||
<?php $browseLink = $this->session->docList ? $this->session->docList : inlink('browse', 'libID=0&browseTyp=byediteddate');?>
|
||||
<?php
|
||||
$sessionString = $config->requestType == 'PATH_INFO' ? '?' : '&';
|
||||
$sessionString .= session_name() . '=' . session_id();
|
||||
|
||||
@@ -1200,9 +1200,8 @@ class execution extends control
|
||||
if($this->app->openApp == 'project')
|
||||
{
|
||||
if(!empty($copyExecutionID)) $projectID = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($copyExecutionID)->fetch('project');
|
||||
$project = $this->project->getByID($projectID);
|
||||
$model = $project->model;
|
||||
|
||||
$projectID = $this->project->saveState($projectID, $this->project->getPairsByProgram());
|
||||
$this->project->setMenu($projectID);
|
||||
}
|
||||
elseif($this->app->openApp == 'execution')
|
||||
@@ -2064,7 +2063,7 @@ class execution extends control
|
||||
|
||||
$this->session->set('execution', '');
|
||||
$this->executeHooks($executionID);
|
||||
die(js::locate(inlink('index'), 'parent'));
|
||||
die(js::reload('parent'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -196,9 +196,9 @@ $lang->execution->deleteAB = "Delete Execution";
|
||||
$lang->execution->browse = "{$lang->executionCommon} List";
|
||||
$lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->execution->edit = "Edit {$lang->executionCommon}";
|
||||
$lang->execution->editAB = "Edit Execution";
|
||||
$lang->execution->editAction = "Edit Execution";
|
||||
$lang->execution->batchEdit = "Edit";
|
||||
$lang->execution->batchEditAB = "Batch Edit";
|
||||
$lang->execution->batchEditAction = "Batch Edit";
|
||||
$lang->execution->manageMembers = 'Manage Team';
|
||||
$lang->execution->unlinkMember = 'Remove Member';
|
||||
$lang->execution->unlinkStory = 'Unlink Story';
|
||||
@@ -218,6 +218,7 @@ $lang->execution->importPlanStory = $lang->executionCommon . ' is created!\nDo
|
||||
$lang->execution->iteration = 'Iterations';
|
||||
$lang->execution->iterationInfo = '%s Iterations';
|
||||
$lang->execution->viewAll = 'View All';
|
||||
$lang->execution->testreport = 'Test Report';
|
||||
|
||||
/* Group browsing. */
|
||||
$lang->execution->allTasks = 'All';
|
||||
|
||||
@@ -1139,6 +1139,11 @@ class executionModel extends model
|
||||
$module = 'execution';
|
||||
$method = 'task';
|
||||
}
|
||||
if($module == 'testcase' and ($method == 'view' || $method == 'edit' || $method == 'batchedit'))
|
||||
{
|
||||
$module = 'execution';
|
||||
$method = 'testcase';
|
||||
}
|
||||
if($module == 'build' and ($method == 'edit' || $method= 'view'))
|
||||
{
|
||||
$module = 'execution';
|
||||
|
||||
@@ -28,6 +28,7 @@ js::set('unfoldAll', $lang->execution->treeLevel['all']);
|
||||
js::set('foldAll', $lang->execution->treeLevel['root']);
|
||||
?>
|
||||
<style>
|
||||
body {margin-bottom: 25px;}
|
||||
.btn-group a i.icon-plus {font-size: 16px;}
|
||||
.btn-group a.btn-primary {border-right: 1px solid rgba(255,255,255,0.2);}
|
||||
.btn-group button.dropdown-toggle.btn-primary {padding:6px;}
|
||||
@@ -116,7 +117,7 @@ js::set('foldAll', $lang->execution->treeLevel['root']);
|
||||
<ul class="dropdown-menu pull-right" id='exportActionMenu'>
|
||||
<?php
|
||||
$class = common::hasPriv('task', 'export') ? '' : "class=disabled";
|
||||
$misc = common::hasPriv('task', 'export') ? "class='export'" : "class=disabled";
|
||||
$misc = common::hasPriv('task', 'export') ? "class='export iframe'" : "class=disabled";
|
||||
$link = common::hasPriv('task', 'export') ? $this->createLink('task', 'export', "execution=$executionID&orderBy=$orderBy&type=$browseType") : '#';
|
||||
echo "<li $class>" . html::a($link, $lang->task->export, '', $misc) . "</li>";
|
||||
?>
|
||||
|
||||
@@ -29,6 +29,8 @@ $lang->extension->eraseAction = 'Erase Extension';
|
||||
$lang->extension->upgrade = 'Upgrade Extension';
|
||||
$lang->extension->agreeLicense = 'I agree to the license.';
|
||||
|
||||
$lang->extension->browseAction = 'Extension List';
|
||||
|
||||
$lang->extension->structure = 'Structure';
|
||||
$lang->extension->structureAction = 'Extension Structure';
|
||||
$lang->extension->installed = 'Installed';
|
||||
|
||||
@@ -23,8 +23,12 @@ js::set('defaultOpen', $open);
|
||||
#versionTitle {margin: 8px 3px 0px 0px; background-image: url(<?php echo $config->webRoot . 'theme/default/images/main/version-upgrade.svg';?>);}
|
||||
.icon-version {width: 20px; height: 24px; margin: -4px 3px 0px 0px; background-image: url(<?php echo $config->webRoot . 'theme/default/images/main/version-new.svg';?>);}
|
||||
.version-hr {margin-top: 15px; margin-bottom: 15px;}
|
||||
<?php if(isset($this->config->bizVersion)):?>
|
||||
<?php if((isset($config->bizVersion) or isset($config->maxVersion)) and $config->systemMode == 'new'):?>
|
||||
#searchbox .dropdown-menu.show-quick-go.with-active {top: -468px; max-height: 465px;}
|
||||
<?php elseif((isset($config->bizVersion) or isset($config->maxVersion)) and $config->systemMode != 'new'):?>
|
||||
#searchbox .dropdown-menu.show-quick-go.with-active {top: -436px; max-height: 440px;}
|
||||
<?php elseif($config->systemMode != 'new'):?>
|
||||
#searchbox .dropdown-menu.show-quick-go.with-active {top: -330px; max-height: 350px;}
|
||||
<?php endif;?>
|
||||
|
||||
<?php if(empty($latestVersionList)):?>
|
||||
|
||||
@@ -6,6 +6,9 @@ $lang->jenkins->edit = 'Edit Jenkins';
|
||||
$lang->jenkins->delete = 'Delete';
|
||||
$lang->jenkins->confirmDelete = 'Do you want to delete this Jenkins server?';
|
||||
|
||||
$lang->jenkins->browseAction = 'Jenkins List';
|
||||
$lang->jenkins->deleteAction = 'Delete Jenkins';
|
||||
|
||||
$lang->jenkins->id = 'ID';
|
||||
$lang->jenkins->name = 'Name';
|
||||
$lang->jenkins->url = 'URL';
|
||||
|
||||
@@ -10,6 +10,8 @@ $lang->job->confirmDelete = 'Do you want to delete this job?';
|
||||
$lang->job->dirChange = 'Directory Changed';
|
||||
$lang->job->buildTag = 'Build Tag';
|
||||
|
||||
$lang->job->browseAction = 'Job List';
|
||||
|
||||
$lang->job->id = 'ID';
|
||||
$lang->job->name = 'Name';
|
||||
$lang->job->repo = 'Repo';
|
||||
|
||||
@@ -41,10 +41,17 @@ $lang->my->testtask = 'My Test Task';
|
||||
$lang->my->testcase = 'My Case';
|
||||
$lang->my->storyConcept = 'Story Concept';
|
||||
|
||||
$lang->my->myExecutions = "My Stage/Sprint/Iteration";
|
||||
$lang->my->indexAction = 'My Index';
|
||||
$lang->my->calendarAction = 'My Calendar';
|
||||
$lang->my->workAction = 'My Work';
|
||||
$lang->my->contributeAction = 'My Contribute';
|
||||
$lang->my->profileAction = 'Profile';
|
||||
$lang->my->dynamicAction = 'Dynamic';
|
||||
|
||||
$lang->my->myExecutions = "My Executions";
|
||||
$lang->my->name = 'Name';
|
||||
$lang->my->code = 'Code';
|
||||
$lang->my->projects = 'Project';
|
||||
$lang->my->projects = 'Projects';
|
||||
$lang->my->executions = 'Executions';
|
||||
|
||||
$lang->my->executionMenu = new stdclass();
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
<?php
|
||||
if($canBatchEdit)
|
||||
{
|
||||
$actionLink = $this->createLink('story', 'batchEdit');
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=0&executionID=0&branch=0&storyType=requirement&from={$app->rawMethod}");
|
||||
$misc = "data-form-action='$actionLink'";
|
||||
echo html::commonButton($lang->edit, $misc);
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
<?php
|
||||
if($canBatchEdit)
|
||||
{
|
||||
$actionLink = $this->createLink('story', 'batchEdit');
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=0&executionID=0&branch=0&storyType=story&from={$app->rawMethod}");
|
||||
$misc = "data-form-action='$actionLink'";
|
||||
echo html::commonButton($lang->edit, $misc);
|
||||
}
|
||||
|
||||
@@ -322,6 +322,7 @@ class product extends control
|
||||
$methodName = $openApp == 'program'? 'product' : 'browse';
|
||||
$param = $openApp == 'program' ? "programID=$programID" : "productID=$productID";
|
||||
$locate = $this->createLink($moduleName, $methodName, $param);
|
||||
if($openApp == 'doc') $locate = $this->createLink('doc', 'objectLibs', 'type=product');
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
|
||||
}
|
||||
|
||||
@@ -368,7 +369,9 @@ class product extends control
|
||||
$this->app->loadLang('custom');
|
||||
|
||||
/* Init vars. */
|
||||
$product = $this->product->getById($productID);
|
||||
$product = $this->product->getById($productID);
|
||||
if($product->bind) $this->config->product->edit->requiredFields = 'name';
|
||||
|
||||
$unmodifiableProjects = array();
|
||||
$canChangeProgram = true;
|
||||
$singleLinkProjects = array();
|
||||
|
||||
+34
-24
@@ -9,29 +9,33 @@
|
||||
* @version $Id: en.php 5091 2013-07-10 06:06:46Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->product->index = $lang->productCommon . ' Home';
|
||||
$lang->product->browse = 'Story List';
|
||||
$lang->product->dynamic = 'Dynamics';
|
||||
$lang->product->view = "{$lang->productCommon} Detail";
|
||||
$lang->product->edit = "Edit {$lang->productCommon}";
|
||||
$lang->product->batchEdit = 'Batch Edit';
|
||||
$lang->product->create = "Create {$lang->productCommon}";
|
||||
$lang->product->delete = "Delete {$lang->productCommon}";
|
||||
$lang->product->deleted = 'Deleted';
|
||||
$lang->product->close = "Close";
|
||||
$lang->product->index = $lang->productCommon . ' Home';
|
||||
$lang->product->browse = 'Story List';
|
||||
$lang->product->dynamic = 'Dynamics';
|
||||
$lang->product->view = "{$lang->productCommon} Detail";
|
||||
$lang->product->edit = "Edit {$lang->productCommon}";
|
||||
$lang->product->batchEdit = 'Batch Edit';
|
||||
$lang->product->create = "Create {$lang->productCommon}";
|
||||
$lang->product->delete = "Delete {$lang->productCommon}";
|
||||
$lang->product->deleted = 'Deleted';
|
||||
$lang->product->close = "Close";
|
||||
$lang->product->select = "Select {$lang->productCommon}";
|
||||
$lang->product->mine = 'Mine:';
|
||||
$lang->product->other = 'Others:';
|
||||
$lang->product->closed = 'Closed';
|
||||
$lang->product->updateOrder = 'Order';
|
||||
$lang->product->all = "All {$lang->productCommon}s";
|
||||
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
|
||||
$lang->product->export = 'Export';
|
||||
$lang->product->dashboard = "Dashboard";
|
||||
$lang->product->changeProgram = "{$lang->productCommon} confirmation of the scope of influence of adjustment of the program set";
|
||||
$lang->product->addWhitelist = 'Add Whitelist';
|
||||
$lang->product->unbindWhitelist = 'Unbind Whitelist';
|
||||
|
||||
$lang->product->indexAction = "All {$lang->productCommon}";
|
||||
$lang->product->closeAction = "Close {$lang->productCommon}";
|
||||
$lang->product->select = "Select {$lang->productCommon}";
|
||||
$lang->product->mine = 'Mine:';
|
||||
$lang->product->other = 'Others:';
|
||||
$lang->product->closed = 'Closed';
|
||||
$lang->product->updateOrder = 'Order';
|
||||
$lang->product->orderAction = "Rank {$lang->productCommon}";
|
||||
$lang->product->all = "All {$lang->productCommon}s";
|
||||
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
|
||||
$lang->product->export = 'Export';
|
||||
$lang->product->orderAction = "Sort {$lang->productCommon}";
|
||||
$lang->product->exportAction = "Export {$lang->productCommon}";
|
||||
$lang->product->dashboard = "Dashboard";
|
||||
$lang->product->changeProgram = "{$lang->productCommon} confirmation of the scope of influence of adjustment of the program set";
|
||||
|
||||
$lang->product->basicInfo = 'Basic Info';
|
||||
$lang->product->otherInfo = 'Other Info';
|
||||
@@ -90,8 +94,6 @@ $lang->product->QD = 'QA Manager';
|
||||
$lang->product->RD = 'Release Manager';
|
||||
$lang->product->acl = 'Access Control';
|
||||
$lang->product->whitelist = 'Whitelist';
|
||||
$lang->product->addWhitelist = 'Add Whitelist';
|
||||
$lang->product->unbindWhitelist = 'Remove Whitelist';
|
||||
$lang->product->branch = '%s';
|
||||
$lang->product->qa = 'Test';
|
||||
$lang->product->release = 'Release';
|
||||
@@ -140,7 +142,15 @@ $lang->product->statusList[''] = '';
|
||||
$lang->product->statusList['normal'] = 'Normal';
|
||||
$lang->product->statusList['closed'] = 'Closed';
|
||||
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} ({$lang->executionCommon} team members only)";
|
||||
global $config;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Stakeholders of the respective program, team members and stakeholders of the associated project can access)";
|
||||
}
|
||||
else
|
||||
{
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} ({$lang->executionCommon} team members only)";
|
||||
}
|
||||
$lang->product->aclList['open'] = "Default (Users with privileges to {$lang->productCommon} can access it.)";
|
||||
//$lang->product->aclList['custom'] = 'Custom (Team members and Whitelist members can access it.)';
|
||||
|
||||
|
||||
@@ -441,7 +441,7 @@ class productModel extends model
|
||||
}
|
||||
|
||||
$fromModule = $this->lang->navGroup->qa == 'qa' ? 'qa' : '';
|
||||
$dropMenuLink = helper::createLink('product', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra&from=$fromModule");
|
||||
$dropMenuLink = helper::createLink($this->app->openApp == 'qa' ? 'product' : $this->app->openApp, 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra&from=$fromModule");
|
||||
|
||||
$output = "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentProductName}'><span class='text'>{$currentProductName}</span> <span class='caret' style='margin-top: 3px'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
|
||||
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
|
||||
@@ -525,6 +525,7 @@ class productModel extends model
|
||||
{
|
||||
$productID = (int)$productID;
|
||||
$oldProduct = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch();
|
||||
if($oldProduct->bind) $this->config->product->edit->requiredFields = 'name';
|
||||
|
||||
$product = fixer::input('post')
|
||||
->setIF($this->post->acl == 'open', 'whitelist', '')
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datatable.fix.html.php';?>
|
||||
<style>
|
||||
body {margin-bottom: 25px;}
|
||||
</style>
|
||||
<?php js::set('browseType', $browseType);?>
|
||||
<?php js::set('productID', $productID);?>
|
||||
<?php js::set('projectID', $projectID);?>
|
||||
@@ -254,7 +257,8 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
|
||||
<?php
|
||||
$datatableId = $this->moduleName . ucfirst($this->methodName);
|
||||
$useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable');
|
||||
$vars = "productID=$productID&branch=$branch&browseType=$browseType¶m=$param&storyType=$storyType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";
|
||||
if($from == 'product') $vars = "productID=$productID&branch=$branch&browseType=$browseType¶m=$param&storyType=$storyType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";
|
||||
if($from == 'project') $vars = "projectID=$projectID&productID=$productID&branch=$branch&browseType=$browseType¶m=$param&storyType=$storyType&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";
|
||||
|
||||
if($useDatatable) include '../../common/view/datatable.html.php';
|
||||
$setting = $this->datatable->getSetting('product');
|
||||
@@ -321,7 +325,8 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
|
||||
<div class='btn-group dropup'>
|
||||
<?php
|
||||
$disabled = $canBatchEdit ? '' : "disabled='disabled'";
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=$productID&projectID=0&branch=$branch&storyType=$storyType");
|
||||
$projectID = $isProjectStory ? $this->session->project : 0;
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=$productID&projectID=$projectID&branch=$branch&storyType=$storyType");
|
||||
?>
|
||||
<?php echo html::commonButton($lang->edit, "data-form-action='$actionLink' $disabled");?>
|
||||
<button type='button' class='btn dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
|
||||
|
||||
@@ -66,22 +66,19 @@
|
||||
<th class="w-80px"><?php echo $lang->product->code;?></th>
|
||||
<td><strong><?php echo $product->code;?></strong></td>
|
||||
<th class="w-80px"><?php echo $lang->story->openedBy?></th>
|
||||
<td><strong><?php echo zget($users, $product->createdBy);?></strong></td>
|
||||
<td></td>
|
||||
<td colspan="2"><strong><?php echo zget($users, $product->createdBy);?></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="w-80px"><?php echo $lang->product->type;?></th>
|
||||
<td><strong><?php echo zget($lang->product->typeList, $product->type);?></strong></td>
|
||||
<th><?php echo $lang->story->openedDate?></th>
|
||||
<td><strong><?php echo formatTime($product->createdDate, DT_DATE1);?></strong></td>
|
||||
<td></td>
|
||||
<td colspan="2"><strong><?php echo formatTime($product->createdDate, DT_DATE1);?></strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="w-80px"><?php echo $lang->productCommon . $lang->product->status;?></th>
|
||||
<td class="<?php echo $product->status;?>"><strong><?php echo zget($lang->product->statusList, $product->status);?></strong></td>
|
||||
<th><?php echo $lang->product->acl;?></th>
|
||||
<td class='acl'><strong><?php echo $lang->product->aclList[$product->acl];?></strong></td>
|
||||
<td></td>
|
||||
<td colspan="2"><strong><?php echo $lang->product->aclList[$product->acl];?></strong></td>
|
||||
</tr>
|
||||
<?php if($product->acl == 'custom'):?>
|
||||
<tr>
|
||||
|
||||
@@ -43,6 +43,8 @@ $lang->program->confirmBatchUnlink = "Do you want to batch unlink these sta
|
||||
$lang->program->stakeholderType = 'Stakeholder type';
|
||||
$lang->program->isStakeholderKey = 'Key stakeholder';
|
||||
$lang->program->importStakeholder = 'Import program';
|
||||
$lang->program->unbindWhitelist = 'Unbind Whitelist';
|
||||
$lang->program->importStakeholder = 'Import from program';
|
||||
$lang->program->manageMembers = 'Program Team';
|
||||
$lang->program->beyondParentBudget = 'The remaining budget of the owned program has been exceeded.';
|
||||
$lang->program->parentBudget = 'Parent program surplus budget:';
|
||||
@@ -51,8 +53,8 @@ $lang->program->endGreaterParent = "Parent end date: %s, end date should
|
||||
$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date < = child earliest begin date.";
|
||||
$lang->program->endLetterChild = "Child latest end: %s, parent end date > = child latest end date.";
|
||||
$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed';
|
||||
$lang->program->hasChildren = 'The program has a child program or the project exists and can not be deleted.';
|
||||
$lang->program->confirmDelete = "Do you want to delete it?";
|
||||
$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.';
|
||||
$lang->program->readjustTime = 'Change the program begin&end date.';
|
||||
|
||||
$lang->program->stakeholderTypeList['inside'] = 'Inside';
|
||||
|
||||
@@ -262,7 +262,7 @@ class project extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($model = 'waterfall', $programID = 0, $copyProjectID = 0)
|
||||
public function create($model = 'scrum', $programID = 0, $copyProjectID = 0)
|
||||
{
|
||||
$this->loadModel('execution');
|
||||
|
||||
@@ -277,6 +277,10 @@ class project extends control
|
||||
{
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('program', 'browse')));
|
||||
}
|
||||
elseif($this->app->openApp == 'doc')
|
||||
{
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('doc', 'objectLibs', 'type=project')));
|
||||
}
|
||||
else
|
||||
{
|
||||
if($model == 'waterfall')
|
||||
|
||||
@@ -46,8 +46,10 @@ $lang->project->errorSameProducts = 'Project cannot be associated with multiple
|
||||
$lang->project->errorNoProducts = 'At least one product is associated';
|
||||
$lang->project->copyNoProject = 'There are no items available to copy.';
|
||||
$lang->project->searchByName = 'Enter the project name to retrieve';
|
||||
$lang->project->deleted = 'Deleted';
|
||||
$lang->project->linkedProducts = "Linked {$lang->productCommon}s";
|
||||
$lang->project->unlinkedProducts = "Unlinked {$lang->productCommon}s";
|
||||
$lang->project->testreport = 'Test Report';
|
||||
|
||||
/* Fields. */
|
||||
$lang->project->common = 'Project';
|
||||
@@ -61,7 +63,6 @@ $lang->project->copy = 'Copy';
|
||||
$lang->project->begin = 'Begin';
|
||||
$lang->project->end = 'End';
|
||||
$lang->project->status = 'Status';
|
||||
$lang->project->PM = 'Manager';
|
||||
$lang->project->budget = 'Budget';
|
||||
$lang->project->template = 'Template';
|
||||
$lang->project->estimate = 'Estimates';
|
||||
@@ -81,7 +82,6 @@ $lang->project->acl = 'Access control';
|
||||
$lang->project->setPlanduration = 'Set Duration';
|
||||
$lang->project->auth = 'Access Control';
|
||||
$lang->project->durationEstimation = 'Estimated Workload';
|
||||
$lang->project->teamCount = 'Man';
|
||||
$lang->project->leftStories = 'Left Stories';
|
||||
$lang->project->leftTasks = 'Left Tasks';
|
||||
$lang->project->leftBugs = 'Left Bugs';
|
||||
@@ -97,6 +97,11 @@ $lang->project->ev = 'EV';
|
||||
$lang->project->sv = 'SV%';
|
||||
$lang->project->ac = 'AC';
|
||||
$lang->project->cv = 'CV%';
|
||||
$lang->project->pvTitle = 'Planed Value';
|
||||
$lang->project->evTitle = 'Earn Value';
|
||||
$lang->project->svTitle = 'Schedule Variance';
|
||||
$lang->project->acTitle = 'Actual Cost';
|
||||
$lang->project->cvTitle = 'Cost Variance';
|
||||
$lang->project->teamCount = 'Team';
|
||||
$lang->project->longTime = 'Long-Term Program';
|
||||
$lang->project->future = 'TBD';
|
||||
|
||||
@@ -9,6 +9,8 @@ $lang->projectstory->unlinkStory = 'Unlinked' . $lang->SRCommon;
|
||||
$lang->projectstory->importplanstories = 'Linked by plan' . $lang->SRCommon;
|
||||
$lang->projectstory->whyNoStories = "No story can be linked. Please check whether there is any story in project which is linked to {$lang->productCommon} and make sure it has been reviewed.";
|
||||
|
||||
$lang->projectstory->trackAction = 'Matrix';
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
|
||||
@@ -17,4 +17,3 @@ $lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
|
||||
$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
|
||||
|
||||
|
||||
@@ -4,19 +4,14 @@ $lang->repo->browse = 'View';
|
||||
$lang->repo->viewRevision = 'View Revision';
|
||||
$lang->repo->product = 'Product';
|
||||
$lang->repo->create = 'Create';
|
||||
$lang->repo->createAction = 'Create Repo';
|
||||
$lang->repo->maintain = 'Repo List';
|
||||
$lang->repo->edit = 'Edit';
|
||||
$lang->repo->editAction = 'Edit Repo';
|
||||
$lang->repo->delete = 'Delete Repo';
|
||||
$lang->repo->showSyncCommit = 'Display Sync';
|
||||
$lang->repo->ajaxSyncCommit = 'Interface: Ajax Sync Note';
|
||||
$lang->repo->setRules = 'Set Rules';
|
||||
$lang->repo->download = 'Download File';
|
||||
$lang->repo->downloadDiff = 'Download Diff';
|
||||
$lang->repo->diffAction = 'Revision Diff';
|
||||
$lang->repo->revisionAction = 'Revision Detail';
|
||||
$lang->repo->blameAction = 'Repo Blame';
|
||||
$lang->repo->addBug = 'Add Review';
|
||||
$lang->repo->editBug = 'Edit Bug';
|
||||
$lang->repo->deleteBug = 'Delete Bug';
|
||||
@@ -24,6 +19,15 @@ $lang->repo->addComment = 'Add Comment';
|
||||
$lang->repo->editComment = 'Edit Comment';
|
||||
$lang->repo->deleteComment = 'Delete Comment';
|
||||
|
||||
$lang->repo->browseAction = 'Browse Repo';
|
||||
$lang->repo->createAction = 'Create Repo';
|
||||
$lang->repo->editAction = 'Edit Repo';
|
||||
$lang->repo->diffAction = 'Diff Revision';
|
||||
$lang->repo->downloadAction = 'Download File';
|
||||
$lang->repo->revisionAction = 'Revision Detail';
|
||||
$lang->repo->blameAction = 'Blame';
|
||||
$lang->repo->reviewAction = 'Review List';
|
||||
|
||||
$lang->repo->submit = 'Submit';
|
||||
$lang->repo->cancel = 'Cancel';
|
||||
$lang->repo->addComment = 'Add Comment';
|
||||
|
||||
@@ -44,9 +44,9 @@ $lang->report->bugAssign = 'Bug Assigned Summary';
|
||||
$lang->report->workload = 'Team Workload Summary';
|
||||
$lang->report->workloadAB = 'Workload';
|
||||
$lang->report->bugOpenedDate = 'Bug reported from';
|
||||
$lang->report->beginAndEnd = ' From';
|
||||
$lang->report->begin = 'Begin';
|
||||
$lang->report->end = 'End';
|
||||
$lang->report->beginAndEnd = ' From';
|
||||
$lang->report->dept = 'Department';
|
||||
$lang->report->deviationChart = 'Project Deviation Chart';
|
||||
|
||||
|
||||
@@ -21,9 +21,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php if(!isset($config->proVersion) and !isset($config->bizVersion) and !isset($config->maxVersion)):?>
|
||||
<div class='panel panel-body' style='padding: 10px 6px'>
|
||||
<div class='text proversion'>
|
||||
<strong class='text-danger small text-latin'>PRO</strong> <span class='text-important'><?php echo (!empty($config->isINT)) ? $lang->report->proVersionEn : $lang->report->proVersion;?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php if(isset($config->maxVersion)):?>
|
||||
<?php if(isset($config->maxVersion) or isset($config->proVersion) or isset($config->bizVersion)):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php if(isset($config->maxVersion)):?>
|
||||
<?php if(isset($config->maxVersion) or isset($config->proVersion) or isset($config->bizVersion)):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<?php if(common::checkNotCN()):?>
|
||||
<style>#conditions .col-xs { width: 126px; }</style>
|
||||
<?php endif;?>
|
||||
<?php if(isset($config->maxVersion)):?>
|
||||
<?php if(isset($config->maxVersion) or isset($config->proVersion) or isset($config->bizVersion)):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php include '../../common/view/chart.html.php';?>
|
||||
<?php if(isset($config->maxVersion)):?>
|
||||
<?php if(isset($config->maxVersion) or isset($config->proVersion) or isset($config->bizVersion)):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/datepicker.html.php';?>
|
||||
<?php if(isset($config->maxVersion) or isset($config->proVersion) or isset($config->bizVersion)):?>
|
||||
<style>#mainContent > .side-col.col-lg{width: 210px}</style>
|
||||
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
|
||||
<?php endif;?>
|
||||
<?php js::set('weekend', $config->execution->weekend);?>
|
||||
<div id='mainContent' class='main-row'>
|
||||
<div class='side-col col-lg' id='sidebar'>
|
||||
|
||||
@@ -20,7 +20,8 @@ class search extends control
|
||||
public function __construct($module = '', $method = '')
|
||||
{
|
||||
parent::__construct($module, $method);
|
||||
if(!isset($this->config->maxVersion)) unset($this->lang->search->modules['effort']);
|
||||
if(!isset($this->config->maxVersion)) unset($this->lang->search->modules['effort']);
|
||||
if($this->config->systemMode != 'new') unset($this->lang->search->modules['program'], $this->lang->search->modules['project']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -87,7 +87,7 @@ $lang->search->modules['testreport'] = 'Testing Report';
|
||||
$lang->search->modules['productplan'] = 'Plan';
|
||||
$lang->search->modules['program'] = 'Program';
|
||||
$lang->search->modules['project'] = 'Project';
|
||||
$lang->search->modules['execution'] = 'Execution';
|
||||
$lang->search->modules['execution'] = $lang->executionCommon;
|
||||
$lang->search->modules['story'] = 'Story';
|
||||
|
||||
$lang->search->objectTypeList['story'] = $lang->SRCommon;
|
||||
|
||||
@@ -87,7 +87,7 @@ $lang->search->modules['testreport'] = 'Testing Report';
|
||||
$lang->search->modules['productplan'] = 'Plan';
|
||||
$lang->search->modules['program'] = 'Program';
|
||||
$lang->search->modules['project'] = 'Project';
|
||||
$lang->search->modules['execution'] = 'Execution';
|
||||
$lang->search->modules['execution'] = $lang->executionCommon;
|
||||
$lang->search->modules['story'] = 'Story';
|
||||
|
||||
$lang->search->objectTypeList['story'] = $lang->SRCommon;
|
||||
|
||||
@@ -87,7 +87,7 @@ $lang->search->modules['testreport'] = 'Testing Report';
|
||||
$lang->search->modules['productplan'] = 'Plan';
|
||||
$lang->search->modules['program'] = 'Program';
|
||||
$lang->search->modules['project'] = 'Project';
|
||||
$lang->search->modules['execution'] = 'Execution';
|
||||
$lang->search->modules['execution'] = $lang->executionCommon;
|
||||
$lang->search->modules['story'] = 'Story';
|
||||
|
||||
$lang->search->objectTypeList['story'] = $lang->SRCommon;
|
||||
|
||||
@@ -87,7 +87,7 @@ $lang->search->modules['testreport'] = 'Báo cáo Test';
|
||||
$lang->search->modules['productplan'] = 'Kế hoạch';
|
||||
$lang->search->modules['program'] = 'Program';
|
||||
$lang->search->modules['project'] = 'Project';
|
||||
$lang->search->modules['execution'] = 'Execution';
|
||||
$lang->search->modules['execution'] = $lang->executionCommon;
|
||||
$lang->search->modules['story'] = 'Story';
|
||||
|
||||
$lang->search->objectTypeList['story'] = $lang->SRCommon;
|
||||
|
||||
@@ -87,7 +87,7 @@ $lang->search->modules['testreport'] = '报告';
|
||||
$lang->search->modules['productplan'] = '计划';
|
||||
$lang->search->modules['program'] = '项目集';
|
||||
$lang->search->modules['project'] = '项目';
|
||||
$lang->search->modules['execution'] = '执行';
|
||||
$lang->search->modules['execution'] = $lang->executionCommon;
|
||||
$lang->search->modules['story'] = '需求';
|
||||
|
||||
$lang->search->objectTypeList['story'] = $lang->SRCommon;
|
||||
|
||||
@@ -26,6 +26,9 @@ $lang->stakeholder->issue = 'Issue Management';
|
||||
$lang->stakeholder->viewIssue = 'Active Issues';
|
||||
$lang->stakeholder->userIssue = 'Stakeholder Issues';
|
||||
|
||||
$lang->stakeholder->viewAction = 'View Stakeholder';
|
||||
$lang->stakeholder->viewIssueAction = 'Issue List';
|
||||
|
||||
/* Fields. */
|
||||
$lang->stakeholder->id = 'ID';
|
||||
$lang->stakeholder->user = 'User';
|
||||
|
||||
@@ -618,14 +618,40 @@ class story extends control
|
||||
*
|
||||
* @param int $productID
|
||||
* @param int $executionID
|
||||
* @param int $branch
|
||||
* @param string $storyType
|
||||
* @param string $from
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function batchEdit($productID = 0, $executionID = 0, $branch = 0, $storyType = 'story')
|
||||
public function batchEdit($productID = 0, $executionID = 0, $branch = 0, $storyType = 'story', $from = '')
|
||||
{
|
||||
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
|
||||
$this->story->replaceURLang($storyType);
|
||||
|
||||
if($this->app->openApp == 'product')
|
||||
{
|
||||
$this->product->setMenu($productID);
|
||||
}
|
||||
else if($this->app->openApp == 'project')
|
||||
{
|
||||
$this->project->setMenu($executionID);
|
||||
}
|
||||
else if($this->app->openApp == 'execution')
|
||||
{
|
||||
$this->execution->setMenu($executionID);
|
||||
}
|
||||
else if($this->app->openApp == 'qa')
|
||||
{
|
||||
$this->loadModel('qa')->setMenu('', $productID);
|
||||
}
|
||||
else if($this->app->openApp == 'my')
|
||||
{
|
||||
$this->loadModel('my')->setMenu();
|
||||
if($from == 'work') $this->lang->my->menu->work['subModule'] = 'story';
|
||||
if($from == 'contribute') $this->lang->my->menu->contribute['subModule'] = 'story';
|
||||
}
|
||||
|
||||
/* Load model. */
|
||||
$this->loadModel('productplan');
|
||||
|
||||
@@ -655,7 +681,6 @@ class story extends control
|
||||
/* The stories of a product. */
|
||||
if($productID)
|
||||
{
|
||||
$this->product->setMenu($productID, $branch);
|
||||
$product = $this->product->getByID($productID);
|
||||
$branchProduct = $product->type == 'normal' ? false : true;
|
||||
|
||||
@@ -674,7 +699,6 @@ class story extends control
|
||||
elseif($executionID)
|
||||
{
|
||||
/* The stories of a execution. */
|
||||
$this->execution->setMenu($executionID);
|
||||
$execution = $this->execution->getByID($executionID);
|
||||
|
||||
$branchProduct = false;
|
||||
@@ -695,8 +719,6 @@ class story extends control
|
||||
else
|
||||
{
|
||||
/* The stories of my. */
|
||||
$this->loadModel('my')->setMenu();
|
||||
|
||||
$branchProduct = false;
|
||||
$productIdList = array();
|
||||
foreach($stories as $story) $productIdList[$story->product] = $story->product;
|
||||
@@ -748,6 +770,7 @@ class story extends control
|
||||
$this->view->storyType = $storyType;
|
||||
$this->view->stories = $stories;
|
||||
$this->view->productName = isset($product) ? $product->name : '';
|
||||
$this->view->executionID = $executionID;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -1521,6 +1544,7 @@ class story extends control
|
||||
$this->view->stories = $this->story->getZeroCase($productID, $branchID, $sort);
|
||||
$this->view->users = $this->user->getPairs('noletter');
|
||||
$this->view->productID = $productID;
|
||||
$this->view->branchID = $branchID;
|
||||
$this->view->orderBy = $orderBy;
|
||||
$this->view->suiteList = $this->loadModel('testsuite')->getSuites($productID);
|
||||
$this->view->browseType = '';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Set duplicate field.
|
||||
*
|
||||
* @param string $resolution
|
||||
*
|
||||
* @param string $resolution
|
||||
* @param int $storyID
|
||||
* @access public
|
||||
* @return void
|
||||
|
||||
@@ -7,8 +7,9 @@ $(function()
|
||||
if(typeof(execution) != 'undefined') rawModule = 'projectstory';
|
||||
if(['project', 'projectstory'].indexOf(rawModule) === -1 && app != 'qa')
|
||||
{
|
||||
$('#navbar .nav li').removeClass('active');
|
||||
if(app != 'my') $('#navbar .nav li').removeClass('active');
|
||||
$("#navbar .nav li[data-id=" + storyType + ']').addClass('active');
|
||||
$('#subNavbar li[data-id="' + storyType + '"]').addClass('active');
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
+11
-10
@@ -22,16 +22,12 @@ $lang->story->affectedStories = "Affected {$lang->story->story}";
|
||||
|
||||
$lang->story->batchCreate = "Batch Create";
|
||||
$lang->story->change = "Change";
|
||||
$lang->story->changeAction = "Change Story";
|
||||
$lang->story->changed = 'Change';
|
||||
$lang->story->assignTo = 'Assign';
|
||||
$lang->story->assignAction = 'Assign Story';
|
||||
$lang->story->review = 'Review';
|
||||
$lang->story->reviewAction = 'Review Story';
|
||||
$lang->story->needReview = 'Need Review';
|
||||
$lang->story->batchReview = 'Batch Review';
|
||||
$lang->story->edit = "Edit Story";
|
||||
$lang->story->editAB = "Edit Story";
|
||||
$lang->story->batchEdit = "Batch Edit";
|
||||
$lang->story->subdivide = 'Decompose';
|
||||
$lang->story->link = 'Link';
|
||||
@@ -39,15 +35,11 @@ $lang->story->unlink = 'Unlink';
|
||||
$lang->story->track = 'Track';
|
||||
$lang->story->trackAB = 'Track';
|
||||
$lang->story->processStoryChange= 'Process Story Change';
|
||||
$lang->story->subdivideAction = 'Decompose Story';
|
||||
$lang->story->splitRequirent = 'Decompose';
|
||||
$lang->story->close = 'Close';
|
||||
$lang->story->closeAction = 'Close Story';
|
||||
$lang->story->batchClose = 'Batch Close';
|
||||
$lang->story->activate = 'Activate';
|
||||
$lang->story->activateAction = 'Activate Story';
|
||||
$lang->story->delete = "Delete";
|
||||
$lang->story->deleteAction = "Delete Story";
|
||||
$lang->story->view = "Story Detail";
|
||||
$lang->story->setting = "Settings";
|
||||
$lang->story->tasks = "Linked Tasks";
|
||||
@@ -62,11 +54,9 @@ $lang->story->caseCountAB = 'C';
|
||||
$lang->story->linkStory = 'Link Story';
|
||||
$lang->story->unlinkStory = 'UnLinked';
|
||||
$lang->story->export = "Export Data";
|
||||
$lang->story->exportAction = "Export Story";
|
||||
$lang->story->zeroCase = "Stories without cases";
|
||||
$lang->story->zeroTask = "Only list stories without tasks";
|
||||
$lang->story->reportChart = "Report";
|
||||
$lang->story->reportAction = "Story Report";
|
||||
$lang->story->copyTitle = "Copy Title";
|
||||
$lang->story->batchChangePlan = "Batch Change Plans";
|
||||
$lang->story->batchChangeBranch = "Batch Change Branches";
|
||||
@@ -78,6 +68,17 @@ $lang->story->toTask = 'Convert to Task';
|
||||
$lang->story->batchToTask = 'Batch Convert to Task';
|
||||
$lang->story->convertRelations = 'Convert Relations';
|
||||
|
||||
$lang->story->editAction = "Edit {$lang->SRCommon}";
|
||||
$lang->story->changeAction = "Change {$lang->SRCommon}";
|
||||
$lang->story->assignAction = "Assign {$lang->SRCommon}";
|
||||
$lang->story->reviewAction = "Review {$lang->SRCommon}";
|
||||
$lang->story->subdivideAction = "Subdivide {$lang->SRCommon}";
|
||||
$lang->story->closeAction = "Close {$lang->SRCommon}";
|
||||
$lang->story->activateAction = "Activate {$lang->SRCommon}";
|
||||
$lang->story->deleteAction = "Delete {$lang->SRCommon}";
|
||||
$lang->story->exportAction = "Export {$lang->SRCommon}";
|
||||
$lang->story->reportAction = "Report";
|
||||
|
||||
$lang->story->skipStory = '%s is a parent story. It cannot be closed.';
|
||||
$lang->story->closedStory = 'Story %s is closed and will not be closed.';
|
||||
$lang->story->batchToTaskTips = "This action will create a task with the same name as the selected {$lang->SRCommon} and link {$lang->SRCommon} to the task. The closed {$lang->SRCommon} will not be converted into tasks.";
|
||||
|
||||
@@ -1013,7 +1013,7 @@ class storyModel extends model
|
||||
$story->assignedDate = $oldStory == $data->assignedTo[$storyID] ? $oldStory->assignedDate : $now;
|
||||
$story->branch = isset($data->branches[$storyID]) ? $data->branches[$storyID] : 0;
|
||||
$story->module = $data->modules[$storyID];
|
||||
$story->plan = $data->plans[$storyID];
|
||||
$story->plan = $oldStories[$storyID]->parent < 0 ? '' : $data->plans[$storyID];
|
||||
$story->source = $data->sources[$storyID];
|
||||
$story->keywords = $data->keywords[$storyID];
|
||||
$story->stage = isset($data->stages[$storyID]) ? $data->stages[$storyID] : $oldStory->stage;
|
||||
|
||||
@@ -35,12 +35,12 @@ foreach(explode(',', $showFields) as $field)
|
||||
if($field)$visibleFields[$field] = '';
|
||||
}
|
||||
?>
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchEdit', "from=storyBatchEdit")?>" id="batchEditForm">
|
||||
<form method='post' target='hiddenwin' action="<?php echo inLink('batchEdit', "productID=$productID&executionID=$executionID")?>" id="batchEditForm">
|
||||
<div class="table-responsive">
|
||||
<table class='table table-form'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='w-40px'> <?php echo $lang->idAB;?></th>
|
||||
<th class='w-40px'> <?php echo $lang->idAB;?></th>
|
||||
<?php if($branchProduct):?>
|
||||
<th class='w-120px<?php echo zget($visibleFields, 'branch', ' hidden')?>'><?php echo $lang->story->branch;?></th>
|
||||
<?php endif;?>
|
||||
@@ -121,7 +121,7 @@ foreach(explode(',', $showFields) as $field)
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
|
||||
<td <?php echo zget($visibleFields, 'estimate', "class='hidden'")?>><?php echo html::input("estimates[$storyID]", $story->estimate, "class='form-control'"); ?></td>
|
||||
<td <?php echo zget($visibleFields, 'pri', "class='hidden'")?>><?php echo html::select("pris[$storyID]", $priList, $story->pri, 'class=form-control');?></td>
|
||||
<td class='text-left<?php echo zget($visibleFields, 'assignedTo', ' hidden')?>'><?php echo html::select("assignedTo[$storyID]", $users, $story->assignedTo, "class='form-control chosen'");?></td>
|
||||
|
||||
@@ -23,7 +23,10 @@
|
||||
<table class='table has-sort-head table-fixed' id='storyList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "productID=$productID&orderBy=%s";?>
|
||||
<?php
|
||||
$this->app->rawModule = 'story';
|
||||
$vars = "productID=$productID&branchID=$branchID&orderBy=%s";
|
||||
?>
|
||||
<th class='c-id'>
|
||||
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
|
||||
<label></label>
|
||||
@@ -90,7 +93,7 @@
|
||||
<?php
|
||||
$canBatchEdit = common::hasPriv('story', 'batchEdit');
|
||||
$disabled = $canBatchEdit ? '' : "disabled='disabled'";
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=$productID&executionID=0&branch=$branch");
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=$productID&projectID=$projectID&branch=$branch");
|
||||
?>
|
||||
<?php echo html::commonButton($lang->edit, "data-form-action='$actionLink' $disabled");?>
|
||||
<?php
|
||||
|
||||
@@ -1423,7 +1423,7 @@ class task extends control
|
||||
|
||||
/* Get users and executions. */
|
||||
$users = $this->loadModel('user')->getPairs('noletter');
|
||||
$executions = $this->execution->getPairs($this->session->execution, 'all', 'all|nocode');
|
||||
$executions = $this->execution->getPairs($execution->project, 'all', 'all|nocode');
|
||||
|
||||
/* Get related objects id lists. */
|
||||
$relatedStoryIdList = array();
|
||||
|
||||
@@ -131,6 +131,8 @@ $lang->task->lblPri = 'P';
|
||||
$lang->task->lblHour = '(h)';
|
||||
$lang->task->lblTestStory = 'Story Tested';
|
||||
|
||||
$lang->task->recordEstimateAction = 'Record Estimate';
|
||||
|
||||
$lang->task->ditto = 'Ditto';
|
||||
$lang->task->dittoNotice = "This Task is not linked to the %s as the previous one is!";
|
||||
$lang->task->selectTestStory = 'Select Story Testd';
|
||||
|
||||
@@ -1358,7 +1358,7 @@ class taskModel extends model
|
||||
|
||||
if($this->post->left == 0)
|
||||
{
|
||||
if($task->consumed == 0)
|
||||
if(isset($task->consumed) and $task->consumed == 0)
|
||||
{
|
||||
dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->task->consumed);
|
||||
return false;
|
||||
|
||||
@@ -633,7 +633,7 @@ class testcase extends control
|
||||
{
|
||||
$productID = $case->product;
|
||||
if($this->app->openApp == 'project') $this->loadModel('project')->setMenu($this->session->project);
|
||||
if($this->app->openApp == 'execution') $this->loadModel('execution')->setMenu($case->execution);
|
||||
if($this->app->openApp == 'execution') $this->loadModel('execution')->setMenu($this->session->execution);
|
||||
if($this->app->openApp == 'qa') $this->testcase->setMenu($this->products, $productID, $case->branch);
|
||||
|
||||
$this->view->title = "CASE #$case->id $case->title - " . $this->products[$productID];
|
||||
@@ -747,7 +747,9 @@ class testcase extends control
|
||||
$position[] = html::a($this->createLink('testcase', 'browse', "productID=$productID"), $this->products[$productID]);
|
||||
|
||||
/* Set menu. */
|
||||
$this->app->openApp == 'project' ? $this->loadModel('project')->setMenu($this->session->project) : $this->testcase->setMenu($this->products, $productID, $case->branch);
|
||||
if($this->app->openApp == 'project') $this->loadModel('project')->setMenu($this->session->project);
|
||||
if($this->app->openApp == 'execution') $this->loadModel('execution')->setMenu($this->session->execution);
|
||||
if($this->app->openApp == 'qa') $this->testcase->setMenu($this->products, $productID, $case->branch);
|
||||
|
||||
$moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'case', $startModuleID = 0, $case->branch);
|
||||
if($case->lib and $case->fromCaseID)
|
||||
|
||||
@@ -55,7 +55,7 @@ function loadProductBranches(productID)
|
||||
if(data)
|
||||
{
|
||||
$('#product').closest('.input-group').append(data);
|
||||
$('#branch').css('width', config.currentMethod == 'create' ? '120px' : '65px');
|
||||
$('#branch').css('width', config.currentMethod == 'create' ? '120px' : '95px');
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -254,7 +254,7 @@ class testcaseModel extends model
|
||||
->leftJoin(TABLE_PROJECTSTORY)->alias('t3')->on('t3.story=t2.story')
|
||||
->leftJoin(TABLE_STORY)->alias('t4')->on('t3.story=t4.id')
|
||||
->where('1=1')
|
||||
->beginIF(!empty((int)$productID))->andWhere('t2.product')->eq((int)$productID)->fi()
|
||||
->beginIF(!empty($productID))->andWhere('t2.product')->eq((int)$productID)->fi()
|
||||
->beginIF($this->app->openApp == 'project')->andWhere('t1.project')->eq($this->session->project)->fi()
|
||||
->beginIF($branch)->andWhere('t2.branch')->eq($branch)->fi()
|
||||
->beginIF($moduleIdList)->andWhere('t2.module')->in($moduleIdList)->fi()
|
||||
|
||||
@@ -93,7 +93,8 @@
|
||||
}
|
||||
elseif($hasZeroPriv and $menuType == 'zerocase')
|
||||
{
|
||||
echo html::a($this->createLink('story', 'zeroCase', "productID=$productID&branch=$branch&orderBy=id_desc"), "<span class='text'>{$lang->story->zeroCase}</span>", '', "class='btn btn-link' id='zerocaseTab' data-app='{$this->app->openApp}'");
|
||||
$projectID = $isProjectApp ? $this->session->project : 0;
|
||||
echo html::a($this->createLink('story', 'zeroCase', "productID=$productID&branch=$branch&orderBy=id_desc&projectID=$projectID"), "<span class='text'>{$lang->story->zeroCase}</span>", '', "class='btn btn-link' id='zerocaseTab' data-app='{$this->app->openApp}'");
|
||||
}
|
||||
elseif($hasUnitPriv and $menuType == 'browseunits')
|
||||
{
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php $browseLink = $app->session->caseList != false ? $app->session->caseList : $this->createLink('testcase', 'browse', "productID=$case->product");?>
|
||||
<?php $browseLink = $app->session->caseList ? $app->session->caseList : $this->createLink('testcase', 'browse', "productID=$case->product");?>
|
||||
<?php js::set('sysurl', common::getSysUrl());?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php if(!isonlybody()):?>
|
||||
<?php echo html::a($browseLink, '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-secondary'");?>
|
||||
<?php echo html::a($browseLink, '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-secondary' data-app={$this->app->openApp}");?>
|
||||
<div class="divider"></div>
|
||||
<?php endif;?>
|
||||
<div class="page-title">
|
||||
|
||||
@@ -322,13 +322,16 @@ class testtask extends control
|
||||
$productID = $this->product->saveState($task->product, $this->products);
|
||||
if($this->app->openApp == 'project')
|
||||
{
|
||||
$this->lang->scrum->menu->qa['subMenu']->testcase['subModule'] = 'testtask';
|
||||
$this->lang->scrum->menu->qa['subMenu']->testtask['subModule'] = '';
|
||||
$this->loadModel('project')->setMenu($this->session->project);
|
||||
$this->lang->modulePageNav = $this->product->select($this->products, $productID, 'testtask', 'browseUnits');
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->loadModel('qa')->setMenu($this->products, $task->product);
|
||||
$this->loadModel('qa')->setMenu($this->products, $productID);
|
||||
$this->app->rawModule = 'testcase';
|
||||
}
|
||||
$this->app->rawModule = 'testcase';
|
||||
|
||||
/* Save session. */
|
||||
$this->session->set('caseList', $this->app->getURI(true), 'qa');
|
||||
@@ -672,11 +675,15 @@ class testtask extends control
|
||||
/* Set menu. */
|
||||
if($this->app->openApp == 'project')
|
||||
{
|
||||
$this->lang->scrum->menu->qa['subMenu']->testcase['subModule'] = 'testtask';
|
||||
$this->lang->scrum->menu->qa['subMenu']->testtask['subModule'] = '';
|
||||
$this->loadModel('project')->setMenu($this->session->project);
|
||||
$this->lang->modulePageNav = $this->product->select($this->products, $productID, 'testtask', 'browseUnits');
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->loadModel('qa')->setMenu($this->products, $productID, $task->branch, $taskID);
|
||||
$this->app->rawModule = 'testcase';
|
||||
}
|
||||
|
||||
$this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->testtask->edit;
|
||||
@@ -1279,19 +1286,23 @@ class testtask extends control
|
||||
}
|
||||
|
||||
/* Set menu. */
|
||||
$productID = $this->loadModel('product')->saveState($productID, $this->products);
|
||||
if($this->app->openApp == 'project')
|
||||
{
|
||||
$this->lang->scrum->menu->qa['subMenu']->testcase['subModule'] = 'testtask';
|
||||
$this->lang->scrum->menu->qa['subMenu']->testtask['subModule'] = '';
|
||||
$this->loadModel('project')->setMenu($this->session->project);
|
||||
$this->lang->modulePageNav = $this->product->select($this->products, $productID, 'testtask', 'browseUnits');
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->loadModel('qa')->setMenu($this->products, $productID);
|
||||
$this->app->rawModule = 'testcase';
|
||||
}
|
||||
|
||||
$this->app->loadLang('job');
|
||||
$this->app->rawModule = 'testcase';
|
||||
|
||||
$productID = $productID ? $productID : key($this->products);
|
||||
$projectID = $this->app->openApp == 'qa' ? 0 : $this->session->project;
|
||||
$executions = empty($productID) ? array() : $this->loadModel('product')->getExecutionPairsByProduct($productID, 0, 'id_desc', $projectID);
|
||||
$builds = empty($productID) ? array() : $this->loadModel('build')->getProductBuildPairs($productID, 0, 'notrunk');
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
$lang->testtask->index = "Request Home";
|
||||
$lang->testtask->create = "Submit Request";
|
||||
$lang->testtask->reportChart = 'Report';
|
||||
$lang->testtask->reportAction = 'Case Report';
|
||||
$lang->testtask->delete = "Delete Request";
|
||||
$lang->testtask->importUnitResult = "Import Unit Result";
|
||||
$lang->testtask->importunitresult = "Import Unit Result"; //Fix bug custom required testtask.
|
||||
@@ -29,7 +28,6 @@ $lang->testtask->batchAssign = "Batch Assign";
|
||||
$lang->testtask->runCase = "Run";
|
||||
$lang->testtask->batchRun = "Batch Run";
|
||||
$lang->testtask->results = "Results";
|
||||
$lang->testtask->resultsAction = "Case Result";
|
||||
$lang->testtask->createBug = "Bug(+)";
|
||||
$lang->testtask->assign = 'Assign';
|
||||
$lang->testtask->cases = 'Case List';
|
||||
@@ -37,14 +35,10 @@ $lang->testtask->groupCase = "View By Group";
|
||||
$lang->testtask->pre = 'Prev.';
|
||||
$lang->testtask->next = 'Next';
|
||||
$lang->testtask->start = "Start";
|
||||
$lang->testtask->startAction = "Start Request";
|
||||
$lang->testtask->close = "Close";
|
||||
$lang->testtask->closeAction = "Close Request";
|
||||
$lang->testtask->wait = "Waiting";
|
||||
$lang->testtask->block = "Block";
|
||||
$lang->testtask->blockAction = "Block Request";
|
||||
$lang->testtask->activate = "Activate";
|
||||
$lang->testtask->activateAction = "Activate Request";
|
||||
$lang->testtask->testing = "Testing";
|
||||
$lang->testtask->blocked = "Blocked";
|
||||
$lang->testtask->done = "Tested";
|
||||
@@ -54,6 +48,15 @@ $lang->testtask->allTasks = 'All Requests';
|
||||
$lang->testtask->collapseAll = 'Collapse';
|
||||
$lang->testtask->expandAll = 'Expand';
|
||||
|
||||
$lang->testtask->viewAction = "View Testtask";
|
||||
$lang->testtask->casesAction = 'View Case';
|
||||
$lang->testtask->activateAction = "Activate Testtask";
|
||||
$lang->testtask->blockAction = "Block Testtask";
|
||||
$lang->testtask->closeAction = "Close Testtask";
|
||||
$lang->testtask->startAction = "Start Testtask";
|
||||
$lang->testtask->resultsAction = "Case Result";
|
||||
$lang->testtask->reportAction = 'Report';
|
||||
|
||||
$lang->testtask->id = 'ID';
|
||||
$lang->testtask->common = 'Request';
|
||||
$lang->testtask->product = $lang->productCommon;
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<div class='panel-body'>
|
||||
<div class='list-group'>
|
||||
<?php foreach($lang->testtask->unitTag as $key => $label):?>
|
||||
<?php echo html::a(inlink('browseUnits', "productID=$productID&browseType=$key&orderBy=$orderBy"), "<span class='text'>$label</span>", '', "id='{$key}UnitTab' class='btn btn-link'");?>
|
||||
<?php echo html::a(inlink('browseUnits', "productID=$productID&browseType=$key&orderBy=$orderBy"), "<span class='text'>$label</span>", '', "id='{$key}UnitTab' class='btn btn-link' data-app='{$this->app->openApp}'");?>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -62,7 +62,7 @@
|
||||
<?php foreach($tasks as $task):?>
|
||||
<tr class='text-left'>
|
||||
<td><?php printf('%03d', $task->id);?></td>
|
||||
<td class='c-name' title="<?php echo $task->name?>"><?php echo html::a(inlink('unitCases', "taskID=$task->id"), $task->name);?></td>
|
||||
<td class='c-name' title="<?php echo $task->name?>"><?php echo html::a(inlink('unitCases', "taskID=$task->id"), $task->name, '', "data-app={$this->app->openApp}");?></td>
|
||||
<td class='c-name' title="<?php echo $task->executionName?>"><?php echo $task->executionName?></td>
|
||||
<td class='c-name' title="<?php echo $task->buildName;?>"><?php echo ($task->build == 'trunk' || empty($task->buildName)) ? $lang->trunk : html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName, '', 'data-app="execution"');?></td>
|
||||
<td><?php echo zget($users, $task->owner);?></td>
|
||||
@@ -72,12 +72,12 @@
|
||||
<td class='text-center fail'><?php echo $task->failCount?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
common::printIcon('testtask', 'unitCases', "taskID=$task->id", '', 'list', 'list-alt', '', 'iframe', true, 'data-width="70%"');
|
||||
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list', '', '', 'iframe', true);
|
||||
common::printIcon('testtask', 'unitCases', "taskID=$task->id", '', 'list', 'list-alt');
|
||||
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
|
||||
if(common::hasPriv('testtask', 'delete', $task))
|
||||
{
|
||||
$deleteURL = $this->createLink('testtask', 'delete', "taskID=$task->id&confirm=yes");
|
||||
echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"taskList\",confirmDelete)", '<i class="icon-common-delete icon-trash"></i>', '', "title='{$lang->testtask->delete}' class='btn'");
|
||||
echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"taskList\",confirmDelete)", '<i class="icon-common-delete icon-trash"></i>', '', "title='{$lang->testcase->delete}' class='btn'");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -24,7 +24,8 @@ js::set('flow', $config->global->flow);
|
||||
<?php if($config->global->flow == 'full'):?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php common::printBack($this->createLink('testtask', 'browseUnits'), 'btn btn-primary');?>
|
||||
<?php $browseLink = $this->session->testtaskList ? $this->session->testtaskList : $this->createLink('testtask', 'browseUnits');?>
|
||||
<?php echo html::a($browseLink, '<i class="icon-goback icon-back"></i> ' . $lang->goback, '', "class='btn btn-secondary' data-app={$this->app->openApp}");?>
|
||||
<?php if(isonlybody()) echo "<div class='page-title'>{$task->name}</div>";?>
|
||||
</div>
|
||||
<div class='btn-toolbar pull-right <?php if(isonlybody()) echo 'hidden';?>'>
|
||||
|
||||
@@ -68,6 +68,7 @@ $lang->todo->finishedDate = 'FinishedDate';
|
||||
$lang->todo->closedBy = 'ClosedBy';
|
||||
$lang->todo->closedDate = 'ClosedDate';
|
||||
$lang->todo->deadline = 'Expiration';
|
||||
$lang->todo->deleted = 'Deleted';
|
||||
|
||||
$lang->todo->every = 'Every';
|
||||
$lang->todo->specify = 'Specify';
|
||||
|
||||
@@ -117,4 +117,8 @@ $lang->upgrade->mergeByProject = "Independent iterations: You can select sev
|
||||
$lang->upgrade->mergeByMoreLink = "Iteration that relates multiple products: select which product the iteration belongs to.";
|
||||
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
|
||||
|
||||
$lang->upgrade->needBuild4Add = 'Full text retrieval has been added in this upgrad. Please create an index.';
|
||||
$lang->upgrade->needBuild4Adjust = 'Full text retrieval has been adjusted. Please create an index.';
|
||||
$lang->upgrade->buildIndex = 'Create Index';
|
||||
|
||||
include dirname(__FILE__) . '/version.php';
|
||||
|
||||
+11
-21
@@ -30,6 +30,7 @@ $lang->upgrade->warnningContent = <<<EOT
|
||||
e.g. mysqldump -u root -p zentao >zentao.bak
|
||||
</pre>
|
||||
EOT;
|
||||
|
||||
$lang->upgrade->createFileWinCMD = 'Open command line and execute <strong style="color:#ed980f">echo > %s</strong>';
|
||||
$lang->upgrade->createFileLinuxCMD = 'Execute command line: <strong style="color:#ed980f">touch %s</strong>';
|
||||
$lang->upgrade->setStatusFile = '<h4>Please complete the following actions</h4>
|
||||
@@ -66,27 +67,6 @@ $lang->upgrade->to15Desc = <<<EOD
|
||||
<p><strong>How do you plan to use the new version of ZenTao?</strong></p>
|
||||
EOD;
|
||||
|
||||
$lang->upgrade->to15Mode['classic'] = 'Keep the old version';
|
||||
$lang->upgrade->to15Mode['new'] = 'New program management mode';
|
||||
|
||||
$lang->upgrade->selectedModeTips['classic'] = 'You can also switch to the new program set management mode in the background-Customize in the future.';
|
||||
$lang->upgrade->selectedModeTips['new'] = 'Switching to the program management mode requires merging the previous data, and the system will guide you to complete this operation.';
|
||||
|
||||
$lang->upgrade->demoURL = 'http://zentao20.demo.zentao.net';
|
||||
$lang->upgrade->videoURL = 'https://qc.zentao.net/zentao20.mp4';
|
||||
$lang->upgrade->to20Tips = 'Zentao 20 upgrade tips';
|
||||
$lang->upgrade->to20Button = 'I have done the backup, start the upgrade!!';
|
||||
$lang->upgrade->to20TipsHeader= "<p>Dear user, thank you for your support of ZenTao。Since version 20, Zendo has been fully upgraded to a universal project management platform. Please see the following video for more information(If the video can not play properly, please visit directly <a href='http://zentao20.demo.zentao.net/zentao20.mp4' target='_blank'><u>Zentao20</u></a>):</p><br />";
|
||||
$lang->upgrade->to20Desc = <<<EOD
|
||||
<div class='text-warning'>
|
||||
<p>Friendly reminder:</p>
|
||||
<ol>
|
||||
<li>You can start by installing a version 20 of ZenTao to experience the concepts and processes inside.</li>
|
||||
<li>Version 20 of Zendo has made some major changes, please make a backup before upgrading.</li>
|
||||
<li>Please feel free to upgrade, even if the first upgrade is not in place, subsequent adjustments can be made without affecting system data.</li>
|
||||
</ol>
|
||||
</div>
|
||||
EOD;
|
||||
$lang->upgrade->mergeProgramDesc = <<<EOD
|
||||
<p>Next, we will migrate the previous historical product and iteration data to the project set and under the project, with the following scenario for migration.</p><br />
|
||||
<h4>Option 1: Product and iteration organized by product line </h4>
|
||||
@@ -99,6 +79,12 @@ $lang->upgrade->mergeProgramDesc = <<<EOD
|
||||
<p>These iterations can be selected to fall under a new project.</p>
|
||||
EOD;
|
||||
|
||||
$lang->upgrade->to15Mode['classic'] = 'Keep the old version';
|
||||
$lang->upgrade->to15Mode['new'] = 'New program management mode';
|
||||
|
||||
$lang->upgrade->selectedModeTips['classic'] = 'You can also switch to the new program set management mode in the background-Customize in the future.';
|
||||
$lang->upgrade->selectedModeTips['new'] = 'Switching to the program management mode requires merging the previous data, and the system will guide you to complete this operation.';
|
||||
|
||||
$lang->upgrade->line = 'Product Line';
|
||||
$lang->upgrade->program = 'Merge Project';
|
||||
$lang->upgrade->existProgram = 'Existing programs';
|
||||
@@ -118,4 +104,8 @@ $lang->upgrade->mergeByProject = "Independent iterations: You can select sev
|
||||
$lang->upgrade->mergeByMoreLink = "Iteration that relates multiple products: select which product the iteration belongs to.";
|
||||
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
|
||||
|
||||
$lang->upgrade->needBuild4Add = 'Full text retrieval has been added in this upgrad. Please create an index.';
|
||||
$lang->upgrade->needBuild4Adjust = 'Full text retrieval has been adjusted. Please create an index.';
|
||||
$lang->upgrade->buildIndex = 'Create Index';
|
||||
|
||||
include dirname(__FILE__) . '/version.php';
|
||||
|
||||
@@ -118,4 +118,8 @@ $lang->upgrade->mergeByProject = "Independent iterations: You can select sev
|
||||
$lang->upgrade->mergeByMoreLink = "Iteration that relates multiple products: select which product the iteration belongs to.";
|
||||
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
|
||||
|
||||
$lang->upgrade->needBuild4Add = 'Full text retrieval has been added in this upgrad. Please create an index.';
|
||||
$lang->upgrade->needBuild4Adjust = 'Full text retrieval has been adjusted. Please create an index.';
|
||||
$lang->upgrade->buildIndex = 'Create Index';
|
||||
|
||||
include dirname(__FILE__) . '/version.php';
|
||||
|
||||
@@ -118,4 +118,8 @@ $lang->upgrade->mergeByProject = "Independent iterations: You can select sev
|
||||
$lang->upgrade->mergeByMoreLink = "Iteration that relates multiple products: select which product the iteration belongs to.";
|
||||
$lang->upgrade->mergeRepoTips = "Merge the selected version library under the selected product.";
|
||||
|
||||
$lang->upgrade->needBuild4Add = 'Full text retrieval has been added in this upgrad. Vui lòng create an index.';
|
||||
$lang->upgrade->needBuild4Adjust = 'Full text retrieval has been adjusted. Vui lòng create an index.';
|
||||
$lang->upgrade->buildIndex = 'Tạo Index';
|
||||
|
||||
include dirname(__FILE__) . '/version.php';
|
||||
|
||||
@@ -104,4 +104,8 @@ $lang->upgrade->mergeByProject = "独立的迭代:可以选择若干迭代
|
||||
$lang->upgrade->mergeByMoreLink = "关联多个产品的迭代:选择这个迭代归属于哪一个产品。";
|
||||
$lang->upgrade->mergeRepoTips = "将选中的版本库归并到所选产品下。";
|
||||
|
||||
$lang->upgrade->needBuild4Add = '本次升级新增全文检索功能,需要创建索引。';
|
||||
$lang->upgrade->needBuild4Adjust = '本次升级全文检索功能有调整,需要创建索引。';
|
||||
$lang->upgrade->buildIndex = '创建索引';
|
||||
|
||||
include dirname(__FILE__) . '/version.php';
|
||||
|
||||
@@ -53,7 +53,7 @@ $lang->upgrade->noticeSQL = '檢查到你的資料庫跟標準不一致,
|
||||
$lang->upgrade->afterDeleted = '以上檔案未能刪除, 刪除後刷新!';
|
||||
$lang->upgrade->mergeProgram = '數據遷移';
|
||||
$lang->upgrade->mergeTips = '數據遷移提示';
|
||||
$lang->upgrade->to15Guide = '禪道開源版15.0.beta1升級';
|
||||
$lang->upgrade->to15Guide = '禪道開源版15版本升級';
|
||||
$lang->upgrade->to15Desc = <<<EOD
|
||||
<p>尊敬的用戶,禪道從15版本開始對導航和概念做了調整,主要改動如下:</p>
|
||||
<ol>
|
||||
@@ -104,4 +104,8 @@ $lang->upgrade->mergeByProject = "獨立的迭代:可以選擇若干迭代
|
||||
$lang->upgrade->mergeByMoreLink = "關聯多個產品的迭代:選擇這個迭代歸屬於哪一個產品。";
|
||||
$lang->upgrade->mergeRepoTips = "將選中的版本庫歸併到所選產品下。";
|
||||
|
||||
$lang->upgrade->needBuild4Add = '本次升級新增全文檢索功能,需要創建索引。';
|
||||
$lang->upgrade->needBuild4Adjust = '本次升級全文檢索功能有調整,需要創建索引。';
|
||||
$lang->upgrade->buildIndex = '創建索引';
|
||||
|
||||
include dirname(__FILE__) . '/version.php';
|
||||
|
||||
@@ -2756,6 +2756,7 @@ class upgradeModel extends model
|
||||
$fromVersion = $this->config->installedVersion;
|
||||
$needProcess = array();
|
||||
if(strpos($fromVersion, 'biz') === false and (strpos($fromVersion, 'pro') === false ? version_compare($fromVersion, '8.3', '<') : version_compare($fromVersion, 'pro5.4', '<'))) $needProcess['updateFile'] = true;
|
||||
if(strpos($fromVersion, 'max') === false and version_compare($fromVersion, '15.0', '<')) $needProcess['search'] = true;
|
||||
return $needProcess;
|
||||
}
|
||||
|
||||
|
||||
@@ -87,4 +87,58 @@ function updateFile(link)
|
||||
}
|
||||
<?php endif;?>
|
||||
</script>
|
||||
<?php
|
||||
if(isset($needProcess['search']))
|
||||
{
|
||||
$searchLink = $this->createLink('search', 'buildIndex');
|
||||
$needBuild = $lang->upgrade->needBuild4Add;
|
||||
}
|
||||
?>
|
||||
<?php if(isset($searchLink)):?>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('a#tohome').closest('.message').hide();
|
||||
$('.col-md-6:first').append("<div id='resultBox' class='alert alert-info'><p><?php echo $needBuild;?><a href='<?php echo $searchLink;?>' id='execButton' class='btn btn-primary btn-sm'><?php echo $lang->upgrade->buildIndex;?></a></p></div>");
|
||||
$('#execButton').click(function()
|
||||
{
|
||||
$('#execButton').hide();
|
||||
$.get($(this).attr('href'), function(response)
|
||||
{
|
||||
try
|
||||
{
|
||||
response = $.parseJSON(response);
|
||||
if(response.result == 'finished')
|
||||
{
|
||||
searchFinish = true;
|
||||
$('#resultBox').append("<li class='text-success'>" + response.message + "</li>");
|
||||
<?php
|
||||
$condition = array();
|
||||
foreach($needProcess as $processKey => $value) $condition[] = $processKey . 'Finish == true';
|
||||
$condition = join(' && ', $condition);
|
||||
?>
|
||||
if(<?php echo $condition?>)
|
||||
{
|
||||
$.get('<?php echo inlink('afterExec', "fromVersion=$fromVersion&processed=yes")?>');
|
||||
$('a#tohome').closest('.message').show();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#execButton').attr('href', response.next);
|
||||
$('#resultBox').append("<li class='text-success'>" + response.message + "</li>");
|
||||
return $('#execButton').click();
|
||||
}
|
||||
}
|
||||
catch(error)
|
||||
{
|
||||
$('#resultBox').append("<li>" + response + "</li>");
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
})
|
||||
</script>
|
||||
<?php endif;?>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
th.required:after {position: relative; right: 10px;}
|
||||
td .passwordBox {border-left-width: 0px!important;}
|
||||
|
||||
@@ -56,6 +56,7 @@ $lang->user->type = 'User Type';
|
||||
$lang->user->cropAvatar = 'Crop Avatar';
|
||||
$lang->user->cropAvatarTip = 'Drag and drop the box to select the image clipping range.';
|
||||
$lang->user->cropImageTip = 'The image used is too small, the recommended image size is at least 48x48, the current image size is %s';
|
||||
$lang->user->captcha = 'Captcha';
|
||||
|
||||
$lang->user->legendBasic = 'Basic Information';
|
||||
$lang->user->legendContribution = 'Contribution';
|
||||
@@ -128,6 +129,7 @@ $lang->user->lockWarning = "You can try %s times.";
|
||||
$lang->user->loginLocked = "Please contact the administrator to unlock your account or try %s minutes later.";
|
||||
$lang->user->weakPassword = "Your password does not meet the requirements.";
|
||||
$lang->user->errorWeak = "Passwords cannot use [%s] these commonly used weak passwords.";
|
||||
$lang->user->errorCaptcha = "Captcha Error";
|
||||
|
||||
$lang->user->roleList[''] = '';
|
||||
$lang->user->roleList['dev'] = 'Developer';
|
||||
@@ -243,4 +245,4 @@ $lang->user->noticeResetFile = "<h5>Contact the Administrator to reset your pass
|
||||
</ol>";
|
||||
$lang->user->notice4Safe = "Warning: Weak password of one click package detected";
|
||||
$lang->user->process4DIR = "It is detected that you may be using the one click installation package environment. Other sites in the environment are still using simple passwords. For security reasons, if you do not use other sites, please handle them in time. Delete or rename the %s directory. Visit: <a href='https://www.zentao.pm/book/zentaomanual/fix-weak-password-564.html' target='_blank'>https://www.zentao.pm/book/zentaomanual/fix-weak-password-564.html</a>";
|
||||
$lang->user->process4DB = "It is detected that you may be using the one click installation package environment. Other sites in the environment are still using simple passwords. For security reasons, if you do not use other sites, please handle them in time. Please login database and modify password field of zt_user table of %s database. Visit: <a href='https://www.zentao.pm/book/zentaomanual/fix-weak-password-564.html' target='_blank'>https://www.zentao.pm/book/zentaomanual/fix-weak-password-564.html</a>";
|
||||
$lang->user->process4DB = "It is detected that you may be using the one click installation package environment. Other sites in the environment are still using simple passwords. For security reasons, if you do not use other sites, please handle them in time. Please login database and modify password field of zt_user table of %s database. Visit: <a href='https://www.zentao.pm/book/zentaomanual/fix-weak-password-564.html' target='_blank'>https://www.zentao.pm/book/zentaomanual/fix-weak-password-564.html</a>";
|
||||
|
||||
@@ -1559,7 +1559,7 @@ class userModel extends model
|
||||
/* Get teams. */
|
||||
if($teams === null)
|
||||
{
|
||||
$stmt = $this->dao->select('root,account')->from(TABLE_TEAM)->where('type')->in('project,sprint,stage')->query();
|
||||
$stmt = $this->dao->select('root,account')->from(TABLE_TEAM)->where('type')->in('project,execution')->query();
|
||||
while($team = $stmt->fetch()) $teams[$team->root][$team->account] = $team->account;
|
||||
}
|
||||
|
||||
@@ -2075,7 +2075,7 @@ class userModel extends model
|
||||
/* Get team group. */
|
||||
$teamGroups = array();
|
||||
$stmt = $this->dao->select('root,account')->from(TABLE_TEAM)
|
||||
->where('type')->in('project,sprint,stage')
|
||||
->where('type')->in('project,execution')
|
||||
->andWhere('root')->in(array_merge($sprintIdList, $parentIdList))
|
||||
->query();
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<table class="table table-form">
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='w-40px'><?php echo $lang->idAB;?></th>
|
||||
<th class='w-40px'><?php echo $lang->idAB;?></th>
|
||||
<th class='w-150px<?php echo zget($visibleFields, 'dept', ' hidden') . zget($requiredFields, 'dept', '', ' required');?>'> <?php echo $lang->user->dept;?></th>
|
||||
<th class='accountThWidth required'><?php echo $lang->user->account;?></th>
|
||||
<th class='w-130px required'><?php echo $lang->user->realname;?></th>
|
||||
@@ -87,7 +87,7 @@
|
||||
<?php
|
||||
echo html::input("password[$i]", '', "class='form-control' onkeyup='toggleCheck(this, $i)'");
|
||||
echo "<span class='input-group-addon passwordStrength'></span>";
|
||||
if($i != 0) echo "<span class='input-group-addon'><input type='checkbox' name='ditto[$i]' id='ditto$i' " . ($i> 0 ? "checked" : '') . " /> {$lang->user->ditto}</span>";
|
||||
if($i != 0) echo "<span class='input-group-addon passwordBox'><input type='checkbox' name='ditto[$i]' id='ditto$i' " . ($i> 0 ? "checked" : '') . " /> {$lang->user->ditto}</span>";
|
||||
?>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -62,7 +62,16 @@ include '../../common/view/header.lite.html.php';
|
||||
/* Click my site to modify the left navigation. */
|
||||
function changeLeftNavigation()
|
||||
{
|
||||
window.parent.$.apps.open('my');
|
||||
if(window.parent && window.parent.$.apps && isOnlybody)
|
||||
{
|
||||
$.closeModal();
|
||||
window.parent.$.apps.open('my');
|
||||
}
|
||||
else
|
||||
{
|
||||
$.apps.close();
|
||||
$.apps.open('my');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
|
||||
@@ -9,6 +9,8 @@ $lang->webhook->chooseDept = 'Choose department';
|
||||
$lang->webhook->assigned = 'AssignedTo';
|
||||
$lang->webhook->setting = 'Settings';
|
||||
|
||||
$lang->webhook->logAction = 'Webhook Log';
|
||||
|
||||
$lang->webhook->browse = 'Browse';
|
||||
$lang->webhook->create = 'Create';
|
||||
$lang->webhook->edit = 'Edit';
|
||||
@@ -40,6 +42,8 @@ $lang->webhook->typeList['dinggroup'] = 'Dingding Robot';
|
||||
$lang->webhook->typeList['dinguser'] = 'Dingding Notifier';
|
||||
$lang->webhook->typeList['wechatgroup'] = 'Enterprise WeChat Robot';
|
||||
$lang->webhook->typeList['wechatuser'] = 'Enterprise WeChat Notifier';
|
||||
$lang->webhook->typeList['feishugroup'] = 'Feishu Robot';
|
||||
$lang->webhook->typeList['feishuuser'] = 'Feishu Notifier';
|
||||
$lang->webhook->typeList['default'] = 'Others';
|
||||
|
||||
$lang->webhook->sendTypeList['sync'] = 'Synchronous';
|
||||
@@ -58,6 +62,11 @@ $lang->webhook->wechatAgentId = 'Agent ID';
|
||||
$lang->webhook->wechatUserid = 'Wechat Userid';
|
||||
$lang->webhook->wechatBindStatus = 'Bind Status';
|
||||
|
||||
$lang->webhook->feishuAppId = 'Feishu App ID';
|
||||
$lang->webhook->feishuAppSecret = 'Feishu App Secret';
|
||||
$lang->webhook->feishuUserid = 'Feishu Users';
|
||||
$lang->webhook->feishuBindStatus = 'Feishu Bind Status';
|
||||
|
||||
$lang->webhook->zentaoUser = 'Zentao User';
|
||||
|
||||
$lang->webhook->dingBindStatusList['0'] = 'No';
|
||||
|
||||
Reference in New Issue
Block a user