Favorites => fhcApi

This commit is contained in:
cgfhtw
2024-05-21 10:53:23 +02:00
parent 1f45ddc17d
commit 17512e60b2
4 changed files with 102 additions and 10 deletions
@@ -0,0 +1,74 @@
<?php
/**
* Copyright (C) 2024 fhcomplete.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
if (! defined('BASEPATH')) exit('No direct script access allowed');
/**
* This controller operates between (interface) the JS (GUI) and the back-end
* Provides data to the ajax get calls about favorite verbände
* Listens to ajax post calls to change the favorite verbände data
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
*/
class Favorites extends FHCAPI_Controller
{
public function __construct()
{
// TODO(chris): access!
parent::__construct([
'index' => self::PERM_LOGGED,
'set' => self::PERM_LOGGED
]);
// Load models
$this->load->model('system/Variable_model', 'VariableModel');
// TODO(chris): variable table might be to small to store favorites!
}
public function index()
{
$result = $this->VariableModel->getVariables(getAuthUID(), ['stv_favorites']);
$data = $this->getDataOrTerminateWithError($result);
if (!$data)
$this->outputJson(null);
else
$this->outputJson($data['stv_favorites']);
}
public function set()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('favorites', 'Favorites', 'required');
if ($this->form_validation->run() == false) {
$this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST);
return $this->outputJson($this->form_validation->error_array());
}
$favorites = $this->input->post('favorites');
$result = $this->VariableModel->setVariable(getAuthUID(), 'stv_favorites', $favorites);
$this->getDataOrTerminateWithError($result);
$this->outputJsonSuccess(true);
}
}
+2
View File
@@ -1,7 +1,9 @@
import verband from './stv/verband.js';
import filter from './stv/filter.js';
import konto from './stv/konto.js';
export default {
verband,
filter,
konto,
configStudent() {
+15
View File
@@ -0,0 +1,15 @@
export default {
get() {
return this.$fhcApi.get('api/frontend/v1/stv/verband');
},
favorites: {
get() {
return this.$fhcApi.get('api/frontend/v1/stv/favorites');
},
set(favorites) {
return this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {
favorites
});
}
}
}
@@ -105,7 +105,8 @@ export default {
this.favnodes = await this.loadNodes(this.favorites.list);
}
this.favorites.on = !this.favorites.on;
CoreRESTClient.post("components/stv/favorites/set", {favorites: JSON.stringify(this.favorites)});
this.$fhcApi
.factory.stv.verband.favorites.set(JSON.stringify(this.favorites));
this.loading = false;
},
async loadNodes(links) {
@@ -156,7 +157,8 @@ export default {
this.favorites.list.push(key.data.link + '');
}
CoreRESTClient.post("components/stv/favorites/set", {favorites: JSON.stringify(this.favorites)});
this.$fhcApi
.factory.stv.verband.favorites.set(JSON.stringify(this.favorites));
},
unsetFavFocus(e) {
if (e.target.dataset?.linkFavAdd !== undefined) {
@@ -177,19 +179,18 @@ export default {
},
mounted() {
this.$fhcApi
.get('api/frontend/v1/stv/verband')
.then(result => result.data)
.factory.stv.verband.get()
.then(result => {
this.nodes = result.map(this.mapResultToTreeData);
this.nodes = result.data.map(this.mapResultToTreeData);
this.loading = false;
})
.catch(this.$fhcAlert.handleSystemError);
CoreRESTClient
.get("components/stv/favorites")
.then(result => result.data)
this.$fhcApi
.factory.stv.verband.favorites.get()
.then(result => {
if (result) {
let f = JSON.parse(result);
if (result.data) {
let f = JSON.parse(result.data);
if (f.on) {
this.loading = true;
this.favorites = f;