mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
Projektabgabe Uebersicht: added zip download, bugfixes Projektabgabe search
This commit is contained in:
@@ -14,7 +14,6 @@
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
|
||||
class PaabgabeUebersicht extends FHCAPI_Controller
|
||||
{
|
||||
const DOWNLOAD_PERMISSION = 'lehre/abgabetool:download';
|
||||
@@ -26,16 +25,22 @@ class PaabgabeUebersicht extends FHCAPI_Controller
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getStudiengaenge' => array('lehre/abgabetool:r'),
|
||||
'getPaAbgaben' => array('lehre/abgabetool:r'),
|
||||
'getStudiengaenge' => array('lehre/abgabetool:r'),
|
||||
'getTermine' => array('lehre/abgabetool:r'),
|
||||
'getPaAbgabetypen' => array('lehre/abgabetool:r')
|
||||
'getPaAbgabetypen' => array('lehre/abgabetool:r'),
|
||||
'downloadZip' => array('lehre/abgabetool:r')
|
||||
//'downloadProjektarbeit' => array('lehre/abgabetool:r')
|
||||
]);
|
||||
|
||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
||||
|
||||
$this->load->library('PermissionLib');
|
||||
|
||||
// Load Phrases
|
||||
$this->loadPhrases([
|
||||
'abgabetool'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -50,32 +55,13 @@ class PaabgabeUebersicht extends FHCAPI_Controller
|
||||
$abgabedatum = $this->input->get('abgabedatum');
|
||||
$personSearchString = $this->input->get('personSearchString');
|
||||
|
||||
|
||||
$result = $this->PaabgabeModel->getPaAbgaben(self::ABGABE_TYPES, $studiengang_kz, $abgabetyp_kurzbz, $abgabedatum, $personSearchString);
|
||||
$this->addMeta('res', $result);
|
||||
|
||||
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
|
||||
$this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
//~ public function searchPaAbgabenByPerson()
|
||||
//~ {
|
||||
//~ $searchString = $this->input->get('searchString');
|
||||
|
||||
//~ $result = $this->PaabgabeModel->searchPaAbgabenByPerson(self::ABGABE_TYPES, $searchString);
|
||||
//~ $this->addMeta('res', $result);
|
||||
|
||||
//~ if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
|
||||
//~ $this->terminateWithSuccess(getData($result) ?: []);
|
||||
//~ }
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@@ -99,7 +85,6 @@ class PaabgabeUebersicht extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@@ -127,6 +112,7 @@ class PaabgabeUebersicht extends FHCAPI_Controller
|
||||
// Load model PaabgabetypModel
|
||||
$this->load->model('education/Paabgabetyp_model', 'PaabgabetypModel');
|
||||
|
||||
$this->PaabgabetypModel->addOrder('bezeichnung');
|
||||
$result = $this->PaabgabetypModel->load();
|
||||
|
||||
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||
@@ -134,6 +120,52 @@ class PaabgabeUebersicht extends FHCAPI_Controller
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param
|
||||
* @return object success or error
|
||||
*/
|
||||
public function downloadZip()
|
||||
{
|
||||
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||
$abgabetyp_kurzbz = $this->input->get('abgabetyp_kurzbz');
|
||||
$abgabedatum = $this->input->get('abgabedatum');
|
||||
$personSearchString = $this->input->get('personSearchString');
|
||||
|
||||
if (!isset($studiengang_kz) && !isset($abgabetyp_kurzbz) && !isset($abgabedatum) && !isset($personSearchString))
|
||||
$this->terminateWithFileOutput('text/plain', $this->p->t('abgabetool', 'keineAuswahl'));
|
||||
|
||||
$this->load->library('zip');
|
||||
|
||||
$result = $this->PaabgabeModel->getPaAbgaben(self::ABGABE_TYPES, $studiengang_kz, $abgabetyp_kurzbz, $abgabedatum, $personSearchString);
|
||||
|
||||
if (isError($result)) $this->terminateWithFileOutput('text/plain', getError($result));
|
||||
|
||||
$fileExists = false;
|
||||
$studiengang_kuerzel = null;
|
||||
|
||||
if (!hasData($result)) $this->terminateWithFileOutput('text/plain', $this->p->t('abgabetool', 'keineDateienVorhanden'));
|
||||
|
||||
$abgaben = getData($result);
|
||||
|
||||
foreach ($abgaben as $abgabe)
|
||||
{
|
||||
$path = PAABGABE_PATH.$abgabe->paabgabe_id.'_'.$abgabe->uid.'.pdf';
|
||||
if (file_exists($path))
|
||||
{
|
||||
$fileExists = true;
|
||||
$studiengang_kuerzel = $abgabe->studiengang_kuerzel;
|
||||
$this->zip->read_file($path);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$fileExists) $this->terminateWithFileOutput('text/plain', $this->p->t('abgabetool', 'keineDateienVorhanden'));
|
||||
|
||||
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||
$zipFileName = 'Abgabe'.(isset($studiengang_kz) && isset($studiengang_kuerzel) ? '_'.$studiengang_kuerzel : '').'.zip';
|
||||
$this->zip->download($zipFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Download Projektarbeit document.
|
||||
*/
|
||||
|
||||
@@ -67,34 +67,25 @@ class Paabgabe_model extends DB_Model
|
||||
$abgabetyp_kurzbz = null,
|
||||
$abgabedatum = null,
|
||||
$personSearchString = null,
|
||||
$limit = 100
|
||||
$limit = 1000
|
||||
) {
|
||||
// convert search string
|
||||
if (is_numeric($personSearchString))
|
||||
{
|
||||
$personSearchString = (int) $personSearchString;
|
||||
}
|
||||
else
|
||||
{
|
||||
// remove empty spaces and lowercase
|
||||
$personSearchString = strtolower(str_replace(' ', '', $personSearchString));
|
||||
}
|
||||
|
||||
$params = [];
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
tbl_studiengang.bezeichnung AS stgbez, tbl_paabgabe.datum AS termin,
|
||||
tbl_paabgabe.*, abgabetyp.bezeichnung AS paabgabetyp_bezeichnung, ben.uid, pers.vorname, pers.nachname, pa.projekttyp_kurzbz, pa.titel
|
||||
stg.bezeichnung AS stgbez, paabg.datum AS termin,
|
||||
paabg.paabgabe_id, paabg.projektarbeit_id, paabg.paabgabetyp_kurzbz, paabg.abgabedatum,
|
||||
abgabetyp.bezeichnung AS paabgabetyp_bezeichnung, ben.uid, pers.vorname, pers.nachname, pa.projekttyp_kurzbz, pa.titel,
|
||||
UPPER(stg.typ || stg.kurzbz) AS studiengang_kuerzel
|
||||
FROM
|
||||
lehre.tbl_projektarbeit pa
|
||||
JOIN campus.tbl_paabgabe USING(projektarbeit_id)
|
||||
JOIN campus.tbl_paabgabe paabg USING(projektarbeit_id)
|
||||
JOIN campus.tbl_paabgabetyp abgabetyp USING(paabgabetyp_kurzbz)
|
||||
LEFT JOIN public.tbl_benutzer ben ON(uid=student_uid)
|
||||
LEFT JOIN public.tbl_person pers ON(ben.person_id=pers.person_id)
|
||||
LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
LEFT JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
TRUE";
|
||||
|
||||
@@ -106,24 +97,25 @@ class Paabgabe_model extends DB_Model
|
||||
|
||||
if (isset($studiengang_kz) && is_numeric($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND public.tbl_studiengang.studiengang_kz=?";
|
||||
$qry .= " AND stg.studiengang_kz=?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($abgabetyp_kurzbz))
|
||||
{
|
||||
$qry .= " AND campus.tbl_paabgabe.paabgabetyp_kurzbz=?";
|
||||
$qry .= " AND paabg.paabgabetyp_kurzbz=?";
|
||||
$params[] = $abgabetyp_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($abgabedatum))
|
||||
{
|
||||
$qry .= " AND campus.tbl_paabgabe.datum=?";
|
||||
$qry .= " AND paabg.datum=?";
|
||||
$params[] = $abgabedatum;
|
||||
}
|
||||
|
||||
if (is_integer($personSearchString))
|
||||
if (is_numeric($personSearchString))
|
||||
{
|
||||
$personSearchString = (int) $personSearchString;
|
||||
$params = array_merge($params, [$personSearchString, $personSearchString]);
|
||||
$qry .= " AND (
|
||||
pers.person_id = ?
|
||||
@@ -132,6 +124,8 @@ class Paabgabe_model extends DB_Model
|
||||
}
|
||||
elseif (is_string($personSearchString))
|
||||
{
|
||||
// remove empty spaces and lowercase
|
||||
$personSearchString = strtolower(str_replace(' ', '', $personSearchString));
|
||||
$qry .= " AND (
|
||||
LOWER(REPLACE(pers.nachname || pers.vorname || pers.nachname, ' ', '')) LIKE ".$this->db->escape('%'.$personSearchString.'%')."
|
||||
OR ben.uid LIKE ".$this->db->escape('%'.$personSearchString.'%')."
|
||||
@@ -140,9 +134,7 @@ class Paabgabe_model extends DB_Model
|
||||
|
||||
$qry .= " ORDER BY nachname";
|
||||
|
||||
if (isset($limit) && is_numeric($limit)
|
||||
&& (!isset($studiengang_kz) || !is_numeric($studiengang_kz))
|
||||
&& !isset($abgabetyp_kurzbz) && !isset($abgabedatum))
|
||||
if (isset($limit) && is_numeric($limit) && (!isset($studiengang_kz) || !is_numeric($studiengang_kz)) && !isset($abgabedatum))
|
||||
{
|
||||
$qry .= " LIMIT ?";
|
||||
$params[] = $limit;
|
||||
@@ -191,67 +183,4 @@ class Paabgabe_model extends DB_Model
|
||||
|
||||
return $this->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
|
||||
//~ public function searchPaAbgabenByPerson($projekttyp_kurzbz_arr, $searchString, $limit = 100)
|
||||
//~ {
|
||||
//~ if (is_numeric($searchString))
|
||||
//~ {
|
||||
//~ $searchString = (int) $searchString;
|
||||
//~ }
|
||||
//~ else
|
||||
//~ {
|
||||
//~ $searchString = strtolower(str_replace(' ', '', $searchString));
|
||||
//~ }
|
||||
|
||||
//~ $params = [];
|
||||
|
||||
//~ $qry = "
|
||||
//~ SELECT
|
||||
//~ tbl_studiengang.bezeichnung AS stgbez, tbl_paabgabe.datum AS termin,
|
||||
//~ tbl_paabgabe.*, abgabetyp.bezeichnung AS paabgabetyp_bezeichnung, ben.uid, pers.vorname, pers.nachname, pa.projekttyp_kurzbz, pa.titel
|
||||
//~ FROM
|
||||
//~ lehre.tbl_projektarbeit pa
|
||||
//~ JOIN campus.tbl_paabgabe USING(projektarbeit_id)
|
||||
//~ JOIN campus.tbl_paabgabetyp abgabetyp USING(paabgabetyp_kurzbz)
|
||||
//~ LEFT JOIN public.tbl_benutzer ben ON(uid=student_uid)
|
||||
//~ LEFT JOIN public.tbl_person pers ON(ben.person_id=pers.person_id)
|
||||
//~ LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
//~ LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
//~ LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
//~ WHERE
|
||||
//~ TRUE";
|
||||
|
||||
//~ if (isset($projekttyp_kurzbz_arr) && !isEmptyArray($projekttyp_kurzbz_arr))
|
||||
//~ {
|
||||
//~ $qry .= " AND projekttyp_kurzbz IN ?";
|
||||
//~ $params[] = $projekttyp_kurzbz_arr;
|
||||
//~ }
|
||||
|
||||
|
||||
//~ if (is_integer($searchString))
|
||||
//~ {
|
||||
//~ $params = array_merge($params, [$searchString, $searchString]);
|
||||
//~ $qry .= " AND (
|
||||
//~ pers.person_id = ?
|
||||
//~ OR EXISTS (SELECT 1 FROM public.tbl_prestudent WHERE person_id = pers.person_id AND prestudent_id = ?)
|
||||
//~ )";
|
||||
//~ }
|
||||
//~ else
|
||||
//~ {
|
||||
//~ $qry .= " AND (
|
||||
//~ LOWER(REPLACE(pers.nachname || pers.vorname || pers.nachname, ' ', '')) LIKE ".$this->db->escape('%'.$searchString.'%')."
|
||||
//~ OR ben.uid LIKE ".$this->db->escape('%'.$searchString.'%')."
|
||||
//~ )";
|
||||
//~ }
|
||||
|
||||
//~ $qry .= " ORDER BY nachname";
|
||||
|
||||
//~ if (isset($limit) && is_numeric($limit))
|
||||
//~ {
|
||||
//~ $qry .= " LIMIT ?";
|
||||
//~ $params[] = $limit;
|
||||
//~ }
|
||||
|
||||
//~ return $this->execReadOnlyQuery($qry, $params);
|
||||
//~ }
|
||||
}
|
||||
|
||||
@@ -8,13 +8,6 @@ export default {
|
||||
}
|
||||
};
|
||||
},
|
||||
//~ searchPaAbgabenByPerson(searchString) {
|
||||
//~ return {
|
||||
//~ method: 'get',
|
||||
//~ url: '/api/frontend/v1/education/PaabgabeUebersicht/searchPaAbgabenByPerson',
|
||||
//~ params: { searchString: searchString }
|
||||
//~ };
|
||||
//~ },
|
||||
getStudiengaenge() {
|
||||
return {
|
||||
method: 'get',
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import {CoreFilterCmpt} from "../../../components/filter/Filter.js";
|
||||
import VueDatePicker from '../../vueDatepicker.js.php';
|
||||
import ApiPaabgabe from '../../../api/factory/paabgabeUebersicht.js'
|
||||
import Loader from "../../Loader.js";
|
||||
|
||||
@@ -9,7 +8,6 @@ export const ProjektabgabeUebersicht = {
|
||||
viewData: Object // NOTE: this is inherited from router-view
|
||||
},
|
||||
components: {
|
||||
VueDatePicker,
|
||||
CoreFilterCmpt,
|
||||
Loader
|
||||
},
|
||||
@@ -115,7 +113,7 @@ export const ProjektabgabeUebersicht = {
|
||||
tableResolve(resolve) {
|
||||
this.tableBuiltResolve = resolve
|
||||
},
|
||||
setupData(data){
|
||||
setupData(){
|
||||
//~ const d = data.map(paabgabe => {
|
||||
//~ return {
|
||||
//~ ort_kurzbz: paabgabe.ort_kurzbz,
|
||||
@@ -125,7 +123,7 @@ export const ProjektabgabeUebersicht = {
|
||||
//~ }
|
||||
//~ })
|
||||
|
||||
this.$refs.paabgabeTable.tabulator.setData(data);
|
||||
this.$refs.paabgabeTable.tabulator.setData(this.abgaben);
|
||||
},
|
||||
setNoDataPlaceholder() {
|
||||
this.$refs.paabgabeTable.tabulatorOptions.placeholder = this.$p.t('global/noDataAvailable');
|
||||
@@ -145,45 +143,37 @@ export const ProjektabgabeUebersicht = {
|
||||
loadTermine() {
|
||||
this.$api.call(ApiPaabgabe.getTermine(this.selectedStudiengang, this.selectedAbgabetyp))
|
||||
.then(res => {
|
||||
this.selectedTermin = null;
|
||||
this.termine = res?.data ?? []
|
||||
})
|
||||
},
|
||||
loadPaAbgaben() {
|
||||
this.$refs.loader.show();
|
||||
//~ const func =
|
||||
//~ this.personSearchString && this.personSearchString != ''
|
||||
//~ ? ApiPaabgabe.searchPaAbgabenByPerson(this.personSearchString)
|
||||
//~ : ApiPaabgabe.getPaAbgaben(this.selectedStudiengang, this.selectedAbgabetyp, this.selectedTermin);
|
||||
|
||||
this.$api.call(
|
||||
ApiPaabgabe.getPaAbgaben(this.selectedStudiengang, this.selectedAbgabetyp, this.selectedTermin, this.personSearchString)
|
||||
)
|
||||
.then(res => {
|
||||
this.$refs.loader.hide();
|
||||
this.abgaben = res?.data ?? [];
|
||||
this.setupData(res?.data ?? []);
|
||||
});
|
||||
},
|
||||
handleUuidDefined(uuid) {
|
||||
this.tabulatorUuid = uuid
|
||||
},
|
||||
searchPaAbgabenByPerson(){
|
||||
this.$api.call(ApiPaabgabe.getPaAbgaben(this.selectedStudiengang, this.selectedAbgabetyp, this.selectedTermin))
|
||||
.then(res => {
|
||||
this.setupData(res?.data ?? []);
|
||||
//this.abgaben = res?.data ?? []
|
||||
});
|
||||
},
|
||||
//~ setRoute(val) {
|
||||
//~ // TODO: router push
|
||||
//~ },
|
||||
async setupMounted() {
|
||||
this.loadStudiengaenge();
|
||||
this.loadPaabgabeTypes();
|
||||
this.loadTermine();
|
||||
|
||||
this.tableBuiltPromise = new Promise(this.tableResolve);
|
||||
await this.tableBuiltPromise;
|
||||
|
||||
this.setNoDataPlaceholder();
|
||||
this.loadStudiengaenge();
|
||||
this.loadPaabgabeTypes();
|
||||
this.loadTermine();
|
||||
//this.loadPaAbgaben();
|
||||
|
||||
|
||||
@@ -202,21 +192,35 @@ export const ProjektabgabeUebersicht = {
|
||||
//~ window.open(
|
||||
//~ FHC_JS_DATA_STORAGE_OBJECT.app_root
|
||||
//~ + FHC_JS_DATA_STORAGE_OBJECT.ci_router
|
||||
//~ +'/api/frontend/v1/education/paabgabe/downloadProjektarbeit?paabgabe_id=' + encodeURIComponent(paabgabe_id),
|
||||
//~ +'/api/frontend/v1/education/paabgabeuebersicht/downloadProjektarbeit?paabgabe_id=' + encodeURIComponent(paabgabe_id),
|
||||
//~ '_blank'
|
||||
//~ );
|
||||
},
|
||||
actionDownloadZip(ev) {
|
||||
console.log(ev);
|
||||
const url = new URL(FHC_JS_DATA_STORAGE_OBJECT.app_root
|
||||
+ FHC_JS_DATA_STORAGE_OBJECT.ci_router
|
||||
+'/api/frontend/v1/education/PaabgabeUebersicht/downloadZip');
|
||||
if (this.selectedStudiengang) url.searchParams.append('studiengang_kz', this.selectedStudiengang);
|
||||
if (this.selectedAbgabetyp) url.searchParams.append('abgabetyp_kurzbz', this.selectedAbgabetyp);
|
||||
if (this.selectedTermin) url.searchParams.append('abgabedatum', this.selectedTermin);
|
||||
if (this.personSearchString) url.searchParams.append('personSearchString', this.personSearchString);
|
||||
console.log(url.toString());
|
||||
window.open(url.toString(), '_blank');
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isDarkMode(){
|
||||
isDarkMode() {
|
||||
return this.$theme.theme_name.value == 'dark';
|
||||
},
|
||||
personSearchEnabled() {
|
||||
this.loadTermine();
|
||||
return this.selectedStudiengang == null && this.selectedTermin == null && this.selectedAbgabetyp == null;
|
||||
},
|
||||
abgabeSearchEnabled() {
|
||||
return this.personSearchString == '' || this.personSearchString == null;
|
||||
},
|
||||
zipDownloadUrl() {
|
||||
return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/api/frontend/v1/education/PaabgabeUebersicht/downloadZip';
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@@ -290,6 +294,10 @@ export const ProjektabgabeUebersicht = {
|
||||
<div class="col-12 col-lg-2">
|
||||
<button class="btn btn-primary border-0" @click="loadPaAbgaben">{{ $p.t('abgabetool/anzeigen') }}</button>
|
||||
</div>
|
||||
<div class="col-12 col-lg-2">
|
||||
<button class="btn btn-secondary border-0" @click="actionDownloadZip">{{ $p.t('abgabetool/zipDownload') }}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<core-filter-cmpt
|
||||
|
||||
Reference in New Issue
Block a user