mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 20:29:29 +00:00
Studiensemester in Variable
This commit is contained in:
@@ -16,11 +16,15 @@ class Studentenverwaltung extends FHC_Controller
|
||||
{
|
||||
$this->load->library('AuthLib');
|
||||
$this->load->library('PermissionLib');
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
|
||||
$this->load->view('Studentenverwaltung', [
|
||||
'permissions' => [
|
||||
'student/bpk' => $this->permissionlib->isBerechtigt('student/bpk'),
|
||||
'student/alias' => $this->permissionlib->isBerechtigt('student/alias')
|
||||
],
|
||||
'variables' => [
|
||||
'semester_aktuell' => $this->variablelib->getVar('semester_aktuell')
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@ class Students extends FHC_Controller
|
||||
{
|
||||
// TODO(chris): access!
|
||||
parent::__construct();
|
||||
|
||||
$this->load->library('AuthLib');
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -169,8 +172,7 @@ class Students extends FHC_Controller
|
||||
*/
|
||||
protected function getStudents($studiengang_kz, $semester = null, $verband = null, $gruppe = null, $gruppe_kurzbz = null, $orgform_kurzbz = null)
|
||||
{
|
||||
// TODO(chris): stdSem from Variable
|
||||
$studiensemester_kurzbz='SS2023';
|
||||
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
@@ -277,8 +279,7 @@ class Students extends FHC_Controller
|
||||
*/
|
||||
protected function getStudent($student_uid)
|
||||
{
|
||||
// TODO(chris): stdSem from Variable
|
||||
$studiensemester_kurzbz='SS2023';
|
||||
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
@@ -353,8 +354,7 @@ class Students extends FHC_Controller
|
||||
*/
|
||||
protected function getPrestudent($prestudent_id)
|
||||
{
|
||||
// TODO(chris): stdSem from Variable
|
||||
$studiensemester_kurzbz='SS2023';
|
||||
$studiensemester_kurzbz = $this->variablelib->getVar('semester_aktuell');
|
||||
|
||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Studiensemester extends FHC_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
// TODO(chris): access!
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
$this->StudiensemesterModel->addOrder('start');
|
||||
|
||||
$result = $this->StudiensemesterModel->load();
|
||||
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
|
||||
$this->outputJson(getError($result));
|
||||
} elseif (!hasData($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_NOT_FOUND);
|
||||
$this->outputJson('NOT FOUND');
|
||||
} else {
|
||||
$this->outputJson(getData($result));
|
||||
}
|
||||
}
|
||||
|
||||
public function set()
|
||||
{
|
||||
$this->load->library('AuthLib');
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$_POST = json_decode(utf8_encode($this->input->raw_input_stream), true);
|
||||
|
||||
$this->form_validation->set_rules('studiensemester', 'Studiensemester', 'required');
|
||||
|
||||
if ($this->form_validation->run() == false) {
|
||||
$this->output->set_status_header(HTTP_BAD_REQUEST);
|
||||
return $this->outputJson($this->form_validation->error_array());
|
||||
}
|
||||
|
||||
$stdsem = $this->input->post('studiensemester');
|
||||
|
||||
$this->load->model('system/Variable_model', 'VariableModel');
|
||||
|
||||
$result = $this->VariableModel->setVariable(getAuthUID(), 'semester_aktuell', $stdsem);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->output->set_status_header(REST_Controller::HTTP_INTERNAL_SERVER_ERROR);
|
||||
return $this->outputJson(getError($result));
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess(true);
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@
|
||||
|
||||
<div id="main">
|
||||
<router-view
|
||||
default-semester="<?= $variables['semester_aktuell']; ?>"
|
||||
active-addons="<?= defined('ACTIVE_ADDONS') ? ACTIVE_ADDONS : ''; ?>"
|
||||
cis-root="<?= CIS_ROOT; ?>"
|
||||
:permissions="<?= htmlspecialchars(json_encode($permissions)); ?>"
|
||||
|
||||
@@ -20,17 +20,20 @@ import VerticalSplit from "../verticalsplit/verticalsplit.js";
|
||||
import StvVerband from "./Studentenverwaltung/Verband.js";
|
||||
import StvList from "./Studentenverwaltung/List.js";
|
||||
import StvDetails from "./Studentenverwaltung/Details.js";
|
||||
import StvStudiensemester from "./Studentenverwaltung/Studiensemester.js";
|
||||
|
||||
|
||||
export default {
|
||||
components: {
|
||||
FhcSearchbar,
|
||||
VerticalSplit,
|
||||
StvVerband,
|
||||
StvList,
|
||||
StvDetails,
|
||||
VerticalSplit
|
||||
StvStudiensemester
|
||||
},
|
||||
props: {
|
||||
defaultSemester: String,
|
||||
config: Object,
|
||||
permissions: Object,
|
||||
cisRoot: String,
|
||||
@@ -89,6 +92,9 @@ export default {
|
||||
},
|
||||
searchfunction(searchsettings) {
|
||||
return Vue.$fhcapi.Search.search(searchsettings);
|
||||
},
|
||||
studiensemesterChanged() {
|
||||
this.$refs.stvList.updateUrl();
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@@ -112,7 +118,8 @@ export default {
|
||||
<div class="offcanvas-header justify-content-end px-1 d-md-none">
|
||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<stv-verband @select-verband="onSelectVerband"></stv-verband>
|
||||
<stv-verband @select-verband="onSelectVerband" class="col" style="height:0%"></stv-verband>
|
||||
<stv-studiensemester :default="defaultSemester" @changed="studiensemesterChanged"></stv-studiensemester>
|
||||
</nav>
|
||||
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
|
||||
<vertical-split>
|
||||
|
||||
@@ -78,22 +78,23 @@ export default {
|
||||
this.$emit('update:selected', data);
|
||||
},
|
||||
updateUrl(url) {
|
||||
this.$refs.table.tabulator.on("dataProcessed", () => {
|
||||
let rows = this.$refs.table.tabulator.getRows();
|
||||
if (rows.length && rows.length == 1) {
|
||||
this.$refs.table.tabulator.selectRow();
|
||||
}
|
||||
});
|
||||
|
||||
if (url)
|
||||
url = CoreRESTClient._generateRouterURI(url);
|
||||
if (!this.$refs.table.tableBuilt)
|
||||
this.$refs.table.tabulator.on("tableBuilt", () => {
|
||||
this.$refs.table.tabulator.setData(CoreRESTClient._generateRouterURI(url));
|
||||
this.$refs.table.tabulator.setData(url);
|
||||
});
|
||||
else
|
||||
this.$refs.table.tabulator.setData(CoreRESTClient._generateRouterURI(url));
|
||||
this.$refs.table.tabulator.setData(url);
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$refs.table.tabulator.on("dataProcessed", () => {
|
||||
let rows = this.$refs.table.tabulator.getRows();
|
||||
if (rows.length && rows.length == 1) {
|
||||
this.$refs.table.tabulator.selectRow();
|
||||
}
|
||||
});
|
||||
},
|
||||
template: `
|
||||
<div class="stv-list h-100 pt-3">
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
import {CoreRESTClient} from '../../../RESTClient.js';
|
||||
|
||||
export default {
|
||||
emits: [
|
||||
'changed'
|
||||
],
|
||||
props: {
|
||||
default: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
current: 0,
|
||||
loading: true,
|
||||
list: []
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
set(n) {
|
||||
this.loading = true;
|
||||
let fallback = this.current;
|
||||
this.current = n;
|
||||
this.save(fallback);
|
||||
},
|
||||
next() {
|
||||
this.loading = true;
|
||||
let fallback = this.current;
|
||||
if (this.current++ >= this.list.length)
|
||||
this.current = this.list.length - 1;
|
||||
this.save(fallback);
|
||||
},
|
||||
prev() {
|
||||
this.loading = true;
|
||||
let fallback = this.current;
|
||||
if (this.current-- < 0)
|
||||
this.current = 0;
|
||||
this.save(fallback);
|
||||
},
|
||||
save(fallback) {
|
||||
CoreRESTClient
|
||||
.post('components/stv/studiensemester/set', {
|
||||
studiensemester: this.list[this.current]
|
||||
})
|
||||
.then(() => {
|
||||
this.loading = false;
|
||||
this.$emit('changed');
|
||||
})
|
||||
.catch(() => {
|
||||
this.current = fallback;
|
||||
// TODO(chris): emit error
|
||||
});
|
||||
}
|
||||
},
|
||||
created() {
|
||||
CoreRESTClient
|
||||
.get('components/stv/studiensemester')
|
||||
.then(result => result.data)
|
||||
.then(result => {
|
||||
this.list = result.map(el => el.studiensemester_kurzbz);
|
||||
this.loading = false;
|
||||
this.current = this.list.indexOf(this.default);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
});
|
||||
},
|
||||
template: `
|
||||
<div class="stv-studiensemester">
|
||||
<div class="btn-group w-100 dropup" role="group" aria-label="Basic example">
|
||||
<button type="button" class="btn btn-outline-secondary flex-grow-0" @click="prev"><i class="fa-solid fa-caret-left"></i></button>
|
||||
<button type="button" class="btn btn-outline-secondary" data-bs-toggle="dropdown" data-bs-display="static" data-bs-offset="0,0" aria-expanded="false">
|
||||
{{list[current]}}
|
||||
<i v-if="loading" class="fa-solid fa-spinner fa-spin"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-dark overflow-auto w-100" style="max-height:60vh">
|
||||
<li v-for="(item, index) in list" :key="index">
|
||||
<a class="dropdown-item" :class="{active: index == current}" :aria-current="index == current ? 'true' : 'false'" href="#" @click="set(index)">{{item}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<button type="button" class="btn btn-outline-secondary flex-grow-0" @click="next"><i class="fa-solid fa-caret-right"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
}
|
||||
Reference in New Issue
Block a user