2024-11-11 13:42:18 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Implementation of PaperlessViews view
|
|
|
|
*
|
|
|
|
* @category DMS
|
|
|
|
* @package SeedDMS
|
|
|
|
* @license GPL 2
|
|
|
|
* @version @version@
|
|
|
|
* @author Uwe Steinmann <uwe@steinmann.cx>
|
|
|
|
* @copyright Copyright (C) 2017 Uwe Steinmann
|
|
|
|
* @version Release: @package_version@
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class which outputs the html page for PaperlessViews view
|
|
|
|
*
|
|
|
|
* @category DMS
|
|
|
|
* @package SeedDMS
|
|
|
|
* @author Uwe Steinmann <uwe@steinmann.cx>
|
|
|
|
* @copyright Copyright (C) 2017 Uwe Steinmann
|
|
|
|
* @version Release: @package_version@
|
|
|
|
*/
|
|
|
|
class SeedDMS_View_PaperlessViews extends SeedDMS_Bootstrap_Style {
|
|
|
|
|
|
|
|
function js() { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$user = $this->params['user'];
|
|
|
|
$onepage = $this->params['onepage'];
|
|
|
|
header('Content-Type: application/javascript');
|
|
|
|
parent::jsTranslations(array('cancel', 'splash_move_document', 'confirm_move_document', 'move_document', 'confirm_transfer_link_document', 'transfer_content', 'link_document', 'splash_move_folder', 'confirm_move_folder', 'move_folder'));
|
|
|
|
?>
|
|
|
|
$(document).ready(function() {
|
|
|
|
$('body').on('click', '.view', function(ev){
|
|
|
|
ev.preventDefault();
|
|
|
|
$('#paperless_view.ajax').trigger('update', {view: $(this).data('view')});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
<?php
|
|
|
|
if($onepage) {
|
|
|
|
$this->printClickDocumentJs();
|
|
|
|
}
|
|
|
|
$this->printDeleteDocumentButtonJs();
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
protected function printListHeader($previewer, $order=false) { /* {{{ */
|
2024-11-11 13:58:13 +00:00
|
|
|
print "<table class=\"table table-condensed table-sm\">";
|
2024-11-11 13:42:18 +00:00
|
|
|
print "<thead>\n<tr>\n";
|
|
|
|
print "<th></th>\n";
|
|
|
|
if($order) {
|
|
|
|
$orderby = ''; //$this->params['orderby'];
|
|
|
|
$orderdir = ''; //$this->params['orderdir'];
|
|
|
|
|
|
|
|
print "<th><a data-action=\"".$order."\" data-orderby=\"n\" data-orderdir=\"".($orderdir == 'desc' ? '' : 'desc')."\">".getMLText("name")."</a> ".($orderby == 'n' || $orderby == '' ? ($orderdir == 'desc' ? '<i class="icon-arrow-up"></i>' : '<i class="icon-arrow-down"></i>') : '')." · <a data-action=\"".$order."\" data-orderby=\"u\" data-orderdir=\"".($orderdir == 'desc' ? '' : 'desc')."\">".getMLText("last_update")."</a> ".($orderby == 'u' ? ($orderdir == 'desc' ? '<i class="icon-arrow-up"></i>' : '<i class="icon-arrow-down"></i>') : '')." · <a data-action=\"".$order."\" data-orderby=\"e\" data-orderdir=\"".($orderdir == 'desc' ? '' : 'desc')."\">".getMLText("expires")."</a> ".($orderby == 'e' ? ($orderdir == 'desc' ? '<i class="icon-arrow-up"></i>' : '<i class="icon-arrow-down"></i>') : '')."</th>\n";
|
|
|
|
} else
|
|
|
|
print "<th>".getMLText("name")."</th>\n";
|
|
|
|
if($order)
|
|
|
|
print "<th><a data-action=\"".$order."\" data-orderby=\"s\" data-orderdir=\"".($orderdir == 'desc' ? '' : 'desc')."\">".getMLText("status")."</a>".($orderby == 's' ? " ".($orderdir == 'desc' ? '<i class="icon-arrow-up"></i>' : '<i class="icon-arrow-down"></i>') : '')."</th>\n";
|
|
|
|
else
|
|
|
|
print "<th>".getMLText("status")."</th>\n";
|
|
|
|
print "<th>".getMLText("action")."</th>\n";
|
|
|
|
print "</tr>\n</thead>\n<tbody>\n";
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
protected function printListFooter() { /* {{{ */
|
|
|
|
echo "</tbody>\n</table>";
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
private function getSearchParameter($data) { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$user = $this->params['user'];
|
|
|
|
$settings = $this->params['settings'];
|
|
|
|
|
|
|
|
$categories = array();
|
|
|
|
$categorynames = array();
|
|
|
|
$astart = null;
|
|
|
|
$aend = null;
|
|
|
|
$mstart = null;
|
|
|
|
$mend = null;
|
|
|
|
$startfolder = $dms->getRootFolder();
|
|
|
|
$rootfolder = $dms->getRootFolder();
|
|
|
|
$cattrs = [];
|
|
|
|
$query = '';
|
|
|
|
foreach ($data['filter_rules'] as $rule) {
|
|
|
|
switch ($rule['rule_type']) {
|
|
|
|
case 3:
|
|
|
|
$correspondent = null;
|
|
|
|
if(!empty($settings->_extensions['paperless']['correspondentsattr']) && $attrdef = $dms->getAttributeDefinition($settings->_extensions['paperless']['correspondentsattr'])) {
|
|
|
|
$valueset = $attrdef->getValueSetAsArray();
|
|
|
|
if(isset($valueset[$rule['value']-1])) {
|
|
|
|
$correspondent = $valueset[$rule['value']-1];
|
|
|
|
$cattrs['attr_'.$attrdef->getId()] = $correspondent;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
$catid = (int) $rule['value'];
|
|
|
|
if($catid) {
|
|
|
|
if($cat = $dms->getDocumentCategory($catid)) {
|
|
|
|
$categories[] = $cat;
|
|
|
|
$categorynames[] = $cat->getName();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2024-11-11 13:58:13 +00:00
|
|
|
case 8:
|
|
|
|
$aend = makeTsFromDate($rule['value']);
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
$astart = makeTsFromDate($rule['value']);
|
|
|
|
break;
|
2024-11-11 13:42:18 +00:00
|
|
|
case 13:
|
|
|
|
$aend = makeTsFromDate($rule['value']);
|
|
|
|
break;
|
|
|
|
case 14:
|
|
|
|
$astart = makeTsFromDate($rule['value']);
|
|
|
|
break;
|
|
|
|
case 19:
|
|
|
|
$query = $rule['value'];
|
|
|
|
break;
|
|
|
|
case 20:
|
|
|
|
$tmp = explode(',', $rule['value']);
|
|
|
|
foreach ($tmp as $t) {
|
|
|
|
if (substr($t, 0, 9) == 'created:[') {
|
|
|
|
$q = substr($t, 9, -1);
|
|
|
|
if($x = explode(' to ', $q, 2)) {
|
|
|
|
$astart = strtotime($x[0]);
|
|
|
|
$aend = strtotime($x[1])+86400;
|
|
|
|
}
|
|
|
|
} elseif (substr($t, 0, 7) == 'added:[') {
|
|
|
|
$q = substr($t, 7, -1);
|
|
|
|
if($x = explode(' to ', $q, 2)) {
|
|
|
|
$astart = strtotime($x[0]);
|
|
|
|
$aend = strtotime($x[1])+86400;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$query = $t;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return [$query, array('record_type'=>['document'], 'status'=>[2], 'user'=>[$user->getLogin()], 'category'=>$categorynames, 'created_start'=>$astart, 'created_end'=>$aend, 'modified_start'=>$mstart, 'modified_end'=>$mend, 'startFolder'=>$startfolder, 'rootFolder'=>$rootfolder, 'attributes'=>$cattrs)];
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
private function printList($data, $previewer) { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$user = $this->params['user'];
|
|
|
|
$settings = $this->params['settings'];
|
|
|
|
$fulltextservice = $this->params['fulltextservice'];
|
|
|
|
$logger = $this->params['logger'];
|
|
|
|
|
|
|
|
$order = [];
|
|
|
|
$order['dir'] = $data['sort_reverse'] ? 'desc' : 'asc';
|
|
|
|
$orderfield = $data["sort_field"];
|
|
|
|
if(in_array($orderfield, ['modified', 'created', 'title']))
|
|
|
|
$order['by'] = $orderfield;
|
|
|
|
elseif($orderfield == 'added')
|
|
|
|
$order['by'] = 'created';
|
|
|
|
elseif($orderfield == 'archive_serial_number')
|
|
|
|
$order['by'] = 'id';
|
|
|
|
elseif($orderfield == 'correspondent__name') {
|
|
|
|
if(!empty($settings->_extensions['paperless']['correspondentsattr']) && $attrdef = $dms->getAttributeDefinition($settings->_extensions['paperless']['correspondentsattr'])) {
|
|
|
|
$order['by'] = 'attr_'.$attrdef->getId();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
list($query, $searchparams) = $this->getSearchParameter($data);
|
|
|
|
|
|
|
|
if($fulltextservice && $index = $fulltextservice->Indexer()) {
|
|
|
|
$lucenesearch = $fulltextservice->Search();
|
|
|
|
$limit = 10;
|
|
|
|
$offset = 0;
|
|
|
|
$logger->log('Query is '.$query, PEAR_LOG_DEBUG);
|
|
|
|
/*
|
|
|
|
$logger->log('User is '.$userobj->getLogin(), PEAR_LOG_DEBUG);
|
|
|
|
$logger->log('limit is '.$limit, PEAR_LOG_DEBUG);
|
|
|
|
$logger->log('offset is '.$offset, PEAR_LOG_DEBUG);
|
|
|
|
*/
|
|
|
|
$searchresult = $lucenesearch->search($query, $searchparams, array('limit'=>$limit, 'offset'=>$offset), $order, array('no_facets'=>true));
|
|
|
|
if($searchresult) {
|
|
|
|
$recs = array();
|
|
|
|
$facets = $searchresult['facets'];
|
|
|
|
$dcount = 0;
|
|
|
|
$fcount = 0;
|
|
|
|
if($searchresult['hits']) {
|
|
|
|
$allids = '';
|
|
|
|
$this->printListHeader($previewer);
|
|
|
|
foreach($searchresult['hits'] as $hit) {
|
|
|
|
if($hit['document_id'][0] == 'D') {
|
|
|
|
if($document = $dms->getDocument((int) substr($hit['document_id'], 1))) {
|
|
|
|
$document->verifyLastestContentExpriry();
|
|
|
|
$v = new SeedDMS_Version();
|
|
|
|
if($v->majorVersion() > 5) {
|
|
|
|
$document->checkForDueRevisionWorkflow($user);
|
|
|
|
}
|
|
|
|
|
|
|
|
$lc = $document->getLatestContent();
|
|
|
|
if($document->getAccessMode($user) >= M_READ && $lc) {
|
|
|
|
$txt = $this->callHook('documentListItem', $document, $previewer, false, 'opentasks');
|
|
|
|
if(is_string($txt))
|
|
|
|
echo $txt;
|
|
|
|
else {
|
|
|
|
/*
|
|
|
|
$errormsg = '';
|
|
|
|
$errorcls = '';
|
|
|
|
if(!$doc['error']) {
|
|
|
|
} else {
|
|
|
|
$errorcls = $doc['error'] < 0 ? " error" : ($doc['error'] === 0 ? " success" : "");
|
|
|
|
$errormsg = $doc['error'];
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
$extracontent = array();
|
|
|
|
$extracontent['below_title'] = $this->getListRowPath($document);
|
|
|
|
echo $this->documentListRowStart($document);
|
|
|
|
echo $this->documentListRow($document, $previewer, true, 0, $extracontent);
|
|
|
|
echo $this->documentListRowEnd($document);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$this->printListFooter();
|
|
|
|
$logger->log('Result is '.$allids, PEAR_LOG_DEBUG);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
private function count($data) { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$user = $this->params['user'];
|
|
|
|
$settings = $this->params['settings'];
|
|
|
|
$fulltextservice = $this->params['fulltextservice'];
|
|
|
|
$logger = $this->params['logger'];
|
|
|
|
|
|
|
|
list($query, $searchparams) = $this->getSearchParameter($data);
|
|
|
|
|
|
|
|
if($fulltextservice && $index = $fulltextservice->Indexer()) {
|
|
|
|
$lucenesearch = $fulltextservice->Search();
|
|
|
|
$limit = 10;
|
|
|
|
$offset = 0;
|
|
|
|
$logger->log('Query is '.$query, PEAR_LOG_DEBUG);
|
|
|
|
/*
|
|
|
|
$logger->log('User is '.$userobj->getLogin(), PEAR_LOG_DEBUG);
|
|
|
|
$logger->log('limit is '.$limit, PEAR_LOG_DEBUG);
|
|
|
|
$logger->log('offset is '.$offset, PEAR_LOG_DEBUG);
|
|
|
|
*/
|
|
|
|
$searchresult = $lucenesearch->search($query, $searchparams, array('limit'=>0, 'offset'=>0), [], array('no_facets'=>true));
|
|
|
|
if($searchresult) {
|
|
|
|
return $searchresult['count'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
public function list() { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$user = $this->params['user'];
|
|
|
|
$settings = $this->params['settings'];
|
|
|
|
$pview = $this->params['pview'];
|
|
|
|
$cachedir = $this->params['cachedir'];
|
|
|
|
$conversionmgr = $this->params['conversionmgr'];
|
|
|
|
$previewwidth = $this->params['previewWidthList'];
|
|
|
|
$previewconverters = $this->params['previewconverters'];
|
|
|
|
$timeout = $this->params['timeout'];
|
|
|
|
|
|
|
|
$previewer = new SeedDMS_Preview_Previewer($cachedir, $previewwidth, $timeout);
|
|
|
|
if($conversionmgr)
|
|
|
|
$previewer->setConversionMgr($conversionmgr);
|
|
|
|
else
|
|
|
|
$previewer->setConverters($previewconverters);
|
|
|
|
|
|
|
|
if ($pview) {
|
|
|
|
$data = $pview->getView();
|
|
|
|
$this->printList($data, $previewer);
|
|
|
|
}
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
private function getFilterValue($rule) { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$settings = $this->params['settings'];
|
|
|
|
|
|
|
|
switch($rule['rule_type']) {
|
|
|
|
case 13: // Added until
|
|
|
|
case 14: // Added from
|
|
|
|
return getReadableDate($rule['value']);
|
|
|
|
case 3: // Correspondent
|
|
|
|
if(!empty($settings->_extensions['paperless']['correspondentsattr']) && $attrdef = $dms->getAttributeDefinition($settings->_extensions['paperless']['correspondentsattr'])) {
|
|
|
|
$valueset = $attrdef->getValueSetAsArray();
|
|
|
|
if(isset($valueset[$rule['value']-1])) {
|
|
|
|
return $valueset[$rule['value']-1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return '???';
|
|
|
|
break;
|
|
|
|
case 6: // Category
|
|
|
|
return $dms->getDocumentCategory($rule['value'])->getName();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return $rule['value'];
|
|
|
|
}
|
|
|
|
} /* }}} */
|
|
|
|
|
|
|
|
public function show() { /* {{{ */
|
|
|
|
$dms = $this->params['dms'];
|
|
|
|
$user = $this->params['user'];
|
|
|
|
$settings = $this->params['settings'];
|
|
|
|
$session = $this->params['session'];
|
|
|
|
|
|
|
|
$area = 'my_account';
|
|
|
|
$this->htmlStartPage(getMLText("paperless_views"), '', '../../');
|
|
|
|
$this->globalNavigation();
|
|
|
|
$this->contentStart();
|
|
|
|
$this->pageNavigation(getMLText($area), $area);
|
|
|
|
$this->contentHeading(getMLText("paperless_views"));
|
|
|
|
|
|
|
|
$this->rowStart();
|
|
|
|
$this->columnStart(4);
|
|
|
|
$views = SeedDMS_PaperlessView::getAllInstances($user, $dms);
|
|
|
|
|
|
|
|
if($views) {
|
|
|
|
print "<table id=\"paperlessviews-table\" class=\"table table-condensed table-sm table-hover\">";
|
|
|
|
print "<thead>\n<tr>\n";
|
|
|
|
print "<th>".getMLText("paperless_view_name")."</th>\n";
|
|
|
|
print "<th>".getMLText("paperless_view_rules")."</th>\n";
|
|
|
|
print "</tr>\n</thead>\n<tbody>\n";
|
|
|
|
foreach($views as $view) {
|
|
|
|
$data = $view->getView();
|
|
|
|
$c = $this->count($data);
|
|
|
|
echo "<tr class=\"view\" data-view=\"".$data['id']."\"><td><strong>".$data['name']." (".$c.")</strong>";
|
|
|
|
echo "<br>".getMLText('paperless_view_sort_by').": ".$data['sort_field'];
|
|
|
|
if ($data['show_on_dashboard']) {
|
|
|
|
echo "<br>".getMLText('paperless_view_dashboard').': <i class="fa fa-check"></i>';
|
|
|
|
}
|
|
|
|
if ($data['show_in_sidebar']) {
|
|
|
|
echo "<br>".getMLText('paperless_view_sidebar').': <i class="fa fa-check"></i>';
|
|
|
|
}
|
|
|
|
echo "</td>";
|
|
|
|
echo "<td>";
|
|
|
|
foreach ($data['filter_rules'] as $rule) {
|
|
|
|
echo getMLText('paperless_view_rule_'.$rule['rule_type']).": ".$this->getFilterValue($rule)."<br>";
|
|
|
|
}
|
|
|
|
// echo "<pre>";
|
|
|
|
// print_r($data);
|
|
|
|
// echo "</pre>";
|
|
|
|
echo "</td>";
|
|
|
|
echo "</tr>";
|
|
|
|
}
|
|
|
|
echo "</tbody>\n</table>\n";
|
|
|
|
} else {
|
|
|
|
$this->infoMsg(getMLText('upload_area_no_secret_info'));
|
|
|
|
}
|
|
|
|
$this->columnEnd();
|
|
|
|
$this->columnStart(8);
|
|
|
|
echo '<div id="paperless_view" class="ajax" data-base="ext/paperless/" data-view="PaperlessViews" data-action="list"></div>';
|
|
|
|
$this->columnEnd();
|
|
|
|
$this->rowEnd();
|
|
|
|
|
|
|
|
$this->contentEnd();
|
|
|
|
$this->htmlEndPage();
|
|
|
|
} /* }}} */
|
|
|
|
}
|
|
|
|
|
|
|
|
|