7#include "controllerevents.h"
8#include "httprequest.h"
16ControllerEvents::ControllerEvents(HobrasoftHttpd::HttpConnection *parent) :
AbstractController(parent) {
22 int offset =
request->parameter(
"offset").toInt();
23 int limit =
request->parameter(
"limit").toInt();
24 int employee =
request->parameter(
"employee").toInt();
25 QString smonth =
request->parameter(
"month");
27 if (!smonth.isEmpty()) {
28 month = QDate::fromString(smonth +
"-01",
"yyyy-MM-dd");
30 QList<Dbt::Events> list = db()->events(-1, employee, month, limit, offset);
31 list = filterAccessible(list);
37 int event =
id.toInt();
39 serviceError(
request, response, 404,
"not-found",
"NotFound");
42 auto list = db()->events(event);
44 serviceError(
request, response, 404,
"not-found",
"NotFound");
47 if (!canAccessEmployee(list.first().employee)) {
48 serviceError(
request, response, 403,
"forbidden",
"Forbidden");
56 d[
"user_edited"] = authenticatedUser()->user();
57 if (!canAccessEmployee(d[
"employee"].toInt())) {
58 serviceError(
request, response, 403,
"forbidden",
"Forbidden");
69 int evId =
id.toInt();
70 auto list = db()->events(evId);
72 serviceError(
request, response, 404,
"not-found",
"NotFound");
76 if (!canAccessEmployee(e.employee)) {
77 serviceError(
request, response, 403,
"forbidden",
"Forbidden");
81 e.user_edited = authenticatedUser()->user();
86bool ControllerEvents::canAccessEmployee(
int employee) {
87 if (authenticatedUser() ==
nullptr || authenticatedUser()->admin()) {
90 QList<Dbt::DepartmentHasManager> mng = db()->departmentHasManager(
Dbt::DepartmentHasManager(0, authenticatedUser()->user()));
91 for (
const auto& mm : mng) {
99QList<Dbt::Events> ControllerEvents::filterAccessible(
const QList<Dbt::Events>& list) {
100 if (authenticatedUser() ==
nullptr || authenticatedUser()->admin()) {
104 QList<Dbt::DepartmentHasManager> mng = db()->departmentHasManager(Dbt::DepartmentHasManager(0, authenticatedUser()->user()));
105 for (
const auto& mm : mng) {
106 auto members = db()->departmentHasMember(Dbt::DepartmentHasMember(mm.department, 0));
107 for (
const auto& mem : members) { allowed.insert(mem.employee); }
109 QList<Dbt::Events> out;
110 for (
const auto& e : list) {
111 if (allowed.contains(e.employee)) out << e;
Virtuální třída pro vyřizování unifikovaných Http požadavků na server API.
virtual void serviceOK(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariant &data=QVariant())
Pošle odpověď 200 OK.
HobrasoftHttpd::HttpRequest * request() const
Vrací ukazatel na aktuální request.
void serviceList(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response) Q_DECL_OVERRIDE
Pošle chybovou odpověď
void serviceIdGet(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou GET.
void serviceIdPut(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existu...
void serviceIdPost(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QVariantMap &data) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou PUT - obvykle vloží nový objekt nebo přepíše existu...
void serviceIdDelete(HobrasoftHttpd::HttpRequest *request, HobrasoftHttpd::HttpResponse *response, const QString &id) Q_DECL_OVERRIDE
Pošle odpověď na požadavek konkrétního ID metodou DELETE - obvykle objekt smaže.
Jmenný prostor pro obsluhu konkrétních HTTP požadavků aplikace.