diff --git a/HEADS b/HEADS index afacaa2..2eea2d8 100644 --- a/HEADS +++ b/HEADS @@ -1 +1 @@ -{"engine": {"master": "78c5601a9becf98eb9e5ee25679c2c87a171789c"}} \ No newline at end of file +{"engine": {"master": "7117cb39882f8ad32677332317b604da673497ad"}} \ No newline at end of file diff --git a/app/menu/menu_controller.cpp b/app/menu/menu_controller.cpp index 28328ad..7e1db95 100644 --- a/app/menu/menu_controller.cpp +++ b/app/menu/menu_controller.cpp @@ -9,7 +9,11 @@ #include "core/http/request.h" #include "core/http/session_manager.h" -#include "menu_model.h" +#include "core/database/database.h" +#include "core/database/database_manager.h" +#include "core/database/query_builder.h" +#include "core/database/query_result.h" +#include "core/database/table_builder.h" void MenuController::handle_request_main(Request *request) { } @@ -40,26 +44,26 @@ void MenuController::admin_handle_request_main(Request *request) { void MenuController::admin_handle_new_rank(Request *request) { -/* - if (request->get_method() == HTTP_METHOD_POST) { - Ref rank; - rank.instance(); + /* + if (request->get_method() == HTTP_METHOD_POST) { + Ref rank; + rank.instance(); - rank->name = request->get_parameter("name"); - rank->name_internal = request->get_parameter("name_internal"); - rank->settings = request->get_parameter("settings"); + rank->name = request->get_parameter("name"); + rank->name_internal = request->get_parameter("name_internal"); + rank->settings = request->get_parameter("settings"); - RBACModel::get_singleton()->save_rank(rank); + RBACModel::get_singleton()->save_rank(rank); - _ranks[rank->id] = rank; + _ranks[rank->id] = rank; - request->send_redirect(request->get_url_root_parent() + "edit_rank/" + String::num(rank->id)); - return; - } + request->send_redirect(request->get_url_root_parent() + "edit_rank/" + String::num(rank->id)); + return; + } - RBACAdminRankViewData data; - render_rank_view(request, &data); - */ + RBACAdminRankViewData data; + render_rank_view(request, &data); + */ } void MenuController::admin_handle_edit_rank(Request *request) { @@ -149,84 +153,84 @@ void MenuController::render_rank_view(Request *request, RBACAdminRankViewData *d } void MenuController::admin_permission_editor(Request *request) { -/* - String seg = request->get_current_path_segment(); + /* + String seg = request->get_current_path_segment(); - //check whether it's numeric - //if (!seg.is) + //check whether it's numeric + //if (!seg.is) - int id = seg.to_int(); + int id = seg.to_int(); - if (id == 0) { - RLOG_MSG("MenuController::admin_permission_editor: id == 0!\n"); - request->send_redirect(request->get_url_root_parent()); - return; - } - - Ref rank = _ranks[id]; - - if (!rank.is_valid()) { - RLOG_MSG("MenuController::admin_permission_editor: !rank.is_valid()\n"); - request->send_redirect(request->get_url_root_parent()); - return; - } - - RBACAdminEditPermissionView data; - data.rank = rank; - - request->push_path(); - - String segn = request->get_current_path_segment(); - - if (segn == "") { - admin_render_permission_editor_main_view(request, &data); - return; - } - - if (segn == "new") { - request->push_path(); - - if (request->get_method() == HTTP_METHOD_POST) { - if (admin_process_permission_editor_entry_edit_create_post(request, &data)) { - return; - } - } - - admin_render_permission_editor_entry_edit_create_view(request, &data); - return; - } - - if (segn.is_uint()) { - int perm_index = segn.to_int(); - - request->push_path(); - - if (perm_index < 0 || perm_index >= rank->permissions.size()) { - RLOG_ERR("(perm_index < 0 || perm_index >= rank->permissions.size())!\n"); + if (id == 0) { + RLOG_MSG("MenuController::admin_permission_editor: id == 0!\n"); request->send_redirect(request->get_url_root_parent()); return; } - data.permission = rank->permissions[perm_index]; + Ref rank = _ranks[id]; - if (!data.permission.is_valid()) { - RLOG_ERR("(!data.permission.is_valid()\n"); - request->send_error(503); + if (!rank.is_valid()) { + RLOG_MSG("MenuController::admin_permission_editor: !rank.is_valid()\n"); + request->send_redirect(request->get_url_root_parent()); return; } - if (request->get_method() == HTTP_METHOD_POST) { - if (admin_process_permission_editor_entry_edit_create_post(request, &data)) { - return; - } + RBACAdminEditPermissionView data; + data.rank = rank; + + request->push_path(); + + String segn = request->get_current_path_segment(); + + if (segn == "") { + admin_render_permission_editor_main_view(request, &data); + return; } - admin_render_permission_editor_entry_edit_create_view(request, &data); - return; - } + if (segn == "new") { + request->push_path(); - request->send_error(404); - */ + if (request->get_method() == HTTP_METHOD_POST) { + if (admin_process_permission_editor_entry_edit_create_post(request, &data)) { + return; + } + } + + admin_render_permission_editor_entry_edit_create_view(request, &data); + return; + } + + if (segn.is_uint()) { + int perm_index = segn.to_int(); + + request->push_path(); + + if (perm_index < 0 || perm_index >= rank->permissions.size()) { + RLOG_ERR("(perm_index < 0 || perm_index >= rank->permissions.size())!\n"); + request->send_redirect(request->get_url_root_parent()); + return; + } + + data.permission = rank->permissions[perm_index]; + + if (!data.permission.is_valid()) { + RLOG_ERR("(!data.permission.is_valid()\n"); + request->send_error(503); + return; + } + + if (request->get_method() == HTTP_METHOD_POST) { + if (admin_process_permission_editor_entry_edit_create_post(request, &data)) { + return; + } + } + + admin_render_permission_editor_entry_edit_create_view(request, &data); + return; + } + + request->send_error(404); + */ } void MenuController::admin_render_permission_editor_main_view(Request *request, RBACAdminEditPermissionView *data) { @@ -414,7 +418,7 @@ void MenuController::admin_add_section_links(Vector *links } void MenuController::initialize() { - _data = MenuModel::get_singleton()->load(); + _data = db_load(); } Ref MenuController::get_data() { @@ -422,28 +426,107 @@ Ref MenuController::get_data() { } bool MenuController::continue_on_missing_default_rank() { - //todo, add setting + // todo, add setting return false; } -MenuController *MenuController::get_singleton() { - return _self; +// DB + +Ref MenuController::db_load() { + Ref data; + data.instance(); + + Ref qb = get_query_builder(); + + qb->select("id,name,url,sort_order")->from(_table); + Ref res = qb->run(); + + while (res->next_row()) { + Ref e; + e.instance(); + + e->id = res->get_cell_int(0); + e->name = res->get_cell_str(1); + e->url = res->get_cell_str(2); + e->sort_order = res->get_cell_int(3); + + data->entries.push_back(e); + } + + data->sort_entries(); + + return data; +} + +void MenuController::db_save(const Ref &menu) { + for (int i = 0; i < menu->entries.size(); ++i) { + Ref entry = menu->entries[i]; + + db_save_menu_entry(entry); + } +} + +void MenuController::db_save_menu_entry(const Ref &entry) { + Ref qb = get_query_builder(); + + if (entry->id == 0) { + qb->insert(_table, "name,url,sort_order")->values(); + qb->val(entry->name)->val(entry->url); + qb->val(entry->sort_order); + qb->cvalues(); + qb->select_last_insert_id(); + Ref res = qb->run(); + // qb->print(); + + Ref e = entry; + + e->id = res->get_last_insert_rowid(); + } else { + qb->update(_table)->set(); + qb->setp("name", entry->name); + qb->setp("url", entry->url); + qb->setp("sort_order", entry->sort_order); + qb->cset(); + qb->where()->wp("id", entry->id); + qb->end_command(); + qb->run_query(); + // qb->print(); + } +} + +void MenuController::create_table() { + Ref tb = get_table_builder(); + + tb->create_table(_table); + tb->integer("id")->auto_increment()->next_row(); + tb->varchar("name", 60)->not_null()->next_row(); + tb->varchar("url", 500)->not_null()->next_row(); + tb->integer("sort_order")->not_null()->next_row(); + tb->primary_key("id"); + tb->ccreate_table(); + tb->run_query(); + // tb->print(); +} +void MenuController::drop_table() { + Ref tb = get_table_builder(); + + tb->drop_table_if_exists(_table)->run_query(); + // tb->print(); +} +void MenuController::migrate() { + drop_table(); + create_table(); + create_default_entries(); +} + +void MenuController::create_default_entries() { } MenuController::MenuController() : AdminNode() { - if (_self) { - printf("MenuController::MenuController(): Error! self is not null!/n"); - } - - _self = this; + _table = "menu"; } MenuController::~MenuController() { - if (_self == this) { - _self = nullptr; - } } - -MenuController *MenuController::_self = nullptr; diff --git a/app/menu/menu_controller.h b/app/menu/menu_controller.h index 2196b77..c48d0b0 100644 --- a/app/menu/menu_controller.h +++ b/app/menu/menu_controller.h @@ -9,7 +9,6 @@ #include "menu_data.h" #include "menu_data_entry.h" - class Request; class FormValidator; @@ -49,9 +48,9 @@ public: }; void admin_permission_editor(Request *request); - void admin_render_permission_editor_main_view(Request *request, RBACAdminEditPermissionView* data); - void admin_render_permission_editor_entry_edit_create_view(Request *request, RBACAdminEditPermissionView* data); - bool admin_process_permission_editor_entry_edit_create_post(Request *request, RBACAdminEditPermissionView* data); + void admin_render_permission_editor_main_view(Request *request, RBACAdminEditPermissionView *data); + void admin_render_permission_editor_entry_edit_create_view(Request *request, RBACAdminEditPermissionView *data); + bool admin_process_permission_editor_entry_edit_create_post(Request *request, RBACAdminEditPermissionView *data); void admin_render_rank_list(Request *request); void admin_render_rank_editor(Request *request); @@ -64,13 +63,23 @@ public: bool continue_on_missing_default_rank(); - static MenuController *get_singleton(); + //db + + virtual Ref db_load(); + + virtual void db_save(const Ref &menu); + virtual void db_save_menu_entry(const Ref &entry); + + void create_table(); + void drop_table(); + void migrate(); + void create_default_entries(); MenuController(); ~MenuController(); protected: - static MenuController *_self; + String _table; Ref _data; }; diff --git a/app/menu/menu_model.cpp b/app/menu/menu_model.cpp deleted file mode 100644 index 54635be..0000000 --- a/app/menu/menu_model.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include "menu_model.h" - -#include "core/database/database.h" -#include "core/database/database_manager.h" -#include "core/database/query_builder.h" -#include "core/database/query_result.h" -#include "core/database/table_builder.h" - -#include "core/settings/settings.h" - -#define MENU_TABLE "menu" - -Ref MenuModel::load() { - Ref data; - data.instance(); - - Ref qb = DatabaseManager::get_singleton()->ddb->get_query_builder(); - - qb->select("id,name,url,sort_order")->from(MENU_TABLE); - Ref res = qb->run(); - - while (res->next_row()) { - Ref e; - e.instance(); - - e->id = res->get_cell_int(0); - e->name = res->get_cell_str(1); - e->url = res->get_cell_str(2); - e->sort_order = res->get_cell_int(3); - - data->entries.push_back(e); - } - - data->sort_entries(); - - return data; -} - -void MenuModel::save(const Ref &menu) { - for (int i = 0; i < menu->entries.size(); ++i) { - Ref entry = menu->entries[i]; - - save_menu_entry(entry); - } -} - -void MenuModel::save_menu_entry(const Ref &entry) { - Ref qb = DatabaseManager::get_singleton()->ddb->get_query_builder(); - - if (entry->id == 0) { - qb->insert(MENU_TABLE, "name,url,sort_order")->values(); - qb->val(entry->name)->val(entry->url); - qb->val(entry->sort_order); - qb->cvalues(); - qb->select_last_insert_id(); - Ref res = qb->run(); - //qb->print(); - - Ref e = entry; - - e->id = res->get_last_insert_rowid(); - } else { - qb->update(MENU_TABLE)->set(); - qb->setp("name", entry->name); - qb->setp("url", entry->url); - qb->setp("sort_order", entry->sort_order); - qb->cset(); - qb->where()->wp("id", entry->id); - qb->end_command(); - qb->run_query(); - //qb->print(); - } -} - -void MenuModel::create_table() { - Ref tb = DatabaseManager::get_singleton()->ddb->get_table_builder(); - - tb->create_table(MENU_TABLE); - tb->integer("id")->auto_increment()->next_row(); - tb->varchar("name", 60)->not_null()->next_row(); - tb->varchar("url", 500)->not_null()->next_row(); - tb->integer("sort_order")->not_null()->next_row(); - tb->primary_key("id"); - tb->ccreate_table(); - tb->run_query(); - //tb->print(); -} -void MenuModel::drop_table() { - Ref tb = DatabaseManager::get_singleton()->ddb->get_table_builder(); - - tb->drop_table_if_exists(MENU_TABLE)->run_query(); - //tb->print(); -} -void MenuModel::migrate() { - drop_table(); - create_table(); - create_default_entries(); -} - -void MenuModel::create_default_entries() { -} - -MenuModel *MenuModel::get_singleton() { - return _self; -} - -MenuModel::MenuModel() : - WebNode() { - - if (_self) { - printf("MenuModel::MenuModel(): Error! self is not null!/n"); - } - - _self = this; -} - -MenuModel::~MenuModel() { - if (_self == this) { - _self = nullptr; - } -} - -MenuModel *MenuModel::_self = nullptr; diff --git a/app/menu/menu_model.h b/app/menu/menu_model.h deleted file mode 100644 index c6e9fa0..0000000 --- a/app/menu/menu_model.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef MENU_MODEL_H -#define MENU_MODEL_H - -#include "core/http/web_node.h" - -#include "core/containers/vector.h" -#include "core/string.h" - -#include "menu_data.h" -#include "menu_data_entry.h" - -class MenuModel : public WebNode { - RCPP_OBJECT(MenuModel, WebNode); - -public: - virtual Ref load(); - - virtual void save(const Ref &menu); - virtual void save_menu_entry(const Ref &entry); - - void create_table(); - void drop_table(); - void migrate(); - virtual void create_default_entries(); - - static MenuModel *get_singleton(); - - MenuModel(); - ~MenuModel(); - -protected: - static MenuModel *_self; -}; - -#endif \ No newline at end of file