* Rewrite allLibs, objectLibs and browse pages of doc.

This commit is contained in:
daitingting
2018-05-07 17:27:12 +08:00
parent b38b38365a
commit 42c6502b0f
15 changed files with 689 additions and 698 deletions
+2
View File
@@ -1,3 +1,5 @@
ALTER TABLE `zt_release` ADD `marker` enum('0','1') NOT NULL default '0' AFTER `name`;
ALTER TABLE `zt_doc` ADD `collector` text NOT NULL AFTER `views`;
ALTER TABLE `zt_doc` ADD `visitedDate` datetime NOT NULL AFTER `editedDate`;
ALTER TABLE `zt_doclib` ADD `collector` text NOT NULL AFTER `main`;
ALTER TABLE `zt_module` ADD `collector` text NOT NULL AFTER `owner`;
+5
View File
@@ -12,6 +12,11 @@ $config->doc->editLib->requiredFields = 'name';
$config->doc->create->requiredFields = 'title';
$config->doc->edit->requiredFields = 'title';
$config->doc->customObjectLibs = 'files,customFiles';
$config->doc->custom = new stdclass();
$config->doc->custom->objectLibs = $config->doc->customObjectLibs;
$config->doc->editor = new stdclass();
$config->doc->editor->create = array('id' => 'content', 'tools' => 'fullTools');
$config->doc->editor->edit = array('id' => 'content', 'tools' => 'fullTools');
+58 -46
View File
@@ -39,23 +39,11 @@ class doc extends control
{
$this->doc->setMenu();
$products = $this->doc->getLimitLibs('product');
$projects = $this->doc->getLimitLibs('project');
$customLibs = $this->doc->getLimitLibs('custom');
$subLibs['product'] = $this->doc->getSubLibGroups('product', array_keys($products));
$subLibs['project'] = $this->doc->getSubLibGroups('project', array_keys($projects));
$this->app->loadClass('pager', $static = true);
$pager = new pager(6, 6, 1);
$this->view->title = $this->lang->doc->common . $this->lang->colon . $this->lang->doc->index;
$this->view->position[] = $this->lang->doc->index;
$this->view->products = $products;
$this->view->projects = $projects;
$this->view->customLibs = $customLibs;
$this->view->subLibs = $subLibs;
$this->view->modules = $this->loadModel('tree')->getDocStructure();
$this->view->latestEditedDocs = $this->loadModel('doc')->getDocsByBrowseType(0, 'byediteddate', 0, 0, 'editedDate_desc, id_desc', $pager);
$this->view->myDocs = $this->loadModel('doc')->getDocsByBrowseType(0, 'openedbyme', 0, 0, 'addedDate_desc', $pager);
$this->view->statisticInfo = $this->doc->getStatisticInfo();
@@ -88,9 +76,8 @@ class doc extends control
/* Set browseType.*/
$browseType = strtolower($browseType);
if(($this->cookie->browseType == 'bymenu' or $this->cookie->browseType == 'bytree') and $browseType != 'bysearch') $browseType = $this->cookie->browseType;
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$moduleID = ($browseType == 'bymodule' or $browseType == 'bymenu') ? (int)$param : 0;
$moduleID = ($browseType == 'bymodule') ? (int)$param : 0;
$type = '';
$productID = 0;
@@ -129,7 +116,7 @@ class doc extends control
$menuType = (!$type && in_array($browseType, array_keys($this->lang->doc->fastMenuList))) ? $browseType : $type;
$this->doc->setMenu($menuType, $libID, $moduleID, $productID, $projectID);
}
$this->session->set('docList', $this->app->getURI(true));
$this->session->set('docList', $this->app->getURI(true));
/* Set header and position. */
$this->view->title = $this->lang->doc->common . ($libID ? $this->lang->colon . $this->libs[$libID] : '');
@@ -140,7 +127,6 @@ class doc extends control
$pager = new pager($recTotal, $recPerPage, $pageID);
/* Append id for secend sort. */
if($browseType == 'bymenu' and strpos('editeddate_desc,addeddate_desc', strtolower($orderBy)) === false) $orderBy = 'title_asc';
$sort = $this->loadModel('common')->appendOrder($orderBy);
/* Get docs by browse type. */
@@ -150,37 +136,24 @@ class doc extends control
$actionURL = $this->createLink('doc', 'browse', "lib=$libID&browseType=bySearch&queryID=myQueryID&orderBy=$orderBy&from=$from");
$this->doc->buildSearchForm($libID, $this->libs, $queryID, $actionURL, $type);
$this->view->fixedMenu = false;
foreach(customModel::getModuleMenu('doc') as $item)
{
if($item->name == "custom$libID" and empty($item->hidden)) $this->view->fixedMenu = true;
}
$title = '';
$module = $moduleID ? $this->loadModel('tree')->getByID($moduleID) : '';
if($module) $title = $module->name;
if($libID) $title = $this->libs[$libID];
if(in_array($browseType, array_keys($this->lang->doc->fastMenuList))) $title = $this->lang->doc->fastMenuList[$browseType];
if($this->cookie->browseType == 'bymenu')
{
$this->view->modules = $this->doc->getDocMenu($libID, $moduleID, $orderBy == 'title_asc' ? 'name_asc' : 'id_desc');
$this->view->parents = $this->loadModel('tree')->getParents($moduleID);
}
elseif($this->cookie->browseType == 'bytree')
{
$this->view->tree = $this->doc->getDocTree($libID);
}
else
{
$this->view->moduleTree = $this->loadModel('tree')->getTreeMenu($libID, $viewType = 'doc', $startModuleID = 0, array('treeModel', 'createDocLink'));
}
$this->view->libID = $libID;
$this->view->libName = $libID ? $this->libs[$libID] : '';
$this->view->moduleID = $moduleID;
$this->view->docs = $docs;
$this->view->pager = $pager;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->orderBy = $orderBy;
$this->view->browseType = $browseType;
$this->view->param = $param;
$this->view->type = $type;
$this->view->from = $from;
$this->view->title = $title;
$this->view->libID = $libID;
$this->view->moduleID = $moduleID;
$this->view->modules = $this->doc->getDocMenu($libID, $moduleID, $orderBy == 'title_asc' ? 'name_asc' : 'id_desc');
$this->view->docs = $docs;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->orderBy = $orderBy;
$this->view->browseType = $browseType;
$this->view->param = $param;
$this->view->type = $type;
$this->view->from = $from;
$this->view->pager = $pager;
$this->display();
}
@@ -483,6 +456,39 @@ class doc extends control
}
}
/**
* Collect doc, doclib or module of doclib.
*
* @param int $objectID
* @param int $objectType
* @access public
* @return void
*/
public function collect($objectID, $objectType)
{
if($objectType == 'doc') $table = TABLE_DOC;
if($objectType == 'doclib') $table = TABLE_DOCLIB;
if($objectType == 'module') $table = TABLE_MODULE;
$collectors = $this->dao->select('collector')->from($table)->where('id')->eq($objectID)->fetch('collector');
if(strpos($collectors, ",{$this->app->user->account},") !== false)
{
$collectors = str_replace(",{$this->app->user->account},", ',', $collectors);
}
else
{
$collectors = explode(',', $collectors);
$collectors[] = $this->app->user->account;
$collectors = implode(',', $collectors);
}
$collectors = trim($collectors, ',') ? ',' . trim($collectors, ',') . ',' : '';
$this->dao->update($table)->set('collector')->eq($collectors)->where('id')->eq($objectID)->exec();
die(js::reload('parent'));
}
/**
* Sort doc lib.
*
@@ -602,6 +608,7 @@ class doc extends control
$libs = $this->doc->getAllLibsByType($type, $pager, $product);
$subLibs = array();
if($type == 'product' or $type == 'project') $subLibs = $this->doc->getSubLibGroups($type, array_keys($libs));
if($type == 'custom') $this->view->itemCounts = $this->doc->statLibCounts(array_keys($libs));
$this->view->type = $type;
$this->view->libs = $libs;
@@ -749,6 +756,11 @@ class doc extends control
$this->doc->setMenu($type, $libID = 0, $moduleID = 0, $productID, $projectID, $crumb);
}
/* Set Custom. */
foreach(explode(',', $this->config->doc->customObjectLibs) as $libType) $customObjectLibs[$libType] = $this->lang->doc->customObjectLibs[$libType];
$this->view->customObjectLibs = $customObjectLibs;
$this->view->showLibs = $this->config->doc->custom->objectLibs;
$this->view->title = $object->name;
$this->view->position[] = $object->name;
+38 -97
View File
@@ -1,102 +1,43 @@
.libs-group-heading {color: #808080; border-bottom:1px solid #ddd; padding:8px;}
.libs-group-heading a{overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
.libs-group{padding:10px; height:84px;}
.lib {float: left; display: block; width:80px; padding: 5px; margin:0px 3px; text-align: center; color: #333; overflow: hidden; text-overflow: ellipsis;}
.lib .file-icon{margin-bottom:5px;}
.lib .lib-name{overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
.lib:hover, .lib:focus, .lib:active {border-color: #2e6dad; background-color: #EBF2F9; color: #2e6dad}
.lib .icon-move{display: none; position: relative; top: -10px; right : -70px;}
.lib:hover .icon-move{display: inline-block; cursor: move;}
.w-lib-p100{width:100%;}
.w-lib-p50{width:45%;}
.w-lib-p33{width:30%;}
#titlebar > .heading > strong > i{display:inline;}
#modulemenu .nav > li > a{display: inline-block;}
.split-row > .side-col,
.split-row > .main-col {padding: 0;}
.col-spliter {width: 20px; position: relative; z-index: 10; cursor: ew-resize;}
.col-spliter:before,
.col-spliter:after {content: ''; display: block; position: absolute; left: 50%; width: 10px; margin-left: -5px; top: 0; bottom: 0; background: rgba(0,0,0,.075); opacity: 0; transition: opacity .2s;}
.col-spliter:before {border-radius: 5px;}
.col-spliter:after {background: transparent; top: 50%; bottom: auto; height: 20px; opacity: 1; width: 4px; border-left: 1px solid rgba(0,0,0,.2); border-right: rgba(0,0,0,.2) 1px solid; margin-left: -2px; margin-top: -10px; }
/* .col-spliter:hover:after {width: 2px; background: rgba(0,0,0,.15); margin-left: -1px; top: 0; bottom: 20px; height: auto; margin-top: auto; border: none;} */
.row-spliting .col-spliter:after,
.col-spliter:hover:after {border-color: rgba(0,0,0,.3);}
.col-spliter:hover:before,
.col-spliter:hover:after,
.row-spliting .col-spliter:before,
.row-spliting .col-spliter:after {opacity: 1;}
#groups_chosen .chosen-choices {border-bottom:0px;}
.groups-addon {border-bottom:0px;}
@media (max-width: 720px) {
.split-row > .side-col,
.split-row > .main-col {width: 100%!important;}
}
#dropMenu.loading > #libMenu,
#dropMenu > .icon {display: none}
#dropMenu.loading > .icon {display: block}
#dropMenu {min-width: 600px; box-sizing: content-box; padding: 0;}
.col-sm-size .col-sm-5,
.col-sm-size .col-sm-7 {width: 100%;}
.col-sm-size .table .c-user,
.col-sm-size .table .c-num,
.col-md-size .table .c-datetime {display: none;}
#libMenu {display: block; margin: 0; position: relative;}
#libMenuHeading {padding: 10px;}
#libMenuGroups {display: table; width: 100%; margin-bottom: 10px; table-layout: fixed;}
.lib-menu-group {display: table-cell; width: 33.333333%; padding: 0}
.lib-menu-group + .lib-menu-group {border-left: 1px dotted #ddd;}
.lib-menu-project-done, .lib-menu-list-heading {background-color: #fafafa; color: #808080; padding: 0 10px; text-align: center; display: inline-block; margin: 0 0 10px 10px; border: 1px solid #ddd; line-height: 20px; border-radius: 10px;}
.lib-menu-project-done:hover, .lib-menu-list-heading:hover {border-color: #114f8e; cursor: pointer; color: #114f8e;}
.lib-menu-project-done > .icon, .lib-menu-list-heading > .icon {display: none}
.lib-menu-project-done.active {background-color: #114f8e; color: #fff; border-color: #114f8e;}
.lib-menu-project-done.active > .icon {display: inline-block;}
.lib-menu-list {max-height: 500px; overflow-y: auto; min-height: 100px; line-height:25px;}
.list-menu-item-heading {padding: 0 3px 0 0px; color: #141414; white-space: nowrap; overflow:hidden; float: left; width:35%;text-align:right;}
.list-menu-item-heading > .icon {display: inline-block; width: 18px;}
.list-menu-item {padding: 0 8px 0 5px; display: block; overflow: hidden; white-space: nowrap; float: left; color:#3280FC;}
.list-menu-item.current {background-color: #EBF2F9; color:red}
.list-menu-item.active,
.list-menu-item:hover {color: #1a53ff}
.list-menu-item-footer {clear:left}
.table-files .c-actions .btn > .icon {opacity: 0;}
.table-files .c-actions .btn > .icon.text-yellow,
.table-files tr:hover .c-actions .btn > .icon {opacity: 1;}
#dropMenu[data-filter] #libMenuGroups {table-layout: auto;}
#dropMenu[data-filter="project"] #libMenuProductGroup,
#dropMenu[data-filter="project"] #libMenuCustomGroup,
#dropMenu[data-filter="custom"] #libMenuProjectGroup,
#dropMenu[data-filter="custom"] #libMenuProductGroup,
#dropMenu[data-filter="product"] #libMenuProjectGroup,
#dropMenu[data-filter="product"] #libMenuCustomGroup {display: none;}
#main {opacity: 0; transition: opacity .4s;}
#main.in {opacity: 1;}
#dropMenu[data-filter] .lib-menu-group {display: block; width: 100%}
#dropMenu[data-filter] .lib-menu-list-heading {position: absolute; top: 13px; left: 215px; padding-right: 25px; background-color: #114f8e; color: #fff; border-color: #114f8e;}
#dropMenu[data-filter] .lib-menu-list-heading > .icon {position: absolute; right: 3px; top: 2px; display: block;}
#dropMenu[data-filter] .list-menu-item {width: 33.33333%;}
@media (min-width: 760px)
{
#dropMenu {min-width: 720px;}
}
@media (min-width: 880px)
{
#dropMenu {min-width: 850px;}
.lib-menu-lg .lib-list-bg .list-menu-item {max-width: 50%;}
#dropMenu.lib-menu-lg[data-filter] .list-menu-item {max-width: 25%;}
}
@media (min-width: 1000px)
{
#dropMenu {min-width: 960px;}
#dropMenu .lib-list-bg .list-menu-item {max-width: 50%;}
#dropMenu.lib-menu-lg[data-filter] .list-menu-item {max-width: 20%;}
}
@media (min-width: 1120px)
{
#dropMenu {min-width: 1080px;}
#dropMenu .list-menu-item {max-width: 50%;}
#dropMenu .lib-list-bg .list-menu-item {max-width: 33.33333333%;}
#dropMenu.lib-menu-lg[data-filter] .list-menu-item {max-width: 16.666667%;}
}
@media (min-width: 1240px)
{
#dropMenu {min-width: 1200px;}
#dropMenu.lib-menu-lg[data-filter] .list-menu-item {max-width: 12.5%;}
}
@media (min-width: 1360px)
{
#dropMenu {min-width: 1320px;}
#dropMenu .lib-list-bg .list-menu-item {max-width: 25%;}
#dropMenu.lib-menu-lg[data-filter] .list-menu-item {max-width: 10%;}
}
@media (min-width: 1480px)
{
#dropMenu {min-width: 1340px;}
#dropMenu .list-menu-item {max-width: 33.3333333%;}
#dropMenu .lib-list-bg .list-menu-item {max-width: 20%;}
}
@media (min-width: 1600px)
{
#dropMenu {min-width: 1460px;}
#dropMenu .list-menu-item {max-width: 25%;}
#dropMenu.lib-menu-lg[data-filter] .list-menu-item {max-width: 8.333333%;}
}
.files-grid .col {width: 167px; text-align: center; padding: 0; margin-bottom: 10px;}
.files-grid .actions {position: absolute; bottom: -30px; left: 0; right: 0; background: #E9F2FB; z-index: 10; opacity: 0; transition: opacity .2s; padding-bottom: 8px;}
.files-grid .col:hover .actions {opacity: 1;}
.files-grid .file {padding: 10px; cursor: pointer; display: block; border-radius: 2px;}
.files-grid .col:hover .file {background-color: #E9F2FB;}
.files-grid .file-icon {font-size: 54px; width: 64px; height: 64px; display: block; margin: 0 auto 8px; line-height: 64px;}
.files-grid .file-name,
.files-grid .file-info {text-overflow: ellipsis; white-space: nowrap; overflow: hidden;}
.files-grid .file-info {font-size: 12px; margin-top: 3px;}
.files-grid .icon-folder {background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI1MnB4IiBoZWlnaHQ9IjQ2cHgiIHZpZXdCb3g9IjAgMCA1MiA0NiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gICAgICAgIDx0aXRsZT5pY29uLWJpZy1mb2xkZXJpY29uLWJpZy1mb2xkZXI8L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJ3ZWItbWF4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTA5NS4wMDAwMDAsIC02OTUuMDAwMDAwKSI+ICAgICAgICAgICAgPGcgaWQ9Ijgt5paH5qGjIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDkwLjAwMDAwMCwgNTgzLjAwMDAwMCkiPiAgICAgICAgICAgICAgICA8ZyBpZD0iaWNvbi1iaWctZm9sZGVyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjAwMDAwMCwgMTEyLjAwMDAwMCkiPiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIxLjA0NTY4OTEsNC4yNzAyMzU0MiBDMjEuOTYxODA1OSw1LjEwNzIwMzY1IDIzLjAyMjcwMDQsNS41NTc5NjY1OSAyNC4zNjg4OTQ0LDUuNTI1MDEyMTggTDI2LjE2MDIzOCw1LjUyNTAxMjE4IEwzMC44MTIxMDExLDUuNTI1MDEyMTggQzI5LjYwMDkxMDksNS41MjUwMTIxOCAyOC40Mzg1MTg2LDUuMDM1NzUxMTMgMjcuNTc3MDQ3LDQuMTg1ODk1OTMgTDI0LjY3ODE1NjYsMS4zMjY0MDI3MSBDMjMuODE2NTgwOCwwLjQ3NjU0NzUxMSAyMi42NTQyOTI3LDAgMjEuNDQzMTAyNSwwIEwxNS4xMTQ5MDQ2LDAgTDE1LDAgQzE2LjIyNjg2NzksMC4wMzk0MzcwODA1IDE3LjMwMjA1NTcsMC41NTY4NjUwODcgMTguMTYzNTI3MywxLjQwNjYxNjIyIEwyMS4wNDU2ODkxLDQuMjcwMjM1NDIgWiIgaWQ9IlNoYXBlLUNvcHktNyIgZmlsbD0iI0ZGQzg1QSI+PC9wYXRoPiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQ5LjMxMDMyMDMsNS41MjAwMjkxOCBMMzguNTUxNzAzMSw1LjUyMDAyOTE4IEwzNi44MDY4NTk0LDUuNTIwMDI5MTggTDMyLjI3NTc1LDUuNTIwMDI5MTggTDMwLjUzMDkwNjMsNS41MjAwMjkxOCBMMjYsNS41MjAwMjkxOCBMMjQuMjU1MTU2Miw1LjUyMDAyOTE4IEMyMy4wNzU0MDYzLDUuNTIwMDI5MTggMjEuOTQzMTg3NSw1LjA0MjgxMzM1IDIxLjEwNDA3ODEsNC4xOTE3NjYzIEwxOC4yODA0Mzc1LDEuMzI4MjYyODggQzE3LjQ0MTIyNjYsMC40NzcyMTU4MjkgMTYuMzA5MTA5NCwwIDE1LjEyOTM1OTQsMCBMOC45NjU1MzEyNSwwIEwyLjY4OTY3OTY5LDAgQzEuMjA0MjI2NTYsNy40MDUxNTkyM2UtMTYgMCwxLjIzNTcxNjk5IDAsMi43NjAwMTQ1OSBMMCw4LjI4MDA0Mzc3IEwwLDkuMjAwMDgzMzcgTDAsNDMuMjM5OTg1NCBDMCw0NC43NjQyODMgMS4yMDQyMjY1Niw0NiAyLjY4OTY3OTY5LDQ2IEw0OS4zMTAzMjAzLDQ2IEM1MC43OTU3NzM0LDQ2IDUyLDQ0Ljc2NDI4MyA1Miw0My4yMzk5ODU0IEw1Miw4LjI4MDA0Mzc3IEM1Miw2Ljc1NTY0MTk1IDUwLjc5NTc3MzQsNS41MjAwMjkxOCA0OS4zMTAzMjAzLDUuNTIwMDI5MTggTDQ5LjMxMDMyMDMsNS41MjAwMjkxOCBaIiBpZD0iU2hhcGUtQ29weS04IiBmaWxsPSIjRkZFMDY2Ij48L3BhdGg+ICAgICAgICAgICAgICAgIDwvZz4gICAgICAgICAgICA8L2c+ICAgICAgICA8L2c+ICAgIDwvZz48L3N2Zz4=) no-repeat center;}
-1
View File
@@ -25,7 +25,6 @@ function setBrowseType(type)
$(function(){
$('#' + browseType + 'Tab').addClass('active');
if(fixedMenu) $('#modulemenu .nav li[data-id="custom' + libID + '"]').addClass('active');
if(browseType == "bysearch")
{
ajaxGetSearchForm();
+122 -208
View File
@@ -1,207 +1,3 @@
function showLibMenu()
{
var $item = $('#currentItem');
var $li = $item.closest('li');
var $menu = $('#dropMenu');
if($li.hasClass('show')) {$li.removeClass('show'); return;}
var $search = $('#searchLib');
if(!$li.data('showagain'))
{
$menu.addClass('loading');
var isBigMode = false;
var items = {};
var itemIdSeed = $.zui.uuid();
var orderSeed = 1;
$.getJSON(createLink('doc', 'ajaxGetAllLibs'), function(data)
{
$menu.removeClass('loading');
var $list = $('#libMenuProductGroup > .lib-menu-list');
var productCount = 0, projectCount = 0, customCount = 0;
$.each(data.product, function(idx, product)
{
$list.append('<div class="list-menu-item-heading" data-status="' + product.status + '" data-product="' + product.id + '">[ ' + product.name + ' ]</div>');
$.each(product.libs, function(libId, libName)
{
var url = libId === 'files' ? createLink('doc', 'showFiles', 'type=product&objectID=' + product.id) : createLink('doc', 'browse', 'libID=' + libId);
var url = libId === 'project' ? createLink('doc', 'allLibs', 'type=project&extra=' + product.id) : url;
var itemId = 'lib-' + itemIdSeed++;
$list.append('<a data-order="' + (orderSeed++) + '" data-status="' + product.status + '" title="' + product.name + '/' + libName + '" id="' + itemId + '" href="' + url + '" class="list-menu-item" data-type="product" data-product="' + product.id + '" data-id="' + libId + '">' + libName + '</a>');
items[itemId] = {type: 'product', id: libId, name: libName, objectId: product.id, product: product.name, search: (libName + ' ' + product.name).toLowerCase()};
productCount++;
});
$list.append('<div class="list-menu-item-footer" data-status="' + product.status + '" data-product="' + product.id + '"></div>');
});
$list.toggleClass('lib-list-bg', productCount > 4);
$list = $('#libMenuProjectGroup > .lib-menu-list');
$.each(data.project, function(idx, project)
{
$list.append('<div class="list-menu-item-heading" data-status="' + project.status + '" data-project="' + project.id + '">[ ' + project.name + ' ]</div>');
$.each(project.libs, function(libId, libName)
{
var url = libId === 'files' ? createLink('doc', 'showFiles', 'type=project&objectID=' + project.id) : createLink('doc', 'browse', 'libID=' + libId);
var itemId = 'lib-' + itemIdSeed++;
$list.append('<a data-order="' + (orderSeed++) + '" data-status="' + project.status + '" title="' + project.name + '/' + libName + '" id="' + itemId + '" href="' + url + '" class="list-menu-item" data-type="project" data-project="' + project.id + '" data-id="' + libId + '">' + libName + '</a>');
items[itemId] = {type: 'project', id: libId, name: libName, objectId: project.id, project: project.name, search: (libName + ' ' + project.name).toLowerCase()};
projectCount++;
});
$list.append('<div class="list-menu-item-footer" data-status="' + project.status + '" data-project="' + project.id + '"></div>');
});
$list.find('[data-status="done"]').addClass('hidden');
$list.toggleClass('lib-list-bg', projectCount > 4);
$list = $('#libMenuCustomGroup > .lib-menu-list');
$.each(data.custom, function(libId, libName)
{
var url = createLink('doc', 'browse', 'libID=' + libId);
var itemId = 'lib-' + itemIdSeed++;
$list.append('<a data-order="' + (orderSeed++) + '" title="' + libName + '" id="' + itemId + '" href="' + url + '" class="list-menu-item" data-type="custom" data-id="' + libId + '">' + libName + '</a>');
items[itemId] = {type: 'custom', id: libId, name: libName, search: libName.toLowerCase()};
customCount++;
});
$list.toggleClass('lib-list-bg', customCount > 4);
var $items = $menu.find('.list-menu-item');
$items.filter('[data-id="' + $item.data('libId') + '"]').addClass('current');
$items.first().addClass('active');
$menu.toggleClass('lib-menu-lg', productCount > 9 || projectCount > 9 || customCount > 9);
var lastSearchKey = $search.val();
$search.on('change keyup paste input propertychange', function()
{
var searchKey = $search.val();
if(searchKey == lastSearchKey) return;
lastSearchKey = searchKey;
$menu.find('.list-menu-item.active').removeClass('active');
if(searchKey)
{
var $menuHeadings = $menu.find('.list-menu-item-heading').addClass('hidden');
var $menuFooters = $menu.find('.list-menu-item-footer').addClass('hidden');
searchKey = searchKey.toLowerCase();
$.each(items, function(itemId, item)
{
var isMatch = item.search.indexOf(searchKey) > -1 || '@' + item.type === searchKey || item.id === searchKey;
$('#' + itemId).toggleClass('hidden', !isMatch);
if(isMatch && item.type !== 'custom' && item.objectId)
{
$menuHeadings.filter('[data-' + item.type + '="' + item.objectId + '"]').removeClass('hidden');
$menuFooters.filter('[data-' + item.type + '="' + item.objectId + '"]').removeClass('hidden');
}
});
}
else
{
$menu.find('.list-menu-item.hidden,.list-menu-item-heading.hidden,.list-menu-item-footer.hidden').removeClass('hidden');
var hasActive = ($('.lib-menu-project-done').hasClass('active'));
if(hasActive)
{
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status!="done"]').addClass('hidden');
}
else
{
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status="done"]').addClass('hidden');
}
}
$menu.find('.list-menu-item:not(.hidden)').first().addClass('active');
}).on('keydown', function(e)
{
$items = $menu.find('.list-menu-item');
var code = e.which;
var $this = $items.filter('.list-menu-item.active');
if(code === 38) // up
{
$this.removeClass('active');
if($this.length)
{
var order = $this.data('order') - 1;
if(order > 0)
{
var $prev = $items.filter('.list-menu-item[data-order="' + order + '"]');
while($prev.hasClass('hidden') && order > 1)
{
order -= 1;
$prev = $items.filter('.list-menu-item[data-order="' + order + '"]');
}
if($prev.length)
{
$prev.addClass('active');
return;
}
}
}
$items.last(':not(.hidden)').addClass('active');
}
else if(code === 40) // down
{
$this.removeClass('active');
if($this.length)
{
var order = $this.data('order') + 1;
if(order <= $items.length)
{
var $next = $items.filter('.list-menu-item[data-order="' + order + '"]');
while($next.hasClass('hidden') && order <= $items.length)
{
order += 1;
$next = $items.filter('.list-menu-item[data-order="' + order + '"]');
}
if($next.length)
{
$next.addClass('active');
return;
}
}
}
$items.first(':not(.hidden)').addClass('active');
}
else if(code === 13) // enter
{
if($this.length) window.location.href = $this.attr('href');
}
});
$menu.on('mouseenter', '.list-menu-item', function()
{
$menu.find('.list-menu-item.active').removeClass('active');
$(this).addClass('active');
});
$menu.on('click', '.lib-menu-list-heading', function()
{
var libType = $(this).data('type');
var showFilter = $menu.attr('data-filter') != libType;
$menu.attr('data-filter', showFilter ? libType : null);
});
$menu.on('click', '.lib-menu-project-done', function()
{
var hasActive = ($(this).hasClass('active'));
if(hasActive)
{
$(this).removeClass('active');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status!="done"]').removeClass('hidden');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status="done"]').addClass('hidden');
}
else
{
$(this).addClass('active');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status!="done"]').addClass('hidden');
$('#libMenuProjectGroup > .lib-menu-list').find('[data-status="done"]').removeClass('hidden');
}
});
});
$li.data('showagain', true);
$li.on('click', function(e){e.stopPropagation();});
$(document).click(function(){$li.removeClass('show');});
}
$menu.find('.lib-menu-list').css('max-height', $(window).height() - 210);
$li.addClass('show');
$search.focus();
}
function loadModules(libID)
{
link = createLink('doc', 'ajaxGetModules', 'libID=' + libID);
@@ -222,10 +18,6 @@ function toggleAcl(acl)
$(document).ready(function()
{
$('[data-id="create"] a[href*=doc][href*=createLib]').modalTrigger({type: 'iframe', width: 800});
$('#modulemenu .nav li').removeClass('active');
if(typeof(type) != 'undefined') $('#modulemenu .nav li[data-id="' + type + '"]').addClass('active');
$('.libs-group.sort').sortable(
{
trigger: '.lib',
@@ -255,4 +47,126 @@ $(document).ready(function()
}
});
'use strict';
var NAME = 'zui.splitRow'; // model name
// File input list
// The SplitRow model class
var SplitRow = function(element, options)
{
var that = this;
that.name = NAME;
var $element = that.$ = $(element);
options = that.options = $.extend({}, SplitRow.DEFAULTS, this.$.data(), options);
var id = options.id || $element.attr('id') || $.zui.uuid();
var $cols = $element.children('.side-col,.main-col');
var $firstCol = $cols.first();
var $secondCol = $cols.eq(1);
var $spliter = $firstCol.next('.col-spliter');
if (!$spliter.length)
{
$spliter = $(options.spliter);
if (!$spliter.parent().length)
{
$spliter.insertAfter($firstCol);
}
}
var spliterWidth = $spliter.width();
var minFirstColWidth = $firstCol.data('minWidth');
var minSecondColWidth = $secondCol.data('minWidth');
var setFirstColWidth = function(width)
{
var rowWidth = $element.width();
var maxFirstWidth = rowWidth - minSecondColWidth - spliterWidth;
width = Math.max(minFirstColWidth, Math.min(width, maxFirstWidth));
$firstCol.width(width);
$.zui.store.set('splitRowFirstSize:' + id, width);
};
var defaultWidth = $.zui.store.get('splitRowFirstSize:' + id);
if (defaultWidth) setFirstColWidth(defaultWidth);
var documentEventName = '.' + id;
var mouseDownX, isMouseDown, startFirstWidth;
$spliter.on('mousedown', function(e)
{
startFirstWidth = $firstCol.width();
mouseDownX = e.pageX;
isMouseDown = true;
$element.addClass('row-spliting');
e.preventDefault();
$(document).on('mousemove' + documentEventName, function(e)
{
if (isMouseDown)
{
var deltaX = e.pageX - mouseDownX;
setFirstColWidth(startFirstWidth + deltaX);
e.preventDefault();
} else {
$(document).off(documentEventName);
$element.removeClass('row-spliting');
}
}).on('mouseup' + documentEventName + ' mouseleave' + documentEventName, function(e)
{
isMouseDown = false;
$(document).off(documentEventName);
$element.removeClass('row-spliting');
});
});
var fixColClass = function($col)
{
if (options.smallSize) $col.toggleClass('col-sm-size', $col.width() < options.smallSize);
if (options.middleSize) $col.toggleClass('col-md-size', $col.width() < options.middleSize);
};
var resizeCols = function() {
var $cells = $cols.children('.panel,.cell').height('auto');
var bestHeight = $firstCol.height();
$cells.css('height', bestHeight);
};
$element.find('.tree').on('resize', resizeCols);
$firstCol.on('resize', function(e) {fixColClass($firstCol);});
$secondCol.on('resize', function(e) {fixColClass($secondCol);});
fixColClass($firstCol);
fixColClass($secondCol);
resizeCols();
};
// default options
SplitRow.DEFAULTS =
{
spliter: '<div class="col-spliter"></div>',
smallSize: 700,
middleSize: 850
};
// Extense jquery element
$.fn.splitRow = function(option)
{
return this.each(function()
{
var $this = $(this);
var data = $this.data(NAME);
var options = typeof option == 'object' && option;
if(!data) $this.data(NAME, (data = new SplitRow(this, options)));
});
};
SplitRow.NAME = NAME;
$.fn.splitRow.Constructor = SplitRow;
// Auto call splitRow after document load complete
$(function()
{
$('.split-row').splitRow();
});
$('#main').addClass('in');
});
+6 -3
View File
@@ -43,6 +43,7 @@ $lang->doc->download = '下载';
$lang->doc->acl = '权限';
$lang->doc->groups = '分组';
$lang->doc->users = '用户';
$lang->doc->item = '项';
$lang->doc->moduleDoc = '按模块浏览';
$lang->doc->searchDoc = '搜索';
@@ -71,6 +72,7 @@ $lang->doc->editType = '编辑分类';
$lang->doc->deleteType = '删除分类';
$lang->doc->addType = '增加分类';
$lang->doc->childType = '子分类';
$lang->doc->collect = '收藏';
$lang->doc->libName = '文档库名称';
$lang->doc->libType = '文档库类型';
@@ -115,9 +117,7 @@ $lang->doc->contentTypeList['markdown'] = 'MarkDown';
$lang->doc->browseType = '浏览方式';
$lang->doc->browseTypeList['list'] = '列表';
$lang->doc->browseTypeList['menu'] = '目录';
$lang->doc->browseTypeList['tree'] = '树状图';
$lang->doc->browseTypeList['card'] = '卡片';
$lang->doc->browseTypeList['grid'] = '目录';
$lang->doc->fastMenuList['byediteddate'] = '最近更新';
$lang->doc->fastMenuList['visiteddate'] = '最近访问';
@@ -129,6 +129,9 @@ $lang->doc->fastMenuIconList['visiteddate'] = 'icon-folder-move';
$lang->doc->fastMenuIconList['openedbyme'] = 'icon-folder-account';
$lang->doc->fastMenuIconList['collectedbyme'] = 'icon-folder-star';
$lang->doc->customObjectLibs['files'] = '是否显示附件库';
$lang->doc->customObjectLibs['customFiles'] = '是否显示自定义文件';
$lang->doc->confirmDelete = "您确定删除该文档吗?";
$lang->doc->confirmDeleteLib = "您确定删除该文档库吗?";
$lang->doc->errorEditSystemDoc = "系统文档库无需修改。";
+111 -56
View File
@@ -54,7 +54,7 @@ class docModel extends model
{
if($key == 'editedDate' or $key == 'visitedDate')
{
$link = helper::createLink('doc', 'browse', "libID=0&browseTyp=bymenu&module=0&orderBy={$key}_desc");
$link = helper::createLink('doc', 'browse', "libID=0&browseTyp=bygrid&module=0&orderBy={$key}_desc");
}
else
{
@@ -70,53 +70,55 @@ class docModel extends model
if(strpos('product,project,custom', $type) !== false)
{
$allLibGroups = $this->getAllLibGroups();
$currentGroups = $allLibGroups[$type];
if($type == 'custom') $currentLib = $libID ? $libID : key($currentGroups);
if($type == 'product') $currentLib = $productID ? $productID : key($currentGroups);
if($type == 'project') $currentLib = $projectID ? $projectID : key($currentGroups);
$selectHtml .= "<div class='btn-group angle-btn'>";
$selectHtml .= "<div class='btn-group'>";
$selectHtml .= '<a data-toggle="dropdown" class="btn">' . (is_array($currentGroups[$currentLib]) ? $currentGroups[$currentLib]['name'] : $currentGroups[$currentLib]) . ' <span class="caret"></span></a>';
$selectHtml .='<ul class="dropdown-menu">';
if($type == 'custom')
if($type == 'custom') $currentLib = $libID;
if($type == 'product') $currentLib = $productID;
if($type == 'project') $currentLib = $projectID;
if($currentLib)
{
foreach($currentGroups as $groupID => $groupName)
{
if($type == 'custom')
{
$link = helper::createLink('doc', 'browse', "libID=$groupID");
$icon = 'icon-folder-o';
}
elseif($type == 'product')
{
$link = helper::createLink('doc', 'objectLibs', "type=product&objectID=$groupID");
$icon = 'icon-cube';
}
else
{
$link = helper::createLink('doc', 'objectLibs', "type=project&objectID=$groupID");
$icon = 'icon-stack';
}
$allLibGroups = $this->getAllLibGroups();
$currentGroups = $allLibGroups[$type];
$active = $currentLib == $groupID ? "class='active'" : '';
$selectHtml .= "<li $active>" . html::a(helper::createLink('doc', 'browse', "libID=$groupID"), "<i class='icon icon-folder-o'></i> {$groupName}") . '</li>';
}
}
else
{
foreach($currentGroups as $groupID => $libGroups)
$selectHtml .= "<div class='btn-group angle-btn'>";
$selectHtml .= "<div class='btn-group'>";
$selectHtml .= '<a data-toggle="dropdown" class="btn">' . (is_array($currentGroups[$currentLib]) ? $currentGroups[$currentLib]['name'] : $currentGroups[$currentLib]) . ' <span class="caret"></span></a>';
$selectHtml .='<ul class="dropdown-menu">';
if($type == 'custom')
{
$link = helper::createLink('doc', 'objectLibs', "type=$type&objectID=$groupID");
$icon = $type == 'product' ? 'icon-cube' : 'icon-stack';
foreach($currentGroups as $groupID => $groupName)
{
if($type == 'custom')
{
$link = helper::createLink('doc', 'browse', "libID=$groupID");
$icon = 'icon-folder-o';
}
elseif($type == 'product')
{
$link = helper::createLink('doc', 'objectLibs', "type=product&objectID=$groupID");
$icon = 'icon-cube';
}
else
{
$link = helper::createLink('doc', 'objectLibs', "type=project&objectID=$groupID");
$icon = 'icon-stack';
}
$active = $currentLib == $groupID ? "class='active'" : '';
$selectHtml .= "<li $active>" . html::a($link, "<i class='icon {$icon}'></i> {$libGroups['name']}") . '</li>';
$active = $currentLib == $groupID ? "class='active'" : '';
$selectHtml .= "<li $active>" . html::a(helper::createLink('doc', 'browse', "libID=$groupID"), "<i class='icon icon-folder-o'></i> {$groupName}") . '</li>';
}
}
else
{
foreach($currentGroups as $groupID => $libGroups)
{
$link = helper::createLink('doc', 'objectLibs', "type=$type&objectID=$groupID");
$icon = $type == 'product' ? 'icon-cube' : 'icon-stack';
$active = $currentLib == $groupID ? "class='active'" : '';
$selectHtml .= "<li $active>" . html::a($link, "<i class='icon {$icon}'></i> {$libGroups['name']}") . '</li>';
}
}
$selectHtml .= '</ul></div></div>';
}
$selectHtml .= '</ul></div></div>';
}
$actions = '';
@@ -374,13 +376,9 @@ class docModel extends model
if($moduleID) $modules = $this->loadModel('tree')->getAllChildId($moduleID);
$docs = $this->getDocs($libID, $modules, $sort, $pager);
}
elseif($browseType == "bymenu")
elseif($browseType == "bygrid")
{
$docs = $this->getDocs($libID, $moduleID, $sort, $pager);
}
elseif($browseType == 'bytree')
{
return array();
$docs = $this->getDocs($libID, 0, $sort, $pager);
}
elseif($browseType == "bysearch")
{
@@ -469,9 +467,9 @@ class docModel extends model
->where('deleted')->eq(0)
->beginIF($libID)->andWhere('lib')->in($libID)->fi()
->beginIF($module)->andWhere('module')->in($module)->fi()
->beginIF($this->cookie->browseType == 'bymenu')->andWhere('module')->in($module)->fi()
->query();
$docIdList = array();
while($doc = $stmt->fetch())
{
@@ -748,12 +746,21 @@ class docModel extends model
*/
public function getDocMenu($libID, $parent, $orderBy = 'name_asc')
{
return $this->dao->select('*')->from(TABLE_MODULE)->where('root')->eq($libID)
$modules = $this->dao->select('*')->from(TABLE_MODULE)->where('root')->eq($libID)
->andWhere('type')->eq('doc')
->andWhere('parent')->eq($parent)
->andWhere('deleted')->eq(0)
->orderBy($orderBy)
->fetchAll('id');
$docCounts= $this->dao->select("module, count(id) as docCount")->from(TABLE_DOC)
->where('module')->in(array_keys($modules))
->groupBy('module')
->fetchPairs();
foreach($modules as $moduleID => $module) $modules[$moduleID]->docCount = isset($docCounts[$moduleID]) ? $docCounts[$moduleID] : 0;
return $modules;
}
/**
@@ -1073,7 +1080,7 @@ class docModel extends model
public function getLibsByObject($type, $objectID, $mode = '')
{
if($type != 'product' and $type != 'project') return false;
$objectLibs = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere($type)->eq($objectID)->orderBy('`order`, id')->fetchAll('id');
$objectLibs = $this->dao->select('*')->from(TABLE_DOCLIB)->where('deleted')->eq(0)->andWhere($type)->eq($objectID)->orderBy('`order`, id')->fetchAll('id');
if($type == 'product')
{
if($this->config->global->flow == 'onlyStory' or $this->config->global->flow == 'onlyTest')
@@ -1082,28 +1089,76 @@ class docModel extends model
}
else
{
$hasProject = $this->dao->select('DISTINCT product')->from(TABLE_PROJECTPRODUCT)->alias('t1')
$hasProject = $this->dao->select('DISTINCT product, count(project) as projectCount')->from(TABLE_PROJECTPRODUCT)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
->where('t1.product')->eq($objectID)
->andWhere('t2.deleted')->eq(0)
->fetchPairs('product', 'product');
->groupBy('product')
->fetchPairs('product', 'projectCount');
}
}
$libs = array();
foreach($objectLibs as $lib)
{
if($this->checkPriv($lib)) $libs[$lib->id] = $lib->name;
if($this->checkPriv($lib)) $libs[$lib->id] = $lib;
}
$itemCounts = $this->statLibCounts(array_keys($libs));
foreach($libs as $libID => $lib) $libs[$libID]->allCount = $itemCounts[$libID];
if(strpos($mode, 'onlylib') === false)
{
if($type == 'product' and isset($hasProject[$objectID]) and common::hasPriv('doc', 'allLibs')) $libs['project'] = $this->lang->doclib->project;
if(common::hasPriv('doc', 'showFiles')) $libs['files'] = $this->lang->doclib->files;
if($type == 'product' and isset($hasProject[$objectID]) and common::hasPriv('doc', 'allLibs'))
{
$libs['project'] = new stdclass();
$libs['project']->name = $this->lang->doclib->project;
$libs['project']->allCount = $hasProject[$objectID];
}
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;
}
/**
* Stat module and document counts of lib.
*
* @param array $idList
* @access public
* @return array
*/
public function statLibCounts($idList)
{
$moduleCounts= $this->dao->select("root, count(id) as moduleCount")->from(TABLE_MODULE)
->where('type')->eq('doc')
->andWhere('root')->in($idList)
->andWhere('deleted')->eq(0)
->groupBy('root')
->fetchPairs();
$docCounts= $this->dao->select("lib, count(id) as docCount")->from(TABLE_DOC)
->where('lib')->in($idList)
->andWhere('deleted')->eq(0)
->groupBy('lib')
->fetchPairs();
$itemCounts = array();
foreach($idList as $libID)
{
$docCount = isset($docCounts[$libID]) ? $docCounts[$libID] : 0;
$moduleCount = isset($moduleCounts[$libID]) ? $moduleCounts[$libID] : 0;
$itemCounts[$libID] = $docCount + $moduleCount;
}
return $itemCounts;
}
/**
* Get lib files.
*
+38 -56
View File
@@ -11,65 +11,47 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='libs'>
<?php if(($type == 'project' or $type == 'product')):?>
<div class='row'>
<?php foreach($libs as $lib):?>
<?php if(isset($subLibs[$lib->id])): ?>
<div class='col-md-3'>
<?php
$i = 0;
$subLibCount = count($subLibs[$lib->id]);
?>
<div class='libs-group-heading libs-<?php echo $type?>-heading'>
<?php
echo html::a(inlink('objectLibs', "type=$type&objectID=$lib->id&from=doc"), $lib->name, '', "title='{$lib->name}'");
if($subLibCount > 3) echo html::a(inlink('objectLibs', "type=$type&objectID=$lib->id&from=doc"), "{$lang->more}<i class='icon icon-double-angle-right'></i>", '', "title='{$lang->more}' class='pull-right'");
?>
<div class="main-row split-row" id="mainRow">
<?php include './side.html.php';?>
<div class="main-col" data-min-width="400">
<div class="panel block-files block-sm no-margin">
<div class="panel-heading">
<div class="panel-title font-normal">
<?php if($type == 'custom') $panelTitle = $lang->doc->custom;?>
<?php if($type == 'product') $panelTitle = $lang->productCommon;?>
<?php if($type == 'project') $panelTitle = $lang->projectCommon;?>
<i class="icon icon-folder-open-o text-muted"></i> <?php echo $panelTitle;?>
</div>
</div>
<div class='libs-group clearfix'>
<?php
$widthClass = 'w-lib-p100';
if($subLibCount == 2) $widthClass = 'w-lib-p50';
if($subLibCount >= 3) $widthClass = 'w-lib-p33';
?>
<?php foreach($subLibs[$lib->id] as $subLibID => $subLibName):?>
<?php
if($subLibID == 'project') $libLink = inlink('allLibs', "type=project&product=$lib->id");
elseif($subLibID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$lib->id");
else $libLink = inlink('browse', "libID=$subLibID");
?>
<a class='lib <?php echo $widthClass?>' title='<?php echo $subLibName?>' href='<?php echo $libLink ?>'>
<img src='<?php echo $config->webRoot . 'theme/default/images/main/doc-lib.png'?>' class='file-icon' />
<div class='lib-name' title='<?php echo $subLibName?>'><?php echo $subLibName?></div>
</a>
<?php if($i >= 2) break;?>
<?php $i++;?>
<?php endforeach; ?>
<div class="panel-body">
<div class="row row-grid files-grid" data-size="300">
<?php if($type == 'product') $icon = 'icon-cube text-secondary';?>
<?php if($type == 'project') $icon = 'icon-stack text-green';?>
<?php if($type == 'custom') $icon = 'icon-folder text-yellow';?>
<?php foreach($libs as $lib):?>
<?php $link = $type != 'custom' ? $this->createLink('doc', 'objectLibs', "type=$type&objectID=$lib->id") : $this->createLink('doc', 'browse', "libID=$lib->id");?>
<div class="col">
<a class="file" href="<?php echo $link;?>">
<i class="file-icon icon <?php echo $icon;?>"></i>
<div class="file-name"><?php echo $lib->name;?></div>
<?php if($type == 'custom'):?>
<div class="text-primary file-info"><?php echo $itemCounts[$lib->id] . $lang->doc->item;?></div>
<?php else:?>
<div class="text-primary file-info"><?php echo count($subLibs[$lib->id]) . $lang->doc->item;?></div>
<?php endif;?>
</a>
<?php if($type == 'custom'):?>
<div class="actions">
<?php common::printLink('doc', 'collect', "objectID=$lib->id&objectType=lib", "<i class='icon icon-star-empty'></i>", '', "title='{$lang->doc->collect}' class='btn btn-link'")?>
<?php common::printLink('doc', 'editLib', "libID=$lib->id", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link' data-toggle='modal'")?>
<?php common::printLink('doc', 'deleteLib', "libID=$lib->id", "<i class='icon icon-trash'></i>", '', "title='{$lang->delete}' class='btn btn-link'")?>
</div>
<?php endif;?>
</div>
<?php endforeach;?>
</div>
</div>
</div>
<?php endif; ?>
<?php endforeach; ?>
</div>
<?php elseif($libs): ?>
<div class='clearfix libs-group libs-custom <?php if(common::hasPriv('doc', 'sort')) echo 'sort'?>'>
<?php foreach($libs as $lib):?>
<a class='lib lib-custom' title='<?php echo $lib->name?>' href='<?php echo inlink('browse', "libID=$lib->id") ?>' data-id='<?php echo $lib->id;?>'>
<?php if(common::hasPriv('doc', 'sort')):?>
<i class='icon icon-move'></i>
<?php endif;?>
<img src='<?php echo $config->webRoot . 'theme/default/images/main/doc-lib.png'?>' class='file-icon' />
<div class='lib-name' title='<?php echo $lib->name?>'><?php echo $lib->name?></div>
</a>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
<div class='clearfix pager-wrapper'><?php $pager->show();?></div>
<script>
$(function()
{
$('#libs').css('min-height', $('.outer').height() - $('#featurebar').height() - 60);
})
</script>
<?php include '../../common/view/footer.html.php';?>
+64 -87
View File
@@ -16,96 +16,73 @@
var browseType = '<?php echo $browseType;?>';
</script>
<?php js::set('confirmDelete', $lang->doc->confirmDelete)?>
<?php js::set('fixedMenu', $fixedMenu);?>
<?php js::set('libID', $libID);?>
<?php if(!$fixedMenu and $this->from != 'doc') js::set('type', 'doc');?>
<?php if($this->cookie->browseType == 'bymenu'):?>
<?php include dirname(__FILE__) . '/browsebymenu.html.php';?>
<?php elseif($this->cookie->browseType == 'bytree'):?>
<?php include dirname(__FILE__) . '/browsebytree.html.php';?>
<?php else:?>
<div id='featurebar'>
<ul class='nav'>
<li id='allTab'><?php echo html::a(inlink('browse', "libID=$libID&browseType=all&param=0&orderBy=$orderBy&from=$from"), $lang->doc->allDoc)?></li>
<li id='openedbymeTab'><?php echo html::a(inlink('browse', "libID=$libID&browseType=openedByMe&param=0&orderBy=$orderBy&from=$from"), $lang->doc->openedByMe)?></li>
<li id='bysearchTab'><a href='#'><i class='icon-search icon'></i>&nbsp;<?php echo $lang->doc->searchDoc;?></a></li>
</ul>
<div class='actions'>
<div class="btn-group">
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown"><i class='icon icon-list'></i> <?php echo $lang->doc->browseTypeList['list']?> <span class="caret"></span></button>
<ul class="dropdown-menu" role="menu">
<li><?php echo html::a('javascript:setBrowseType("bylist")', "<i class='icon icon-list'></i> {$lang->doc->browseTypeList['list']}");?></li>
<li><?php echo html::a('javascript:setBrowseType("bymenu")', "<i class='icon icon-th'></i> {$lang->doc->browseTypeList['menu']}");?></li>
<li><?php echo html::a('javascript:setBrowseType("bytree")', "<i class='icon icon-branch'></i> {$lang->doc->browseTypeList['tree']}");?></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown"><i class='icon icon-cog'></i> <?php echo $lang->actions?> <span class="caret"></span></button>
<ul class="dropdown-menu" role="menu">
<?php
if(common::hasPriv('doc', 'editLib')) echo '<li>' . html::a(inlink('editLib', "rootID=$libID"), $lang->doc->editLib, '', "data-toggle='modal' data-type='iframe' data-width='800px'") . '</li>';
if(common::hasPriv('doc', 'deleteLib')) echo '<li>' . html::a(inlink('deleteLib', "rootID=$libID"), $lang->doc->deleteLib, 'hiddenwin') . '</li>';
?>
<li><?php echo html::a(inlink('ajaxFixedMenu', "libID=$libID&type=" . ($fixedMenu ? 'remove' : 'fixed')), $fixedMenu ? $lang->doc->removeMenu : $lang->doc->fixedMenu, "hiddenwin");?></li>
</ul>
</div>
<?php common::printIcon('doc', 'create', "libID=$libID&moduleID=$moduleID");?>
</div>
<div id='querybox' class='<?php if($browseType == 'bysearch') echo 'show';?>'></div>
</div>
<div class='side' id='treebox'>
<a class='side-handle' data-id='treebox'><i class='icon-caret-left'></i></a>
<div class='side-body'>
<div class='panel panel-sm'>
<div class='panel-heading nobr'><?php echo html::icon('folder-close-alt');?> <strong><?php echo $libName;?></strong></div>
<div class='panel-body'>
<?php echo $moduleTree;?>
<div class='text-right'><?php common::printLink('tree', 'browse', "rootID=$libID&view=doc", $lang->doc->manageType);?></div>
<?php if($this->from != 'doc') js::set('type', 'doc');?>
<div class='main-row split-row' id='mainRow'>
<?php include './side.html.php';?>
<?php if($this->cookie->browseType == 'bygrid'):?>
<?php include dirname(__FILE__) . '/browsebygrid.html.php';?>
<?php else:?>
<div class="main-col" data-min-width="400">
<div class="panel block-files block-sm no-margin">
<div class="panel-heading">
<div class="panel-title font-normal"><i class="icon icon-folder-open-o text-muted"></i> <?php echo $title;?></div>
<nav class="panel-actions btn-toolbar">
<div class="btn-group">
<?php echo html::a('javascript:setBrowseType("bylist")', "<i class='icon icon-bars'></i>", '', "title='{$lang->doc->browseTypeList['list']}' class='btn btn-gray btn-icon text-primary'");?>
<?php echo html::a('javascript:setBrowseType("bygrid")', "<i class='icon icon-cards-view'></i>", '', "title='{$lang->doc->browseTypeList['grid']}' class='btn btn-gray btn-icon'");?>
</div>
</nav>
</div>
<div class="panel-body has-table">
<table class="table table-borderless table-hover table-files">
<thead>
<tr class="muted">
<th class="c-name"><?php echo $lang->doc->title;?></th>
<th class="c-actions"></th>
<th class="c-num"><?php echo $lang->doc->size;?></th>
<th class="c-user"><?php echo $lang->doc->addedBy;?></th>
<th class="c-datetime"><?php echo $lang->doc->addedDate;?></th>
<th class="c-datetime"><?php echo $lang->doc->editedDate;?></th>
</tr>
</thead>
<tbody>
<?php if(isset($modules)):?>
<?php foreach($modules as $module):?>
<?php $star = strpos($module->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
<tr>
<td class="c-name"><?php echo html::a(inlink('browse', "libID=$libID&browseType=bymodule&param=$module->id&orderBy=$orderBy&from=$from"), "<i class='icon icon-folder text-yellow'></i> &nbsp;" . $module->name);?></td>
<td class="c-actions">
<?php common::printLink('doc', 'collect', "objectID=$module->id&objectType=module", "<i class='icon {$star}'></i>", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
</td>
<td class="c-num"></td>
<td class="c-user"></td>
<td class="c-datetime"></td>
<td class="c-datetime"></td>
</tr>
<?php endforeach;?>
<?php endif;?>
<?php foreach($docs as $doc):?>
<?php $star = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
<tr>
<td class="c-name"><?php echo html::a(inlink('view', "docID=$doc->id"), "<i class='icon icon-file-text text-muted'></i> &nbsp;" . $doc->title);?></td>
<td class="c-actions">
<?php common::printLink('doc', 'collect', "objectID=$doc->id&objectType=doc", "<i class='icon {$star}'></i>", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
<?php common::printLink('doc', 'edit', "docID=$doc->id", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link'")?>
<?php common::printLink('doc', 'delete', "docID=$doc->id", "<i class='icon icon-trash'></i>", '', "title='{$lang->delete}' class='btn btn-link'")?>
</td>
<td class="c-num"></td>
<td class="c-user"><?php echo zget($users, $doc->addedBy);?></td>
<td class="c-datetime"><?php echo formatTime($doc->addedDate, 'm-d h:i');?></td>
<td class="c-datetime"><?php echo formatTime($doc->editedDate, 'm-d h:i');?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
</div>
</div>
</div>
<?php endif;?>
</div>
<div class='main'>
<script>setTreeBox();</script>
<table class='table table-condensed table-hover table-striped tablesorter table-fixed' id='docList'>
<thead>
<tr>
<?php $vars = "libID=$libID&browseType=$browseType&param=$param&orderBy=%s&from=$from&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
<th class='w-id'> <?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?></th>
<th> <?php common::printOrderLink('title', $orderBy, $vars, $lang->doc->title);?></th>
<th class='w-100px'><?php common::printOrderLink('addedBy', $orderBy, $vars, $lang->doc->addedBy);?></th>
<th class='w-120px'><?php common::printOrderLink('addedDate', $orderBy, $vars, $lang->doc->addedDate);?></th>
<th class='w-120px'><?php common::printOrderLink('editedDate', $orderBy, $vars, $lang->doc->editedDate);?></th>
<th class='w-100px {sorter:false}'><?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
<?php foreach($docs as $key => $doc):?>
<?php
$viewLink = $this->createLink('doc', 'view', "docID=$doc->id");
$canView = common::hasPriv('doc', 'view');
?>
<tr class='text-center'>
<td><?php if($canView) echo html::a($viewLink, sprintf('%03d', $doc->id)); else printf('%03d', $doc->id);?></td>
<td class='text-left' title="<?php echo $doc->title?>"><nobr><?php echo html::a($viewLink, $doc->title);?></nobr></td>
<td><?php isset($users[$doc->addedBy]) ? print($users[$doc->addedBy]) : print($doc->addedBy);?></td>
<td><?php echo substr($doc->addedDate, 5, 11);?></td>
<td><?php echo substr($doc->editedDate, 5, 11);?></td>
<td>
<?php
common::printIcon('doc', 'edit', "doc={$doc->id}", $doc, 'list');
if(common::hasPriv('doc', 'delete', $doc))
{
$deleteURL = $this->createLink('doc', 'delete', "docID=$doc->id&confirm=yes");
echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"docList\",confirmDelete)", '<i class="icon-remove"></i>', '', "class='btn-icon' title='{$lang->doc->delete}'");
}
?>
</td>
</tr>
<?php endforeach;?>
</tbody>
<tfoot><tr><td colspan='6'><?php $pager->show();?></td></tr></tfoot>
</table>
</div>
<?php endif;?>
<?php include '../../common/view/footer.html.php';?>
+46
View File
@@ -0,0 +1,46 @@
<div class="main-col" data-min-width="400">
<div class="panel block-files block-sm no-margin">
<div class="panel-heading">
<div class="panel-title font-normal"><i class="icon icon-folder-open-o text-muted"></i> <?php echo $title;?></div>
<nav class="panel-actions btn-toolbar">
<div class="btn-group">
<?php echo html::a('javascript:setBrowseType("bygrid")', "<i class='icon icon-cards-view'></i>", '', "title='{$lang->doc->browseTypeList['grid']}' class='btn btn-gray btn-icon'");?>
<?php echo html::a('javascript:setBrowseType("bylist")', "<i class='icon icon-bars'></i>", '', "title='{$lang->doc->browseTypeList['list']}' class='btn btn-gray btn-icon text-primary'");?>
</div>
</nav>
</div>
<div class="panel-body">
<div class="row row-grid files-grid" data-size="300">
<?php foreach($modules as $module):?>
<?php $star = strpos($module->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
<div class="col">
<a class="file" href="<?php echo inlink('browse', "libID=$libID&browseType=bymodule&param=$module->id&orderBy=$orderBy&from=$from");?>">
<i class="file-icon icon icon-folder text-yellow"></i>
<div class="file-name"><?php echo (strpos($module->collector, $this->app->user->account) !== false ? "<i class='icon icon-star text-yellow'></i> " : '') . $module->name;?></div>
<div class="text-primary file-info"><?php echo $module->docCount . $lang->doc->item;?></div>
</a>
<div class="actions">
<?php common::printLink('doc', 'collect', "objectID={$module->id}&objectType=module", "<i class='icon {$star}'></i>", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
</div>
</div>
<?php endforeach;?>
<?php foreach($docs as $doc):?>
<?php $star = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
<div class="col">
<a class="file" href="<?php echo inlink('view', "docID=$doc->id");?>">
<i class="file-icon icon icon-file-text text-muted"></i>
<div class="file-name"><?php echo (strpos($doc->collector, $this->app->user->account) !== false ? "<i class='icon icon-star text-yellow'></i> " : '') . $doc->title;?></div>
<div class="text-primary file-info"><?php echo zget($users, $doc->addedBy);?></div>
</a>
<div class="actions">
<?php common::printLink('doc', 'collect', "objectID={$doc->id}&objectType=doc", "<i class='icon {$star}'></i>", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
<?php common::printLink('doc', 'edit', "docID={$doc->id}", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link' data-toggle='modal'")?>
<?php common::printLink('doc', 'delete', "docID={$doc->id}", "<i class='icon icon-trash'></i>", '', "title='{$lang->delete}' class='btn btn-link'")?>
</div>
</div>
<?php endforeach;?>
</div>
</div>
</div>
</div>
</div>
+3 -123
View File
@@ -11,128 +11,8 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<div class="main-row spilter-row">
<div class="side-col" style="width: 220px" data-min-width="220">
<div class="cell">
<header class="table-row space">
<form method='post' action='<?php echo $this->createLink('doc', 'browse', "libID=&browseType=fastsearch");?>' class='input-control has-icon-right table-col'>
<input id="searchDoc" type="searchDoc" name='searchDoc' class="form-control" placeholder="<?php echo $this->lang->doc->searchDoc;?>">
<button type="submit" class="btn btn-icon btn-link input-control-icon-right"><i class="icon icon-search"></i></button>
</form>
<div class="table-col text-right c-sm">
<?php echo html::a($this->createLink('doc', 'createLib'), "<i class='icon icon-plus'></i>", '', "class='btn btn-secondary btn-icon iframe'");?>
</div>
</header>
<ul id="docsTree" data-ride="tree" class="tree no-margin">
<li class="open">
<a class="text-muted tree-toggle"><?php echo $lang->doc->fast;?></a>
<ul>
<?php foreach($lang->doc->fastMenuList as $type => $menu):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseType={$type}"), "<i class='icon {$lang->doc->fastMenuIconList[$type]}'></i> {$menu}");?>
<?php endforeach;?>
</ul>
</li>
<li class="open">
<a class="text-muted tree-toggle"><?php echo $lang->productCommon;?></a>
<ul>
<?php foreach($products as $product):?>
<li>
<?php echo html::a($this->createLink('doc', 'objectLibs', "type=product&objectID=$product->id"), "<i class='icon icon-cube'></i> " . $product->name);?>
<?php if(isset($subLibs['product'][$product->id])):?>
<ul>
<?php foreach($subLibs['product'][$product->id] as $libID => $libName):?>
<?php
if($libID == 'project')
{
$libLink = inlink('allLibs', "type=project&product=$product->id");
$icon = 'icon-stack';
}
elseif($libID == 'files')
{
$libLink = inlink('showFiles', "type=product&objectID=$product->id");
$icon = 'icon-paper-clip';
}
else
{
$libLink = inlink('browse', "libID=$libID");
$icon = 'icon-folder-outline';
}
?>
<li>
<?php echo html::a($libLink, "<i class='icon {$icon}'></i> " . $libName);?>
<?php if(isset($modules[$libID])):?>
<ul>
<?php foreach($modules[$libID] as $module):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=$libID&browseType=byModule&param={$module->id}"), "<i class='icon icon-folder-outline'></i> " . $module->name);?></li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
</li>
<li>
<a class="text-muted tree-toggle"><?php echo $lang->projectCommon;?></a>
<ul>
<?php foreach($projects as $project):?>
<li>
<?php echo html::a($this->createLink('doc', 'objectLibs', "type=project&objectID=$project->id"), "<i class='icon icon-cube'></i> " . $project->name);?>
<?php if(isset($subLibs['project'][$project->id])):?>
<ul>
<?php foreach($subLibs['project'][$project->id] as $libID => $libName):?>
<?php
if($libID == 'files')
{
$libLink = inlink('showFiles', "type=project&objectID=$project->id");
$icon = 'icon-paper-clip';
}
else
{
$libLink = inlink('browse', "libID=$libID");
$icon = 'icon-paper-outline';
}
?>
<li>
<?php echo html::a($libLink, "<i class='icon $icon'></i> " . $libName);?>
<?php if(isset($modules[$libID])):?>
<ul>
<?php foreach($modules[$libID] as $module):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=$libID&browseType=byModule&param={$module->id}"), "<i class='icon icon-folder-outline'></i> " . $module->name);?></li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
</li>
<li>
<a class="text-muted tree-toggle"><?php echo $lang->doc->custom;?></a>
<ul>
<?php foreach($customLibs as $libID => $libName):?>
<li>
<?php echo html::a(inlink('browse', "libID=$libID"), "<i class='icon icon-folder-outline'></i> " . $libName);?>
<?php if(isset($modules[$libID])):?>
<ul>
<?php foreach($modules[$libID] as $module):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=$libID&browseType=byModule&param={$module->id}"), "<i class='icon icon-folder-outline'></i> " . $module->name);?></li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
</li>
</ul>
</div>
</div>
<div class='main-row split-row' id='mainRow'>
<?php include './side.html.php';?>
<div class="main-col" data-min-width="400">
<div class="row">
<div class="col-sm-7">
@@ -140,7 +20,7 @@
<div class="panel-heading">
<div class="panel-title"><?php echo $lang->doc->orderByEdit;?></div>
<nav class="panel-actions nav nav-default">
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseTyp=bymenu&module=0&orderBy=editeddate_desc"), 'MORE', '', "title='{$lang->more}'");?></li>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseTyp=bygrid&module=0&orderBy=editeddate_desc"), 'MORE', '', "title='{$lang->more}'");?></li>
</nav>
</div>
<div class="panel-body has-table">
+65 -20
View File
@@ -11,27 +11,72 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<div id='featurebar'>
<strong><?php echo $object->name?></strong>
<div class='actions'><?php echo html::backButton();?></div>
</div>
<div id='libs'>
<div class='libs-group clearfix <?php if(common::hasPriv('doc', 'sort')) echo 'sort'?>'>
<?php foreach($libs as $libID => $libName):?>
<?php
if($libID == 'project' and $from != 'doc') continue;
<div class="main-row split-row" id="mainRow">
<?php include './side.html.php';?>
<div class="main-col" data-min-width="400">
<div class="panel block-files block-sm no-margin">
<div class="panel-heading">
<div class="panel-title font-normal">
<i class="icon icon-folder-open-o text-muted"></i> <?php echo $object->name;?>
</div>
<nav class="panel-actions btn-toolbar">
<div class="dropdown">
<button type="button" title="<?php echo $lang->customConfig;?>" class="btn btn-gray btn-icon" data-toggle="dropdown"><i class="icon icon-cog"></i></button>
<div class="dropdown-menu pull-right col-lg" id="pageSetting">
<form class='with-padding load-indicator' id='pageSettingForm' method='post' target='hiddenwin' action='<?php echo $this->createLink('custom', 'ajaxSaveCustomFields', 'module=doc&section=custom&key=objectLibs');?>'>
<div><?php echo $lang->customConfig;?></div>
<div class="row row-grid with-padding">
<?php foreach($customObjectLibs as $libType => $libTypeName):?>
<div class="col-xs-12">
<?php $checked = (strpos(",$showLibs,", ",$libType,") !== false) ? " checked ='checked'" : "";?>
<div class="checkbox-primary">
<input type="checkbox" name="fields[]" value="<?php echo $libType;?>" <?php echo $checked;?> id="fields<?php echo $libType;?>">
<label for="fields<?php echo $libType;?>"><?php echo $libTypeName;?></label>
</div>
</div>
<?php endforeach;?>
</div>
<div>
<?php echo html::submitButton($lang->save);?>
<?php echo html::commonButton($lang->cancel, '', "btn btn-gray close-dropdown");?>
</div>
</form>
</div>
</div>
</nav>
</div>
<div class='panel-body'>
<div class="row row-grid files-grid" data-size="300">
<?php foreach($libs as $libID => $lib):?>
<?php if($libID == 'project' and $from != 'doc') continue;?>
<?php if(strpos($this->config->doc->custom->objectLibs, 'files') === false && $libID == 'files') continue;?>
<?php if(strpos($this->config->doc->custom->objectLibs, 'customFiles') === false && !$lib->main) continue;?>
$libLink = inlink('browse', "libID=$libID&browseType=all&param=0&orderBy=id_desc&from=$from");
if($libID == 'project') $libLink = inlink('allLibs', "type=project&product=$object->id");
if($libID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$object->id");
?>
<a class='lib <?php echo $libID == 'files' ? 'files' : '';?>' title='<?php echo $libName?>' href='<?php echo $libLink?>' data-id='<?php echo $libID;?>'>
<?php if($libID != 'files' and $libID != 'project' and common::hasPriv('doc', 'sort')):?><i class='icon icon-move'></i><?php endif;?>
<img src='<?php echo $config->webRoot . 'theme/default/images/main/doc-lib.png'?>' class='file-icon' />
<div class='lib-name' title='<?php echo $libName?>'><?php echo $libName?></div>
</a>
<?php endforeach; ?>
<?php if(common::hasPriv('doc', 'createLib')) echo html::a(inlink('createLib', "type=$type&objectID={$object->id}"), "<i class='icon icon-plus'></i>", '', "class='lib addbtn' data-toggle='modal' data-type='iframe' title='{$lang->doc->createLib}'")?>
<?php $libLink = inlink('browse', "libID=$libID&browseType=all&param=0&orderBy=id_desc&from=$from");?>
<?php if($libID == 'project') $libLink = inlink('allLibs', "type=project&product=$object->id");?>
<?php if($libID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$object->id");?>
<?php $icon = 'icon-folder text-yellow';?>
<?php if($libID == 'files') $icon = 'icon-paper-clip text-brown';?>
<div class="col">
<a class="file" href="<?php echo $libLink;?>">
<i class="file-icon icon <?php echo $icon;?>"></i>
<div class="file-name"><?php echo ($libID != 'project' && $libID != 'files' && strpos($lib->collector, $this->app->user->account) !== false ? "<i class='icon icon-star text-yellow'></i> " : '') . $lib->name;?></div>
<div class="text-primary file-info"><?php echo $lib->allCount . $lang->doc->item;?></div>
</a>
<?php if($libID != 'project' and $libID != 'files'):?>
<div class="actions">
<?php common::printLink('doc', 'collect', "objectID=$libID&objectType=doclib", "<i class='icon icon-star-empty'></i>", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
<?php common::printLink('doc', 'editLib', "libID=$libID", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link' data-toggle='modal'")?>
<?php common::printLink('doc', 'deleteLib', "libID=$libID", "<i class='icon icon-trash'></i>", '', "title='{$lang->delete}' class='btn btn-link'")?>
</div>
<?php endif;?>
</div>
<?php endforeach;?>
</div>
</div>
</div>
</div>
</div>
<?php js::set('type', 'doc');?>
+130
View File
@@ -0,0 +1,130 @@
<?php
$products = $this->doc->getLimitLibs('product');
$projects = $this->doc->getLimitLibs('project');
$customLibs = $this->doc->getLimitLibs('custom');
$allModules = $this->loadModel('tree')->getDocStructure();
$productSubLibs = $this->doc->getSubLibGroups('product', array_keys($products));
$projectSubLibs = $this->doc->getSubLibGroups('project', array_keys($projects));
?>
<div class="side-col" style="width: 220px" data-min-width="220">
<div class="cell">
<header class="table-row space">
<form method='post' action='<?php echo $this->createLink('doc', 'browse', "libID=&browseType=fastsearch");?>' class='input-control has-icon-right table-col'>
<input id="searchDoc" type="searchDoc" name='searchDoc' class="form-control" placeholder="<?php echo $this->lang->doc->searchDoc;?>">
<button type="submit" class="btn btn-icon btn-link input-control-icon-right"><i class="icon icon-search"></i></button>
</form>
<div class="table-col text-right c-sm">
<?php echo html::a($this->createLink('doc', 'createLib'), "<i class='icon icon-plus'></i>", '', "class='btn btn-secondary btn-icon iframe'");?>
</div>
</header>
<ul id="docsTree" data-ride="tree" class="tree no-margin">
<li class="open">
<a class="text-muted tree-toggle"><?php echo $lang->doc->fast;?></a>
<ul>
<?php foreach($lang->doc->fastMenuList as $menuType => $menu):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=0&browseType={$menuType}"), "<i class='icon {$lang->doc->fastMenuIconList[$menuType]}'></i> {$menu}");?>
<?php endforeach;?>
</ul>
</li>
<li class="open">
<?php echo html::a($this->createLink('doc', 'allLibs', "type=product"), $lang->productCommon, '', "class='text-muted'");?>
<ul>
<?php foreach($products as $product):?>
<li>
<?php echo html::a($this->createLink('doc', 'objectLibs', "type=product&objectID=$product->id"), "<i class='icon icon-cube'></i> " . $product->name);?>
<?php if(isset($productSubLibs[$product->id])):?>
<ul>
<?php foreach($productSubLibs[$product->id] as $subLibID => $subLibName):?>
<?php
if($subLibID == 'project')
{
$subLibLink = inlink('allLibs', "type=project&product=$product->id");
$icon = 'icon-stack';
}
elseif($subLibID == 'files')
{
$subLibLink = inlink('showFiles', "type=product&objectID=$product->id");
$icon = 'icon-paper-clip';
}
else
{
$subLibLink = inlink('browse', "libID=$subLibID");
$icon = 'icon-folder-outline';
}
?>
<li>
<?php echo html::a($subLibLink, "<i class='icon {$icon}'></i> " . $subLibName);?>
<?php if(isset($allModules[$subLibID])):?>
<ul>
<?php foreach($allModules[$subLibID] as $module):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=$subLibID&browseType=byModule&param={$module->id}"), "<i class='icon icon-folder-outline'></i> " . $module->name);?></li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
</li>
<li>
<?php echo html::a($this->createLink('doc', 'allLibs', "type=project"), $lang->projectCommon, '', "class='text-muted'");?>
<ul>
<?php foreach($projects as $project):?>
<li>
<?php echo html::a($this->createLink('doc', 'objectLibs', "type=project&objectID=$project->id"), "<i class='icon icon-cube'></i> " . $project->name);?>
<?php if(isset($projectSubLibs[$project->id])):?>
<ul>
<?php foreach($projectSubLibs[$project->id] as $subLibID => $subLibName):?>
<?php
if($subLibID == 'files')
{
$subLibLink = inlink('showFiles', "type=project&objectID=$project->id");
$icon = 'icon-paper-clip';
}
else
{
$subLibLink = inlink('browse', "libID=$subLibID");
$icon = 'icon-paper-outline';
}
?>
<li>
<?php echo html::a($subLibLink, "<i class='icon $icon'></i> " . $subLibName);?>
<?php if(isset($allModules[$subLibID])):?>
<ul>
<?php foreach($allModules[$subLibID] as $module):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=$subLibID&browseType=byModule&param={$module->id}"), "<i class='icon icon-folder-outline'></i> " . $module->name);?></li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
</li>
<li>
<?php echo html::a($this->createLink('doc', 'allLibs', "type=custom"), $lang->doc->custom, '', "class='text-muted'");?>
<ul>
<?php foreach($customLibs as $subLibID => $subLibName):?>
<li>
<?php echo html::a(inlink('browse', "libID=$subLibID"), "<i class='icon icon-folder-outline'></i> " . $subLibName);?>
<?php if(isset($allModules[$subLibID])):?>
<ul>
<?php foreach($allModules[$subLibID] as $module):?>
<li><?php echo html::a($this->createLink('doc', 'browse', "libID=$subLibID&browseType=byModule&param={$module->id}"), "<i class='icon icon-folder-outline'></i> " . $module->name);?></li>
<?php endforeach;?>
</ul>
<?php endif;?>
</li>
<?php endforeach;?>
</ul>
</li>
</ul>
</div>
</div>
+1 -1
View File
@@ -122,7 +122,7 @@
<?php $i = 0;?>
<?php foreach($docLibs as $libID => $docLib):?>
<?php if($i > 8) break;?>
<div class="col-xs-6"><?php echo html::a($this->createLink('doc', 'browse', "libID=$libID&browseTyp=all&param=&orderBy=&from=project"), "<i class='icon icon-folder text-yellow'></i> " . $docLib);?></div>
<div class="col-xs-6"><?php echo html::a($this->createLink('doc', 'browse', "libID=$libID&browseTyp=all&param=&orderBy=&from=project"), "<i class='icon icon-folder text-yellow'></i> " . $docLib->name);?></div>
<?php $i++;?>
<?php endforeach;?>
<div class="col-xs-6">