diff --git a/inc/inc.Utils.php b/inc/inc.Utils.php index 2d8a850f7..1cf45c2e8 100644 --- a/inc/inc.Utils.php +++ b/inc/inc.Utils.php @@ -54,6 +54,8 @@ function getReadableDate($timestamp=0) { /* {{{ */ global $settings; if($timestamp === 0) $timestamp = time(); + elseif($timestamp && is_numeric($timestamp)) + ; elseif($timestamp && is_string($timestamp)) $timestamp = strtotime($timestamp); elseif(!is_numeric($timestamp)) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 9329fc704..fb4577c0f 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2898,22 +2898,18 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $status = $latestContent->getStatus(); $attentionstr = ''; if ( $document->isLocked() ) { - $attentionstr .= "getImgPath("lock.png")."\" title=\"". getMLText("locked_by").": ".htmlspecialchars($document->getLockingUser()->getFullName())."\"> "; + $attentionstr .= "getLockingUser()->getFullName())."\"> "; } - $needwkflaction = false; if($workflowmode == 'advanced') { $workflow = $latestContent->getWorkflow(); - if($workflow) { - $needwkflaction = $latestContent->needsWorkflowAction($user); + if($workflow && $latestContent->needsWorkflowAction($user)) { + $attentionstr .= "getName())."\"> "; } } - if ( $needwkflaction ) { - $attentionstr .= "getImgPath("attention.gif")."\" title=\"". getMLText("workflow").": ".htmlspecialchars($workflow->getName())."\"> "; - } $content = ''; if($attentionstr) $content .= $attentionstr."
"; - $content .= ""; + /* Retrieve attacheѕ files */ $files = $document->getDocumentFiles($latestContent->getVersion()); $files = SeedDMS_Core_DMS::filterDocumentFiles($user, $files); @@ -2926,17 +2922,18 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $revlinks = $document->getReverseDocumentLinks(); $revlinks = SeedDMS_Core_DMS::filterDocumentLinks($user, $revlinks); + $content .= "
"; if(count($files)) - $content .= count($files)." ".getMLText("linked_files")."
"; + $content .= ' '.count($files)."
"; if(count($links) || count($revlinks)) - $content .= count($links)."/".count($revlinks)." ".getMLText("linked_documents")."
"; + $content .= ' '.count($links)."/".count($revlinks)."
"; if($status["status"] == S_IN_WORKFLOW && $workflowmode == 'advanced') { if($workflowstate = $latestContent->getWorkflowState()) $content .= 'getName()) : '').'">'.($workflowstate ? htmlspecialchars($workflowstate->getName()) : '').''; } else { - $content .= getOverallStatusText($status["status"]); + $content .= $this->getOverallStatusIcon($status['status']); } - $content .= "
"; + $content .= "
"; return $content; } /* }}} */ @@ -3206,21 +3203,25 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= $extracontent['bottom_title']; $content .= "\n"; // $content .= "".htmlspecialchars($owner->getFullName()).""; - $content .= ""; + $content .= "
"; if($enableRecursiveCount) { if($user->isAdmin()) { /* No need to check for access rights in countChildren() for * admin. So pass 0 as the limit. */ $cc = $subFolder->countChildren($user, 0); - $content .= $cc['folder_count']." ".getMLText("folders")."
".$cc['document_count']." ".getMLText("documents"); + if($cc['folder_count']) + $content .= ' '.$cc['folder_count']."
"; + if($cc['document_count']) + $content .= ' '.$cc['document_count']; } else { $cc = $subFolder->countChildren($user, $maxRecursiveCount); if($maxRecursiveCount > 5000) $rr = 100.0; else $rr = 10.0; - $content .= (!$cc['folder_precise'] ? '~'.(round($cc['folder_count']/$rr)*$rr) : $cc['folder_count'])." ".getMLText("folders")."
".(!$cc['document_precise'] ? '~'.(round($cc['document_count']/$rr)*$rr) : $cc['document_count'])." ".getMLText("documents"); + $content .= (!$cc['folder_precise'] ? '~'.(round($cc['folder_count']/$rr)*$rr) : $cc['folder_count'])." ".getMLText("folders")."
"; + $content .= (!$cc['document_precise'] ? '~'.(round($cc['document_count']/$rr)*$rr) : $cc['document_count'])." ".getMLText("documents"); } } else { /* FIXME: the following is very inefficient for just getting the number of @@ -3233,7 +3234,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $subdoc = SeedDMS_Core_DMS::filterAccess($subdoc, $user, M_READ); $content .= count($subsub)." ".getMLText("folders")."
".count($subdoc)." ".getMLText("documents"); } - $content .= "
"; + $content .= "
"; $content .= ""; $content .= $this->folderListRowAction($subFolder, $skipcont, $extracontent); $content .= ""; diff --git a/views/bootstrap/styles/application.css b/views/bootstrap/styles/application.css index ffe319622..8896884e6 100644 --- a/views/bootstrap/styles/application.css +++ b/views/bootstrap/styles/application.css @@ -338,6 +338,8 @@ i.warning {color: #ff9900;} i.initstate {color: #ff9900;} i.released {color: #00b000;} i.rejected {color: #b00000;} +i.expired {color: #b0b0b0;} +i.obsolete {color: #9e5d42;} i.in-workflow {color: #11479e;} i.workflow-action {color: #91479e;} i.selected {border: 1px solid #d4d4d4;padding:3px;border-radius:3px;background-color:#fafafa;background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);} diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php index e918ccd04..9f3e98304 100644 --- a/views/bootstrap4/class.Bootstrap4.php +++ b/views/bootstrap4/class.Bootstrap4.php @@ -1278,6 +1278,51 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } } /* }}} */ +function getOverallStatusIcon($status) { /* {{{ */ + if (is_null($status)) { + return ''; + } else { + $icon = ''; + $color = ''; + switch($status) { + case S_IN_WORKFLOW: + $icon = 'fa fa-circle in-workflow'; + break; + case S_DRAFT_REV: + $icon = 'fa fa-circle in-workflow'; + break; + case S_DRAFT_APP: + $icon = 'fa fa-circle in-workflow'; + break; + case S_RELEASED: + $icon = 'fa-circle released'; + break; + case S_REJECTED: + $icon = 'fa-circle rejected'; + break; + case S_OBSOLETE: + $icon = 'fa-circle obsolete'; + break; + case S_EXPIRED: + $icon = 'fa-circle expired'; + break; + case S_IN_REVISION: + $icon = 'fa-refresh'; + break; + case S_DRAFT: + $icon = 'fa-circle-o'; + break; + case S_NEEDS_CORRECTION: + return getMLText("needs_correction"); + break; + default: + $icon = 'fa fa-question'; + break; + } + return ''; + } +} /* }}} */ + /** * Get attributes for a button opening a modal box * @@ -2973,22 +3018,18 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $status = $latestContent->getStatus(); $attentionstr = ''; if ( $document->isLocked() ) { - $attentionstr .= "getImgPath("lock.png")."\" title=\"". getMLText("locked_by").": ".htmlspecialchars($document->getLockingUser()->getFullName())."\"> "; + $attentionstr .= "getLockingUser()->getFullName())."\"> "; } - $needwkflaction = false; if($workflowmode == 'advanced') { $workflow = $latestContent->getWorkflow(); - if($workflow) { - $needwkflaction = $latestContent->needsWorkflowAction($user); + if($workflow && $latestContent->needsWorkflowAction($user)) { + $attentionstr .= "getName())."\"> "; } } - if ( $needwkflaction ) { - $attentionstr .= "getImgPath("attention.gif")."\" title=\"". getMLText("workflow").": ".htmlspecialchars($workflow->getName())."\"> "; - } $content = ''; if($attentionstr) $content .= $attentionstr."
"; - $content .= ""; + /* Retrieve attacheѕ files */ $files = $document->getDocumentFiles($latestContent->getVersion()); $files = SeedDMS_Core_DMS::filterDocumentFiles($user, $files); @@ -3001,17 +3042,18 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $revlinks = $document->getReverseDocumentLinks(); $revlinks = SeedDMS_Core_DMS::filterDocumentLinks($user, $revlinks); + $content .= "
"; if(count($files)) - $content .= count($files)." ".getMLText("linked_files")."
"; + $content .= ' '.count($files)."
"; if(count($links) || count($revlinks)) - $content .= count($links)."/".count($revlinks)." ".getMLText("linked_documents")."
"; + $content .= ' '.count($links)."/".count($revlinks)."
"; if($status["status"] == S_IN_WORKFLOW && $workflowmode == 'advanced') { if($workflowstate = $latestContent->getWorkflowState()) $content .= 'getName()) : '').'">'.($workflowstate ? htmlspecialchars($workflowstate->getName()) : '').''; } else { - $content .= getOverallStatusText($status["status"]); + $content .= $this->getOverallStatusIcon($status['status']); } - $content .= "
"; + $content .= "
"; return $content; } /* }}} */ @@ -3281,21 +3323,25 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $content .= $extracontent['bottom_title']; $content .= "\n"; // $content .= "".htmlspecialchars($owner->getFullName()).""; - $content .= ""; + $content .= "
"; if($enableRecursiveCount) { if($user->isAdmin()) { /* No need to check for access rights in countChildren() for * admin. So pass 0 as the limit. */ $cc = $subFolder->countChildren($user, 0); - $content .= $cc['folder_count']." ".getMLText("folders")."
".$cc['document_count']." ".getMLText("documents"); + if($cc['folder_count']) + $content .= ' '.$cc['folder_count']."
"; + if($cc['document_count']) + $content .= ' '.$cc['document_count']; } else { $cc = $subFolder->countChildren($user, $maxRecursiveCount); if($maxRecursiveCount > 5000) $rr = 100.0; else $rr = 10.0; - $content .= (!$cc['folder_precise'] ? '~'.(round($cc['folder_count']/$rr)*$rr) : $cc['folder_count'])." ".getMLText("folders")."
".(!$cc['document_precise'] ? '~'.(round($cc['document_count']/$rr)*$rr) : $cc['document_count'])." ".getMLText("documents"); + $content .= (!$cc['folder_precise'] ? '~'.(round($cc['folder_count']/$rr)*$rr) : $cc['folder_count'])." ".getMLText("folders")."
"; + $content .= (!$cc['document_precise'] ? '~'.(round($cc['document_count']/$rr)*$rr) : $cc['document_count'])." ".getMLText("documents"); } } else { /* FIXME: the following is very inefficient for just getting the number of @@ -3308,7 +3354,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) $subdoc = SeedDMS_Core_DMS::filterAccess($subdoc, $user, M_READ); $content .= count($subsub)." ".getMLText("folders")."
".count($subdoc)." ".getMLText("documents"); } - $content .= "
"; + $content .= "
"; $content .= ""; $content .= $this->folderListRowAction($subFolder, $skipcont, $extracontent); $content .= ""; diff --git a/views/bootstrap4/styles/application.css b/views/bootstrap4/styles/application.css index 024e02dfc..bb237221a 100644 --- a/views/bootstrap4/styles/application.css +++ b/views/bootstrap4/styles/application.css @@ -343,6 +343,8 @@ i.warning {color: #ff9900;} i.initstate {color: #ff9900;} i.released {color: #00b000;} i.rejected {color: #b00000;} +i.expired {color: #b0b0b0;} +i.obsolete {color: #9e5d42;} i.in-workflow {color: #11479e;} i.workflow-action {color: #91479e;} i.selected {border: 1px solid #d4d4d4;padding:3px;border-radius:3px;background-color:#fafafa;background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);}