mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 00:12:15 +00:00
remove frontend filtering list for studiensemester, update logs TagJob
This commit is contained in:
@@ -34,7 +34,7 @@ class TagJob extends JOB_Controller
|
||||
|
||||
public function rebuildAutomatedTags()
|
||||
{
|
||||
$this->logInfo('Start Job rebuild Automated Tags');
|
||||
|
||||
|
||||
$automatedTagsRes = $this->NotiztypModel->loadWhere(array('automatisiert' => true, 'taglib IS NOT NULL' => null));
|
||||
$automatedTags = hasData($automatedTagsRes) ? getData($automatedTagsRes) : [];
|
||||
@@ -43,12 +43,14 @@ class TagJob extends JOB_Controller
|
||||
$result = $this->StudiensemesterModel->getAktOrNextSemester();
|
||||
if (isError($result))
|
||||
{
|
||||
$this->logInfo('Start Job rebuild Automated Tags');
|
||||
$this->logError('Error occurred during retrieving studiensemester');
|
||||
return $this->logInfo('End Job rebuild Automated Tags');
|
||||
}
|
||||
|
||||
if (empty($result->retval) || !isset($result->retval[0])) {
|
||||
$this->logInfo('No Studiensemester found');
|
||||
$this->logInfo('Start Job rebuild Automated Tags');
|
||||
$this->logError('No Studiensemester found');
|
||||
return $this->logInfo('End Job rebuild Automated Tags');
|
||||
}
|
||||
$studiensemester_kurzbz = $result->retval[0]->studiensemester_kurzbz ?? null;
|
||||
@@ -56,6 +58,7 @@ class TagJob extends JOB_Controller
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||
);
|
||||
|
||||
$this->logInfo('Start Job rebuild Automated Tags ' . $studiensemester_kurzbz);
|
||||
foreach($automatedTags as $autoTag)
|
||||
{
|
||||
// getPath: must not be lost
|
||||
@@ -64,7 +67,7 @@ class TagJob extends JOB_Controller
|
||||
if(file_exists($filePath)) {
|
||||
require_once($filePath);
|
||||
} else {
|
||||
$this->logInfo("File not found: " . $filePath . PHP_EOL);
|
||||
$this->logInfo("File not found: " . $filePath);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -93,9 +96,8 @@ class TagJob extends JOB_Controller
|
||||
|
||||
$data = is_array($result) ? $result['retval'] : $result->retval;
|
||||
|
||||
//PRINT OUTPUT CONSOLE
|
||||
//SUMMARY
|
||||
$this->logInfo("Tag " . $result->retval['input']['tag'] . " | TYPE_ID " . $typeId . " --"
|
||||
$this->logInfo("Tag " . $result->retval['input']['tag'] . " | type_id " . $typeId . " --"
|
||||
. " Count Recycled: " . $result->retval['summary']['recycled']
|
||||
. " Count Added: ". $result->retval['summary']['added']
|
||||
. " Count Deleted: ". $result->retval['summary']['deleted']);
|
||||
@@ -109,7 +111,7 @@ class TagJob extends JOB_Controller
|
||||
$this->logInfo("Tag " . $result->retval['input']['tag'] . "Recycled tag(s): " . implode(', ', $result->retval['results']['retaggedIds']));
|
||||
|
||||
}
|
||||
$this->logInfo( PHP_EOL . "End Job rebuild Automated Tags");
|
||||
$this->logInfo( "End Job rebuild Automated Tags");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
||||
'deleteTag' => self::BERECHTIGUNG_KURZBZ,
|
||||
'getAllTags' => self::BERECHTIGUNG_KURZBZ,
|
||||
'getAllStartAndEndAutomatedTags' => self::BERECHTIGUNG_KURZBZ,
|
||||
'rebuildTagsForTypeId' => self::BERECHTIGUNG_KURZBZ,
|
||||
];
|
||||
|
||||
@@ -351,24 +350,6 @@ class Tag_Controller extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
public function getAllStartAndEndAutomatedTags()
|
||||
{
|
||||
$this->NotizModel->addSelect('notiz_id as id');
|
||||
$this->NotizModel->addSelect('start');
|
||||
$this->NotizModel->addSelect('ende');
|
||||
$this->NotizModel->addSelect('typ');
|
||||
|
||||
$result = $this->NotizModel->loadWhere(array(
|
||||
'titel' => 'TAG',
|
||||
'verfasser_uid' => 'sftest'
|
||||
));
|
||||
|
||||
if (isError($result))
|
||||
return error('Error occurred during retrieving intervalls automated tags');
|
||||
$data = getData($result);
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
@@ -52,7 +52,6 @@ export default {
|
||||
};
|
||||
},
|
||||
|
||||
//TODO check if necessary to expand to other idTypes
|
||||
getAllTagsPrestudent(prestudent_id){
|
||||
return {
|
||||
method: 'get',
|
||||
@@ -61,13 +60,6 @@ export default {
|
||||
};
|
||||
},
|
||||
|
||||
getAllStartAndEndAutomatedTags(){
|
||||
return {
|
||||
method: 'get',
|
||||
url: 'api/frontend/v1/stv/Tags/getAllStartAndEndAutomatedTags',
|
||||
};
|
||||
},
|
||||
|
||||
rebuildTagsforTypeId(data){
|
||||
return {
|
||||
method: 'post',
|
||||
|
||||
@@ -237,8 +237,7 @@ export default {
|
||||
dragSource: [],
|
||||
oldScrollUrl: '',
|
||||
oldScrollLeft: 0,
|
||||
oldScrollTop: 0,
|
||||
intervalMap: {}
|
||||
oldScrollTop: 0
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -292,15 +291,10 @@ export default {
|
||||
.replace(/\//g, '_');
|
||||
return "StudentList_" + today + ".csv";
|
||||
},
|
||||
semesterDates(){
|
||||
return this.lists.studiensemester?.find(item => item.studiensemester_kurzbz === this.currentSemester) || {};
|
||||
}
|
||||
},
|
||||
created: function() {
|
||||
|
||||
if(this.tagsEnabled) {
|
||||
this.loadIntervals(); //preload
|
||||
|
||||
const coltags = {
|
||||
title: 'Tags',
|
||||
field: 'tags',
|
||||
@@ -308,36 +302,7 @@ export default {
|
||||
headerFilter: "input",
|
||||
headerFilterFunc: tagHeaderFilter,
|
||||
headerFilterFuncParams: {field: 'tags'},
|
||||
//formatter: (cell) => tagFormatter(cell, this.$refs.tagComponent), //prev. Version without filter
|
||||
formatter: (cell) => {
|
||||
const raw = cell.getValue();
|
||||
|
||||
const tags =
|
||||
Array.isArray(raw)
|
||||
? raw
|
||||
: (typeof raw === 'string'
|
||||
? JSON.parse(raw)
|
||||
: []);
|
||||
|
||||
const id = tags?.[0]?.id;
|
||||
|
||||
const interval = id
|
||||
? this.intervalMap[id]
|
||||
: null;
|
||||
|
||||
const enrichedTags = {
|
||||
tags: tags,
|
||||
start: interval?.start || null,
|
||||
ende: interval?.ende || null,
|
||||
};
|
||||
|
||||
return tagFormatter(
|
||||
enrichedTags,
|
||||
this.$refs?.tagComponent,
|
||||
this.semesterDates?.start,
|
||||
this.semesterDates?.ende
|
||||
);
|
||||
},
|
||||
formatter: (cell) => tagFormatter(cell, this.$refs.tagComponent),
|
||||
width: 150,
|
||||
};
|
||||
this.tabulatorOptions.columns.splice(2, 0, coltags);
|
||||
@@ -351,18 +316,6 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
loadIntervals() {
|
||||
return this.$api
|
||||
.call(ApiTag.getAllStartAndEndAutomatedTags())
|
||||
.then(result => {
|
||||
const data = result.data || [];
|
||||
this.intervalMap = {};
|
||||
data.forEach(item => {
|
||||
this.intervalMap[item.id] = item;
|
||||
});
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
translateTabulator() {
|
||||
this.$p
|
||||
.loadCategory(['global', 'person', 'lehre', 'ui', 'profilUpdate', 'admission', 'stv'])
|
||||
|
||||
@@ -1,115 +1,34 @@
|
||||
export function tagFormatter(
|
||||
cell,
|
||||
tagComponent,
|
||||
semesterStart = null,
|
||||
semesterEnd = null
|
||||
) {
|
||||
|
||||
// support both call versions
|
||||
// 1. previous Tabulator cell: old version
|
||||
// 2. custom enriched object: with start and end for tags plus semesterDates
|
||||
// for check if valid tag
|
||||
|
||||
const isTabulatorCell =
|
||||
cell && typeof cell.getValue === 'function';
|
||||
|
||||
const normalized = isTabulatorCell
|
||||
? {
|
||||
tags: cell.getValue() || [],
|
||||
start: null,
|
||||
ende: null,
|
||||
rowData: cell.getRow().getData(),
|
||||
}
|
||||
: {
|
||||
tags: cell.tags || [],
|
||||
start: cell.start || null,
|
||||
ende: cell.ende || null,
|
||||
rowData: cell.rowData || {},
|
||||
};
|
||||
|
||||
const tags = normalized.tags || [];
|
||||
|
||||
if (!tags.length) {
|
||||
return "";
|
||||
}
|
||||
|
||||
export function tagFormatter(cell, tagComponent)
|
||||
{
|
||||
const mappedData = tagComponent.tags.map(tag => ({
|
||||
typ_kurzbz: tag.tag_typ_kurzbz,
|
||||
automatisiert: tag.automatisiert,
|
||||
validFrom: normalized.start
|
||||
? new Date(normalized.start)
|
||||
: null,
|
||||
validTo: normalized.ende
|
||||
? new Date(normalized.ende)
|
||||
: null
|
||||
automatisiert: tag.automatisiert
|
||||
}));
|
||||
|
||||
const hasSemesterFilter =
|
||||
!!(semesterStart && semesterEnd);
|
||||
|
||||
const semStart = hasSemesterFilter ? new Date(semesterStart) : null;
|
||||
|
||||
const semEnd = hasSemesterFilter ? new Date(semesterEnd) : null;
|
||||
|
||||
const isInSemester = (tag) => {
|
||||
|
||||
if (!hasSemesterFilter) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!tag.validFrom && !tag.validTo) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (tag.validFrom && tag.validTo) {
|
||||
return (
|
||||
tag.validFrom <= semEnd &&
|
||||
tag.validTo >= semStart
|
||||
);
|
||||
}
|
||||
|
||||
if (tag.validFrom && !tag.validTo) {
|
||||
return tag.validFrom <= semEnd;
|
||||
}
|
||||
|
||||
if (!tag.validFrom && tag.validTo) {
|
||||
return tag.validTo >= semStart;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// parse tags if needed
|
||||
let parsedTags =
|
||||
typeof tags === 'string'
|
||||
? JSON.parse(tags)
|
||||
: tags;
|
||||
let tags = cell.getValue();
|
||||
if (!tags) return;
|
||||
|
||||
let container = document.createElement('div');
|
||||
container.className = "d-flex gap-1";
|
||||
|
||||
let parsedTags = [];
|
||||
if (typeof tags === 'string') {
|
||||
parsedTags = JSON.parse(tags);
|
||||
} else if (Array.isArray(tags)) {
|
||||
parsedTags = tags;
|
||||
}
|
||||
|
||||
let maxVisibleTags = 2;
|
||||
|
||||
const rowData = normalized.rowData;
|
||||
|
||||
const rowData = cell.getRow().getData();
|
||||
if (rowData._tagExpanded === undefined) {
|
||||
rowData._tagExpanded = false;
|
||||
}
|
||||
|
||||
const renderTags = () => {
|
||||
container.innerHTML = '';
|
||||
|
||||
parsedTags = parsedTags.filter(tag => {
|
||||
const mapped = mappedData.find(
|
||||
m => m.typ_kurzbz === tag.typ_kurzbz
|
||||
);
|
||||
|
||||
if (!mapped) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return isInSemester(mapped);
|
||||
});
|
||||
parsedTags = parsedTags.filter(item => item !== null);
|
||||
|
||||
parsedTags.sort((a, b) => {
|
||||
let adone = a.done ? 1 : 0;
|
||||
@@ -121,14 +40,10 @@ export function tagFormatter(
|
||||
}
|
||||
return b.id - a.id;
|
||||
});
|
||||
|
||||
const tagsToShow = rowData._tagExpanded
|
||||
? parsedTags
|
||||
: parsedTags.slice(0, maxVisibleTags);
|
||||
const tagsToShow = rowData._tagExpanded ? parsedTags : parsedTags.slice(0, maxVisibleTags);
|
||||
|
||||
tagsToShow.forEach(tag => {
|
||||
if (!tag) return;
|
||||
|
||||
let tagElement = document.createElement('span');
|
||||
tagElement.innerText = tag.beschreibung;
|
||||
tagElement.title = tag.notiz;
|
||||
@@ -151,10 +66,8 @@ export function tagFormatter(
|
||||
container.appendChild(tagElement);
|
||||
});
|
||||
|
||||
// show expand button
|
||||
if ( parsedTags.length > maxVisibleTags) {
|
||||
if (parsedTags.length > maxVisibleTags) {
|
||||
let toggle = document.createElement('button');
|
||||
|
||||
toggle.innerText = (rowData._tagExpanded ? '- ' : '+ ') + (parsedTags.length - maxVisibleTags);
|
||||
toggle.className = "display_all";
|
||||
toggle.title = rowData._tagExpanded ? "Tags ausblenden" : "Tags einblenden";
|
||||
|
||||
Reference in New Issue
Block a user