diff --git a/db/update9.8.1.sql b/db/update9.8.1.sql
index eb64935fcf..6c07ea7c58 100644
--- a/db/update9.8.1.sql
+++ b/db/update9.8.1.sql
@@ -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`;
diff --git a/module/doc/config.php b/module/doc/config.php
index 6bcb942298..5ee1e1d8d9 100644
--- a/module/doc/config.php
+++ b/module/doc/config.php
@@ -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');
diff --git a/module/doc/control.php b/module/doc/control.php
index 1be4038646..ec3bbde407 100644
--- a/module/doc/control.php
+++ b/module/doc/control.php
@@ -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;
diff --git a/module/doc/css/common.css b/module/doc/css/common.css
index 2889f67bdf..94dd9892bc 100644
--- a/module/doc/css/common.css
+++ b/module/doc/css/common.css
@@ -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;}
diff --git a/module/doc/js/browse.js b/module/doc/js/browse.js
index 846542ea8b..7adfaebb4c 100644
--- a/module/doc/js/browse.js
+++ b/module/doc/js/browse.js
@@ -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();
diff --git a/module/doc/js/common.js b/module/doc/js/common.js
index 57c87d4479..6955cd7154 100644
--- a/module/doc/js/common.js
+++ b/module/doc/js/common.js
@@ -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('
');
- $.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('');
- items[itemId] = {type: 'product', id: libId, name: libName, objectId: product.id, product: product.name, search: (libName + ' ' + product.name).toLowerCase()};
- productCount++;
- });
- $list.append('');
- });
- $list.toggleClass('lib-list-bg', productCount > 4);
-
- $list = $('#libMenuProjectGroup > .lib-menu-list');
- $.each(data.project, function(idx, project)
- {
- $list.append('');
- $.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('');
- items[itemId] = {type: 'project', id: libId, name: libName, objectId: project.id, project: project.name, search: (libName + ' ' + project.name).toLowerCase()};
- projectCount++;
- });
- $list.append('');
- });
- $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('');
- 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: '',
+ 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');
});
diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php
index f5cc00cb29..1b240797cf 100644
--- a/module/doc/lang/zh-cn.php
+++ b/module/doc/lang/zh-cn.php
@@ -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 = "系统文档库无需修改。";
diff --git a/module/doc/model.php b/module/doc/model.php
index 8304732723..0c67dac5b0 100644
--- a/module/doc/model.php
+++ b/module/doc/model.php
@@ -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 .= "';
}
$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.
*
diff --git a/module/doc/view/alllibs.html.php b/module/doc/view/alllibs.html.php
index 4d1d95e89b..78a40fa958 100644
--- a/module/doc/view/alllibs.html.php
+++ b/module/doc/view/alllibs.html.php
@@ -11,65 +11,47 @@
*/
?>
-
-
-
-
- id])): ?>
-
- id]);
- ?>
-
- 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}
", '', "title='{$lang->more}' class='pull-right'");
- ?>
+
+
+
+
+
+
+ doc->custom;?>
+ productCommon;?>
+ projectCommon;?>
+
+
-
- = 3) $widthClass = 'w-lib-p33';
- ?>
- id] as $subLibID => $subLibName):?>
- id");
- elseif($subLibID == 'files') $libLink = inlink('showFiles', "type=$type&objectID=$lib->id");
- else $libLink = inlink('browse', "libID=$subLibID");
- ?>
-
-
' class='file-icon' />
-
-
- = 2) break;?>
-
-
+
+
+
+
+
+
+ createLink('doc', 'objectLibs', "type=$type&objectID=$lib->id") : $this->createLink('doc', 'browse', "libID=$lib->id");?>
+
+
+
-
-
-
-
-
-
-
diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php
index 18df8a5cae..d75096496b 100644
--- a/module/doc/view/browse.html.php
+++ b/module/doc/view/browse.html.php
@@ -16,96 +16,73 @@
var browseType = '';
doc->confirmDelete)?>
-
-from != 'doc') js::set('type', 'doc');?>
-cookie->browseType == 'bymenu'):?>
-
-cookie->browseType == 'bytree'):?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
'>
-
-
-
-
-
-
-
-
-
doc->manageType);?>
+from != 'doc') js::set('type', 'doc');?>
+
+
+
+ cookie->browseType == 'bygrid'):?>
+
+
+
+
+
+
+
+
+
+
+
+
+ | doc->title;?> |
+ |
+ doc->size;?> |
+ doc->addedBy;?> |
+ doc->addedDate;?> |
+ doc->editedDate;?> |
+
+
+
+
+
+ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
+
+ | id&orderBy=$orderBy&from=$from"), " " . $module->name);?> |
+
+ id&objectType=module", "", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
+ |
+ |
+ |
+ |
+ |
+
+
+
+
+ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
+
+ | id"), " " . $doc->title);?> |
+
+ id&objectType=doc", "", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
+ id", "", '', "title='{$lang->edit}' class='btn btn-link'")?>
+ id", "", '', "title='{$lang->delete}' class='btn btn-link'")?>
+ |
+ |
+ addedBy);?> |
+ addedDate, 'm-d h:i');?> |
+ editedDate, 'm-d h:i');?> |
+
+
+
+
+
-
-
-
-
-
- recTotal}&recPerPage={$pager->recPerPage}";?>
- | idAB);?> |
- doc->title);?> |
- doc->addedBy);?> |
- doc->addedDate);?> |
- doc->editedDate);?> |
- actions;?> |
-
-
-
- $doc):?>
- createLink('doc', 'view', "docID=$doc->id");
- $canView = common::hasPriv('doc', 'view');
- ?>
-
- | id)); else printf('%03d', $doc->id);?> |
- title);?> |
- addedBy]) ? print($users[$doc->addedBy]) : print($doc->addedBy);?> |
- addedDate, 5, 11);?> |
- editedDate, 5, 11);?> |
-
- 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)", '', '', "class='btn-icon' title='{$lang->doc->delete}'");
- }
- ?>
- |
-
-
-
- | show();?> |
-
-
-
diff --git a/module/doc/view/browsebygrid.html.php b/module/doc/view/browsebygrid.html.php
new file mode 100644
index 0000000000..a3b2036067
--- /dev/null
+++ b/module/doc/view/browsebygrid.html.php
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
+
+
+
+ collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
+
+
id");?>">
+
+ collector, $this->app->user->account) !== false ? " " : '') . $doc->title;?>
+ addedBy);?>
+
+
+ id}&objectType=doc", "", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?>
+ id}", "", '', "title='{$lang->edit}' class='btn btn-link' data-toggle='modal'")?>
+ id}", "", '', "title='{$lang->delete}' class='btn btn-link'")?>
+
+
+
+
+
+
+
+
diff --git a/module/doc/view/index.html.php b/module/doc/view/index.html.php
index 73446940b7..70148c0289 100644
--- a/module/doc/view/index.html.php
+++ b/module/doc/view/index.html.php
@@ -11,128 +11,8 @@
*/
?>
-
-
-
-
-
-
- createLink('doc', 'createLib'), "", '', "class='btn btn-secondary btn-icon iframe'");?>
-
-
-
- -
- doc->fast;?>
-
- doc->fastMenuList as $type => $menu):?>
- - createLink('doc', 'browse', "libID=0&browseType={$type}"), " {$menu}");?>
-
-
-
- -
- productCommon;?>
-
-
- -
- createLink('doc', 'objectLibs', "type=product&objectID=$product->id"), " " . $product->name);?>
- id])):?>
-
- id] as $libID => $libName):?>
- 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';
- }
- ?>
- -
- " . $libName);?>
-
-
-
- - createLink('doc', 'browse', "libID=$libID&browseType=byModule¶m={$module->id}"), " " . $module->name);?>
-
-
-
-
-
-
-
-
-
-
-
- -
- projectCommon;?>
-
-
- -
- createLink('doc', 'objectLibs', "type=project&objectID=$project->id"), " " . $project->name);?>
- id])):?>
-
- id] as $libID => $libName):?>
- id");
- $icon = 'icon-paper-clip';
- }
- else
- {
- $libLink = inlink('browse', "libID=$libID");
- $icon = 'icon-paper-outline';
- }
- ?>
- -
- " . $libName);?>
-
-
-
- - createLink('doc', 'browse', "libID=$libID&browseType=byModule¶m={$module->id}"), " " . $module->name);?>
-
-
-
-
-
-
-
-
-
-
-
- -
- doc->custom;?>
-
- $libName):?>
- -
- " . $libName);?>
-
-
-
- - createLink('doc', 'browse', "libID=$libID&browseType=byModule¶m={$module->id}"), " " . $module->name);?>
-
-
-
-
-
-
-
-
-
-
+
+
@@ -140,7 +20,7 @@
doc->orderByEdit;?>
diff --git a/module/doc/view/objectlibs.html.php b/module/doc/view/objectlibs.html.php
index 65cb27b3fa..c0bf4c40e6 100644
--- a/module/doc/view/objectlibs.html.php
+++ b/module/doc/view/objectlibs.html.php
@@ -11,27 +11,72 @@
*/
?>
-
-
-
'>
- $libName):?>
-
+
+
+
+
+
+ name;?>
+
+
+
+
+
+ $lib):?>
+
+ config->doc->custom->objectLibs, 'files') === false && $libID == 'files') continue;?>
+ config->doc->custom->objectLibs, 'customFiles') === false && !$lib->main) continue;?>
- $libLink = inlink('browse', "libID=$libID&browseType=all¶m=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");
- ?>
-
' title='' href='' data-id=''>
-
-
' class='file-icon' />
-
-
-
- id}"), "
", '', "class='lib addbtn' data-toggle='modal' data-type='iframe' title='{$lang->doc->createLib}'")?>
+
+ id");?>
+ id");?>
+
+
+
+
+
+
+
+
+
diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php
new file mode 100644
index 0000000000..33ec9c42ad
--- /dev/null
+++ b/module/doc/view/side.html.php
@@ -0,0 +1,130 @@
+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));
+?>
+
+
+
+
+
+ createLink('doc', 'createLib'), "", '', "class='btn btn-secondary btn-icon iframe'");?>
+
+
+
+ -
+ doc->fast;?>
+
+ doc->fastMenuList as $menuType => $menu):?>
+ - createLink('doc', 'browse', "libID=0&browseType={$menuType}"), " {$menu}");?>
+
+
+
+ -
+ createLink('doc', 'allLibs', "type=product"), $lang->productCommon, '', "class='text-muted'");?>
+
+
+ -
+ createLink('doc', 'objectLibs', "type=product&objectID=$product->id"), " " . $product->name);?>
+ id])):?>
+
+ id] as $subLibID => $subLibName):?>
+ 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';
+ }
+ ?>
+ -
+ " . $subLibName);?>
+
+
+
+ - createLink('doc', 'browse', "libID=$subLibID&browseType=byModule¶m={$module->id}"), " " . $module->name);?>
+
+
+
+
+
+
+
+
+
+
+
+ -
+ createLink('doc', 'allLibs', "type=project"), $lang->projectCommon, '', "class='text-muted'");?>
+
+
+ -
+ createLink('doc', 'objectLibs', "type=project&objectID=$project->id"), " " . $project->name);?>
+ id])):?>
+
+ id] as $subLibID => $subLibName):?>
+ id");
+ $icon = 'icon-paper-clip';
+ }
+ else
+ {
+ $subLibLink = inlink('browse', "libID=$subLibID");
+ $icon = 'icon-paper-outline';
+ }
+ ?>
+ -
+ " . $subLibName);?>
+
+
+
+ - createLink('doc', 'browse', "libID=$subLibID&browseType=byModule¶m={$module->id}"), " " . $module->name);?>
+
+
+
+
+
+
+
+
+
+
+
+ -
+ createLink('doc', 'allLibs', "type=custom"), $lang->doc->custom, '', "class='text-muted'");?>
+
+ $subLibName):?>
+ -
+ " . $subLibName);?>
+
+
+
+ - createLink('doc', 'browse', "libID=$subLibID&browseType=byModule¶m={$module->id}"), " " . $module->name);?>
+
+
+
+
+
+
+
+
+
+
diff --git a/module/project/view/view.html.php b/module/project/view/view.html.php
index 953f523cdc..447e264009 100644
--- a/module/project/view/view.html.php
+++ b/module/project/view/view.html.php
@@ -122,7 +122,7 @@
$docLib):?>
8) break;?>
-
createLink('doc', 'browse', "libID=$libID&browseTyp=all¶m=&orderBy=&from=project"), " " . $docLib);?>
+
createLink('doc', 'browse', "libID=$libID&browseTyp=all¶m=&orderBy=&from=project"), " " . $docLib->name);?>