Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\DocumentScanner\DataTable;
|
||||
|
||||
use Aura\SqlQuery\Exception;
|
||||
use Xentral\Components\Database\SqlQuery\SelectQuery;
|
||||
use Xentral\Widgets\DataTable\Column\Column;
|
||||
use Xentral\Widgets\DataTable\Column\ColumnCollection;
|
||||
use Xentral\Widgets\DataTable\Column\ColumnFormatter;
|
||||
use Xentral\Widgets\DataTable\Feature\ColumnFilterFeature;
|
||||
use Xentral\Widgets\DataTable\Feature\FeatureCollection;
|
||||
use Xentral\Widgets\DataTable\Filter\CustomFilter;
|
||||
use Xentral\Widgets\DataTable\Filter\FilterCollection;
|
||||
use Xentral\Widgets\DataTable\Options\DataTableOptions;
|
||||
use Xentral\Widgets\DataTable\Request\DataTableRequest;
|
||||
use Xentral\Widgets\DataTable\Type\AbstractDataTableType;
|
||||
|
||||
final class DocScanFilesDataTable extends AbstractDataTableType
|
||||
{
|
||||
/**
|
||||
* @param ColumnCollection $columns
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function configureColumns(ColumnCollection $columns)
|
||||
{
|
||||
$preview = Column::visible('preview', 'Vorschau', 'center', '10%');
|
||||
$preview->setFormatter(ColumnFormatter::template(
|
||||
'<span style="width:100px;text-align:center;display:block;">' .
|
||||
'<a href="index.php?module=dateien&action=send&id={ID}">' .
|
||||
'<img src="index.php?module=ajax&action=thumbnail&cmd=docscan&id={ID}" alt="{DATEINAME}"'.
|
||||
' style="border:0;max-width:100px;max-height:100px;">' .
|
||||
'</a>' .
|
||||
'</span>'
|
||||
));
|
||||
|
||||
$title = Column::searchable('titel', 'Titel', 'left', '30%');
|
||||
$title->setFormatter(function ($value, $row) {
|
||||
return !empty($value)
|
||||
? sprintf('%s<br><i style="color:#999;">%s</i>', $value, $row['dateiname'])
|
||||
: $row['dateiname'];
|
||||
});
|
||||
|
||||
$filesize = Column::sortable('filesize', 'Dateigröße', 'right', '10%');
|
||||
$filesize->setFormatter(ColumnFormatter::bytes());
|
||||
|
||||
$menu = Column::fixed('menu', 'Menü', 'center', '1%');
|
||||
$menu->setFormatter(ColumnFormatter::template(
|
||||
'<table class="datatable-menu docscan-menu" align="center" border="0" cellpadding="0" cellspacing="0"><tr>' .
|
||||
'<td><a href="#" class="docscan-add-button" data-file="{FILE_ID}" data-type="{DOC_TYPE}" title="Datei zuweisen">' .
|
||||
'<img src="themes/new/images/add.png" alt="Datei zuweisen" border="0" align="center">' .
|
||||
'</a></td>' .
|
||||
'<td><a href="#" class="docscan-delete-button" data-file="{FILE_ID}" data-type="{DOC_TYPE}" title="Datei löschen">' .
|
||||
'<img src="themes/new/images/delete.svg" alt="Datei löschen" border="0" align="center">' .
|
||||
'</a></td>' .
|
||||
'</tr></table>'
|
||||
));
|
||||
|
||||
$date = Column::sortable('datum', 'Datum');
|
||||
$date->setFormatter(ColumnFormatter::date('d.m.Y'));
|
||||
|
||||
//$columns->add(Column::hidden('id', 'ID'));
|
||||
$columns->add($preview);
|
||||
$columns->add($title);
|
||||
$columns->add(Column::searchable('subjekt', 'Stichwort'));
|
||||
$columns->add(Column::searchable('objekte', 'Zuordnung'));
|
||||
$columns->add($filesize);
|
||||
$columns->add(Column::searchable('ersteller', 'Ersteller'));
|
||||
$columns->add(Column::searchable('bemerkung', 'Bemerkung'));
|
||||
$columns->add($date);
|
||||
$columns->add($menu);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SelectQuery $query
|
||||
*
|
||||
* @throws Exception
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function configureQuery(SelectQuery $query)
|
||||
{
|
||||
$query
|
||||
->cols([
|
||||
'd.id',
|
||||
'd.titel',
|
||||
'v.dateiname',
|
||||
'v.size AS filesize',
|
||||
'v.ersteller',
|
||||
'v.bemerkung',
|
||||
'v.datum',
|
||||
's.subjekt',
|
||||
'zuweisungen.objekte',
|
||||
'd.id AS file_id',
|
||||
'sb.kategorie AS doc_type',
|
||||
])
|
||||
->from('datei AS d')
|
||||
->leftJoin('datei_stichwoerter AS s', 'd.id = s.datei')
|
||||
->innerJoin('docscan AS sb', 'd.id = sb.datei AND s.parameter = sb.id')
|
||||
->joinSubSelect(
|
||||
'LEFT',
|
||||
'SELECT ds.datei FROM datei_stichwoerter AS ds WHERE ds.objekt NOT LIKE \'DocScan\' GROUP BY ds.datei',
|
||||
'notdocscan',
|
||||
'notdocscan.datei = d.id'
|
||||
)
|
||||
->joinSubSelect(
|
||||
'LEFT',
|
||||
'SELECT ds.datei, GROUP_CONCAT(ds.objekt SEPARATOR \', \') AS objekte
|
||||
FROM datei_stichwoerter AS ds
|
||||
WHERE ds.objekt NOT LIKE \'DocScan\'
|
||||
GROUP BY ds.datei',
|
||||
'zuweisungen',
|
||||
'zuweisungen.datei = d.id'
|
||||
)
|
||||
->joinSubSelect(
|
||||
'LEFT',
|
||||
'SELECT dvi1.datei, max(dvi1.version) AS version FROM datei_version AS dvi1 GROUP BY dvi1.datei',
|
||||
'v2',
|
||||
'v2.datei = d.id'
|
||||
)
|
||||
->leftJoin('datei_version AS v', 'v.datei = v2.datei AND v.version = v2.version')
|
||||
->where('s.objekt LIKE ?', 'DocScan')
|
||||
->where('d.geloescht = 0');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DataTableOptions $options
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function configureOptions(DataTableOptions $options)
|
||||
{
|
||||
$options->setDefaultSorting(['datum' => 'DESC']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FeatureCollection $features
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function configureFeatures(FeatureCollection $features)
|
||||
{
|
||||
$features->add(new ColumnFilterFeature());
|
||||
|
||||
parent::configureFeatures($features);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param FilterCollection $filters
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function configureFilters(FilterCollection $filters)
|
||||
{
|
||||
$closure = function (SelectQuery $query, DataTableRequest $request) {
|
||||
$filter = $request->getParams()->getFilterValues();
|
||||
if ($filter['show-all'] !== 'true') {
|
||||
$query->where('notdocscan.datei IS NULL');
|
||||
}
|
||||
};
|
||||
$filters->add(new CustomFilter($closure));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user