mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-02-20 15:14:26 +01:00
Initial AdminPanel and AdminController setup.
This commit is contained in:
parent
ef7b39bfb1
commit
1104e01625
@ -7,6 +7,18 @@
|
||||
#include "core/http/request.h"
|
||||
#include "core/http/session_manager.h"
|
||||
|
||||
void AdminController::admin_handle_request_main(Request *request) {
|
||||
|
||||
}
|
||||
|
||||
void AdminController::admin_add_section_links(Vector<AdminSectionLinkInfo> *links) {
|
||||
|
||||
}
|
||||
|
||||
bool AdminController::admin_full_render() {
|
||||
return false;
|
||||
}
|
||||
|
||||
AdminController::AdminController() :
|
||||
Controller() {
|
||||
|
||||
|
@ -3,15 +3,25 @@
|
||||
|
||||
#include "core/http/controller.h"
|
||||
|
||||
#include <string>
|
||||
#include "core/containers/vector.h"
|
||||
#include "core/string.h"
|
||||
|
||||
class Request;
|
||||
class FormValidator;
|
||||
|
||||
struct AdminSectionLinkInfo {
|
||||
String name;
|
||||
String link;
|
||||
};
|
||||
|
||||
class AdminController : public Controller {
|
||||
RCPP_OBJECT(AdminController, Controller);
|
||||
|
||||
|
||||
public:
|
||||
virtual void admin_handle_request_main(Request *request);
|
||||
virtual void admin_add_section_links(Vector<AdminSectionLinkInfo> *links);
|
||||
virtual bool admin_full_render();
|
||||
|
||||
AdminController();
|
||||
~AdminController();
|
||||
|
||||
|
@ -7,10 +7,99 @@
|
||||
#include "core/http/request.h"
|
||||
#include "core/http/session_manager.h"
|
||||
|
||||
#include "admin_controller.h"
|
||||
|
||||
void AdminPanel::handle_request_main(Request *request) {
|
||||
//todo check permissions
|
||||
|
||||
String seg = request->get_current_path_segment();
|
||||
|
||||
if (seg == "") {
|
||||
render_admin_panel_list(request);
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < _controllers.size(); ++i) {
|
||||
AdminPanelSection &s = _controllers[i];
|
||||
|
||||
if (s.section_url == seg) {
|
||||
AdminController *c = s.controller;
|
||||
|
||||
request->push_path();
|
||||
|
||||
if (c->admin_full_render()) {
|
||||
c->admin_handle_request_main(request);
|
||||
return;
|
||||
}
|
||||
|
||||
render_controller_panel(request, c);
|
||||
|
||||
//request->pop_path();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
request->send_error(404);
|
||||
}
|
||||
|
||||
void AdminPanel::create_validators() {
|
||||
void AdminPanel::render_admin_panel_list(Request *request) {
|
||||
//set up headers
|
||||
|
||||
String rootlink = request->get_url_root();
|
||||
|
||||
HTMLBuilder b;
|
||||
|
||||
Vector<AdminSectionLinkInfo> links;
|
||||
|
||||
b.div()->cls("content");
|
||||
|
||||
for (int i = 0; i < _controllers.size(); ++i) {
|
||||
b.div()->cls("section");
|
||||
|
||||
AdminPanelSection &s = _controllers[i];
|
||||
|
||||
s.controller->admin_add_section_links(&links);
|
||||
|
||||
for (int j = 0; j < links.size(); ++j) {
|
||||
AdminSectionLinkInfo &li = links[j];
|
||||
|
||||
b.a()->href(rootlink + li.link);
|
||||
b.w(li.name);
|
||||
b.ca();
|
||||
}
|
||||
|
||||
links.clear();
|
||||
|
||||
b.cdiv();
|
||||
}
|
||||
|
||||
b.cdiv();
|
||||
|
||||
//set up footers
|
||||
|
||||
request->body += b.result;
|
||||
request->compile_and_send_body();
|
||||
}
|
||||
|
||||
void AdminPanel::render_controller_panel(Request *request, AdminController *controller) {
|
||||
//set up headers
|
||||
controller->admin_handle_request_main(request);
|
||||
//set up footers
|
||||
request->compile_and_send_body();
|
||||
}
|
||||
|
||||
void AdminPanel::register_admin_controller(const String §ion, AdminController *controller) {
|
||||
AdminPanelSection sec;
|
||||
|
||||
sec.section_url = section;
|
||||
sec.controller = controller;
|
||||
|
||||
_controllers.push_back(sec);
|
||||
}
|
||||
|
||||
void AdminPanel::clear() {
|
||||
_controllers.clear();
|
||||
}
|
||||
|
||||
AdminPanel *AdminPanel::get_singleton() {
|
||||
|
@ -3,17 +3,24 @@
|
||||
|
||||
#include "core/http/controller.h"
|
||||
|
||||
#include <string>
|
||||
#include "core/string.h"
|
||||
#include "core/containers/vector.h"
|
||||
|
||||
class Request;
|
||||
class FormValidator;
|
||||
class AdminController;
|
||||
|
||||
class AdminPanel : public Controller {
|
||||
RCPP_OBJECT(AdminPanel, Controller);
|
||||
|
||||
public:
|
||||
void handle_request_main(Request *request);
|
||||
void create_validators();
|
||||
|
||||
virtual void render_admin_panel_list(Request *request);
|
||||
virtual void render_controller_panel(Request *request, AdminController *controller);
|
||||
|
||||
void register_admin_controller(const String §ion, AdminController *controller);
|
||||
void clear();
|
||||
|
||||
static AdminPanel *get_singleton();
|
||||
|
||||
@ -21,7 +28,14 @@ public:
|
||||
~AdminPanel();
|
||||
|
||||
protected:
|
||||
struct AdminPanelSection {
|
||||
String section_url;
|
||||
AdminController *controller;
|
||||
};
|
||||
|
||||
static AdminPanel *_self;
|
||||
|
||||
Vector<AdminPanelSection> _controllers;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user