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('
[ ' + product.name + ' ]
'); - $.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('' + libName + ''); - 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('
[ ' + project.name + ' ]
'); - $.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('' + libName + ''); - 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('' + libName + ''); - 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 .= "
"; - $selectHtml .= "
"; - $selectHtml .= '' . (is_array($currentGroups[$currentLib]) ? $currentGroups[$currentLib]['name'] : $currentGroups[$currentLib]) . ' '; - $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");?> +
+ + +
name;?>
+ +
id] . $lang->doc->item;?>
+ +
id]) . $lang->doc->item;?>
+ +
+ +
+ id&objectType=lib", "", '', "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'")?> +
+ +
+ +
- -
- - -
-
show();?>
- 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'):?> + + +
+
+
+
+ +
+
+ + + + + + + + + + + + + + + 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';?> + + + + + + + + + + +
doc->title;?>doc->size;?>doc->addedBy;?>doc->addedDate;?>doc->editedDate;?>
id&orderBy=$orderBy&from=$from"), "  " . $module->name);?> + id&objectType=module", "", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?> +
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}";?> - - - - - - - - - - $doc):?> - createLink('doc', 'view', "docID=$doc->id"); - $canView = common::hasPriv('doc', 'view'); - ?> - - - - - - - - - - - -
idAB);?> doc->title);?>doc->addedBy);?>doc->addedDate);?>doc->editedDate);?>actions;?>
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';?> +
+ id&orderBy=$orderBy&from=$from");?>"> + +
collector, $this->app->user->account) !== false ? " " : '') . $module->name;?>
+
docCount . $lang->doc->item;?>
+
+
+ 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");?>"> + +
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 @@ */ ?> -
-
-
-
-
' class='input-control has-icon-right table-col'> - - -
-
- 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 @@ */ ?> -
- name?> -
-
-
-
'> - $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");?> + + + + +
+ + +
collector, $this->app->user->account) !== false ? " " : '') . $lib->name;?>
+
allCount . $lang->doc->item;?>
+
+ +
+ ", 'hiddenwin', "title='{$lang->doc->collect}' class='btn btn-link'")?> + ", '', "title='{$lang->edit}' class='btn btn-link' data-toggle='modal'")?> + ", '', "title='{$lang->delete}' class='btn btn-link'")?> +
+ +
+ +
+
+
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)); +?> +
+
+
+
' class='input-control has-icon-right table-col'> + + +
+
+ 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);?>