mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-22 17:32:18 +00:00
prepare basic framework
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class Messages extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'getMessages' => ['admin:r', 'assistenz:r'],
|
||||
]);
|
||||
|
||||
//Load Models
|
||||
$this->load->model('system/Message_model', 'MessageModel');
|
||||
|
||||
// Additional Permission Checks
|
||||
//TODO(manu) check permissions
|
||||
|
||||
// Load Libraries
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
$this->load->library('form_validation');
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui'
|
||||
]);
|
||||
}
|
||||
|
||||
public function getMessages($id, $type_id)
|
||||
{
|
||||
//$this->terminateWithError("in backend " . $type_id . ": " . $id, self::ERROR_TYPE_GENERAL);
|
||||
|
||||
if ($type_id != "person_id")
|
||||
{
|
||||
$this->terminateWithError("logic for type_id " . $type_id . " not defined yet", self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$result = $this->MessageModel->getMessagesOfPerson($id);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
}
|
||||
@@ -91,6 +91,10 @@ class Config extends FHCAPI_Controller
|
||||
'title' => $this->p->t('stv', 'tab_resources'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Betriebsmittel.js'
|
||||
];
|
||||
$result['messages'] = [
|
||||
'title' => $this->p->t('stv', 'tab_messages'),
|
||||
'component' => './Stv/Studentenverwaltung/Details/Messages.js'
|
||||
];
|
||||
/* TODO(chris): Ausgeblendet für Testing
|
||||
$result['grades'] = [
|
||||
'title' => $this->p->t('stv', 'tab_grades'),
|
||||
|
||||
@@ -48,7 +48,7 @@ class Favorites extends FHCAPI_Controller
|
||||
if (!$data)
|
||||
$this->terminateWithSuccess(null);
|
||||
else
|
||||
$this->terminateWithSuccess($data['stv_favorites']);
|
||||
$this->terminateWithSuccess($data['stv_favorites'] ?? null);
|
||||
}
|
||||
|
||||
public function set()
|
||||
|
||||
@@ -85,7 +85,7 @@ class Message_model extends DB_Model
|
||||
*/
|
||||
public function getMessagesOfPerson($person_id, $status = null)
|
||||
{
|
||||
$sql = 'SELECT m.message_id,
|
||||
$sql = "SELECT m.message_id,
|
||||
m.person_id,
|
||||
m.subject,
|
||||
m.body,
|
||||
@@ -109,7 +109,10 @@ class Message_model extends DB_Model
|
||||
re.vornamen AS revornamen,
|
||||
s.status,
|
||||
s.statusinfo,
|
||||
s.insertamum AS statusamum
|
||||
s.insertamum AS statusamum,
|
||||
CONCAT(se.titelpre, ' ', se.vorname, ' ', se.nachname, ' ', se.titelpost) as sender,
|
||||
CONCAT(re.titelpre, ' ', re.vorname, ' ', re.nachname, ' ', re.titelpost ) as recipient,
|
||||
TO_CHAR(s.insertamum::timestamp, 'DD.MM.YYYY HH24:MI') AS format_insertamum
|
||||
FROM public.tbl_msg_message m
|
||||
JOIN public.tbl_msg_recipient r ON m.message_id = r.message_id
|
||||
JOIN public.tbl_person se ON (m.person_id = se.person_id)
|
||||
@@ -122,7 +125,7 @@ class Message_model extends DB_Model
|
||||
) s ON (m.message_id = s.message_id AND re.person_id = s.person_id)
|
||||
WHERE se.person_id = ?
|
||||
OR re.person_id = ?
|
||||
';
|
||||
";
|
||||
|
||||
if (is_numeric($status))
|
||||
{
|
||||
|
||||
@@ -33,6 +33,7 @@ import ort from "./ort.js";
|
||||
import cms from "./cms.js";
|
||||
import lehre from "./lehre.js";
|
||||
import addons from "./addons.js";
|
||||
import messages from "./messages.js";
|
||||
|
||||
export default {
|
||||
search,
|
||||
@@ -52,5 +53,6 @@ export default {
|
||||
ort,
|
||||
cms,
|
||||
lehre,
|
||||
addons
|
||||
addons,
|
||||
messages
|
||||
};
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import person from "./messages/person.js";
|
||||
|
||||
export default {
|
||||
person
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export default {
|
||||
getMessages(url, config, params){
|
||||
console.log("in api", params);
|
||||
return this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type);
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
export default {
|
||||
data(){
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<div class="messages-detail-newmessage">
|
||||
<h4>New Message</h4>
|
||||
</div>
|
||||
`
|
||||
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
import {CoreFilterCmpt} from "../../filter/Filter.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
},
|
||||
props: {
|
||||
endpoint: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
typeId: String,
|
||||
id: {
|
||||
type: [Number, String],
|
||||
required: true
|
||||
},
|
||||
},
|
||||
//TODO(Manu) endpoint macht Probleme
|
||||
data(){
|
||||
return {
|
||||
tabulatorOptions: {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: this.$fhcApi.factory.messages.person.getMessages,
|
||||
ajaxParams: () => {
|
||||
return {
|
||||
id: this.id,
|
||||
type: this.typeId
|
||||
};
|
||||
},
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
columns: [
|
||||
{title: "subject", field: "subject"},
|
||||
{title: "body", field: "body", visible: false},
|
||||
{title: "message_id", field: "message_id", visible: false},
|
||||
{title: "datum", field: "format_insertamum"},
|
||||
{title: "sender", field: "sender"},
|
||||
{title: "recipient", field: "recipient"},
|
||||
{title: "sepersonid", field: "sepersonid"},
|
||||
{title: "repersonid", field: "repersonid"},
|
||||
{title: "status", field: "status"},
|
||||
{
|
||||
title: 'Aktionen', field: 'actions',
|
||||
width: 100,
|
||||
formatter: (cell, formatterParams, onRendered) => {
|
||||
let container = document.createElement('div');
|
||||
container.className = "d-flex gap-2";
|
||||
|
||||
let button = document.createElement('button');
|
||||
button.className = 'btn btn-outline-secondary btn-action';
|
||||
button.title = this.$p.t('ui', 'notiz_edit');
|
||||
button.innerHTML = '<i class="fa fa-edit"></i>';
|
||||
button.addEventListener(
|
||||
'click',
|
||||
(event) =>
|
||||
this.actionEditNotiz(cell.getData().notiz_id)
|
||||
);
|
||||
container.append(button);
|
||||
|
||||
button = document.createElement('button');
|
||||
button.className = 'btn btn-outline-secondary btn-action';
|
||||
button.title = this.$p.t('notiz', 'notiz_delete');
|
||||
button.innerHTML = '<i class="fa fa-xmark"></i>';
|
||||
button.addEventListener(
|
||||
'click',
|
||||
() =>
|
||||
this.actionDeleteNotiz(cell.getData().notiz_id)
|
||||
);
|
||||
container.append(button);
|
||||
|
||||
return container;
|
||||
},
|
||||
frozen: true
|
||||
}],
|
||||
layout: 'fitColumns',
|
||||
layoutColumnsOnNewData: false,
|
||||
height: '250',
|
||||
selectableRangeMode: 'click',
|
||||
selectable: true,
|
||||
index: 'message_id',
|
||||
persistenceID: 'core-message'
|
||||
},
|
||||
}
|
||||
},
|
||||
/* computed: {
|
||||
statusText(){
|
||||
0: this.$p.t('messsages', 'unread'),
|
||||
1: this.$p.t('messsages', 'read'),
|
||||
2: this.$p.t('messsages', 'archived'),
|
||||
0: this.$p.t('messsages', 'unread'),
|
||||
3: this.$p.t('person', 'deleted'),
|
||||
}
|
||||
},*/
|
||||
template: `
|
||||
<div class="messages-detail-table">
|
||||
<h4>Table Messages</h4>
|
||||
<p>type_id: {{typeId}}</p>
|
||||
<p>id: {{id}}</p>
|
||||
<p>endpoint: {{endpoint}}</p>
|
||||
|
||||
<!-- {{statusText}}-->
|
||||
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
reload
|
||||
new-btn-show
|
||||
:new-btn-label="this.$p.t('global', 'nachricht')"
|
||||
@click:new="actionNewNotiz"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</div>
|
||||
`
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import TableMessages from "./Details/TableMessages.js";
|
||||
import NewMessage from "./Details/NewMessage.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
TableMessages,
|
||||
NewMessage
|
||||
},
|
||||
props: {
|
||||
endpoint: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
typeId: String,
|
||||
id: {
|
||||
type: [Number, String],
|
||||
required: true
|
||||
},
|
||||
showNew: Boolean,
|
||||
showTable: Boolean
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
template: `
|
||||
<div class="core-messages h-100 pb-3">
|
||||
<p>endpoint: {{endpoint}}</p>
|
||||
<div v-if="showNew">
|
||||
<NewMessage
|
||||
|
||||
>
|
||||
</NewMessage>
|
||||
</div>
|
||||
|
||||
<div v-if="showTable">
|
||||
<TableMessages
|
||||
:type-id="typeId"
|
||||
:id="id"
|
||||
:endpoint="endpoint"
|
||||
>
|
||||
|
||||
</TableMessages>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
`
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import CoreMessages from "../../../Messages/Messages.js";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreMessages
|
||||
},
|
||||
props: {
|
||||
modelValue: Object
|
||||
},
|
||||
template: `
|
||||
<div class="stv-details-messages h-100 pb-3 overflow-hidden">
|
||||
<core-messages
|
||||
ref="formc"
|
||||
endpoint="$fhcApi.factory.messages.person"
|
||||
type-id="person_id"
|
||||
:id="modelValue.person_id"
|
||||
show-table
|
||||
>
|
||||
</core-messages>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
`
|
||||
};
|
||||
@@ -37297,7 +37297,30 @@ array(
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
/////////// FHC4 Phrases Messages START ///////////
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'stv',
|
||||
'phrase' => 'tab_messages',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Nachrichten',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Messages',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
/////////// FHC4 Phrases Messages END ///////////
|
||||
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user